本课程的目的:熟悉以太坊区块链的原理,其应用领域和基本术语。
练习题:本课未提供。
今天几乎没有软件开发人员对区块链技术,加密货币(Cryptocurrency或Crypto Currency),比特币(Bitcoin),初始代币发行(ICO,初始代币发行),智能合约一无所知。 (智能合约)以及与区块链相关的其他概念和术语。
区块链技术开拓了新市场,并为程序员创造了就业机会。 如果您了解加密货币技术和智能合约技术的所有复杂性,那么在实践中应用此知识就不会有问题。
我必须说,围绕加密货币和区块链的猜测很多。 我们将搁置关于加密货币汇率变化,金字塔的创建,关于加密货币立法的复杂性等问题的讨论。 在我们的培训课程中,我们将主要侧重于以太坊区块链智能合约(以太坊,以太坊)应用的技术方面以及所谓的分布式应用程序(DApp)的开发。
什么是区块链?
区块链(Blockchain,Block Chain)是以特定方式连接的数据块链。 链的开头是第一个块,称为创世块或创世块。 其次是第二个,然后是第三个,依此类推。
所有这些数据块都会在区块链网络的众多节点上自动复制。 这确保了区块链数据的分散存储。
您可以将区块链系统想象为大量节点(物理或虚拟服务器),它们相互联网并复制数据块链中的所有更改。 这就像一台巨大的多服务器计算机,并且这样一台计算机(服务器)的节点可以分散在世界各地。 您也可以将您的计算机添加到区块链网络中。
分布式数据库
区块链可以想象成复制到区块链网络所有节点的分布式数据库。 从理论上讲,只要至少一个存储区块链所有块的节点在运行,区块链就可以运行。
分布式数据注册表
区块链可以想象为数据和操作(交易)的分布式注册表。 这种注册表的另一个名称是分类帐。
您可以将数据添加到分布式注册表中,但是不能更改或删除它。 尤其是通过使用加密算法,用于向链中添加块的特殊算法以及分散的数据存储来实现这种可能性。
在添加块并执行操作(事务)时,将使用私钥和公钥。 他们通过仅允许他们访问其数据块来限制区块链用户。
交易次数
区块链将有关操作(交易)的信息存储在块中。 同时,已经完成的旧事务无法回滚或更改。 新事务存储在新添加的块中。
因此,整个交易历史可以在区块链中保持不变。 因此,区块链可以用于例如安全地存储银行业务,版权信息,房地产所有权的变化历史等。
以太坊区块链包含所谓的系统状态。 随着事务完成,状态从初始更改为当前。 事务以块形式编写。
公共和私有区块链
应该注意的是,上述所有情况仅适用于所谓的公共区块链网络,该网络不能由任何个人或法人,国家机构或政府控制。
所谓的私有区块链网络在其创建者的完全控制下,在那里一切皆有可能,例如,完全替换链中的所有区块。
区块链实际应用
区块链能做什么呢?
简而言之,区块链使您能够在彼此不信任的人或公司之间安全地进行交易(交易)。 记录后不能伪造或替换记录在区块链中的数据(交易,个人数据,文档,证书,合同,发票等)。 因此,您可以在区块链的基础上创建各种文档的可信分布式注册表。
当然,您知道加密货币系统是基于区块链创建的,旨在取代普通纸币。 纸币也称为法定货币(来自Fiat Money)。
区块链提供区块中记录的交易的存储和不变性,因此它也可以用于创建加密货币系统。 它包含了不同用户(帐户)之间加密货币资金转移的全部历史记录,并且可以跟踪任何操作。
尽管加密货币系统内的交易可能是匿名的,但提取加密货币并将其兑换成法定货币通常会导致披露加密货币资产所有者的身份。
所谓的智能合约,是在以太坊网络上运行的软件,可以自动完成交易并控制其执行过程。 如果使用以太币加密货币进行交易付款,这将特别有效。
以编程语言Solidity编写的以太坊区块链和以太坊智能合约可用于例如以下领域:
- 代替公证的文件;
- 存放房地产登记册和与房地产交易的信息;
- 存储有关知识产权的版权信息(书籍,图像,音乐等);
- 建立独立的投票系统;
- 金融和银行业;
- 国际物流,跟踪货物流动;
- 个人数据的存储,类似于身份证系统;
- 确保商业领域的交易;
- 存储体检结果以及规定程序的历史
区块链问题
但是,当然,并非所有事情看起来都那么简单!
在将数据添加到区块链之前验证数据存在问题(例如,它们是否是伪造的?),用于区块链的系统和应用软件的安全性问题,使用社会工程方法窃取对加密货币钱包的访问权限等问题。 .p。
同样,如果这不是关于其节点分散在世界各地的公共区块链,而是关于一个人或组织拥有的私有区块链,那么这里的信任度将不会高于此人或这个组织的信任度。
还应该记住,区块链上记录的数据对所有人都可用。 从这个意义上讲,区块链(尤其是公共区块链)不适合存储机密信息。 但是,无法更改区块链上的信息这一事实可以帮助防止或调查各种欺诈活动。
如果您为使用加密货币付费,则去中心化的以太坊应用程序将很方便。 拥有加密货币或准备购买加密货币的人越多,将获得越来越流行的DApp应用程序和智能合约。
在阻碍区块链实际应用的常见问题中,可以提到添加新区块的速度有限以及交易成本相对较高。 但是该领域的技术正在积极发展,并希望随着时间的流逝解决技术问题。
另一个问题是,以太坊区块链智能合约在隔离的虚拟机环境中工作,无法访问真实世界的数据。 特别是,智能合约程序无法从站点或任何物理设备(传感器,联系人等)本身读取数据,也无法将数据输出到任何外部设备。 在专门针对所谓的Oracle(智能合约的信息中介)的课程中,我们将讨论此问题及其解决方法。
还有法律限制。 例如,在某些国家/地区,禁止使用加密货币作为付款方式,但您可以将其作为一种数字资产(如证券)来拥有。 这些资产可以在证券交易所买卖。 无论如何,在创建使用加密货币的项目时,您需要熟悉项目所属国家的法律。
区块链链如何形成
正如我们已经说过的,区块链是一条简单的数据块链。 首先,形成此链的第一个块,然后向其添加第二个块,依此类推。 假定事务数据存储在块中,并添加到最后一个块中。
在图。 1.1我们展示了一系列块的最简单版本,其中第一个块是下一个块。
图 1.1。 简单的块顺序然而,在该实施例中,很容易伪造链中任何块的内容,因为这些块不包含任何防止更改的信息。 鉴于区块链旨在供不信任的人员和公司使用,我们可以得出结论,这种为区块链存储数据的方法不适合。
让我们保护块免受伪造。 在第一阶段,我们将尝试通过校验和保护每个块(图1.2)。
图 1.2。 添加带有校验和的数据块保护现在,攻击者不能只更改一个块,因为它包含块数据的校验和。 检查校验和将显示数据已更改。
要计算校验和,可以使用哈希函数之一,例如MD-5,SHA-1,SHA-256等。 由于对数据块执行不可逆的操作,哈希函数计算出某个值(例如,作为恒定长度的文本字符串)。 操作取决于哈希函数的类型。
即使数据块的内容有很小的变化,哈希函数的值也将发生变化。 通过分析哈希函数的值,不可能还原为其计算了该数据块的数据块。
这样的保护是否足够? 不幸的是,没有。
在此方案中,校验和(哈希函数)仅保护单个块,而不保护整个块链。 知道哈希函数计算算法后,攻击者可以轻松地替换块的内容。 同样,没有什么可以阻止他从链中删除块或添加新块。
为了从整体上保护整个链,可以将每个块中前一个块的数据散列与数据一起存储(图1.3)。
图 1.3。 将前一个块的哈希添加到数据块在此方案中,要更改块,您需要重新计算所有后续块的哈希函数。 看来是什么问题?
在实际的区块链中,还会增加额外的人为困难,以增加新的区块-使用需要大量计算资源的算法。 鉴于要更改一个块,不仅需要计算一个块,而且还需要计算所有后续块,所以这样做非常困难。
还记得区块链数据存储(复制)在许多网络节点上,即
使用分散存储。这极大地增加了假块的复杂度,因为 必须对网络的所有节点进行更改。由于这些块存储有关前一个块的信息,因此您可以检查链中所有块的内容。以太坊区块链
Ethereum , DApp. , Ethereum (-, smart contracts), Solidity.
2013 , Bitcoin Magazine, 2015 . , , Ethereum - Solidity.
(mining) , « ». , .. Ethereum.
, , (miner).
(), , Nonce, -, . Ethash, Ethereum, Nonce .
Nonce, (PoW, Proof-of-work). , Ethereum, — Ether. 5 Ether, .
, Ethereum , , . , Solidity DApp Ethereum.
, . , , .
. — ( ), . , Ethereum - Solidity. , , ..
, . , , , , - , , .
. . , , .