比特币通信协议 - 币圈消息

比特币通信协议篇11、二、TURN简介。在典型的情况下,TURN客户端连接到内网中,并且通过一个或者多个NAT到 详细

比特币攻击解决方案 - 币圈消息

[复制链接]
53 0
wangjia 发表于 2022-11-3 15:41:29 | 只看该作者 |阅读模式 打印 上一主题 下一主题
比特币攻击解决方案篇11、其次,任何节点在接收区块,进行本地处理校验时同样需要在分叉点执行:。
2、}else{。区块链本是去中心化架构,在[以太坊](https://learnblockchain.cn/2017/11/20/whatiseth/)首次遭遇严重黑客攻击智能合约事件时,采用的解决方案却破坏了去中心化理念!
3、//miner/worker.go:877。
4、ifconfig.DAOForkBlock==nil{//❷。
5、[PR#2814-finalizetheDAOfork](https://github.com/ethereum/go-ethereum/pull/2814)。
6、##矿工投票与区块头校验。代码实现是在eth/handler.go文件中,在消息层进行拦截处理。节点握手后,开始15秒倒计时,一旦倒计时结束,则断开连接!
7、DAOconstantpublicmainDAO=DAO(0xbb9bc244d798123fde783fcc1c72d3bb8c189413);。
8、+❸确保只需在DAO分叉点的10个区块上校验!
9、当前,主网已默认配置支持DAO分叉,并设定了开始硬分叉高度1920000,代码如下:。
10、[WithdrawDAO]:https://[etherscan](https://learnblockchain.cn/docs/etherscan/).io/address/0xbf4ed7b27f1d666546e30d74d50d173d20bca754。

比特币攻击解决方案篇21、functionbalanceOf(addressaddr)returns(uint);。
2、以上内容整理自文章TheDAO攻击!
3、ifdaoHeader:=pm.blockchain.GetHeaderByNumber(pm.chainconfig.DAOForkBlock.Uint64());daoHeader!=nil{。
4、在我看来,一旦发现严重BUG是非常致命的。在上线后的代码修改,应保持尽可能少和充分测试。非常同意thedao的代码处理方式。不必为以后可能的分叉,而做出觉得“很棒”的功能,务实地解决问题才是正道!
5、这种config.DAOForkBlock开关,类似于互联网公司产品新功能灰度上线的功能开关。在区块链上,可以先实现功能代码逻辑。至于何时启用,则可以在社区、开发者讨论后,确定最终的开启时间。当然区块链上区块高度等价于时间戳,比如DAO分叉点1920000也是讨论后敲定!
6、❶在校验区块头时增加DAO区块头识别校验!
7、returnnil。functionwithdraw(){。
8、//params/dao.go:28。
9、//Createthecurrentworktaskandcheckanyforktransitionsneeded。
10、contractDAO{。+❷如果节点未设置分叉点,则不校验!
比特币攻击解决方案篇31、DAOForkSupport:true,。
2、解决方案。func(w*worker)commitNewWork(interrupt*int32,noemptybool,timestampint64){。
3、p.forkDrop.Stop()。
4、}。misc.ApplyDAOHardFork(env.state)。
5、header.Extra=[]byte{}。
6、ifdaoBlock:=w.config.DAOForkBlock;daoBlock!=nil{。
7、p.Log().Debug( SeemstobeonthesamesideoftheDAOfork )。
8、varDAOForkExtraRange=big.NewInt(10)。
9、//params/config.go:38。
10、最终因为社交的不同意见,最终以太坊分裂出支持继续维持原状的以太经典ETC,。
比特币攻击解决方案篇41、limit:=new(big.Int).Add(daoBlock,params.DAOForkExtraRange)。
2、}elseifbytes.Equal(header.Extra,params.DAOForkBlockExtra){。
3、env:=w.current。
4、虽然TheDAO攻击发生在2016年,但解除攻击的方案依然值得学习!
5、uintpublictotalSupply;。
6、//Mutatetheblockandstateaccordingtoanyhard-forkspecs。
7、ifheader.Number.Cmp(daoBlock) =0 header.Number.Cmp(limit) 0{。
8、❸确保只需在DAO分叉点的10个区块上校验!
9、addresspublictrustee=0xda4a4626d3e16e094de3225a751aab7128e96526;。
10、转移资产。简单地讲,在2016年4月30日开始,一个名为“TheDAO”的初创团队,在以太坊上通过[智能合约](https://learnblockchain.cn/2018/01/04/understanding-smart-contracts/)进行ICO众筹。28天时间,筹得5亿美元,成为历史上最大的众筹项目!
比特币攻击解决方案篇51、contractWithdrawDAO{。
2、funcVerifyDAOHeaderExtraData(config*params.ChainConfig,header*types.Header)error{。
3、//consensus/ethash/consensus.go:294。
4、DAOForkBlock:big.NewInt(1920000),。
5、limit:=new(big.Int).Add(config.DAOForkBlock,params.DAOForkExtraRange)//❸。
6、varquerygetBlockHeadersData。
7、 `solidity。casemsg.Code==GetBlockHeadersMsg:。
8、ifw.config.DAOForkSupport w.config.DAOForkBlock!=nil w.config.DAOForkBlock.Cmp(header.Number)==0{。
9、❹如果节点允许分叉,则要求区块头Extra必须符合要求!
10、如果矿工支持分叉,则需要在从高度192000到192009,在区块头`extradata`写入指定信息0x64616f2d686172642d666f726b,以表示支持硬分叉!
比特币攻击解决方案篇61、取款合约代码如下:。//检查是否区块是否仍然属于分叉处理期间:[DAOForkBlock,DAOForkBlock+10)。
2、+❺当然,如果节点不允许分叉,则也不能在区块头中加入非分叉链的Extra特殊信息!
3、uintbalance=mainDAO.balanceOf(msg.sender);。
4、ifp.forkDrop!=nil pm.chainconfig.DAOForkBlock.Cmp(headers[0].Number)==0{。
5、//Deployedonmainnetat0xbf4ed7b27f1d666546e30d74d50d173d20bca754。
6、THEDAO持有近15%的以太币总数,因此THEDAO这次的问题对以太坊网络及其加密币都产生了负面影响!
7、 `go。ifverifyDAO{。
8、//eth/handler.go:465。
9、//MoveeveryDAOaccountandextra-balanceaccountfundsintotherefundcontract。
10、returnerrResp(ErrDecode, %v:%v ,msg,err)。
极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:比特币攻击解决方案
喜欢 (0)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
收藏
收藏0
转播
转播
分享
分享
分享
淘帖0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子2930859

发布主题
阅读排行更多+

Powered by 顺水鱼MT4外汇EA网! X3.2© 2001-2017 顺水MT4外汇EA公司.( 陕ICP备17014341号-1