从零开始的区块链— Pt。 1个

概念介绍

向五岁的孩子解释

想象有一个大罐糖果,我们生产的所有东西都会收到一定量的糖果,但是我们没有存放零食的地方,因此,我们收到的是糖果,而不是实际的物品。 如果您想购买东西,您将获得信用。 假设您想购买我的财产,因此您和我决定写一个交易记录 ,在其中写您给我的糖果量,我们俩都将其签字,但必须保密, 没有人可以了解我们的交易。 因此,我们决定用一个代码对其签名,因为没人知道如何解密 ,因此我们都复制了交易记录,下次我买东西时, 我可以将交易记录用作该糖果的代表

我们的交易系统存在一个大问题 :如果我声称我从未得到过报酬并且该财产仍然属于我,该怎么办?如果您声称自己从未购买过某物并且仍然拥有那么多糖果,该怎么办? 因此,我们考虑了一下并解决了问题: 我们打电话给朋友该朋友还将收到该记录的副本,如果有人尝试破坏某笔交易,您和我都将打电话给我们所有要检查所有交易的朋友 ,那将更难破坏。 现在,想知道我们是否可以召集更多的朋友来验证我们的交易 ,我们将拥有3个以上的记录副本,甚至朋友也可以在他们之间检查他们之间的交易记录是否有效 ,这很难被破坏。

通过该系统,我们可以根据交换的价值记录来维护数百万笔交易,并知道我们有多少糖果,而由于代码的原因,我们的朋友将一无所知。

这是对区块链概念的非常简单的介绍:我们的朋友是区块链,糖果是货币,信用是钱包。

不是那么简单

区块链中,这些交易记录或分类帐的存储位置称为块。 区块链由相互验证的区块链组成,每个区块都包含对它们之前的最后一个区块的引用,因此能够在整个最后一个区块的数据中验证新交易,更改一个区块的数据或创建一个新区块人们必须解决一个非常棘手的数学问题, 这就是“采矿”。 新交易存储在必须通过挖掘进行验证的新区块中。

比特币中,一个块由以下组成:

挖矿的目的很简单:验证交易并记录下来 ,矿工基本上是我们示例中的朋友,每个矿工都在其机器上运行区块链的整个节点, 因此每个矿工都有每个区块的副本。 在运行区块链时, 每台机器都竞争解决基于密码函数的数学难题 ,将其添加到交易块中后,会导致该块散列为具有稀有属性的代码,这称为工作量证明 ,并且它将证明该矿工在运行节点时花费了大量时间尝试解决问题,从而验证了机器上的数据。

例如,在以太坊 ,使用Ethash进行工作量证明 这是一种新的PoW(Proof-Of-Work)设计,用于解决采矿集中化的问题,在该集中化中,一组硬件或采矿公司会大量收购影响或操纵网络的力量。

PoW完成后,将块和证明发送回节点的区块链,然后它将更新广播以验证证明是否正确,其他节点也将验证块的答案在其节点中也是正确的,如果它在一定比例的节点中有效(在比特币中为51%),它将验证交易,这称为共识。 每当更改块或发送新交易时,都会发生此过程。

在幕后,发生的事情是, 当更改或创建一个块时,该块将具有一个新的哈希您必须对其进行挖掘以再次对其进行验证 。 众所周知, 每个块都引用了在他之前挖出的块的哈希值 ,现在假设我更改了一个块,该块位于区块链上最后一个块的后面10个位置,则必须再次对其进行挖掘,因此它是哈希值将会改变,下一个区块将丢失它的引用,因此也必须再次对其进行挖掘,并且哈希也会发生变化……您得到了一个故事, 我必须挖掘10个区块以使我的区块链有效 ,这需要很多时间 (真的),并且,让我假设我这样做。 当我将我的节点广播到整个区块链时, 它不会通过,因为其他人的节点是不同的所以不会达成共识。

但为什么? 为什么有人要运行一个节点来维护区块链的完整性? 答案很简单, 通过运行节点,矿工将获得两种类型的奖励:新金额的货币或交易费用。

例如,在加密货币世界中, 货币具有镇流器的功能 ,它们会向矿工生产和交付新硬币,以作为浪费时间的奖励 ,并随着时间的流逝而验证交易 (或以太坊为例)的货币奖励不断下降,为货币创造价值。 另一类奖励称为“ 交易费用 ”,就像在交易中收取的费用,然后将其发送给矿工 。 随着时间的流逝,挖出更多的硬币,交易成本就越大。 例如,在以太坊中,此成本称为天然气。

股权证明

从长远来看,工作量表存在一个问题 ,我们知道随着时间的推移,代币的发行量会减少矿工获得的奖励也 随之 减少矿工计算成本保持不变或增加 。 这给网络造成了问题, 矿工的采矿动机减少了 ,离开了网络,更少的矿工交易需要更多的时间来处理,花费更多并且更容易受到控制 。 这种控制方式的一个例子是51%的攻击(对于比特币而言),在具有以下特征的网络中,矿工在网络上具有超过51%的计算能力,并且仅能验证其期望的交易。很多矿工几乎是不可能的。

PoS(Proof-Of-Stake)是解决该问题的方法,它试图将采矿能力释放给矿工持有的硬币比例 。 在这种情况下, 如果一个矿工拥有所有比特币的5%,他将只能开采所有区块的5% 。 同样,进行51%的攻击也没有意义,因为该矿工也已经在网络上进行了投资,如果他进行攻击,那么硬币或代币的价值就会下降,因此他将蒙受损失。 在以太坊的PoS项目Casper中,想法是, 牛排持有者不愿使用计算能力来解决难题,而是在他认为将在区块链中 “通过”的区块上“ 下注” ,如果通过,他将获得奖励(仅交易费用),这是在Casper的PoS实施中验证区块链的方式。 使用这种PoS方法,计算量要低得多, 因此“挖矿”价格将减少。

在卡斯珀(Casper)中,矿工被称为“验证人” ,每个区块都有权益池,如果利益相关者将赌注押在无效区块上,他们可能会丢失代币。

地址,钥匙和交易

了解了什么是区块,挖矿和交易的基本周期等概念后,我们可能希望踏入一些使区块链更加有趣的关键概念。 在我看来,一个很好的起点是了解什么是钱包 ,它们的构成和目的。

在现实世界中, 钱包是您存钱的地方 ,在区块链世界中并没有太大区别 。 在区块链钱包中,您拥有公用地址,私钥和余额 。 钱包可以运行区块链的节点 ,也可以使用第三方节点。 这些就是所谓的全节点钱包和轻钱包

私钥主要是您需要访问和控制您的加密货币或令牌的代码 ,您可以通过公钥接收代码,但可以通过私钥进行控制。 可以使用算法生成私钥,然后将其转换为哈希。 如前所述,公共地址是人们可以向您汇款的地方,它具有平衡性,就像在糖果示例中一样,不同之处在于它也是一个哈希。

例如,在比特币中 ,您可以使用SECP256k1曲线通过ECDSA (椭圆曲线数字签名算法)秘密指数(私钥)生成PK(私钥) ,然后将秘密指数/私钥转换为base58check格式PA(公共地址)称为P2PKH ,缩写为“ Pay to Public Key Hash”。 公钥是通过以您的私钥为基础的数学算法生成的 ,尽管仅知道您的PA不可能发现您的私钥。 每个钱包软件都可以生成一个P2PKH,这不是一个不可能完成的任务,而仅仅是加密操作的简单组合。

我们都知道我们有钱包来进行交易(后来您会发现交易不一定需要涉及货币,它们可以是合约),这就是区块链的重点。 正如之前所简要介绍的那样, 区块链交易经历了许多待验证的阶段

要提交交易,您必须向区块链提供一定数量的信息,例如,在以太坊中,这是我们需要发送以请求交易的代码:

  var Web3 = require('web3'); 
web3 =新的Web3.providers.HttpProvider('yourProviderHere'));
var Tx = require('ethereumjs-tx'); \\交易库
var privateKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109','hex')\\用户私钥

var rawTx = {
随机数 '0x00',
gasPrice '0x09184e72a000',
gasLimit '0x2710',
'0x0000000000000000000000000000000000000000000000',
“ 0x00”,
数据 '0x7f7465737432000000000000000000000000000000000000000000000000000000000000000000600057'
}

var tx = new Tx(rawTx);
tx.sign(privateKey);

var serializedTx = tx.serialize();

// console.log(serializedTx.toString('hex'));
// 0xf889808609184e72a00082271094000000000000000000000000000000000000000000000080a47f7465737432000000000000000000000000000000000000000000000000000000000000000000000000571571ca08a8bbf888cfa37bbf0bb965423625641fc956967b81d12e23709cead01446075a01ce999b56a8a88504be365442cece93e7d43d

web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
.on('receipt',console.log);

在这个例子中,我使用以太坊的Web3,这是处理以太坊区块链的JS库,并且我还使用了以太坊JS-TX,一个用于处理和创建交易的模块。

解释事务对象rawTx属性:

  • nonce -发送地址的交易次数。
  • gasPrice —在以太坊中,交易的发送方设置了矿工可以接受或不接受的天然气价格,这导致围绕天然气的市场出现,通常为’0x14f46b0400’或90 GWei。
  • gasLimit —事务使用的限制,默认值为’0x55f0’或22000 GWei。
  • to —收件人的地址。
  • value-您要发送的以太币数量。
  • data —包含合同上函数调用的数据的数据;如果是合同创建交易,则包含初始化代码。 (在下文中会作更好的解释)-此字段是可选的。

发送完之后 交易将被广播到网络,矿工使用PoW挖掘交易的区块,然后将区块和PoW发送回本地区块链,然后将其广播到网络并检查共识完成后,新区块将加入整个区块链。

以太坊,合约和Dapps

有些概念和功能因区块链而异, 以太坊项目就是一个例子。 它也是像比特币这样的公共区块链项目,但是它有不同的目的,以太坊不仅提供交易,还提供了新的可能性,即智能合约。

智能合约以一种非常简单的方式进行, 即可以将代码放入其中区块链交易 。 您可以为使用智能合约交易设置业务规则,例如,如果我想与5个人进行货币分割,而不是将分割后的金额分别发送到每个钱包,我可以创建一个智能合约来对以太币进行分割我将其发送到这5个钱包中,这只是最简单的示例。 这些合同是不可变的,并且具有可以调用,扩展甚至创建新合同的实例 ; 它们的工作方式与OOP中的对象类似。 以太坊的一个有趣的部分是, 合约不一定需要接收以太币,您可以拥有甚至不涉及单个以太币的合约,并且在整个过程中, 人们可以使用合约来规范诸如承诺,发货之类的事情以及其他需要保证且通常不受人民和国家监管的事物。

在私有机构中有一些用于实施区块链的项目,例如Quorum以太坊的一个分支,致力于将区块链技术应用于私有公司因此,公司和机构可以构建在区块链上运行基于合同或分类账的应用程序,这些就是所谓的Dapps (去中心化应用程序)。

Dapps专注于利用区块链具有的一致性和诚实性,并尝试将其应用于其他领域。 一个例子是人们可以拥有一个可以准确显示您的数据流的社交网络 。 诚实对待合同,并让您确切知道您的信息将要发生什么,这是Dapps的一种非常有用的工具。 它们也非常适合分散,组织和清除层次结构 ,例如,您可以在基于合同的软件上运营整个公司, 每条数据流都通过合同传递,合同是诚实的,并且确切地知道如何处理您的数据或任务。 这样可以确保数据始终具有相同的流,并且信息将可用并且几乎不会被破坏。 许多 现有的确保信任和诚实的社会立场现在可以被区块链技术提供的保险所取代。

Dapp案例

IBM和马士基(Maersk):这些公司正在共同努力,以简化和有效利用区块链技术来发展全球供应链。 他们的计划是实施一个全球贸易平台,该平台利用区块链确保跨不同环境的信息,简化手工制作的流程,并以一种在需要时始终存在的方式分发信息,可信赖性和简单性是关键目标。

摩根大通的Quorum: Quorum是以太坊的一个分支,这是一个在私有环境下实施区块链的项目。 它旨在介于私人和公共领域之间,以处理衍生工具和支付。 它的重点是满足希望获得财务信息的监管者,同时仍保护不希望其身份和交易被披露的各方。 您可以在此处阅读文档。

结论

在这篇小文章中,我试图向您介绍区块链技术的基础知识,了解区块链并非易事。 我花了一些时间来理解这些概念,但我仍然对很多理论不了解。 尽管在大约一个月的时间里研究了这项技术,但我已经可以说我爱上了它,但颠覆性的概念却改变了游戏规则,它可以以非常不同的方式看待未来,而技术将使它变得更好。

区块链技术仍在起步,我们仍然不知道它的全部潜力,但是我们已经知道它很棒。 这是我系列的第一部分。 第二部分将带来有关如何与区块链交互代码的更多实用信息。 希望你喜欢它。

资料来源

https://zh.wikipedia.org/wiki/工作量证明系统

https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/

https://blockgeeks.com/guides/blockchain-consensus/

https://www.investopedia.com/terms/1/51-attack.asp

https://www.investopedia.com/terms/b/blockchain.asp

https://www.investopedia.com/terms/p/private-key.asp

https://www.investopedia.com/terms/b/blockchain-wallet.asp

https://bitcoin.stackexchange.com/questions/1389/how-are-public-private-keys-in-an-address-created

https://bitcoin.stackexchange.com/questions/25024/how-do-you-get-a-bitcoin-public-key-from-a-private-key

https://github.com/ethereum/wiki/wiki/Ethash

https://github.com/ethereum/wiki/wiki/采矿

https://ethereum.stackexchange.com/questions/14/what-proof-of-work-function-does-ethereum-use

http://sammantics.com/blog/2016/3/6/how-transactions-are-validated-on-a-shared-ledger

https://bitcoin.com.au/page/popular-blockchain-consensus-mechanisms-work/

https://medium.com/@xbsoftware/smart-contracts-industry-examples-and-use-cases-for-business-df046dc097f2

https://blog.ethereum.org/2015/12/28/understanding-serenity-part-2-casper/

https://coinsutra.com/private-blockchain-public-blockchain/

像我五岁一样解释区块链和比特币
来自DEV社区。 分享想法,使我们成为更好的开发人员。 开发到 像我五岁时解释以太坊
来自DEV社区。 分享想法,使我们成为更好的开发人员。 开发到