无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(the dao) 什么是The DAO事件?The DAO事件的背景和过程 The DAO事件:区块链安全性问题 全网首发(图文详解1)

前沿技术 Micheal 6个月前 (06-25) 83次浏览 已收录

(the dao) 什么是The DAO事件?The DAO事件的背景和过程

The DAO事件是指于2016年发生的一起著名的区块链技术安全事件。The DAO(Decentralized Autonomous Organization,分散式自治组织)旨在成为一个运行在以太坊区块链上的、完全由智能合约控制的投资基金,从而消除人为管理和干预的需要。然而,由于智能合约中的漏洞,一个未知的攻击者成功从The DAO中盗走相当于5000万美元的以太币(ETH)。这一事件不仅引发了对智能合约安全性的广泛关注,也直接导致了以太坊网络的硬分叉,分裂成了两个独立的区块链:以太坊(Ethereum,ETH)和以太经典(Ethereum Classic,ETC)。

The DAO事件的背景和过程

  • 背景: The DAO于2016年4月启动,很快就通过众筹筹集到了一个巨大的资金池,总额超过1.5亿美元,当时约占所有以太币的14%。The DAO的目标是让加入的成员能通过投票决定如何投资这些资金。
  • 过程: 2016年6月,一个未知攻击者利用The DAO智能合约代码中的递归调用漏洞,从DAO中连续提取大量以太币到一个受他们控制的“子DAO”中。这一行为没有违反任何区块链规则,却让投资者损失惨重。

如何解决、使用或实现

针对The DAO事件,社区通过网络投票决定进行硬分叉,以将被盗的资金转移到一个受受害者控制的新合约中,使他们能够撤回自己的投资。这一决定虽然挽回了损失,但也引发了争议,最终导致了以太坊网络的分裂。

详细解决方案

  • 决定硬分叉:社区通过投票决定是否进行硬分叉。
  • 实施硬分叉
    • 开发团队设计并实施了一次代码更新,使得所有被盗的资金被”冻结”并转移到一个新的智能合约中,这个智能合约只允许原来的投资者提取他们的资金。
    • 用户和矿工需要更新他们的软件,才能支持这次硬分叉。
  • 执行恢复计划
    • 受影响的投资者可以通过与新智能合约交互来撤回自己的资金。
    • 需要编写相应的交互脚本或通过以太坊钱包进行操作。

代码编写或配置过程

  • 智能合约代码示例(恢复合约):这里只是一个简单的例子,实际上,在应对The DAO事件时,涉及的智能合约更加复杂。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract RefundContract {
    // 记录每个地址应退还的以太币数量
    mapping(address => uint) public refunds;

    // 只有合约拥有者可以调用的函数,用于设置退款额
    function setRefund(address _addr, uint _amount) external {
        // 这里可以添加仅限合约拥有者调用的逻辑
        refunds[_addr] = _amount;
    }

    // 允许资金受害者提取他们的资金
    function withdraw() external {
        uint amount = refunds[msg.sender];
        require(amount > 0, "No refund available");

        // 设置退款额为0,防止重入攻击
        refunds[msg.sender] = 0;

        // 向发送者转账
        payable(msg.sender).transfer(amount);
    }

    // 接受捐款
    receive() external payable {}
}

对于复杂的恢复计划和智能合约编写,需要深入理解以太坊智能合约的开发和安全性考虑,确保代码安全和逻辑正确。此外,详细的测试和审核流程也是必不可少的。
(facedao) 什么是FACEDAO币?FACEDAO币的发展历程是怎样的? FACEDAO币:加密货币的发展历程和使用方法 全网首发(图文详解1)
(fetch和axios的区别) 网络请求axios与fetch的区别及使用示例 Axios vs Fetch: HTTP 客户端比较 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝