
{"id":163767,"date":"2026-05-11T11:19:43","date_gmt":"2026-05-11T11:19:43","guid":{"rendered":"https:\/\/mycryptomania.com\/?p=163767"},"modified":"2026-05-11T11:19:43","modified_gmt":"2026-05-11T11:19:43","slug":"funding-is-not-identity-a-conservative-approach-to-onchain-entity-linking","status":"publish","type":"post","link":"https:\/\/mycryptomania.com\/?p=163767","title":{"rendered":"Funding Is Not Identity: A Conservative Approach to Onchain Entity Linking"},"content":{"rendered":"<p>Conservative run output on a 500+500 Arbitrum governance\/control cohort. Node colors encode node\/evidence types in the visualization, not governance-vs-control cohort membership.<\/p>\n<h3><strong>Why Identifier Counts Are Not Entity\u00a0Counts<\/strong><\/h3>\n<p>Onchain systems love to count identifiers.<\/p>\n<p>Wallet addresses. DIDs(decentralized identifiers). Governance voters. Delegates. Safes.<\/p>\n<p>Those counts are useful, but they are not the same thing as entity counts. A single operator can control many wallets. A DAO team can manage multiple Safes. A bridge, exchange, or relayer can make unrelated addresses look connected.<\/p>\n<p>`<a href=\"https:\/\/github.com\/egpivo\/unmasking-did\">unmasking-did<\/a>` is not a deanonymization tool and it is not a Sybil detector. It is an evidence-preserving linker: every cluster must explain which signals connected the identifiers, and what those signals are allowed to mean. The point is to measure coordination without collapsing it into identity.<\/p>\n<h3><strong>Evidence Before\u00a0Identity<\/strong><\/h3>\n<p>`<a href=\"https:\/\/github.com\/egpivo\/unmasking-did\">unmasking-did<\/a>` separates primary evidence kinds from derived coordination signals.<\/p>\n<p>Primary evidence kinds are stored as typed rows and used directly by link\u00a0policy:<\/p>\n<p>Evidence definition.<\/p>\n<p>Derived coordination signals are computed at cluster or feature level\u200a\u2014\u200anot stored as evidence\u00a0rows:<\/p>\n<p>Derived signals<\/p>\n<p>It is easy for pipelines to blur these categories. A shared funder becomes evidence of common control; a DID becomes proof of identity. `<a href=\"https:\/\/github.com\/egpivo\/unmasking-did\">unmasking-did<\/a>` keeps the semantics separate: evidence type defines what a link means, while policy thresholds define how cautiously it can be\u00a0used.<\/p>\n<p>Fixed cohort seed \u2192 Alchemy ingest + Safe\/ENS\/DID enrichment \u2192 typed evidence rows \u2192 conservative link policy \u2192 monitoring layer with run isolation and Jaccard lineage \u2192 JSON, graph, and Markdown artifacts.<\/p>\n<h3><strong>The Arbitrum Governance\/Control Dataset<\/strong><\/h3>\n<p>Before Arbitrum, I tested the pipeline on a small Scroll DAO Safe set: five governance Safes clustered through repeated Safe-owner evidence, while the Admin Multisig stayed separate. That was enough to validate control-style signals, but not enough to test funding-based coordination at\u00a0scale.<\/p>\n<p>The failure mode I wanted to test next was simple: would funding evidence accidentally turn a governance dataset into one giant\u00a0entity?<\/p>\n<p>Note that Full run specification can be found\u00a0<a href=\"https:\/\/github.com\/egpivo\/unmasking-did\/blob\/main\/docs\/blog_run_spec_arbitrum_conservative_v0.md\">here<\/a>.<\/p>\n<h3><strong>The Naive Failure: `funded_by` Creates a 425-Address Cluster<\/strong><\/h3>\n<p>The original linker allowed `funded_by` to behave too much like merge evidence. That produced a giant mixed\u00a0cluster:<\/p>\n<p>Metric runs<\/p>\n<p>A 425-address component is visually persuasive. But if the glue is common infrastructure\u200a\u2014\u200aservice-like funders, routers, high-fanout sources\u200a\u2014\u200athe component is not an interpretable entity cluster. It is infrastructure wearing the shape of identity.<\/p>\n<p>Shared funding is not the same as shared\u00a0control.<\/p>\n<p>A single shared funder can support a \u201crelated candidate\u201d label. It should not automatically merge addresses into a\u00a0cluster.<\/p>\n<h3><strong>Conservative Policy: Repeated + Short-Burst + Non-Service<\/strong><\/h3>\n<p>The fix was not to remove `funded_by`. Funding still matters\u200a\u2014\u200ait just needs to be demoted from naive identity evidence to conservative coordination evidence.<\/p>\n<p>{<br \/>    &#8220;funded_by_policy&#8221;: {<br \/>        &#8220;enabled&#8221;: true,<br \/>        &#8220;min_shared_keys&#8221;: 2,<br \/>        &#8220;min_short_burst_hits&#8221;: 2,<br \/>        &#8220;service_fan_out_cap&#8221;: 50,<br \/>        &#8220;short_burst_block_delta&#8221;: 5000<br \/>     },<br \/>     &#8220;fan_out_cap&#8221;: 50,<br \/>     &#8220;min_evidence&#8221;: 1<br \/>}<\/p>\n<p>In plain\u00a0English:<\/p>\n<p>one shared funder is not enough\u200a\u2014\u200arequire at least <strong>two<\/strong> shared `<em>funded_by<\/em>` keysthose links need at least two short-burst hits (block delta \u2264\u00a05,000)service-like keys are suppressed\u200a\u2014\u200arouters, bridges, zero\/system addresses do not merge\u00a0clustershigh-fanout keys above the cap are treated as infrastructure<\/p>\n<p>Timing is the key addition. Two addresses funded by the same source months apart are not the same signal as two addresses funded repeatedly in a tight block\u00a0window.<\/p>\n<h3><strong>Result: Top Cluster 425 \u2192\u00a05<\/strong><\/h3>\n<p>Metric runs with two\u00a0types<\/p>\n<p>The top cluster went from 425 to 5. In this run, we observed no governance\/control mixed clusters among the top clusters shown after conservative filtering. Treat this as a consistency check, not proof of absence: it reflects what survives the policy\u200a\u2014\u200aincluding service and fan-out suppression\u200a\u2014\u200anot everything that ever co-occurred in raw\u00a0flows.<\/p>\n<p>Two concentration metrics are worth calling out. The Gini coefficient is 0.024 and the Nakamoto coefficient is 477 (computed over inferred cluster sizes: the number of clusters needed to account for 50% of all clustered addresses). Both confirm the output is not secretly dominated by a few large components.<\/p>\n<p>On the ingestion side, 1,988 Alchemy calls produced 14,101 transfer rows and a 10 MB SQLite database, with no `db_size_stop` trigger. The canonical summary, report, and bounded graph artifacts are in\u00a0<a href=\"https:\/\/github.com\/egpivo\/unmasking-did\/tree\/main\/out\">here<\/a><\/p>\n<p>Advanced metrics panel for run run-1777967119432576, policy profile arbitrum_gov_conservative_v1.<\/p>\n<h3><strong>Why the Control Cohort\u00a0Matters<\/strong><\/h3>\n<p>Without a control group, every common funder can look suspicious. With one, the analysis can ask comparative questions under the same policy and\u00a0window.<\/p>\n<p>For the count rows below\u200a\u2014\u200ashort-burst clusters, high top-funder share, common-sink clusters, and `candidate_*` clusters\u200a\u2014\u200acounts are computed over pure-by-cohort multi-address clusters only. Singleton clusters are included in the median cluster size and multi-address cluster-rate summaries.<\/p>\n<p>Gov. vs.\u00a0control<\/p>\n<p>In this run, control is equal or higher across these coordination-oriented indicators. That does not prove governance is clean; it means governance does not appear elevated relative to this activity-matched baseline under the current conservative policy.<\/p>\n<p>One caveat: the control cohort is ARB token transfer participants in the same block window\u200a\u2014\u200aan activity-matched comparison, not a random sample of the full Arbitrum population. It controls for on-chain activity level, not for all behavioral differences. The baseline is useful; it is not a population ground\u00a0truth.<\/p>\n<p>Any claim that governance addresses behave unusually would need to clear this baseline first. The control cohort sets the floor, not the\u00a0verdict.<\/p>\n<p>The review-priority buckets only rank which clusters are worth reviewing first. They are not risk labels, misconduct labels, or claims emitted by the core\u00a0linker.<\/p>\n<p>These labels are review-priority buckets, not risk or misconduct labels.<\/p>\n<h3><strong>The Viewer<\/strong><\/h3>\n<p>For this project, the viewer is mostly an audit surface: it shows the evidence rows behind a cluster so I can tell whether a merge came from Safe ownership, shared funding, or a policy artifact. Cluster counts alone do not tell you\u00a0that.<\/p>\n<p>The full narrative viewer at <a href=\"https:\/\/egpivo.github.io\/unmasking-did\/viewer\/index.html\">https:\/\/egpivo.github.io\/unmasking-did\/viewer\/index.html<\/a>Clicking a graph node reveals its evidence type and degree. The interpretation boundary is explicit in the UI: coordination evidence, not claims about humans or malicious actors.<\/p>\n<h3><strong>What This Is\u00a0Not<\/strong><\/h3>\n<p>This is not a Sybil detector. A real attack requires a target objective\u200a\u2014\u200aairdrop farming, vote manipulation, reputation abuse\u200a\u2014\u200aand this system does not observe objectives. What it produces is a cluster with a named evidence policy and an inspectable trail. Whether that cluster is interesting depends on context the pipeline does not\u00a0have.<\/p>\n<h3><strong>Next: From Snapshots to Monitoring<\/strong><\/h3>\n<p>A single snapshot is easy to\u00a0overfit.<\/p>\n<p>For monitoring, the useful questions are whether clusters grow, split, disappear, or change funding patterns across\u00a0windows.<\/p>\n<p>The pipeline is designed for that shift. Each run has a fixed input snapshot, a frozen block window, and a policy profile that defines how evidence is interpreted. That makes runs comparable, not just reproducible.<\/p>\n<p>The next useful version is boring on purpose: rerun the same policy every month, diff the clusters, and investigate only the changes that survive the same evidence\u00a0rules.<\/p>\n<p>Note that this post is originally from my blog\u00a0<a href=\"https:\/\/egpivo.github.io\/2026\/05\/05\/unmasking-did-entity-linking.html\">post<\/a>.<\/p>\n<p><a href=\"https:\/\/medium.com\/coinmonks\/funding-is-not-identity-a-conservative-approach-to-onchain-entity-linking-0941dfb52a54\">Funding Is Not Identity: A Conservative Approach to Onchain Entity Linking<\/a> was originally published in <a href=\"https:\/\/medium.com\/coinmonks\">Coinmonks<\/a> on Medium, where people are continuing the conversation by highlighting and responding to this story.<\/p>","protected":false},"excerpt":{"rendered":"<p>Conservative run output on a 500+500 Arbitrum governance\/control cohort. Node colors encode node\/evidence types in the visualization, not governance-vs-control cohort membership. Why Identifier Counts Are Not Entity\u00a0Counts Onchain systems love to count identifiers. Wallet addresses. DIDs(decentralized identifiers). Governance voters. Delegates. Safes. Those counts are useful, but they are not the same thing as entity counts. [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":163768,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-163767","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-interesting"],"_links":{"self":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts\/163767"}],"collection":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=163767"}],"version-history":[{"count":0,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts\/163767\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/media\/163768"}],"wp:attachment":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=163767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=163767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=163767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}