Skip to content

Commit 1b96992

Browse files
sktbrdclaude
andcommitted
feat(treasury): droposal inflow tag — map the two payout splits
The two ETH-paying splits sat generic since the address book landed. Identified now with governance evidence: their addresses appear in the executed calldatas of prop #81 (Uganda Connection Film) and prop #98 (7Capas Mag Skate & Jazz) as the editions' funds recipients — droposal sale payouts, deployed by the artists themselves (which is why no governance address shows in their creation). Recipients were already hash-verified; the book now names them: Renan Carvalho 20/80 and the 7Capas crew 49.5/49.5/1 (the 1% recipient is still unidentified). New "droposal" source: violet tile + tag, both locales. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent ca26480 commit 1b96992

4 files changed

Lines changed: 33 additions & 23 deletions

File tree

messages/en/treasury.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"auctionHint": "Arrived from the auction house as an internal transfer",
7878
"viewTx": "View transaction on Basescan",
7979
"subnet": "Morpheus Subnet",
80+
"droposal": "Droposal",
8081
"swap": "Swap fee",
8182
"splits": "Splits",
8283
"transfer": "Transfer",

messages/pt-br/treasury.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"auctionHint": "Chegou do contrato de leilão como transferência interna",
7878
"viewTx": "Ver transação no Basescan",
7979
"subnet": "Morpheus Subnet",
80+
"droposal": "Droposal",
8081
"swap": "Taxa de swap",
8182
"splits": "Splits",
8283
"transfer": "Transferência",

src/components/treasury/TreasuryInflowsList.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const SOURCE_DOT: Record<InflowSource, string> = {
3030
auction: "bg-amber-500",
3131
subnet: "bg-emerald-500",
3232
swap: "bg-sky-500",
33+
droposal: "bg-violet-500",
3334
secondary: "bg-rose-500",
3435
// Generic splits is the "a split we have not mapped" bucket — it must never
3536
// borrow a product's colour, least of all the subnet green it used to share.
@@ -41,6 +42,7 @@ const SOURCE_TONE: Record<InflowSource, string> = {
4142
auction: "border-amber-500/25 bg-amber-500/10 text-amber-600 dark:text-amber-400",
4243
subnet: "border-emerald-500/25 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400",
4344
swap: "border-sky-500/25 bg-sky-500/10 text-sky-600 dark:text-sky-400",
45+
droposal: "border-violet-500/25 bg-violet-500/10 text-violet-600 dark:text-violet-400",
4446
secondary: "border-rose-500/25 bg-rose-500/10 text-rose-600 dark:text-rose-400",
4547
// Unmapped split: tinted just enough to say "known mechanism, unknown
4648
// product" without wearing any product's brand colour.
@@ -217,7 +219,7 @@ export function TreasuryInflowsList({
217219
// so each asset keeps its own line. A single blended figure would require a
218220
// conversion this component cannot honestly make.
219221
const summary = (
220-
["auction", "secondary", "subnet", "swap", "splits", "transfer"] as InflowSource[]
222+
["auction", "secondary", "subnet", "swap", "droposal", "splits", "transfer"] as InflowSource[]
221223
)
222224
.map((source) => {
223225
const rowsFor = all.filter((f) => f.source === source);

src/services/treasury-inflows.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,18 @@ export const SWAP_FEE_SPLIT = "0x15e69fd67dcc17e061ceeb93dac791e0f5af0eae";
6666
* the creation event, hash-verified against the stored splitHash,
6767
* 2026-08-19): Sopa Multisig 0x96C3…eEA2 80%, treasury 20%. Pays USDC.
6868
* 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.
69+
* DROPOSAL_UGANDA_SPLIT 0xd9b2…ad6b → "droposal". The payout split of prop
70+
* #81 "Droposal Uganda Connection Film" — its address sits in the executed
71+
* proposal's calldata as the edition's funds recipient. Recipients
72+
* (hash-verified 2026-08-19): Renan Carvalho 0xEed9…a282 20% (the payment
73+
* recipient of props #14/#47/#59/#81), treasury 80%. Deployed by the
74+
* artist directly (factory 0x5cba…21d1, 2025-04), which is why no
75+
* governance address appears in its creation. Pays ETH.
76+
* DROPOSAL_7CAPAS_SPLIT 0xdac8…e54 → "droposal". The payout split of prop
77+
* #98 "Dropossal 7Capas Mag Ska7e & Jazz" (calldata match). Recipients
78+
* (hash-verified 2026-08-19): 7Capas / Skate & Jazz crew 0x9ad8…E1c8
79+
* 49.5% (recipient of props #41/#76/#98/#104), treasury 49.5%, and
80+
* 0x9946…17a1 1% — the one recipient still unidentified. Pays ETH.
8281
*
8382
* NOT SPLITS, NEVER SOURCES: SplitsWarehouse 0x8fb6…1fb8 is shared transport
8483
* for every split above; the legacy Ethereum-mainnet treasury 0x4d3a…ce52
@@ -89,25 +88,32 @@ export const SWAP_FEE_SPLIT = "0x15e69fd67dcc17e061ceeb93dac791e0f5af0eae";
8988
* (reconstruct from the creation event), then one entry here plus its i18n
9089
* strings and tile tone.
9190
*/
91+
92+
/** Payout split of droposal prop #81 (Uganda Connection Film) — see the book. */
93+
export const DROPOSAL_UGANDA_SPLIT = "0xd9b22da0c190a90bcada99d69b0f5aeeaf10ad6b";
94+
/** Payout split of droposal prop #98 (7Capas Mag Skate & Jazz) — see the book. */
95+
export const DROPOSAL_7CAPAS_SPLIT = "0xdac848cfe537b21eeb5e718422e4055644b29e54";
96+
9297
const SPLIT_PRODUCT: Record<string, InflowSource> = {
9398
[SUBNET_FINAL_SPLIT]: "subnet",
9499
[SWAP_FEE_SPLIT]: "swap",
100+
[DROPOSAL_UGANDA_SPLIT]: "droposal",
101+
[DROPOSAL_7CAPAS_SPLIT]: "droposal",
95102
};
96103

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-
105104
/**
106105
* Where a credit came from. Kept deliberately coarse — these are the things
107106
* the DAO actually earns from, not a transaction taxonomy. `splits` is the
108107
* explicit "a split paid this but we cannot say which product" bucket.
109108
*/
110-
export type InflowSource = "auction" | "subnet" | "swap" | "splits" | "secondary" | "transfer";
109+
export type InflowSource =
110+
| "auction"
111+
| "subnet"
112+
| "swap"
113+
| "droposal"
114+
| "splits"
115+
| "secondary"
116+
| "transfer";
111117

112118
/**
113119
* Seaport 1.6 (the canonical vanity deployment). Secondary sales of Gnars NFTs

0 commit comments

Comments
 (0)