最近看到这么个讨论挺有意思,为啥 ERC20 合约代币一旦出现代码漏洞,几乎所有代币持有人都会受到影响,而以太坊代码漏洞却很少影响到每个人的以太币资产?
ERC20 代币是通过代币合约去管理代币账本的,用户通过与合约交互去发行、转让或销毁代币。所有这些操作的账本记录都是放在代币合约里的,而合约本身在以太坊上也是一个独立的账户。
比如有个 ERC20 代币 ‘ABC’,Alice 有 100 个 ABC ,Bob 有 50 个 ABC。 代币的账本其实就是地址为 0x1234 的智能合约。 这个代币合约 0x1234 维护一个内部数据库,其中存储像 “Alice 有 100 ABC”和“ Bob 有 50 ABC”这样的记录。 当Alice 想把 30 个 ABC 转给 Bob 时,她会向合约 0x1234 发送一条签名信息,上面写着“请把 30 个 ABC 转给 Bob” ,然后合约 0x1234 会验证这条信息确实来自Alice,并修改其内部数据库,将相关记录更新为“ Alice 有 70 个 ABC ”和“Bob 有80个 ABC”。
这里的问题是,所有逻辑和状态都保留在单个合约 0x1234 中。 Alice 和 Bob 不能直接查看他们自己的记录,因为这些记录由合约 0x1234 保管。 此代币的所有用户都需要与此合约交互,管理其代币的唯一方法是向合约 0x1234 发送消息。
换句话说,这个代币合约是一个中心节点。 因为所有代币记录都由这个中心节点保存,每个人都必须与这个中心节点交互,中心节点的任何问题都大概率会影响到所有用户。以前曾经出现过的各种合约漏洞已经证明了这一点儿。
这点儿与以太坊原生代币 ETH 是很不同的,ETH 被每个人持有,不存在类似合约这样的中心化节点,也就不存在这样的攻击对象。
网友评论