那在区块链技术上来实现去中心化(分布式),这便依赖于共识算法。共识算法解决的是对某个提案(Proposal),大家达成一致意见的过程,保障系统满足不同程度的一致性。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等,可以认为任何需要达成一致的信息都是一个提案。
简单理解就是区块链的数据是分散的存储在网络中许多节点上的。而传统的数据存储方式,则是存在网络中1个或几个大节点上的。由此看来,所谓的中心化与去中心化,说白了就是存储数据的节点的多少的区别。
所以,区块链的去中心化是相对的。数据只存在1个节点上,肯定就是中心化的。但如果存在100个节点上,它们相对于1个节点就可以说是去中心化,只是去中心化的程度不一样而已。
同时,中心化与去中心化也并不矛盾,并不是完全对立的,因为去中心化中的“去”字是表示弱化、消除中心的过程,而不是绝对没有中心,与无中心化是完全对立的概念。
从架构上来看中心化就是指系统不论接受多少节点的状况都可以继续运作;从治理上来看中心化就是指需要有很多个人和组织来控制这个系统;而逻辑上的中心化指的是系统呈现的接口和数据是否是一个单一的整体?理解了这三个角度的中心化,我们再来看区块链技术的去中心化。从概念上,用最简单的话来讲,区块链是全网统一的账本,所以从逻辑上说,系统的接口和数据是单一的整体,这是中心化的。
function withdraw(uint _amount)public{
if(balances[msg.sender]>=_amount){
if(msg.sender.call.value(_amount)()){
_amount;
}
balances[msg.sender]-=_amount;
}
}
function()public payable{}
}
contract ReentranceAttack{
Reentrance entrance;
function ReentranceAttack(address _target)public payable{
entrance=Reentrance(_target);
}
function deposit()public payable{
entrance.donate.value(msg.value);
}