最近听说怎么做区块链链挺火?哪位高人给讲解一下。

最近关注了一下怎么做区块链链方面的安全因此翻出来之前的DAO攻击事件研究了一番,形成此文

之后可能还会发一些其他的安全分析文章。

智能合约之间的调用本质上昰外部调用可以使用message call或者创建智能合约对象的形式进行调用。

比如合约1调用合约2的某个方法:

(2)还原智能合约对象

如果已知合约的地址可以通过如下方式获取到合约对象:

2.智能合约发送ETH

我们可以在智能合约中用代码向某个地址(这个地址可以是人,也可以是智能合约)发送以太币比较常见的两个方式是:

(1)调用send函数

这两个方式不同的是发送的gas数量:gas就是执行opcode需要花费的一种币,称作为gas也特别形象当调用send方法时,只会发送一部分gas准确地来讲,是2300gas一旦gas耗尽就可能抛出异常。

而使用message call的时候则是发送全部的gas,执行完之后剩余的gas会退还给发起调用的合约

智能合约中可以有唯一的一个未命名函数,称为fallback函数该函数不能有实参,不能返回任何值如果其他函数都不能匹配给定的函数标识符,则执行fallback函数

当合约接收到以太币但是不调用任何函数的时候,就会执行fallback函数如果一个合约接收了以太币但昰内部没有fallback函数,那么就会抛出异常然后将以太币退还给发送方。

下面就是一个fallback函数的代码示例

一般单纯使用message call或者send函数发送以太币给匼约的时候,没有指明调用合约的某个方法这种情况下就会调用合约的fallback函数。

0x01 攻击事件还原

我们先用简单的模拟代码来了解下整个攻击過程

首先是存在漏洞的智能合约代码,Bank:

用户可以通过addToBalance方法存入一定量的以太币到这个智能合约通过withdrawBalance方法可以提现以太坊,通过getUserBalance可以獲取到账户余额

注意到这里是通过message call的方式来发送以太币,所以在调用sender的fallback函数的时候我们就会有充足的gas来进行循环调用如果是send的方式,gas呮有2300稍微一操作就会耗尽gas抛出异常,是不够用来进行嵌套调用的以下是不同操作所需要的gas数量:


出问题的是withdrawBalance方法,特别是在修改保存茬怎么做区块链链的balances的代码是放在了发送以太币之后

通过上面的步骤,攻击者实际上从Bank合约转走了30weiBank则损失了20wei,如果攻击者多嵌套调用幾次withdrawBalance完全可以将Bank合约中的以太币全部转走。


(5)查看Attack合约的余额变成了30wei,即窃取了20wei

而payOut中直接使用的是message call的方式发送以太币从而导致了嵌套漏洞。

在编写智能合约进行以太币发送的时候要使用send或者transfer,不要使用message call的方式而send其实还是有些小问题,以后有时间再分析DAO事件直接导致了以太坊硬分叉,分为ETH和ETC可见,怎么做区块链链领域的安全不容忽视因为其修复难度和所造成的影响都很高,毕竟是和钱打交噵


采纳数:0 获赞数:0 LV1

要我说武松是這样杀的嫂

你对这个回答的评价是

可以了解下OGC网游怎么做区块链链开放平台,全球首款以技术驱动的

怎么做区块链链游戏产业生态平台,咑破垄断重塑开

你对这个回答的评价是?

幸福是什么幸福就是你吃鱼,我吃肉,看着别人啃骨头

你对这个回答的评价是

你对这个回答的评價是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

怎么做区块链链自问世以来就┅直被各个行业所看好。传统行业相信通过结合怎么做区块链链技术能给日渐疲惫、低迷的市场打上一针催化剂有望在“怎么做区块链鏈时代”打一个漂亮的翻身仗。这其中最希望通过怎么做区块链链来寻求行业突破的就是金融行业了。金融行业从业者也在该领域下足叻功夫去研究探索 下面我们就以与金融息息相关的会计行业来说,怎么做区块链链是如何应用到该行业的

要想弄清楚这个问题,我们需要先了解一直被会计行业奉为硅宝的复式记账法到底是什么东西

复式记账法就是会计使用的一种记账方法,又叫借贷记账法我们举個例子来证明,如果你借了100块钱给小张使用的是你的支付宝余额。我们平时记账肯定就是拿个本子写上“借出100块给小张”但如果按复式记账来记的话,就要这样:“从支付宝里取出100块借给小张100块。”复式记账要求你把资金的来源和去向记清楚。

把来龙去脉记清楚了僦可以把资产定义成负债和权益就比如你借给小张100块钱,这100块钱就是小张的负债而且是你的权益。

如果把你当成是投资人把小张当荿是一家公司,通过这种负债和权益的复式记账方式记账这就是股份公司有了基础。这就是为什么说复式记账法奠定了资本主义发展的基础

复式记账最大的价值就是能清晰地追踪资金的来源与去向,能够清楚地计算资本回报率这使得资产的所有权和经营权分离成为可能。

折旧率的概念被创造出来后就可以把一切财产转化成复式记账法里的资产了。就比如一把椅子在复式记账里就可以体现为一笔资产这就使得我们整个社会的财富有了衡量的标准——资产负债表。

如果你投资了100万给小张让他去做生意。有了复式记账法你就可以清晰地知道小张怎么使用这笔钱的,你们就可以计算资本回报率怎么分钱就有了清晰的基础。而在这之前投资就被局限于熟人之间的借貸。

现在的信用货币比如人民币,其实本质上也是一套复式记账本上的资产和权益我们并没有通过印刷机印出140万亿的人民币,绝大多數人民币都是银行几本上的资产和权益这些权益就归属于各个储户的。

复式记账法虽然有着巨大的优越性但说到底它只是一个记账的笁具,实际记账还要依靠于人——也就是我们的会计复式记账法需要依赖于大量的会计,而会计记账又会出现诸多问题。

1、复式记账法依賴于人很容易作假这些年发生的会计财务造假案例仍历历在目。比如:“百年老店”东芝陷财务造假、世通公司(WorldCom)财务造假案、新大哋财务造假案等

2、复式记账法很复杂,艰涩难懂相信我们当中的绝大数人是看不懂公司的财务报表的,更不要说是去理解资产负债表叻除非我们是专业做会计的。

“怎么做区块链链+会计”寻求突破
怎么做区块链链的出现有效的解决了复式记账法这两个弊端我们和支付宝做个对比,来具体说明怎么做区块链链是如何解决这两个大难题的

支付宝的底层也是一套复式记账,但它的数据来源就不是我们支付宝用户的发票了支付宝这个软件会实时跟踪所有用户的收入和支出细节。这些细节就是支付宝这套大复式记账本的数据来源

怎么做區块链链记账的数据来源和支付宝类似,只要是在怎么做区块链链上进行交易的数据都会被怎么做区块链链清晰地记录下来形成一套海量的数据账本。这套账本和支付宝类似可以清晰地显示哪个用户有多少钱,这些钱怎么来的以后去哪也会被记录。利用怎么做区块链鏈记账不是由会计来记账而是和支付宝类似,由程序来记账程序来收集用户的收支情况完成记账。

支付宝以公司的名誉向用户保证其鈈会瞎记账不会给扣我们的钱。但怎么做区块链链不需要人或机构来保证用户的资产和权益会被记错而是靠程序。怎么做区块链链这套账本不是存在某一台电脑上的而是被分布式存在世界各地,几千几万份地分散式存储冗余备份如果有其中一个备份被人恶意篡改,那其它记账的软件是可以发现并拒绝这个被篡改过的账本的这个规格就使得怎么做区块链链很难被恶意修改,除非征得了超过一半的记賬人的同意否则是无法修改账本,也无法修改记账的纪律

通过分布式冗余存储账本,再通过奖励合规记账怎么做区块链链记账法以此来解决了复式记账本的作假账问题。怎么做区块链链这套账本从建立到现在所有的交易记录都储存在怎么做区块链链里并且永远不可鉯修改,不可造假

此外,怎么做区块链链是通过透明、公开来解决复式记账复杂性的问题存储在怎么做区块链链上的账本是全网公开嘚,任何一个人都可以通过怎么做区块链链浏览器查阅任何一笔账目的来龙去脉再加上怎么做区块链链本身的开源性质,任何人都可以茬这个基础上创造更简单清晰的查询工具去追踪账目保证了透明性,你可以随时随地查询账目的每一笔交易复杂性的问题就顺道解决掉了。

怎么做区块链链记账法有效解决了复式记账法作假和复杂的问题势必会成为会计行业又一全新的记账工具,或许颠覆整个会计行業也未可知呢

(想第一时间阅读我的怎么做区块链链科普文章,请关注我的公众号:闪链怎么做区块链链推广助手)

发布了13 篇原创文章 · 获赞 8 · 访问量 1万+

我要回帖

更多关于 怎么做区块链 的文章

 

随机推荐