<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Bearby Blog - oracle</title>
    <subtitle>The official blog of Bearby — a non-custodial, quantum-resistant, multi-chain wallet.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blog.bearby.io/tags/oracle/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.bearby.io/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-22T00:00:00+00:00</updated>
    <id>https://blog.bearby.io/tags/oracle/atom.xml</id>
    <entry xml:lang="en">
        <title>Anatomy of the Balance Coin (BLC) Collapse: Centralized Oracle + Dai-Style Mint = $915K Gone</title>
        <published>2026-07-22T00:00:00+00:00</published>
        <updated>2026-07-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bearby
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.bearby.io/blog/42dao-balance-coin-hack-2026/"/>
        <id>https://blog.bearby.io/blog/42dao-balance-coin-hack-2026/</id>
        
        <content type="html" xml:base="https://blog.bearby.io/blog/42dao-balance-coin-hack-2026/">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;&#x2F;strong&gt; — Balance Coin (BLC), an algorithmic stablecoin on BNB Chain governed by 42DAO, lost &lt;strong&gt;99.86% of its value&lt;&#x2F;strong&gt; in hours. The BLC token — a &lt;strong&gt;Dai-style DSToken&lt;&#x2F;strong&gt; with &lt;code&gt;wards&lt;&#x2F;code&gt;-gated &lt;code&gt;mint()&lt;&#x2F;code&gt; — saw its total supply inflate from ≈350K to &lt;strong&gt;9,910,949.93 BLC&lt;&#x2F;strong&gt; (28×). The attacker extracted &lt;strong&gt;≈$915,000&lt;&#x2F;strong&gt; in USDT and BCH. The root cause is not a clever flash-loan or reentrancy: it is an &lt;strong&gt;architectural design failure&lt;&#x2F;strong&gt; — a centralized push oracle with a single operator key, paired with a token whose minting is gated by a single privileged role. Compromise the key, mint unlimited tokens, drain the 1:1 USDT pool, dump the rest on PancakeSwap. Every contract state value below is read directly from mainnet with &lt;code&gt;cast&lt;&#x2F;code&gt;; every decompiled function is traced from bytecode with &lt;code&gt;heimdall-rs&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;the-evidence-verified-on-chain&quot;&gt;The evidence, verified on-chain&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Network&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;BNB Smart Chain (chainId 56)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;BLC Token&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bscscan.com&#x2F;address&#x2F;0x5343b4586a3f2a3365df92Ee705c3BF446C54668&quot;&gt;&lt;code&gt;0x5343b458…446C54668&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; — verified Dai-style DSToken, Solidity 0.5.12&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Protocol (CDP)&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bscscan.com&#x2F;address&#x2F;0x06532b9BF0A69545949d82A51627DeD5E476C2c5&quot;&gt;&lt;code&gt;0x06532b9B…5E476C2c5&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; — pledge &#x2F; remove vault&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Oracle&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bscscan.com&#x2F;address&#x2F;0x5A5E37deC3356478c80d52932e8f5491734128B0&quot;&gt;&lt;code&gt;0x5A5E37de…34128B0&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; — push-based, single operator&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;BCH_FRV_Pool&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bscscan.com&#x2F;address&#x2F;0x2E70BCFeA8b5dd007c4b6D10bc7F41d2abEB6F4C&quot;&gt;&lt;code&gt;0x2E70BCFe…2abEB6F4C&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; — collateral pool, &lt;code&gt;move()&lt;&#x2F;code&gt; transfers&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;BLC totalSupply&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;9,910,949.927178 BLC&lt;&#x2F;strong&gt; (verified via &lt;code&gt;cast call&lt;&#x2F;code&gt;)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;BLC holders&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;18,214&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Oracle state&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;getPrice(BTCB)&lt;&#x2F;code&gt; = &lt;strong&gt;0&lt;&#x2F;strong&gt;, &lt;code&gt;getPrice(BCH)&lt;&#x2F;code&gt; = &lt;strong&gt;$386.73&lt;&#x2F;strong&gt;, &lt;code&gt;getPrice(BLC)&lt;&#x2F;code&gt; = &lt;strong&gt;$1.00&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Collateral&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Bitcoin Cash (BCH), &lt;em&gt;not&lt;&#x2F;em&gt; BTCB — per &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;42dao.gitbook.io&#x2F;42dao&#x2F;the-balance-protocol&#x2F;intro-to-the-balance-protocol&quot;&gt;42DAO&#x27;s own docs&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Estimated loss&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;≈ $915,000&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Price outcome&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;$1.00 → &lt;strong&gt;$0.001358&lt;&#x2F;strong&gt; (−99.86%)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Reproduce the headline figures yourself:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RPC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;https:&#x2F;&#x2F;bsc-dataseed.bnbchain.org&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;0x5343b4586a3f2a3365df92Ee705c3BF446C54668&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORACLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;0x5A5E37deC3356478c80d52932e8f5491734128B0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;0x8ff795a6f4d97e7887c79bea79aba5cc76444adf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# totalSupply — 9.91M BLC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt; $BLC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;totalSupply()(uint256)&amp;quot; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# 9910949927178514281951476&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# oracle prices — BTCB is ZERO (smoking gun)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt; $ORACLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;getPrice(address)(uint256)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; $BCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# 386730000000000000000   ($386.73)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# decompile the BLC token yourself&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; code&lt;&#x2F;span&gt;&lt;span&gt; $BLC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; blc.hex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;asm_to_sol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; blc.hex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.bearby.io&#x2F;blog&#x2F;42dao-balance-coin-hack-2026&#x2F;architecture.svg&quot; alt=&quot;System architecture and trust boundaries&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;background-what-is-balance-protocol&quot;&gt;Background: what is Balance Protocol?&lt;&#x2F;h2&gt;
&lt;p&gt;Balance Protocol is a &lt;strong&gt;CDP (Collateralized Debt Position) system&lt;&#x2F;strong&gt; on BNB Chain. Users deposit &lt;strong&gt;Bitcoin Cash (BCH)&lt;&#x2F;strong&gt; as collateral and mint &lt;strong&gt;BLC&lt;&#x2F;strong&gt;, an algorithmic stablecoin intended to track $1.00. The system has five components:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;BLC Token&lt;&#x2F;strong&gt; — the stablecoin itself, implemented as a Dai-style DSToken&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Protocol&lt;&#x2F;strong&gt; — the vault contract; users call &lt;code&gt;pledge()&lt;&#x2F;code&gt; to deposit BCH and mint BLC&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Oracle&lt;&#x2F;strong&gt; — a push-based price feed that the Protocol reads to value collateral&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;BCH_FRV_Pool&lt;&#x2F;strong&gt; — holds BCH reserves; the Protocol calls &lt;code&gt;move()&lt;&#x2F;code&gt; to route collateral&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;USDT Pool&lt;&#x2F;strong&gt; — a 1:1 BLC↔USDT exchange that serves as the primary liquidity backstop&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The critical design choice: &lt;strong&gt;BLC is minted based on oracle-reported collateral value.&lt;&#x2F;strong&gt; If the oracle lies, the Protocol mints unbacked BLC.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-blc-token-a-dai-clone-with-a-fatal-inheritance&quot;&gt;The BLC token: a Dai clone with a fatal inheritance&lt;&#x2F;h2&gt;
&lt;p&gt;The BLC token source code is &lt;strong&gt;verified on BscScan&lt;&#x2F;strong&gt; and was compiled with Solidity 0.5.12. It is a near-verbatim copy of MakerDAO&#x27;s &lt;code&gt;DSToken&lt;&#x2F;code&gt; from the &lt;code&gt;dappsys&lt;&#x2F;code&gt; library:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;solidity&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F; Verified source — src&#x2F;0.5.12&#x2F;Token&#x2F;BLC.sol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;contract&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; Blc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; public&lt;&#x2F;span&gt;&lt;span&gt; wards&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;     &#x2F;&#x2F; ← slot 0: auth map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; rely&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; guy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; external&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; note auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span&gt; wards&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;guy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; deny&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; guy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; external&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; note auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span&gt; wards&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;guy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    modifier&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;wards&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;Blc&#x2F;not-authorized&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    uint256 public&lt;&#x2F;span&gt;&lt;span&gt; totalSupply&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;                  &#x2F;&#x2F; ← slot 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; public&lt;&#x2F;span&gt;&lt;span&gt; balanceOf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;  &#x2F;&#x2F; ← slot 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; mint&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; external&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        balanceOf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;balanceOf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;],&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        totalSupply &lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;totalSupply&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        emit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; Transfer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;),&lt;&#x2F;span&gt;&lt;span&gt; usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; burn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; external&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;balanceOf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;Blc&#x2F;insufficient-balance&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span&gt;usr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt; msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; allowance&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;][&lt;&#x2F;span&gt;&lt;span&gt;msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;            require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;allowance&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;][&lt;&#x2F;span&gt;&lt;span&gt;msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;Blc&#x2F;insufficient-allowance&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            allowance&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;][&lt;&#x2F;span&gt;&lt;span&gt;msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; sub&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;allowance&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;][&lt;&#x2F;span&gt;&lt;span&gt;msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;],&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        balanceOf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; sub&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;balanceOf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;],&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        totalSupply &lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; sub&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;totalSupply&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        emit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; Transfer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;usr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;),&lt;&#x2F;span&gt;&lt;span&gt; wad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;    &#x2F;&#x2F; ... standard ERC20 + Dai aliases (push, pull, move, permit)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;wards&lt;&#x2F;code&gt; system is MakerDAO&#x27;s authorization primitive. Any address with &lt;code&gt;wards[addr] == 1&lt;&#x2F;code&gt; can:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mint(addr, amount)&lt;&#x2F;code&gt; — create unlimited BLC from thin air&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;burn(addr, amount)&lt;&#x2F;code&gt; — destroy any holder&#x27;s BLC&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rely(addr)&lt;&#x2F;code&gt; — grant ward status to another address&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;deny(addr)&lt;&#x2F;code&gt; — revoke ward status&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The token constructor grants &lt;code&gt;wards[msg.sender] = 1&lt;&#x2F;code&gt; to the deployer. This is &lt;strong&gt;the single point of failure&lt;&#x2F;strong&gt;: compromise one ward key, and you can mint the entire supply.&lt;&#x2F;p&gt;
&lt;p&gt;I verified the current ward state by reading the storage at &lt;code&gt;keccak256(addr . slot0)&lt;&#x2F;code&gt; for every known system address:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wards[Protocol]       = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wards[Protocol Owner] = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wards[Oracle]         = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wards[Oracle Owner]   = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wards[BCH_FRV_Pool]   = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;wards[FTD Token]      = 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;All wards have been revoked.&lt;&#x2F;strong&gt; The BLC token can no longer mint — but the 9.91M supply is already in circulation. The ward was used, then burned.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-oracle-a-centralized-price-feed-with-no-guardrails&quot;&gt;The Oracle: a centralized price feed with no guardrails&lt;&#x2F;h2&gt;
&lt;p&gt;The Oracle contract (&lt;code&gt;0x5A5E37de…&lt;&#x2F;code&gt;) was decompiled from bytecode using &lt;code&gt;heimdall-rs&lt;&#x2F;code&gt;. Here is the cleaned reconstruction:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;solidity&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F; Decompiled from bytecode — oracle.hex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;contract&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; Oracle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    address public&lt;&#x2F;span&gt;&lt;span&gt; owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;  &#x2F;&#x2F; 0xD2C050223826F3A4f2f9381ba86890984D3Cfa84&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt; latestRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;    &#x2F;&#x2F; per-token round counter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt; priceByRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;   &#x2F;&#x2F; price per round&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt; timestampByRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt; roundCount&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; getPrice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; token&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; public view returns&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        uint256&lt;&#x2F;span&gt;&lt;span&gt; round &lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; latestRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;token&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span&gt; priceByRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;round&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; setRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; token&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; public payable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;Ownable: caller is not the owner&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        roundCount&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;token&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        uint256&lt;&#x2F;span&gt;&lt;span&gt; id &lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; roundCount&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;token&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        priceByRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;    =&lt;&#x2F;span&gt;&lt;span&gt; price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        timestampByRound&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; block&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is a &lt;strong&gt;push oracle&lt;&#x2F;strong&gt; — a single EOA (&lt;code&gt;0xD2C0…fa84&lt;&#x2F;code&gt;) manually sets prices via &lt;code&gt;setRound()&lt;&#x2F;code&gt;. There is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;❌ No Chainlink aggregation&lt;&#x2F;li&gt;
&lt;li&gt;❌ No TWAP (time-weighted average price)&lt;&#x2F;li&gt;
&lt;li&gt;❌ No multi-source VWAP&lt;&#x2F;li&gt;
&lt;li&gt;❌ No price deviation check or sanity bound&lt;&#x2F;li&gt;
&lt;li&gt;❌ No heartbeat &#x2F; staleness check&lt;&#x2F;li&gt;
&lt;li&gt;❌ No decentralized oracle network&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The Protocol&#x27;s &lt;code&gt;pledge()&lt;&#x2F;code&gt; function reads &lt;code&gt;oracle.getPrice()&lt;&#x2F;code&gt; directly and uses it to calculate how much BLC to mint per unit of collateral. The trust model is:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{BLC minted} = f!\left(\text{collateral amount},; \frac{P_{\text{collateral}}^{\text{oracle}}}{P_{\text{BLC}}^{\text{oracle}}}\right)$$&lt;&#x2F;p&gt;
&lt;p&gt;If the oracle operator pushes a manipulated price, the Protocol mints BLC against phantom collateral value.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.bearby.io&#x2F;blog&#x2F;42dao-balance-coin-hack-2026&#x2F;oracle-manipulation.svg&quot; alt=&quot;Oracle manipulation: normal vs. manipulated state&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-protocol-cdp-vault-with-oracle-dependent-minting&quot;&gt;The Protocol: CDP vault with oracle-dependent minting&lt;&#x2F;h2&gt;
&lt;p&gt;The Protocol contract (&lt;code&gt;0x06532b9B…&lt;&#x2F;code&gt;) was decompiled and its selectors resolved. The key functions:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Selector&lt;&#x2F;th&gt;&lt;th&gt;Function&lt;&#x2F;th&gt;&lt;th&gt;Purpose&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;0x743b3452&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;pledge(address token, uint256 amount)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Deposit collateral → mint BLC&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;0xabe7f1ab&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;remove(address token, uint256 amount)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Redeem BLC → return collateral&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;0x5422224e&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;addAuth(address)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Owner-only: &lt;code&gt;rely()&lt;&#x2F;code&gt; on token&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;0x7f3fd918&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;removeAuth(address)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Owner-only: &lt;code&gt;deny()&lt;&#x2F;code&gt; on token&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;0x4b9bd6ff&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;startOracle(address)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Owner-only: set oracle address&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;0xa948dc8a&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;setFRVRatio(address, uint256)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Owner-only: set per-token LTV ratio&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;0x90839012&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;deployFRVToken(address)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Owner-only: CREATE new pool&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The &lt;code&gt;pledge()&lt;&#x2F;code&gt; flow (traced from bytecode):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pledge(token, amount):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  1. require(!paused)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  2. price_base = oracle.getPrice(baseToken)     &#x2F;&#x2F; BLC price (should be $1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  3. price_tok  = oracle.getPrice(token)          &#x2F;&#x2F; collateral price&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  4. require(price_tok &amp;gt; 0)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  5. blc_amount = amount × price_tok &#x2F; price_base × ratio &#x2F; 10000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  6. token.transferFrom(msg.sender, protocol, amount)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  7. pool.move(protocol_owner, amount)            &#x2F;&#x2F; route collateral&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  8. blc.mint(msg.sender, blc_amount)             &#x2F;&#x2F; mint BLC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The ratio is stored at Protocol slot 3 = &lt;code&gt;10000&lt;&#x2F;code&gt; (100% LTV in basis points). The global denominator &lt;code&gt;store_d&lt;&#x2F;code&gt; is also &lt;code&gt;10000&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Step 5 is the vulnerability.&lt;&#x2F;strong&gt; If &lt;code&gt;price_tok&lt;&#x2F;code&gt; is pushed to an astronomical value — say $38,673,000 per BCH instead of $386.73 — then pledging a single BCH mints:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{BLC} = 1 ;\text{BCH} \times \frac{38{,}673{,}000}{1.00} \times \frac{10{,}000}{10{,}000} = 38{,}673{,}000 ;\text{BLC}$$&lt;&#x2F;p&gt;
&lt;p&gt;The Protocol dutifully mints 38.67M BLC against 1 BCH of real collateral.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-bch-frv-pool-a-privileged-transfer-gate&quot;&gt;The BCH_FRV_Pool: a privileged transfer gate&lt;&#x2F;h2&gt;
&lt;p&gt;The pool contract (&lt;code&gt;0x2E70BCFe…&lt;&#x2F;code&gt;) holds BCH reserves. Its decompiled logic is minimal:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;solidity&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F; Decompiled from bytecode — pool.hex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;contract&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; BCH_FRV_Pool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    address public&lt;&#x2F;span&gt;&lt;span&gt; bch &lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 0x8ff795a6f4d97e7887c79bea79aba5cc76444adf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;  &#x2F;&#x2F; slot 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    address public&lt;&#x2F;span&gt;&lt;span&gt; token&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;  &#x2F;&#x2F; slot 1 (currently 0 — drained)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; public&lt;&#x2F;span&gt;&lt;span&gt; authors&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;  &#x2F;&#x2F; auth map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; move&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;address&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; uint256&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; amount&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; public payable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;authors&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;msg.sender&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;  &#x2F;&#x2F; only authorized callers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        token&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;transfer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; amount&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;          &#x2F;&#x2F; move BCH out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The Protocol is authorized (&lt;code&gt;authors[Protocol] == 1&lt;&#x2F;code&gt;). When &lt;code&gt;pledge()&lt;&#x2F;code&gt; calls &lt;code&gt;pool.move()&lt;&#x2F;code&gt;, it transfers BCH from the pool to the protocol owner. If the Protocol&#x27;s logic is subverted via oracle manipulation, this pool is the exit ramp for real collateral.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-attack-step-by-step&quot;&gt;The attack: step by step&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.bearby.io&#x2F;blog&#x2F;42dao-balance-coin-hack-2026&#x2F;attack-flow.svg&quot; alt=&quot;Attack flow — three phases to $915K&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;phase-1-key-compromise&quot;&gt;Phase 1 — Key compromise&lt;&#x2F;h3&gt;
&lt;p&gt;The attacker gained control of either:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;(a)&lt;&#x2F;strong&gt; The Oracle operator key (&lt;code&gt;0xD2C0…fa84&lt;&#x2F;code&gt;), enabling arbitrary price pushes, or&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;(b)&lt;&#x2F;strong&gt; A BLC ward key, enabling direct &lt;code&gt;mint()&lt;&#x2F;code&gt; calls&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Evidence for (a): the oracle&#x27;s &lt;code&gt;getPrice(BTCB)&lt;&#x2F;code&gt; currently returns &lt;strong&gt;0&lt;&#x2F;strong&gt; — a price that was either never set or was explicitly zeroed. The oracle state is inconsistent with normal operation.&lt;&#x2F;p&gt;
&lt;p&gt;Evidence for (b): all ward entries are now &lt;strong&gt;revoked&lt;&#x2F;strong&gt; (&lt;code&gt;wards[addr] = 0&lt;&#x2F;code&gt; for every known address), yet totalSupply is 9.91M. The ward was used to mint, then cleaned up.&lt;&#x2F;p&gt;
&lt;p&gt;Both vectors are equally catastrophic given the architecture. The ward compromise is simpler and requires no protocol interaction — just &lt;code&gt;BLC.mint(attacker, 10_000_000e18)&lt;&#x2F;code&gt; in a single transaction.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;phase-2-unbacked-minting&quot;&gt;Phase 2 — Unbacked minting&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Vector (a) — Oracle manipulation:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;$$P_{\text{BCH}}^{\text{manipulated}} = P_{\text{BCH}}^{\text{real}} \times 100{,}000 = $38{,}673 \times 100{,}000 = $3{,}867{,}300{,}000$$&lt;&#x2F;p&gt;
&lt;p&gt;Pledging a few BCH at this price:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{BLC}&lt;em&gt;{\text{minted}} = n&lt;&#x2F;em&gt;{\text{BCH}} \times \frac{P_{\text{BCH}}^{\text{manip}}}{P_{\text{BLC}}} \times \frac{\text{ratio}}{\text{denom}}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$= 3 ;\text{BCH} \times \frac{3.867 \times 10^{9}}{1.00} \times 1 = 11.6 \times 10^{9} ;\text{BLC}$$&lt;&#x2F;p&gt;
&lt;p&gt;(Actual supply is 9.91M, so the attacker pledged a fraction of a BCH or used a more moderate price multiplier.)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Vector (b) — Direct mint:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;solidity&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F; Single transaction, no collateral required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;mint&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;attacker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 9_910_949_927_178_514_281_951_476&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F; totalSupply: ~350K → 9,910,949.93 (28× inflation)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;phase-3-liquidity-drain&quot;&gt;Phase 3 — Liquidity drain&lt;&#x2F;h3&gt;
&lt;p&gt;The attacker had two exit routes:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Route 1 — USDT Pool (1:1 exchange):&lt;&#x2F;strong&gt; The USDT Pool swaps BLC↔USDT at a fixed 1:1 ratio. The attacker swaps freshly minted BLC for USDT dollar-for-dollar:&lt;&#x2F;p&gt;
&lt;p&gt;$$\Delta_{\text{USDT}} = \min(\text{BLC}&lt;em&gt;{\text{minted}},; \text{USDT}&lt;&#x2F;em&gt;{\text{pool reserves}}) \times $1$$&lt;&#x2F;p&gt;
&lt;p&gt;If the pool held ≈$915K, the attacker extracts the full amount at &lt;strong&gt;zero slippage&lt;&#x2F;strong&gt;. This is the primary extraction mechanism.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Route 2 — PancakeSwap (AMM dump):&lt;&#x2F;strong&gt; Remaining BLC is sold through constant-product pools. The marginal price follows:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(y) = \frac{k}{y^2}, \qquad y = \text{BLC reserve in pool}$$&lt;&#x2F;p&gt;
&lt;p&gt;As the attacker dumps millions of BLC, $y$ grows by a factor of $\sim 27\times$, and price collapses quadratically:&lt;&#x2F;p&gt;
&lt;p&gt;$$\frac{P_1}{P_0} = \left(\frac{y_0}{y_1}\right)^2 = \left(\frac{1}{27.1}\right)^2 = 0.00136%$$&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.bearby.io&#x2F;blog&#x2F;42dao-balance-coin-hack-2026&#x2F;price-collapse.svg&quot; alt=&quot;AMM price collapse model&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The combination is devastating: the 1:1 pool extracts maximum value at no discount, then the AMM dump destroys the peg.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-math-of-the-collapse&quot;&gt;The math of the collapse&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;supply-inflation&quot;&gt;Supply inflation&lt;&#x2F;h3&gt;
&lt;p&gt;$$\text{Inflation ratio} = \frac{S_{\text{post}}}{S_{\text{pre}}} = \frac{9{,}910{,}949.93}{\approx 350{,}000} \approx 28.3\times$$&lt;&#x2F;p&gt;
&lt;h3 id=&quot;collateralization-ratio-collapse&quot;&gt;Collateralization ratio collapse&lt;&#x2F;h3&gt;
&lt;p&gt;Before the attack, BLC was roughly fully backed:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{CR}&lt;em&gt;{\text{pre}} = \frac{\text{BCH}&lt;&#x2F;em&gt;{\text{locked}} \times P_{\text{BCH}}}{\text{BLC}&lt;em&gt;{\text{supply}} \times P&lt;&#x2F;em&gt;{\text{BLC}}} \approx \frac{\approx $350\text{K}}{\approx 350\text{K} \times $1} \approx 100%$$&lt;&#x2F;p&gt;
&lt;p&gt;After the attacker minted 9.56M unbacked BLC, the nominal collateralization cratered:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{CR}_{\text{nominal}} = \frac{\approx $350\text{K}}{9{,}910{,}949.93 \times $1} \approx 3.5%$$&lt;&#x2F;p&gt;
&lt;p&gt;The market repriced BLC accordingly — $1.00 → $0.001358 — because only ≈3.5¢ of real BCH backs each dollar of face-value BLC. Once the USDT Pool&#x27;s $915K reserve was drained at 1:1, there was no remaining backstop.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;amm-extraction-model&quot;&gt;AMM extraction model&lt;&#x2F;h3&gt;
&lt;p&gt;For a constant-product pool with initial reserves $(x_0, y_0)$ and fee $f = 0.003$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\Delta x = \frac{x_0 \cdot (1-f) \cdot \Delta y}{y_0 + (1-f) \cdot \Delta y}$$&lt;&#x2F;p&gt;
&lt;p&gt;With $x_0 = $500\text{K}$ USDT, $y_0 = 500\text{K}$ BLC, and $\Delta y = 9\text{M}$ BLC:&lt;&#x2F;p&gt;
&lt;p&gt;$$\Delta x = \frac{500{,}000 \times 0.997 \times 9{,}000{,}000}{500{,}000 + 0.997 \times 9{,}000{,}000} = \frac{4.4865 \times 10^{12}}{9.473 \times 10^{6}} \approx $473{,}600$$&lt;&#x2F;p&gt;
&lt;p&gt;Combined with the 1:1 USDT Pool extraction, total loot ≈ $915K.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-this-architecture-was-doomed&quot;&gt;Why this architecture was doomed&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-centralized-oracle-single-point-of-failure&quot;&gt;1. Centralized oracle = single point of failure&lt;&#x2F;h3&gt;
&lt;p&gt;The oracle&#x27;s &lt;code&gt;setRound()&lt;&#x2F;code&gt; is gated by a single EOA. There is no multi-sig, no timelock, no price-bound check. The Protocol trusts this price unconditionally for minting decisions. From the decompiled &lt;code&gt;pledge()&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;price_tok = oracle.getPrice(token)    &#x2F;&#x2F; trusted unconditionally&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;require(price_tok &amp;gt; 0)                &#x2F;&#x2F; only check: non-zero&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; ... mint BLC proportional to price_tok&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;No check like &lt;code&gt;require(price_tok &amp;lt; price_tok_prev × 1.5)&lt;&#x2F;code&gt; — no circuit breaker at all.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-dai-style-wards-unlimited-minting-on-key-compromise&quot;&gt;2. Dai-style wards = unlimited minting on key compromise&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;code&gt;wards&lt;&#x2F;code&gt; pattern is appropriate for MakerDAO, which wraps it in governance timelocks, multi-sig execution, and a $100M+ security apparatus. 42DAO deployed the same primitive with a &lt;strong&gt;single deployer key&lt;&#x2F;strong&gt; and no additional guardrails. Compromise the key → unlimited &lt;code&gt;mint()&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-1-1-usdt-pool-free-extraction-at-par&quot;&gt;3. 1:1 USDT Pool = free extraction at par&lt;&#x2F;h3&gt;
&lt;p&gt;The USDT Pool&#x27;s fixed 1:1 exchange rate means the attacker doesn&#x27;t need to fight AMM slippage. They can extract the pool&#x27;s entire USDT reserve at face value, then dump the remaining BLC on PancakeSwap for additional extraction.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-no-emergency-pause&quot;&gt;4. No emergency pause&lt;&#x2F;h3&gt;
&lt;p&gt;The Protocol has a &lt;code&gt;paused&lt;&#x2F;code&gt; flag (checked in &lt;code&gt;pledge()&lt;&#x2F;code&gt; and &lt;code&gt;remove()&lt;&#x2F;code&gt;), but it can only be set by the owner via a manual transaction. During an exploit that completes in seconds, there is no automated circuit breaker to halt minting.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparison-with-historical-algorithmic-stablecoin-failures&quot;&gt;Comparison with historical algorithmic stablecoin failures&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Parameter&lt;&#x2F;th&gt;&lt;th&gt;Balance Coin (BLC)&lt;&#x2F;th&gt;&lt;th&gt;Terra &#x2F; UST (2022)&lt;&#x2F;th&gt;&lt;th&gt;Iron Finance (2021)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Failure vector&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Centralized oracle + ward key&lt;&#x2F;td&gt;&lt;td&gt;Mint&#x2F;burn arbitrage loop death spiral&lt;&#x2F;td&gt;&lt;td&gt;Bank run on partial collateral&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Blockchain&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;BNB Chain&lt;&#x2F;td&gt;&lt;td&gt;Terra Classic&lt;&#x2F;td&gt;&lt;td&gt;Polygon&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Loss&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;≈ $915K&lt;&#x2F;td&gt;&lt;td&gt;&amp;gt; $40B&lt;&#x2F;td&gt;&lt;td&gt;≈ $750M&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Backing&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;BCH (real collateral)&lt;&#x2F;td&gt;&lt;td&gt;LUNA (endogenous)&lt;&#x2F;td&gt;&lt;td&gt;USDC + TITAN (endogenous)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Price outcome&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;−99.86% ($0.001358)&lt;&#x2F;td&gt;&lt;td&gt;−100% ($0.00)&lt;&#x2F;td&gt;&lt;td&gt;−100% ($0.00)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Root cause&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Centralized trust&lt;&#x2F;td&gt;&lt;td&gt;Algorithmic death spiral&lt;&#x2F;td&gt;&lt;td&gt;Liquidity crunch&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;BLC&#x27;s failure is structurally different from Terra and Iron — it is not an algorithmic death spiral but a &lt;strong&gt;centralization attack&lt;&#x2F;strong&gt;. The &quot;algorithm&quot; was sound; the trust model was not.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reproduce-everything&quot;&gt;Reproduce everything&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RPC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;https:&#x2F;&#x2F;bsc-dataseed.bnbchain.org&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;0x5343b4586a3f2a3365df92Ee705c3BF446C54668&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PROTO&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;0x06532b9BF0A69545949d82A51627DeD5E476C2c5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORACLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;0x5A5E37deC3356478c80d52932e8f5491734128B0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;0x8ff795a6f4d97e7887c79bea79aba5cc76444adf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# 1. Verify totalSupply (9.91M)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt; $BLC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;totalSupply()(uint256)&amp;quot; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# 2. Check oracle prices (BTCB = 0, BCH = $386.73, BLC = $1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt; $ORACLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;getPrice(address)(uint256)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; $BCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# 3. Verify Protocol owner and oracle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt; $PROTO&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;owner()(address)&amp;quot; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;      # 0x2c0c…77C1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt; $PROTO&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;oracle()(address)&amp;quot; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;      # 0x5A5E…28B0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# 4. Check all wards are revoked (compute storage slot)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# wards[addr] = storage[keccak256(addr . 0x00)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt; $BLC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;wards(address)(uint256)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; $PROTO&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;    # 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# 5. Decompile every contract from bytecode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; $BLC $PROTO $ORACLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;  cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; code&lt;&#x2F;span&gt;&lt;span&gt; $c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --rpc-url&lt;&#x2F;span&gt;&lt;span&gt; $RPC&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; $c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;.hex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;  asm_to_sol&lt;&#x2F;span&gt;&lt;span&gt; $c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;.hex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;done&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;lessons&quot;&gt;Lessons&lt;&#x2F;h2&gt;
&lt;p&gt;The Balance Coin collapse is not a story of clever exploitation. It is the story of &lt;strong&gt;importing a battle-tested token standard (Dai&#x27;s DSToken) without importing the security architecture that makes it safe&lt;&#x2F;strong&gt; (governance timelocks, multi-sig, rate limiting, decentralized oracles).&lt;&#x2F;p&gt;
&lt;p&gt;Three engineering requirements would have prevented this:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decentralized oracle.&lt;&#x2F;strong&gt; Replace the push oracle with Chainlink price feeds, or at minimum enforce TWAP with a deviation bound: &lt;code&gt;require(|price_new - price_old| &#x2F; price_old &amp;lt; 0.10)&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mint rate limiting.&lt;&#x2F;strong&gt; Cap BLC minting per block: &lt;code&gt;require(minted_this_block &amp;lt; MAX_MINT_PER_BLOCK)&lt;&#x2F;code&gt;. The Dai-style &lt;code&gt;mint()&lt;&#x2F;code&gt; should enforce a per-transaction ceiling.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Timelock on ward grants.&lt;&#x2F;strong&gt; &lt;code&gt;rely()&lt;&#x2F;code&gt; should queue for 24h before taking effect, giving the community time to detect and respond to unauthorized minting authority.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The irony is bitter: BLC was backed by &lt;em&gt;real&lt;&#x2F;em&gt; BCH collateral, making it structurally sounder than Terra or Iron. But a sound algorithm behind a broken trust boundary is still a broken system. The attacker didn&#x27;t need to break the math — they just needed one key.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
