跳转至

区块链揭秘

版权所有 2021 Henrique Centieiro。保留所有权利。

初版

作者:恩里克·森特伊罗

国际标准书号:978-988-75671-0-3(平装本)

978-988-75671-1-0.(电子书)

“我很高兴 Henrique 描述了区块链技术的真正含义,或许也是为什么第五次工业革命将被点燃的原因。在你消化了这本书丰富而深刻的内容后,让我们系好安全带,准备迎接即将到来的创造性破坏浪潮。”

Emil Chan,金融科技传播者

“作为过去几年与亨利共事过的人,我对区块链/DLT 有着同样的热情和兴趣,这本书内容丰富,见解深刻,读起来也很愉快。”

汇丰银行技术主管 Timothy Shum

“区块链空间在不断发展,我很高兴向那些希望在去中心化的新时代茁壮成长的人推荐亨利克的新书,这是他们的必读之作!”

xccelerate.co 首席执行官 Lavine Hemlani

“在区块链行业,我们需要这样一本书。非常翔实和有趣的阅读。由从业者 Henri 撰写的 Unblockchain 对于任何想了解区块链技术的基本原理及其重要性的人来说都是一本完美的书。强烈推荐。”

Edmund To,高级技术建筑师,ConsenSys

“对于任何寻求深入了解区块链技术的人来说,Unblockchain 是一个无价的信息来源。它涵盖了所有主要的技术和经济方面以及最新的趋势,如 NFTs 和以太坊 PoS。读这本书轻松、愉快、有趣!”

Mikhail Miro,LOC Game 首席执行官

“这本书来得再及时不过了。Henri 做了一项惊人的工作,揭开了关于区块链的炒作和神话,同时仍然为这项技术的无处不在提供了一个令人信服的案例。这本书提供了足够的信息,以一种有趣和易于理解的形式帮助读者从新手到专家的飞跃。任何希望驾驭工业 4.0 发展的复杂性和细微差别的技术公司领导者的必读之作。”

Hessner 技术有限公司首席执行官兼创始人 Kwadwo Konadu Ansah-Antwi(博士)

“这是一本了解区块链基础知识的好书,同时也有必要的技术见解来了解区块链到底是什么。它用简单易懂的语言写成,读起来也很有趣。”

VTC 集团首席执行官 Frank von Thun

如果你喜欢这本书,你也会喜欢我在 Udemy 上的 Unblockchain 在线课程!从比特币到以太坊,区块链的大脑友好课程。您可以了解关于技术、使用案例和优势的一切!点击此处查看促销链接:https://www.udemy.com/course/draft/3849992/?referral code = b 8463 ee 382 e6d 313304 b

目录(摘要)

前言

关于作者

简介

区块链——为什么、做什么、怎么做?

区块链用例

区块链技术深潜

区块链架构

以太坊深潜和节点部署

The blockchain technology deep dive

Blockchain Architecture

目录(实物!)

第 1 章

厌倦了面对同样的问题?你听说过很多关于区块链的事情,但是区块链和传统数据库之间到底有什么区别呢?区块链和 DLT 有什么不同?本节将为您提供一些基础知识,并向您展示区块链技术的关键概念。您还将了解区块链的优势,以及什么是好的区块链用例。

区块链——为什么、做什么、怎么做?

去中心化还是分布式?

那么,我们为什么需要分布式账本技术或 DLT 呢?

为什么我们需要分散的系统?

介绍分布式账本技术

什么是好的区块链用例?

拥有分散式信任系统

分散系统的安全性、完整性和隐私问题

区块链的好处

共识与真理

脱媒

保密

健壮性和可用性

可核查和可审计

区块链炒作

第二章

等等,我们又在讨论用例了吗?是的,但是现在让我们看一些市场上现有的区块链使用案例的例子。作为一个例子,我们将只涉及几个用例,因为要涵盖所有的用例,我将不得不写一本 2000 页的书(可能比《耸耸肩的阿特拉斯》和所有《指环王》加起来还要多)。

区块链用例

采购订单融资-(采购订单融资)示例

钻石供应链

IBM 食品信托和食品可追溯性项目

数字化供应链生态系统

智能合约

借款

借贷

稳定的声音

分散交易所

fin tech 中的区块链

采用区块链有哪些障碍?

第三章

现在事情越来越严重了!这一部分将澄清与该技术相关的任何困惑。我们要去区块链的底线,看看所有的区块链组件在这里,你将更接近成为区块链专家!现在,严肃地说,我们的目标是获得一些正确的关键概念来驾驭区块链技术。

区块链技术深潜

什么是区块链?

区块链的种类

侧链

获得许可的区块链

分布式总账

区块链 VS 加密货币

区块链组件

地址

交易

交易费用

图灵完成

阻止

街区探险家

智能合约

神谕

共识

确认

加密货币

哈希函数

dApp(或 DAPP)

难度

数字签名

多重签名

双倍支出

以太坊

EVM

测试网

叉子

软叉

硬叉子

哈希速率

采矿

钱包

公钥

CPU 挖掘、GPU 挖掘和 ASIC 挖掘

挖掘算法

第四章

共识机制,密码学,素数,随机数,数学和哈希?!别担心,我保证这部分会比去看牙医更刺激!你将学习和玩一些非常酷的东西。读完这一章,你将成为世界上最了解区块链的前 1%的人。

区块链架构

数字签名

共识机制

工作证明

股权证明

dpo 股权委托证明

燃烧证明

实用拜占庭容错

经过时间的证明

重要性的证明

密码学

哈希算法

第五章

如果你想把事情做好,你最好自己去做!这一部分实际操作非常多。您可以只读,但是如果您部署自己的节点并使用它,效果会更好。我相信这部分会很有趣!!

以太坊深潜和节点部署

以太坊街区

在云上部署以太坊节点

探索以太坊街区

玩 Python 和 eth 序列化

计算难度

交易收据

气体和气体极限

以太坊区块链中的积木类型

日志和交易明细

挖掘以太坊

区块开采——以太坊工作证明

与 ECDSA 签订交易

以太坊 geth 上的挖掘

采矿-附加考虑

【T10

Mining on Ethereum geth

前言

披露:所表达的观点纯属个人观点,并不反映本书作者所属或相关的任何组织的观点或想法。

未来是分散的。在数百年依赖大机构作为中间人之后,互联网和区块链正在改变人们做生意的方式。这些新技术带回了物物交换系统,让互不相识的人;他们在世界的不同地方。说不同语言的人。他们最终可能不信任彼此,在同一个系统中彼此之间放心地进行交易。区块链的魔力可以在社交商务网络中将人们联系在一起。以太坊能成为商业的新脸书吗?

区块链肯定会存在。2021 年,比特币诞生 12 年后,我们终于看到区块链和加密货币的大规模采用。许多大公司要么购买加密货币,要么采用区块链技术。你听说过万事达卡、脸书、Paypal、Microstretagy、Square、Diginex、Telsa 和许多其他大公司在加密领域大放异彩吗?那么所有正在试验或使用区块链解决方案的金融机构呢?

该图属于 Amplify transforming Data Sharing ETF,股票代码 BLOK。它基本上是一个区块链 ETF,这意味着它的投资组合是由那些与区块链技术打交道的公司组成的。这只 ETF 在一年内的回报率超过了 150%。大家都知道 crypto(比特币、Dogecoin、以太等。)在 2020 年和 2021 年初获得了惊人的回报,但考察投资区块链科技的公司也很重要。

The growing demand for blockchain technology leads us to increase demand for blockchain jobs. Blockchain developers, software architects and project managers are among the most best well-paid jobs in the market with continuously growing demand. The blockchain space is, however, quite complex to navigate with many different blockchain technologies and different industries. Should I learn about public blockchains or private blockchains? Should I invest my time developing applications for cryptocurrencies or private business networks? Should I be learning about Dogecoin or Corda?

This book will guide you through the technologies that are used in both public and private blockchains. What are the use cases and what makes a good blockchain use case, how are blockchain business networks composed, the technologies used such as cryptography, hashing, public key infrastructure, how to deploy a node and much more.

Join me in this big leap to the blockchain world!

The growing demand for blockchain technology leads us to increase demand for blockchain jobs. Blockchain developers, software architects and project managers are among the most best well-paid jobs in the market with continuously growing demand. The blockchain space is, however, quite complex to navigate with many different blockchain technologies and different industries. Should I learn about public blockchains or private blockchains? Should I invest my time developing applications for cryptocurrencies or private business networks? Should I be learning about Dogecoin or Corda?

About the author

For a few years, I (Henrique, you can call me Henri) have been working in blockchain, project managing different blockchain projects from eCommerce to supply-chain and trade finance. Working as a Senior Project Manager for HSBC, I have successfully supported the implementation of blockchain and fintech solutions for trade finance and for the fintech industry. Experienced in Ethereum, Hyperledger Fabric, Corda and other technologies, I have also been providing blockchain training to different institutions and the fintech community and universities. With 15 years of experience in the financial industry (18 years to be exact if we start counting since the first forex and stock investments), I am extremely passionate about new technologies, cloud, fintech and AI’s future, my girlfriend’s silly jokes, dogs and underground hip-hop.

Introduction

The blockchain is a distributed database that is used to record data (assets, transactions, etc), has characteristics such as consensus, provenance, immutability, finality and the blocks of data are connected with hash functions and uses cryptography — Me

This book will discuss blockchain protocols, how blockchains are architected, the main technology components such as cryptography, hashing, applications, and the constraints and limitations of this technology.

I will help you to understand when to use blockchain, the key concepts, the industry jargon, and a lot of additional information that will help you to interact with stakeholders in any blockchain project you may get involved.

这本书的某些部分可能有点技术性,但是任何有一些基本 it 经验的人都能够理解。不管你的背景如何,在你读完这本书后,你将能够参与任何区块链项目。

区块链项目正在为许多行业带来好处,包括大幅降低成本、提高效率、透明度和安全性,以及开发新的商业模式和机会。

比特币,也被称为“互联网神奇货币”,有很多炒作,并吸引了公众的很多关注。但是区块链和比特币一样吗?

区块链是在 2008 年经济危机期间公众对金融部门失去信心的情况下产生的。比特币是 2009 年 1 月 3 日推出的第一个区块链用例,由中本聪创造。没有人知道中本聪是谁,我可以给出我的意见,但那是另一本书的主题。对此我唯一能说的是,克雷格·赖特不是中本聪。

然而,区块链是一个更广泛的概念,包括比特币和许多其他加密货币、分布式账本和数以千计的潜在应用。

区块链现在是金融科技的核心技术之一,其应用从金融科技到供应链、贸易金融、支付、保险、结算、在暗网市场买药等等。

比特币目前平均每天有 32.2 万笔交易。超过 1 亿个比特币钱包证明比特币(或许还有区块链)在普通大众中越来越受欢迎。这也是最古老的自治和分权系统,自 2009 年以来一直运行,无需中央政党的干预。它首次允许金融机构花几天时间进行全球实时结算(或近乎实时)。

有趣的事实:早在 2014/2015 年,一些葡萄牙人希望将一些交易从葡萄牙发送到巴西,以购买/销售商品,但银行转账需要近一周时间。另一种方法是联系俄罗斯交易所,由交易所派一个人从俄罗斯到葡萄牙向客户出售比特币,然后比特币被送到巴西。当时,这个过程比普通的银行转账要快得多。

区块链和其他创新一样,不是凭空出现的。区块链的创建受到了一些现有技术的启发,如加密技术、点对点网络和 BitTorrent 网络。复式簿记、数字现金概念——亚当·贝克的 Hashcash、戴伟的 B Money 和尼克·萨博的 Bit Gold 以及 cypherpunk 社区的其他项目——也有所帮助。最重要的是,比特币的产生源于一种愿望,即当银行未能做到这一点时,让世界变得更加公平、民主和分散。

区块链已经在改变我们做生意的方式。信息技术正在慢慢改善许多商业模式,创造新的商业机会,改变我们的生活方式,尽管我们大多数人甚至没有注意到这一点。区块链架构自然解决了分布式记账中的多方信任问题,有数百个用例,其中许多被认为相当成功。

我们将了解为什么区块链被认为如此安全,什么技术支持区块链,什么样的应用程序-金融和非金融-可以受益于区块链?比特币、以太坊、Hyperledger、Corda 有什么区别?区块链是如何安全的,数据是如何处理的?哈希是如何制作的?密码学的作用是什么?

图灵完全编程语言和以太坊等区块链的引入标志着区块链 2.0 时代,几乎任何东西都可以在区块链上开发。

与传统的集中式遗留系统相比,区块链的特征允许商业网络(企业或财团的不同部分)以完全不同的方式进行交易。这就是为什么区块链扰乱了这么多行业。目前从区块链中受益最大的行业是供应链、银行和金融科技、保险、健康、政府科技、注册科技、房地产、能源、零售、教育,别忘了 DeFi、筹款和 ico。

本书将帮助您:

了解共享分类帐和智能合约并将其应用到您的业务网络中

深入探索区块链技术

探索区块链建筑

  • 部署以太坊节点
  • 了解如何使用命令行界面在以太坊区块链中执行各种活动
  • 把它带到邓宁-克鲁格曲线的下一个层次
  • 希望这本书能成为你区块链学习曲线上的一个好的台阶,给你带来更多的启示,帮助你充满信心地走过生产力斜坡。
  • 我们去洞吧?!和我一起进入下一章开始吧!

第 1 章

区块链——为什么、做什么、怎么做?

Chapter 1

让我们从一个小测验开始:

为什么我们需要区块链或分散的分布式分类账?

a)因为比特币是新的黄金

b)因为狗要去月球了

c)因为区块链是一个分布式数据库,它允许各方以一种无信任和无缝的方式进行交易

这个很难回答!

首先,区块链不是一项复杂的技术。这本书的目标之一是揭开区块链技术的神秘面纱,这就是为什么我称之为“解开锁链”。我厌倦了看到区块链行业的人说这是一项非常复杂的技术,而实际上它只是一个被复制多次的数据库或分类账,因为它有一些额外的机制来确保共识的不变性。

直截了当地说,区块链是一个分布式分类账或数据库,它允许记录资产的状态,并允许可能互不了解的各方之间的无信任关系,并允许自动化合约协议。我们如何实现这一点?

作为一个分散的系统,将分类帐保存在一个对等网络中,在该网络中,所有的计算机都连接在一起,并保存分类帐的更新副本。区块链中涉及的所有节点都保持完整的分类账,并跟踪自开始以来的余额或资产。节点基本上是网络上的一台计算机,这个术语来自计算机科学。节点参与对等网络。

分类帐在许多对等节点(从几十个到几千个)之间共享,这样每台机器都可以验证单个交易并宣布交易是否有效。

魔法书比喻:

试着想象一本旧的纸质书,其中每一页都用一个代码引用上一页

这本书是区块链,每一页都是一块积木。页面上的每一行都是区块链交易

因为每一页都有编号并指向前一页,所以很容易检测到某一页是否被删除或更改

  • 页面的编号方式便于检测和防止恶意活动
  • 由于页面是堆叠在一起的,所以很难篡改旧页面
  • 分散还是分散?
  • 我们看到在区块链领域有两个术语被频繁使用和互换:去中心化和分布式。有什么区别?
  • 分布式系统不等于分散式系统。

分布式系统是指可以在不同位置存储和处理数据的系统;而分散的概念通常是指当没有一方可以决定系统如何运行或改变分布在系统中的数据时。因此,去中心化意味着没有单一的权威点来控制或决定系统应该做什么。

然而,也有集中在一个单一实体中的分布式系统。大多数大型科技公司都使用分布式系统。例如,网飞使用 AWS【I】分布式内容交付网络,但整个系统由网飞和 AWS 拥有和控制。这些实体有权在系统中执行他们希望的任何操作。

尽管分布式系统的概念类似于区块链,但这一概念比区块链要早得多,而且它们广泛应用于计算机网络中。分布式系统的另一个流行的例子是文件分布式系统,例如对等网络 BitTorrent【ii】

考虑到系统(再次)分布在许多节点上,我们可以说区块链是分布式的。与此同时,区块链(他们中的大多数)也是分散的,这意味着他们没有单点权威或单点失败,也没有单点权威来做决定。

在分布式系统中,两个或多个节点以协调的方式工作(例如,同步数据)。尽管区块链可能有几十个、几百个或几千个节点,但系统的建模方式使最终用户将它视为一个单一的逻辑系统/应用程序和一个单一的事实来源。

在区块链中,节点是分布式系统中的单个计算机或服务器。通常,节点可以在彼此之间发送和接收消息,并以对等方式连接。

由于没有单一的控制方,区块链或分布式账本是一个开放的系统,任何人都可以参与其中。分类帐完全分布在整个网络中。但是,请注意,在许可的区块链中,可以设计一个区块链,以便在需要知道的基础上进行数据共享。在许可区块链中,我们只能允许区块链网络中的一组用户读写数据。

区块链不仅仅解决数据共享问题。它还解决了信心和信任问题。在 P2P 生态系统中,个人用户(而非第三方)将决定在区块链中记录哪些信息以及如何使用这些信息。区块链允许用户以无信任的方式管理他们的身份,即不需要信任中央系统。区块链系统本身是可以信任的。迷惑?别担心,我会解释一切的。

那么我们为什么需要分布式账本技术或 DLT 呢?

到目前为止,人们需要相信一个中央集权的政党是一个可信的政党,在那里他们可以存储和跟踪我们的钱。金融系统就是一个很好的例子。该银行基本上保留了数千个集中分类账,并跟踪其客户的所有余额。银行是唯一对其客户的所有数据、交易和余额的完整性、隐私性和正确性负责的机构。

当 Alice 向 Bob 发送\(100 时,银行在发送交易之前检查 Alice 是否有足够的余额,然后更新两个帐户的余额,在 Alice 的分类帐中借记\)100,在 Bob 的分类帐中贷记$100。双方都信任银行,而且大多数时候,这种信任体系运行良好。银行也通过提供这种服务赚钱:收取费用和投资储户的钱。

与此同时,银行可能会向客户支付利息,以吸引更多的人来存款。

银行最初的业务已经发展,现在除了提供存款和贷款以外,还提供数百种服务。信任银行提供所有这些服务可以吗?大多数时候,我们确实可以信任银行,但雷曼兄弟和所有在次贷危机中倒闭的银行呢?人们对银行如何在 2008/2009 年次贷危机中放贷仍记忆犹新,当时全球有数百家银行破产,伤害了数百万储户。

尽管这本书不是关于货币体系的,但现实是,整个货币体系是由拥有印钞机(字面上)并能人为保持低利率的央行运行的,这导致了繁荣与萧条的循环。加密社区继续理想化,也许有一天,区块链会修复系统。

我理解为什么人们如此信任银行,有时甚至超过信任比特币和区块链。区块链是看不见的,而银行建筑……难道它们看起来不会永远存在吗?

比特币等区块链可以通过固定且可预测的货币供应来解决货币问题。

但区块链开始解决供应链、市场、贸易融资、分散融资和投票等许多其他问题。让我们看看全球支付的例子:区块链的一个大用例。

中间人——通常是银行或汇款公司——收取转账费用。有时费用超过转账金额的 10%

大多数情况下,他们有一个交易的最小规模,这减少了小额交易和小额支付的可能性

在一些国家,跨境支付系统不透明

  • 金融交易很慢,跨境电汇通常需要几天才能完成
  • 发送方和接收方对交易几乎没有或根本没有控制权
  • 许多金融工具缺乏透明度
  • 大多数银行产品处理时间缓慢
  • 如你所见,我们需要一个能够解决这些大问题的系统。一个能让人们减少对充当中间人的大机构依赖的系统。
  • 2009 年,中本聪提出了一个可以解决所有这些问题的解决方案:
  • 受监管(通过算法进行数学计算)以维持资产的供应

没有集中的权力机构控制资产的创建

消除对中介的需求,降低交易成本

  • 透明和防篡改,阻止任何可能的操纵或欺诈
  • 将交易速度从几天提高到几分钟,并促进非常快速的分类帐更新,无论地理位置如何
  • 当提到区块链和加密货币时,也有一些本质的特征和优势。我们将更深入地探讨这个主题,但让我们从更高的层面来看一下:
  • 分散的:没有集中的第三方控制区块链及其交易,也没有集中的管理(例外情况可能适用于许可/私有区块链)
  • 匿名(或伪匿名):根据交易信息,不可能获得用户的真实身份(例外情况可能适用于许可/私人区块链)

安全:区块链的安全性由共识机制和非常难以破解的公钥加密来保证

  • 快速(相对而言)和全球性:只要有互联网连接,就可以访问区块链。交易可以在几分钟内完成。
  • 加密货币是未经许可的,而且是公开的。世界上任何人都可以使用它们,用户的地理位置并不重要。
  • 我们为什么需要分权制?
  • 一个字:信任。
  • 众所周知,银行和金融机构几乎对所有提供的服务都收取费用。金融机构提供的服务无疑对人们建立交易和做生意的信任层非常重要。但是如果我们有更好、更快、更便宜的方法呢?

当现代烘焙系统在 500 年前被创造出来时,这个想法是革命性的。意大利文艺复兴时期创建的银行是一场技术革命。现在,区块链是挑战旧世界的新技术颠覆。

如果你在两个不同国家的银行之间电汇给你的父母,一笔小额汇款通常要支付 30 美元。与此同时,像 MoneyGram、Western Union 和 UAE Exchange 这样的汇款公司经常向想把一些储蓄汇回家的人收取 10%以上的费用。很多时候,最需要基本金融服务的人支付的费用最高。

我们真的需要这些中介吗?或者我们可以有一个透明的系统,允许在不信任中间人的情况下转移价值吗?

让一个集中的团体来混合我们的交易可能有一些优势,但它们自然会承担所有这些费用,这是集中商业模式的一部分。

还有其他问题,比如隐私问题。处理你的钱的集中方可以是中国的银行,甚至是微信(腾讯拥有的世界上最大的聊天和支付应用程序),可以查看你的余额、交易、你有多少钱和你的投资。他们可以与专制政府共享数据,他们被视为网络罪犯的一个巨大的蜜罐目标。

近年来,政府法规迫使金融机构披露客户资金。他们拥有很多次冻结资产的权力,不幸的是,在一些国家,这种权力可能以完全任意的方式发生。

如今,与数据完整性和数据安全性相关的隐私问题也是一个问题,其中网络安全并不总是集中方的主要关注点,当黑客决定利用集中方的弱点时,会导致数据泄漏。

2017 年的 Equifax 攻击暴露了 1.43 亿客户的个人数据,包括 209 000 个信用卡细节,Ashley Madison 数据泄露暴露了(非常!)成千上万使用交友网站的人的私人数据。

我们也可以谈论成千上万个与金融系统中的隐私问题相关的例子。金融机构、约会应用程序以及几乎所有处理大量个人数据的集中式服务每年都会发生数以千计的其他数据泄露或网络攻击。

集中式平台还经常使用我们的个人数据进行数据分析和人工智能,这带来了良好的结果,并利用了金融科技技术,改善了我们的日常生活,并带来了另一个风险载体。

在大多数情况下,不能保证该平台不会出售你的数据或将你的数据用于其他目的,就像剑桥分析公司在 2016 年美国大选中涉嫌操纵脸书用户一样。Brittany Kaiser 幸运地揭露了剑桥分析公司的丑闻,但其他从未公之于众的数据滥用呢?

这就是为什么创建了一些法规(如 GDPR)的原因之一,这些法规为用户提供了对其个人可识别数据(也称为 PII 数据)的更多所有权。

另一个问题是,在许多“集中世界”的业务流程中,有许多数据库或分类帐需要同步,以使业务能够发生。现有系统中有太多的瓶颈和不必要的流程冗余。例如,每次我们需要开立银行账户、订购新保险、购买汽车、在机场办理登机手续或购买房子时,我们都需要提供特定的数据子集,并一遍又一遍地重复这些数据。重复这一过程需要时间,效率低下,浪费大量纸张。

解决方案是建立一个可信的分布式账本,你可以根据之前提到的生活事件,在获得许可和需要知道的基础上分享你的数据。

引入分布式账本技术

分布式账本技术是最终给去中心化系统带来信任的技术。它具有驻留在多个计算机设备或节点上的结构。这些节点通常分布在不同的位置。

虽然分布式分类账或分布式文件系统在区块链这个术语被创造出来之前就已经存在了(例如分布式文件系统和 BitTorrent),但比特币是第一个区块链。比特币标志着一个新时代,在这个时代,现有技术被整合在一起,以构建一个区块链:带有时间戳交易、加密和共识机制的点对点网络。

DLT 需要三个组件才能工作,这三个组件是:

数据模型或数据标准

共同的语言和

用于在对等体之间建立共识系统的协议

  • 这三个要素,即数据标准、公共语言和公共协议,将允许网络中的所有节点无缝连接,使用同一种语言,并为用户提供统一的体验。
  • 大多数传统的分类账和集中式系统并不共享这三个组成部分。传统分类账可能有不同的数据标准、不同的语言和使用不同的协议。

在这个图表中可以看到一个可以应用于汽车工业的基本例子。

在这个例子中,不同的当事人有不同的分类账:制造商、监管者、物流公司、租赁公司、经销商甚至废品商。所有这些不同的分类账维护起来成本高昂,速度缓慢,容易受到欺诈、错误和网络攻击,而且效率低下。

它还需要许多集成,系统可能使用不同的语言。最重要的是,它们是不同步的,而且在相关方之间没有任何透明度。

我举了汽车行业的例子,但是我们真的可以有任何涉及多方的商业网络。

传统流程难以监控,数据分散,而且混乱不堪,问题重重:

它是昂贵的,因为它重复了在业务网络中的不同方之间更新分类帐的工作

每个参与者保持他们的分类帐,这是非常不同步的

由于欺诈、对账簿的网络攻击等事件,效率非常低且易受攻击。此外,错误很容易发生

  • 区块链可以从根本上改变这一过程,使其更加高效。在区块链的大部分地区,这项技术使互不相识甚至可能有利益冲突的各方能够高效、忠实地进行交易。
  • 上图显示了一个共享的区块链解决方案,该解决方案假设由许可的区块链启用。

如果所有这些方采用相同的区块链应用程序,则数据将根据区块链的业务逻辑和权限在不同方之间共享。换句话说,业务逻辑可以通过代表各方之间业务流的智能合约嵌入到区块链中。例如,制造商可以在分类账中“写入”新的汽车资产,而经销商可以在分类账中更新资产的所有权。

与传统系统相比,区块链可以带来更高的安全性、更好的可用性和数据完整性、减少交易时间、节省成本并帮助消除纸张。区块链也是完全可审计和防篡改的。

现在你可以看到为什么区块链是一个有许多使用案例的伟大解决方案。

我们可以将所有交易放在一个链上,每个人都可以得到一份副本并检查/审计所有交易,而不是像银行一样将所有交易保存在一个地方,或者像上面的例子一样为每个参与者保存一个不同的分类账。

这个系统给区块链带来了透明度。你可以把它看作一个系统,每个人都可以访问相同版本的数据,每个人都同意被认为是真理的东西。每个人现在都共享同一个账本。

请注意,根据区块链的设计和架构方式,不同方可能能够看到/验证交易,但最终无法修改它们。在上面的例子中,监管者可能具有只读能力,因为监管者不需要创建新的交易,而只需要监督由其他参与者创建的交易。您可以根据业务需求定制任何新的区块链解决方案。

金融机构可以从使用区块链中获得巨大的利益。例如,全球证券交易复杂、低效,而且结算时间延长。根据欧洲央行的数据,和解成本为 50 至 100 亿美元,和解成本超过 200 亿美元。区块链可以帮助降低这些成本,并将交易时间改为接近实时。

除了业务优势,区块链还可以带来其他非功能性优势,如高可用性——区块链是一个非常冗余的数据库,即复制多次,因此它具有高可用性。区块链可以提供接近 100%甚至 100%的可用性。这通常出现在公共区块链,如比特币和以太坊,但私人区块链也可以达到惊人的可用性水平。

区块链还可能带来许多其他优势——完全同步的数据库、安全性、节约成本、可验证性、可审计性和牛逼性。

区块链为参与者提供了在每次交易发生时以对等方式在整个商业网络中共享更新的能力。同时,根据业务逻辑,通过一些加密功能,参与者只能看到分类帐中与他们相关的数据。

智能合约也可以嵌入区块链电码。它们可以自动化任何业务逻辑,确定交易发生的条件或资产如何在参与者之间转移。参与者将在加入区块链网络后就具体规则达成一致——比如如何在区块链验证和提交交易的规则。这种隐含的一致是通过一种共识机制实现的,我们也将在本书中讨论这种机制。

在许可的区块链,参与者也可以同意某种离线治理监督。大多数情况下,线下治理模型是由公司或非营利组织的财团带来的。

在构建新的区块链时,我们需要讨论区块链参与者,不仅要考虑应用程序的业务逻辑,还要考虑任何区块链中都存在的一些区块链特征。商业网络上的所有参与者都能接受这些特征吗?

区块链的主要特征是来源性、不变性、终结性和一致性。让我们来看看它们:

出处:每一方都知道交易或资产来自哪里,以及所有权是如何随着时间的推移而改变的

不变性:一旦在区块链中提交,任何参与者都不能更改交易。如果一项交易是错误的,那么需要进行新的交易,这给了我们一个很好的审计线索

终结性:参与者有一个最终且唯一的地方来决定资产或交易的状态

  • 共识:参与者有一种机制来就有效的事务达成一致
  • 从众所周知的比特币到 JP 摩根的法定人数,每个区块链都有这些特征。
  • 怎样才算一个好的区块链用例?
  • 仅仅为了炒作而在项目中加入区块链这个词的时代已经一去不复返了。连柯达都公布了导致股价翻三倍的“Kodakcoin”,但是……有用例吗?

有必要构建一个逻辑决策树,以更好地了解区块链是否符合您的业务需求。

如果您的业务案例需要以下一个或多个要点,那么它可能是探索区块链技术的候选项目:

需要访问数据的多个参与者

需要一个公共共享数据库

需要提高各方共享数据的透明度

  • 需要有一个跨不同方的同步数据库
  • 相关各方可能有相互冲突的动机
  • 需要不可变的数据库
  • 商业网络的规则可以从一开始就建立
  • 需要极度冗余的数据库
  • 需要在利益相关者面前表现得很酷;)不
  • 如果你的用例符合上述一个或多个要点,那么区块链可能是正确的解决方案。也许是时候 POC 一下了!
  • 你也可以使用这个区块链决策树来帮助你做决定。

既然我们已经看了制作区块链用例需要问的问题,我们还需要看一下限制。在区块链世界,阳光和彩虹并不代表一切。

区块链在某些用例中仍然受到限制,它们可能根本不适合用作:

数据库

存储大文件或大量数据

取代纯粹的集中式数据库

  • 当不需要网络或共享数据时
  • 当需要非常高的 I/O 时(有一些延迟)
  • 只是为了让投资者或管理层觉得自己很酷
  • 停止阅读这本书,拿起纸和笔,写下你认为可能很适合区块链的用例。可以是和你的业务有关,可以是和你的公司有关,也可以是你日常生活中想解决的事情。你的商业案例通过测试了吗?它是区块链科技的好候选吗?
  • 拥有分散的信任体系
  • 除了一些例外,如区块链财团,一个单一的组织不能拥有一个分散的系统或区块链。嗯,从技术上来说,一个组织可以拥有一个区块链,但是把应该分散的东西集中起来是没有意义的。

v?在像银行这样的集中式系统中,我们相信当我们向花店汇款 100 美元(是的,我买了昂贵的花)时,银行会用这个金额更新帐户余额。去中心化的系统怎么样?

在基于区块链的分散系统中,账户余额分类账分布在互联网上的许多节点上,这些节点同意相同的信息,并允许任何人检查/验证数据,并且所有动作都是透明的。例如,在比特币区块链中,数千个节点被同步,并保持分类账不断更新。

当某人收到 0.1 比特币时,该交易会在数千个运行共识算法的节点上广播,并将该交易附加到分类账中。这些记录在成千上万个节点上共享,使得破坏或篡改数据变得极其困难或几乎不可能。假设交易在本会计账簿中共享,但会计账簿不仅仅在您的会计办公室。取而代之的是 100 或 1000 个会计师事务所的账簿。很安全,对吧?

在比特币区块链中,如果爱丽丝想给鲍勃发送 0.1 比特币,区块链节点可以很容易地验证爱丽丝是否有那么多比特币,因为账本是跨许多许多节点分布和复制的。他们发现爱丽丝确实有 0.1 BTC。当 Alice 将 0.1 的比特币发送给 Bob 时,分类帐被更新,并且更新在所有节点之间共享。

如果爱丽丝想发送 0.1 比特币,但她不拥有比特币,她不能仅仅通过黑客或贿赂几个节点来改变账本,因为大多数人必须同意。她需要贿赂或入侵数千个节点。因此,破解或更改区块链中的现有数据极其困难。

有了区块链,你可以简单地信任这个系统。

分散系统的安全、完整性和隐私问题

区块链系统中的任何一方都很难修改已经提交的事务。这就是为什么当需要各方之间的协调和信任时,区块链是完美的技术。如果你不 100%信任你的交易对手,拥有一个不可变的记录分类账是拥有一个可信的数据来源的最佳选择。

当不同方可能有一些冲突的利益或在他们之间有一些复杂的协调时,区块链甚至更有用。在这些情况下,一个分布式的分类帐,每个人都可以看到发生了什么,并且可以访问完全相同的数据,这真的很有帮助。

在决定是否在企业中使用区块链时,我们需要考虑具体的要求,没有这些要求,区块链就不是区块链。除了我们之前看到的区块链决策树,我们还需要考虑区块链也将提供:

一种共享分类帐,其中的记录仅供附加,并在整个业务网络中共享

通过加密技术对交易进行安全、加密和保护,这可能会带来设计限制

隐私,只有获得许可的参与者(在获得许可的区块链上)可以查看数据并验证交易

  • 根据特定的预定义规则在分类帐中接受交易的信任系统不能频繁改变
  • 用于包含业务条款的智能合约可能存在安全缺陷
  • 首先,让我们回顾一下什么是区块链。随着你在书中的进展,我们将越来越深入地了解区块链的不同层面。让我们把洋葱再剥一层。
  • 同样重要的是,去中心化并不是真正的区块链灾难。所有区块链都是分布式的,弹性随着节点数的增加而增加。不管是不是巧合,更多的节点也意味着更多的分散化。然而,权力下放并不是一个功能齐全的区块链系统所必需的。当我们谈论企业解决方案时,为了拥有定义良好的治理规则,拥有一定程度的集中化可能是好的。然而,例如,在许多情况下,与传统的集中式数据库相比,20 个节点可能已经被认为是相当分散的。

区块链的好处

世界上大多数著名的金融机构正在开发或已经在使用某种区块链技术。这些区块链技术带来了一些好处,如透明性、不变性、成本降低和可追溯性,这些对于一些用例来说至关重要。

尽管区块链早在 2009 年就已诞生,企业也在 2015 年左右开始探索,但它仍远未成为主流技术。许多金融机构继续通过开发区块链试点和概念验证(PoC)项目来探索业务案例。然而,一些银行和金融机构已经在使用它,我们将进一步了解。

我们谈到了降低成本和透明度,但区块链可能为企业带来哪些实际和非功能性的好处呢?

在大多数企业采用区块链的使用案例中,可以实现多种好处:

区块链可以节省时间,并将传统上需要几小时或几天的交易加速到几秒或几分钟(区块链仍然有速度限制,它无法像 Visa 那样加速需要在几毫秒内完成的交易)

区块链降低了与欺诈、篡改和网络犯罪相关的风险

区块链可以降低成本,尤其是与中介相关的成本

  • 提高可发现性,尤其是当每个人都可以看到谁是特定网络中的参与者并与他们进行交易时(例如,连接货物或商品的买方和卖方的交易平台)
  • 提高商业网络中的网络效应——网络的参与者越多,网络的价值就越大,在网络中开展业务的能力就越强。例如,当更多的银行和企业加入网络时,贸易融资应用程序就具有更大的价值。在区块链之前,贸易融资网络非常有限或根本不存在。你可以把电话看作是网络效应的一个很好的例子:越多的人拥有电话,电话就越有用
  • 通过对区块链进行编码或创建智能合约,为每个参与者在同一个共享分类帐上运行业务逻辑,从而实现流程自动化
  • 可信记录保存-未经其他参与者的同意,任何一方都不能修改或删除任何分类帐记录。共识确保了区块链中数据的不变性。
  • 你小时候玩过对讲机吗?对讲机比手机要古老得多。你可以从中得到一些乐趣,但它们通常被限制在 2 台设备上,并且你只能和一个朋友(或一个通信频道)通话。没有网络效应。然而,例如,移动电话成为第一个允许网络效果的移动通信设备。你可以和世界上任何一个拥有手机的人交谈,事实上有数十亿部手机。
  • 同样的,你可以和与你在同一个区块链网络上的任何人或企业进行交易。

网络效应给电话网络、社交媒体网络或区块链带来价值。区块链可以为原本孤立的各方带来网络效应。

共识与真理

区块链的记录能有多可信?我们在“我们信任的比特币”里说的话能像以前在“我们信任的美元”里说的那么多吗?我们能信任杰罗姆多过信任聪吗?让我们看看信任是如何来到区块链的。

在区块链的大部分地区,修改或删除数据是不可能的,因为除非根据共识机制进行更改,否则不可能让所有参与者都同意更改。迷惑?继续读!

共识机制是区块链中大多数参与者就一个值或一条数据达成一致的一种方式。

我不能让区块链网络参与者同意我拥有 1000 个比特币,而我并不拥有它。区块链这样工作是因为他们的共识机制。网络中的大多数人必须同意区块链的状态。实际上,如果我想为自己创造一个假数量的比特币,我必须获得控制权,黑客或贿赂至少 50%的比特币网络。这将花费数十亿美元和大量的资源,使它实际上不可行。

区块链不会背叛你。

在具有较少节点的较小许可区块链中,更改记录可能更容易。然而,在许可的区块链,用户用他们的真实姓名或法律实体名称来识别,通常将他们链接到法律协议。

2016 年的 DAO 黑客事件是共识机制在区块链中可以延伸多远的另一个例子。

在 1100 万以太被盗的黑客事件后,半数以太坊矿工同意归还被盗资金。相比之下,另一半人不同意恢复它,因为这需要改变已经在区块链的记录,根据许多人的说法,这不符合区块链应该如何运作的哲学。结果,以太坊区块链被一分为二:以太坊和以太坊经典。没有每个人的同意,不能简单地改变区块链。

脱媒

在某些情况下,区块链允许取消帮助他人开展业务的中间人或中介人或受信任的第三方。有许多中介的例子,但金融业是最重要的例子。有了区块链,就有可能去掉通常是中间人中间人。

我们现在可以用区块链共识算法跟踪和审计记录。

例如,我们如何验证我们正在招聘的员工的大学学位?传统的方法是雇佣一个背景调查机构。那个机构会打电话给大学核实学位。然而,也有一些限制:我们如何知道大学的电脑是否被黑了?如果我们打电话给大学,我们怎么知道我们不是在和一个被贿赂提供假信息的人说话?

在传统的集中式系统中,很难 100%准确地验证某些类型的信息,这带来了额外的风险。我们如何在不必相信大学发来的电子邮件的情况下验证大学学位?我们如何知道回复邮件的人是否可信?

我们可以把区块链作为一个不可信的系统,解决所有这些问题。

保密性

虽然区块链是一个开放和分散的系统,企业区块链系统是私人和保密的,由于加密。许多技术可以根据用户的公钥或区块链系统设置的权限来限制数据共享。Hyperledger Fabric、Corda 和 Ethereum Enterprise 等区块链提供隐私和保密功能,仅允许特定方使用证书颁发机构(CA)服务器访问数据。可以开发区块链/DLT,以便仅在需要知道的基础上共享数据。

还需要补充的是,大多数区块链公众喜欢比特币和假名。假名意味着比特币地址是用一个数字标识的,但这个数字与现实世界的身份无关。

健壮性和可用性

由于内置冗余和分散性,区块链提供了极高的容错能力。如果区块链上的一些节点宕机,不会影响数据可用性,并且区块链应用程序始终可以使用。不存在数据被擦除的风险。区块链的灾难恢复非常出色,而且健壮性随着节点数量的增加而增强。

集中式数据库有时会跨 2 到 3 个不同的数据中心进行复制,以确保高可用性和灾难恢复。但是如果您有一个复制了 20 或 2000 次的区块链数据库会怎么样呢?区块链可以实现极高的可用性和容灾能力。

比特币可能是世界上唯一一个从未有过任何宕机、10 多年来从未被黑客攻击的 IT 系统。这些特性对于关键系统来说非常好。你可以用核武器摧毁一些最大的比特币矿场,这些装满比特币矿工的大仓库,但这丝毫不会影响比特币的性能。

可验证、可审计

在区块链,任何记录和交易都由有权限的各方公开核实。当然,也可以在记录的顶部设置加密层,这样在很多情况下,无需实际访问数据就可以审核区块链数据的完整性(参见本书的哈希部分)。区块链的一个神奇之处在于,在没有看到数据的情况下,有可能确认某些数据是有效的。

例如,任何人都可以通过使用互联网上众多“区块链探索者”中的一个来查看、审计和跟踪比特币或以太坊区块链中的所有交易。这些“区块链探险者”网站是了解区块链的窗口。

如果您想在更深层次上审核区块链,您可以成为该区块链的完整节点。完整节点将下载并验证整个分类帐。我们将在本书的后面做这件事。

想象一下,您可以下载一家银行的整个数据库,其中包含所有客户的所有账户。考虑这个问题需要银行业的想象力,但这正是区块链世界发生的事情。

需要时,审计任何交易跟踪也更容易。当我们谈论保险和金融行业等受监管的活动时,这可能会特别有趣。例如,通过 reg tech【iii】technologies 和区块链,可以允许监管者在没有任何外部第三方参与的情况下审计数据。

区块链炒作

区块链无疑是一项非常酷的技术。它有许多很好的用例,可以扰乱一些行业,如支付、贸易融资、供应链、融资和其他一些行业。然而,区块链并不是万能的解决方案。在 2016 年至 2018 年期间,有一个阶段似乎区块链是治疗所有疾病的灵丹妙药。

一些项目与区块链没有太大关系,但他们可以通过 ICOs——最初的货币发行——借助区块链的炒作筹集数百万美元。现在市场更加成熟,在 IT 行业有坚实的用例、活的项目和公认的安全模式。

区块链行业也是邓宁-克鲁格效应和自称“密码专家”的受害者。当一个人在学习一个新的课题时,在最初的学习阶段后,他可能认为自己是专家,但过一段时间后(至少如果他足够聪明的话)才意识到自己根本不是专家。要真正成为这方面的专家,还有大量的学习要做。这也是为什么每次看到有人自称“区块链专家”或者“区块链大师”的时候,我都怀疑他们不太了解这个话题。

第二章

区块链用例

Chapter 2

一些最常见的用例是贸易融资、汇款、支付、数字身份、供应链以及 dapp【iv】的多种智能合约。我们看到了区块链的一些特点和优势。一个区块链用例应该适合能够从这些特征中受益的项目类别,而不是将它们作为一个约束或者瓶颈。

每个人都知道比特币和加密货币,以及它们是如何用于从 A 地向 B 地传送价值的,所以现在我认为我们应该关注其他行业用例以及其他区块链!

让我们详细看看其中的一些使用案例:

贸易金融是广泛采用区块链应用已经成为现实的行业之一。从供应链追溯、PO 融资、开户【v】、提单【VI】、信用证,所有这些都在区块链实现了数字化。

贸易融资是区块链在银行业应用的最佳例子之一。大多数贸易融资产品在过去 50 年里没有太大变化。他们继续使用大量通过快递、电话和电子邮件发送的纸张。让我们看看区块链对贸易融资的好处,以及它为什么会对该行业产生如此大的影响,并可能对其他行业产生类似的影响:

可追溯性——跟踪和交易资产的能力允许各方知道货物在哪里并降低风险

透明度——增加商业透明度。参与交易的各方可以在任何时间点检查交易的状态

可审计性-当事人可以审计区块链,该系统具有交易的审计线索。不变性功能创建数据来源,这在区块链的可审核性中起着重要作用。

  • 安全交易在网络中得到验证,参与交易的各方可以利用最佳的行业级加密技术和加密机制安全地共享数据
  • 协作——区块链可以让不同的团体在商业网络中合作,创造网络效应和规模经济。允许协作创造了更多的价值和以用户为中心的应用
  • 效率——在不同的参与者之间创建一个分布式的分类帐减少了大量与同步所有数据相关的工作。此外,贸易融资区块链应用程序与贸易数字化相结合,数字化并简化了与贸易相关的文书工作,并将完成交易的时间从几天缩短到几个小时
  • 更高的营运资本效率和缩短完成交易的时间有利于相关公司的营运资本
  • 采购订单融资-(采购订单融资)示例
  • 订单融资和发票融资是贸易融资的一大区块链用例。
  • 采购订单是买方发给卖方的文件,它描述了买方想要购买的商品以及相应的报价。

参与 PO 融资的各方有:卖方、买方和银行。PO 融资是一种短期融资形式,目的是让银行向供应商/制造商短期贷款,以便买方有足够的时间支付发票。问题是,银行通常拒绝 PO 融资,因为其中涉及的风险。存在与买方的跟踪记录/风险相关的风险。买方会支付货款吗?存在与采购订单欺诈相关的风险,其中供应商可以伪造或篡改采购订单以及其他欺诈,如重复融资,其中供应商同时向多家银行提交相同的采购订单。

如何解决这些风险?区块链!

PO 融资区块链应用程序允许不同的银行拥有一个参与网络的节点。然后,PO 数据在所有参与者之间同步,允许 PO 交易中的每个人都可以访问相同的数据,并允许为其他银行创建审计跟踪。

例如,他们之间只能共享事务的散列,从而允许他们跟踪和审计事务。哈希是抗前映像的,即不能被反向工程,提供了良好的数据保护。

提交采购订单时,数据存储在银行节点中。然后,PO 散列通过网络共享给其他银行。这样,网络中的银行就知道是否同时提交了相同的 PO,因为 PO 的散列是相同的。该机制允许银行比较采购订单,而无需实际共享采购订单中的详细信息。

在这个相同的 PO 应用和散列机制中,可以验证买方的身份存在,验证该买方的 KYC 散列,允许银行检查该买方实际存在并且具有良好的跟踪记录。

因此,在这个使用案例中,您可以看到区块链使银行能够共享数据,而不必担心违反数据法规和数据隐私。所有各方都可以使用区块链数据作为可靠的信息来源,以做出更好的信贷决策,并为每个人降低风险。

有许多供应链应用使用区块链。供应链融资,供应链可追溯性是最有用的用例之一,具有提高产品可持续性和公平贸易的用例——钻石、咖啡、棕榈油、金枪鱼和其他产品的可追溯性。

区块链在打击假冒产品和奢侈品方面也很有用。在区块链中嵌入产品的标识符(例如,NFT 或不可替换的令牌在这种情况下很有用)。

像沃尔玛/IBM 食品信托和循环这样的项目改善了许多产品的可追溯性,这有助于防止食源性疾病的传播。更好的可追溯性有助于通过快速跟踪/追踪和丢弃受影响农场的产品来拯救生命。

所有沃尔玛的新鲜绿叶蔬菜供应商目前都被要求使用区块链食品信托来记录他们供应链中的产品,我们一会儿就会看到。

钻石供应链

跟踪和追踪钻石----世界上最大的钻石公司德·比尔公司实施了一个区块链应用程序----德·比尔的信任链----来跟踪和追踪钻石的真实性,并确保它们不是“滴血钻石”。香港珠宝公司周大福也在使用区块链。周大福的 T 标志是区块链认证的钻石,附有数字钻石分级报告。

区块链申请中记录的 GIA 评分报告。

这些应用程序记录了区块链的钻石供应链和所有权。钻石的买家可以检查它的来源和以前的主人。

区块链在追踪可能与非法活动相关联的高价值资产方面发挥着至关重要的作用。如果你给你的未婚夫买了一枚钻石戒指,并且附带了区块链的数字证书,这多酷啊?!

IBM 食品信托和食品可追溯项目

沃尔玛与 IBM 合作建立了 IBM 食品信托基金。这个食品安全应用程序创建了一个由生产商、供应商、制造商、分销商和零售商组成的生态系统,为产品的供应链应用程序提供信息。

IBM food trust 是一个许可的、永久的、共享的食品系统数据记录,允许随时审计和检查任何产品的来源。为什么这很重要?在美国,一些众所周知的沙门氏菌爆发案例导致了人们生病,一些人死亡,并给行业带来了数百万美元的损失。从花生酱到生菜和菠菜,很难追踪沙门氏菌污染,这导致全国范围内撤回所有的生菜、菠菜和花生酱,以避免更多的人生病。问题是,几年前,例如沃尔玛,要花大约 7 天时间才能将一批生菜追溯到农民手中。有了 Food Trust,只需几秒钟就可以追踪产品的来源。

沃尔玛认为区块链非常适合分散式食品生态系统。为了开发该应用程序,他们与 IBM 合作,使用 Hyperledger Fabric 开发了该应用程序。

沃尔玛技术高级总监 Karl Bedwell 表示:“IBM 为我们带来了 Hyperledger 面料。我们调查了以太坊、陋居项目和其他项目。最终,我们决定使用 Hyperledger Fabric,因为它满足了我们对区块链技术的大部分需求。我们觉得这最符合我们的需要。这是一项企业级区块链技术,是经过许可的。”

IBM Food Trust 平台目前由 IBM Cloud 以 BaaS(区块链即服务)的形式提供。

数字化供应链生态系统

如您所见,区块链在供应链中有多个用例。它提供了一个数字永久的,不可变的,可审计的,显示任何产品的出处。

TradeLens 等应用提供端到端的产品可追溯性和数字化,无论他们来自哪个行业。

TradeLens 使用区块链将供应链生态系统数字化,在整个供应链中的单一应用程序中实现信息共享和协作。全球最大的航运公司马士基是 TradeLens 的主要合作伙伴之一。供应链中的每个参与者都可以完全了解货物通过区块链的过程。

过去,运输文件通过快递、电子邮件、传真、烟雾信号和 EDI 电子数据交换(一项有 50 年历史的技术)来共享。

Tradelens 正在改变这一点。一个单独的应用程序就可以跟踪与商品供应链相关的所有关键数据,并在区块链将它们全部数字化。该应用程序还允许与 API【VII】集成,以便制造商和供应链中的其他人可以无缝地参与到不可变的透明记录中。TradeLens 的首批大合作伙伴之一是经营香港港口的香港现代货箱码头有限公司(Modern Terminals)。在这种情况下,像现代码头这样的港口将与集装箱状态相关的数据输入 TradeLens。这些数据来自港口的 TOS -终端操作系统和许多监控货物移动的 RFID【VIII】

海关、批发商、运输公司和银行等其他实体也参与了 TradeLens 供应链。

其他应用程序,如出处或 Skuchain,也是供应链跟踪的区块链应用程序的有趣示例。origination 是一个在产品旅程中收集产品信息的应用程序,而 Skuchain 是一个跨多个供应链层级收集数据和跟踪库存的应用程序,它增强了对生产计划以及原材料来源和质量的控制。

等高线——区块链信用证

轮廓在我心中有着特殊的地位。Contour 是由 8 家银行组成的财团开发的信用证应用程序。其目标是无缝连接信用证流程中的四方:买方、卖方、开证行和指定银行。

为什么这很重要?信用证是贸易融资的重要产品。它们促进了通常位于不同国家的公司之间的贸易。然而,信用证通常又慢又麻烦。这个过程在过去的 50 年里没有太大的变化,但那是在区块链到来之前。

Contour 使用 Corda DLT 连接信用证参与者的节点,并允许他们在需要知道的基础上共享数据。交易是完全透明的,完成交易的时间可以从 2 周减少到几天或更少。

Contour 和其他贸易融资应用程序不仅带来了交易的完全可见性和可审计性,而且通过将所有文档数字化到区块链中节省了大量纸张。

自 2021 年 2 月 Contour 推出其商业化版本以来,企业和银行正在加入该网络,利用潜在的网络效应,帮助世界各地的公司相互交易。

智能合约

智能合约支持对事件进行编码。智能合约是自动执行合约条款的计算机程序。它们需要在虚拟机上运行,比如 EVM -以太坊虚拟机。EVM 是一个图灵完全去中心化的平台,运行智能合约,没有停机、审查、第三方干扰或欺诈的可能性。智能合约可以在多个公共和私有区块链中开发。稍后我们会读到更多关于智能合约如何工作的内容。

智能合约实际上是区块链上任何自动化的使能器,将业务逻辑带到任何用例中,并且有许多这样的用例。你能想到的任何事情都需要不同的参与者或不同的商业团体。这只是一个高层次的列表:

分布式云存储

SIA,斯托尔,菲力考恩。这些是区块链应用程序,允许用户租用他们计算机中的存储容量。你可以把它看作一个分散的收存箱

  1. 房地产交易

总部位于纽约的科技公司 Shelter Zoom 开发了一个房地产平台,该平台使用区块链技术来简化端到端的房地产流程。买家和卖家可以在区块链应用程序中提交报价,简化房产交易。

在区块链支付工资

  1. BitWage 是一家(大型)薪资提供商,允许公司用比特币或其他加密资产(如美元币(USDC))支付员工工资。与传统银行相比,Bitwage 可以大幅削减银行转账相关费用,并加快支付处理速度。使用稳定币支付工资越来越受欢迎,因为与比特币等加密货币相比,它消除了与波动性相关的风险。这也是一个很好的选择,向当地货币遭受大规模通货膨胀和贬值的国家进行支付,如委内瑞拉玻利瓦尔或阿根廷比索。在这些市场中,加密支付的使用有助于为当地社区提供更大的稳定性。

电子投票

  1. 区块链似乎是在线投票的理想技术——或者至少是比我们在 2020 年总统大选中看到的一塌糊涂的邮政投票更好的方法。区块链采用加密技术,仅附加记录,可审计性和不变性是注册选票信息的理想选择,可通过互联网传输,作为邮政投票的替代方案。

  1. 西弗吉尼亚州、犹他州和丹佛县过去已经允许海外军事人员通过他们的手机使用区块链投票。然而,一些安全专家对在线或手机投票不太有信心,他们认为用户的设备或选举办公室的计算机可能会感染恶意软件或遭受 DDoS 攻击,从而中断服务并可能改变选举结果。

Voatz 在强大的区块链上为预先注册的用户使用 MFA -多因素认证-指纹和面部识别。该应用程序对区块链上的所有个人身份数据和投票结果进行加密。

爱沙尼亚是电子投票的榜样。爱沙尼亚电子投票系统已经存在了 10 多年,覆盖了 50%以上的人口。

Voatz uses MFA - Multi Factor Authentication - fingerprint and facial recognition for pre-registered users on the top of a robust blockchain. The app encrypts all personally identifiable data and voting results on the blockchain.

碳信用交易

区块链可以创建一个更高效、透明和快速的系统来交换碳信用,这是一种激励减少温室气体排放的证书。

根据总量管制和交易协议发放碳信用额的目的是限制企业的二氧化碳排放量。

  1. Poseidon 是一个应用程序,可以帮助分析和跟踪任何产品或服务中的碳足迹,然后在销售点处理碳信用分数,直到产品售出。这样,买家就能知道他所购买的冰块的确切碳足迹。公司利用这一点购买更多的碳信用额,并有效地重新平衡产品的气候影响。

区块链有助于整合连接到销售点的账本。它允许存储碳信用的细节,并使其在区块链不变的账本中可用。Ben and Jerry's 是区块链碳信用追踪的早期采用者之一。

无限地球 REDD+碳信用等其他项目也利用区块链来帮助公司抵消碳排放,方法是种植有助于抵消这些排放的树木或其他有助于保护生物多样性和森林的项目。

挑战

如果我们不谈论 DeFi,这就不是区块链的书,但我会让它非常短,因为这个主题值得一整本书。迪菲应该得到一本圣经!

DeFi 代表分散式金融,它试图在金融市场上获得中间人的地位。DeFi applicarions 允许任何人进行贷款,使用抵押品,定期存款以获得利息回报,将资金投入资金池以提供市场流动性并获得利息回报……嗯,它提供了一个复杂的金融生态系统,存在于以太坊区块链。

  1. 保险可以通过智能合约实现自动化。

汇款。降低费用和促进跨境支付。

证券交易和结算。

分散交易所。

  • 还有很多。这不是一个详尽的列表,但我们甚至可以谈论一个跟踪狗芯片 id 的区块链
  • 加密收藏品和不可替代的代币
  • 这个主题应该完全是用例部分的一部分,但是考虑到 Cryptokitties 日益增长的重要性,它本身应该有一个部分。不开玩笑!
  • 可替代性根据资产的规格、属性和内在价值将资产分类为相同的资产。如果一项资产的一个单位实质上等同于同一项资产的另一个单位,具有相同的质量,并且可以在任何给定的时间和地点相互替代,那么该项资产就是可替代的。法定货币是一种相关的可替代资产,因为一张 20 美元的钞票在纽约和在德克萨斯是一样的。资产的可替代性也体现在如何在可分性中保留价值,例如两张 10 美元的钞票与一张 20 美元的钞票价值相同。在加密领域,人们认为加密货币是可替代的,例如,BTC 有 2100 万枚相同的货币,一枚 BTC 可以全部或部分替代另一枚 BTC,同时保持其价值。

不可替代资产是独特和特殊的,因为它们的价值和属性不同。不可替代资产的单位不能作为同一资产的另一个单位来估价,即它们不能互换。它们通常是稀有和稀少的,因此,它们往往受到收藏家的高度重视。

收藏品是受追捧的物品,因为它们被认为对收藏者来说是有价值的。通常情况下,它们可以换成比原本价值高得多的钱。在传统世界中,这些物品通常是独一无二的、限量供应的和/或稀有的。一旦被收藏,它们的价值就会因需求而增加,例如邮票、古董家具、漫画书、海报、艺术品等。随着计算机的出现,虚拟收藏品在过去的几十年中变得非常流行,例如,游戏中的收藏品在游戏空间和它们自己的数字生态系统中的其他有价值的项目中具有很高的价值。当这些稀有物品嵌入加密生态系统时,它们就成为不可替代的令牌(NFT)。

什么是加密收藏品?

加密收藏品是在区块链上以令牌形式创建的加密唯一、不可替代的数字资产。它通常被称为不可替代令牌(NFT)。这些代币不可互换,并且每个代币不能被分成更小的单元。不可替换令牌在区块链上的智能合约中唯一地存储关于资产的信息。

NFT 历史

收藏品市场在上个世纪大规模增长,全球估计达到数亿美元。随着彩色货币的产生,加密收藏品在比特币的早期出现。2012 年,彩色货币由小面值的比特币制成,用来代表区块链上的各种资产。之后出现了一系列其他的 NFT,直到 Cryptokitties 在 2017 年成为主流后才开始流行。Cryptokitties 是一款建立在以太坊网络上的游戏,允许玩家收集、繁殖和交换可爱的虚拟猫。它使用 ERC-721 NFT 令牌标准,并因用户的大量活动导致以太网网络拥塞而臭名昭著。

NFT 主张不可替代的代币,这是一个全新的世界

为什么这个 Cryptokittie 值 100 万美元?因为这是一件独一无二的艺术品!没错,这个,还有很多其他的 NFT,市场需求很大,增加了价值。

NFT 的代币具有可替代性,这意味着每个代币都是独一无二的,不可替代的。他们通常使用以太坊 ERC-721 标准,该标准于 2018 年 1 月在以太坊网络中推出,彻底改变了整个行业。

现在,就连佳士得也进入了 NFT 市场,于 2021 年 2 月在 NFT 组织了首次拍卖。以太坊的 NFT 市场有可能完全颠覆艺术品市场和物品的拥有方式。

NFT 代表一个项目的所有权。的确,我可以复制/粘贴任何图像到我的电脑上,但是这个物品的所有权总是和以太坊区块链的某个人联系在一起。

NFT 的应用

不可替代资产的令牌化为区块链资产数字化创造了无限可能。区块链为收藏品市场提供了更多的安全性和数字稀缺性,特别是为了确保资产的真实性和消除伪造。NFT 在游戏生态系统中很受欢迎,但除了游戏,NFT 还可以用来数字化任何被认为有价值的东西。

区块链上的去中心化应用(Dapps)将 NFT 用于投资目的、数字身份、虚拟资产、美术、交易卡等。自从 2017 年密码领域的 NFT 爆发以来,恰好受到 ICO 热潮的推动,密码收藏品市场出现了显著增长,有超过 100 个成功的 NFT 项目。下面是几个受欢迎的:

一个完全由用户拥有的虚拟现实平台,由以太坊区块链提供动力。用户可以创建、体验和货币化内容和应用。

币安收藏品-于 2018 年创建,作为一系列以节日为主题的 NFT,作为赠送季节期间节日订婚活动的奖品。

MyCryptons -公众人物的数字收藏品,从国家元首到像奥普拉·温弗瑞这样的名人,都可以收集和出售。

super rare——这是区块链的一个项目,它正在创建 NFT,使数字艺术家能够将他们创建的图像或 GIF 链接到一个令牌。

Nifty -一个买卖 NFT 的市场,代表艺术家、品牌和内容创作者创作的艺术品或限量版项目。

创建 NFT

有了区块链的智能合约,资产证券化变得很容易。最流行和最广泛实施的方法标准是 ETH-721,并且在密码领域有许多 Dapps,它们具有现成的模板和工具,无需编码专业知识就可以创建 NFT。另一种可用于创建 NFT 的令牌标准,如 ERC1155。

NFTs 在使用中变得越来越受欢迎,因为它以最独特和未来的方式提供了对区块链技术的无限制使用。推文、数字艺术和域名等虚拟资产正在被令牌化,这之所以成为可能,是因为所有权转移和资产认证在区块链是安全的。虽然像区块链技术,NFT 被认为是处于起步阶段,需要改进。它面临的一个挑战是令牌传输的成本,因为 NFT 非常耗气(即支付给网络的费用有时可能很高)。

定义 DeFi:什么是分散金融?

鉴于全球仍有数十亿人没有银行账户,金融服务的完全民主化听起来不错。这是一个巨大的问题,其根源是构成我们传统金融体系的机构的高度集中的结构。

DeFi 是一个伟大的不可信的选择,让用户更好地控制自己的钱。目前由大机构控制的贷款、保险和衍生品等金融工具将见证这些中间人的消失。

区块链确保的匿名性还将使人们能够更快地借贷,而不需要任何 KYC 或信用评分形式的信任。

简而言之,DeFi 可以简单地定义为一个开放或分散的金融系统,它没有一个集中的设置,在区块链技术和智能合约的帮助下,权力掌握在交易所或银行等少数强大的组织手中。

由于 DeFi,现有的金融工具(如贷款、储蓄、交易等。)现在可以被世界上任何地方的任何人以分散的、不可信的方式访问。这使得财务流程和工作流在速度、成本和可访问性方面更加简化。

分散金融的属性

财务解决方案要真正去中心化,必须满足三个先决条件。

互用性

互操作性仅仅意味着交叉通信。在这种情况下,这意味着不同的区块链能够在没有中介干预的情况下通过区块链网络相互通信或查看、访问和共享信息。中央交易所目前扮演着这一角色。

互操作性不仅仅是一个好的特性,而且由于各种区块链网络相互通信的能力,它在 DeFi 领域非常关键。这就创造了一个生态系统,其中几个不同的 dapp 能够通过与其他 dapp 集成来“借用”各种功能。透明性也是互操作性的一个优势。

Interoperability

可组合性

DeFi 应用程序是开源的,因此,任何人都可以查看或使用代码作为开发新应用程序的基础。这一概念被称为可组合性,即现有的东西可以通过不同的安排或组合来创造新产品。

乐高是可组合性的一个很好的例子。你可以使用现有项目中的部分,然后改变砖块的顺序,每次都能做出完全不同的东西。然后,这些应用程序可以一起使用,以创建更加复杂和高效的金融产品。

可编程序性

可编程性基本上是自动化过程的能力;这是智能合约的精髓,嗯,是“智能”。由于智能合约本质上是一段段代码,因此可以集成的自动化程度取决于程序的复杂程度。

以太坊因其灵活性而被认为是构建分散金融解决方案的最佳选择。感谢 Solidity,这种编程语言用于在以太坊区块链上构建和部署智能合约。

然而,可悲的事实是,只有少数 DeFi 解决方案满足所有三点。这部分是由于当前区块链景观的分散状态,使得互操作性和可组合性难以实现。

因此,大多数去中心化的金融解决方案只剩下第三个先决条件(即可编程性),通过智能合约实现——仅此而已。

智能合约

在进行商业交易时,有时需要依靠中间商以产品或服务换取金钱,也要给他们一份。数字智能合约是基于区块链的程序,可以自动化交换过程,只有在满足特定条件时,才能对合约进行编程以切换资产。并且资产的所有权不能被质疑或争议,因为交易被记录在公共区块链上。

目前最突出的智能合约平台是以太坊。这背后的主要原因是以太坊使用 Solidity 的可编程性,Solidity 是专门用于实现智能合约的编程语言。

以太坊也是最受欢迎的平台,它培育了一个由成千上万的开发者组成的非常好的生态系统,并不断更新。它还拥有智能合约中锁定的最大价值。以太坊高度灵活的特性使其成为构建分散式应用程序的绝佳选择。

DeFi 应用通常是开源的,因此任何人都可以查看或使用代码作为开发新应用的基础。然后,这些应用程序可以一起使用,以创建更加复杂和高效的金融产品。

分散融资的各种用例

DeFi 有多种用途,都旨在改善传统金融格局。下面列出了最受欢迎的一些。

借款

DeFi 中的借贷活动是过度抵押的,这意味着你交换一种资产,在这种情况下,是加密货币,以换取被锁定在一份名为抵押债务头寸 CDP 的智能合约中的资金。但是收到的钱却少于抵押品的真实价值

因此,如果抵押品的价值下降,交换的密码可以被清算以弥补价值的下降。但这个系统的额外好处是它真的很快,几乎任何人都可以很容易地借到钱,不像银行贷款。

放贷

人们不是让加密资产保持静态,而是借出它们来赚取利息。最流行的平台之一是 Compound。这是一种算法化的自主利率协议,使人们可以通过将加密货币借给其他用户来赚取利息。

稳定点

由于加密货币因非常不稳定而臭名昭著,因此开发了一种替代货币,称为 stablecoins。这些货币将波动性降至最低,并与加密领域之外的现有资产挂钩,如美元或贵重材料。

然而,大多数稳定的货币是由法定货币支持的。这使得它们变得集中化,因为它们是由发行货币的中央机构管理和控制的。其中包括 Tether (USDT)、TrueUSD (TUSD)和 USD Coin (USDC)。

分散稳定货币的一个例子是戴,它以以太坊为后盾,与美元挂钩。

分散交流

分散交换(DEXes)是集中式加密交换的替代方案。这些允许以分散或无许可的方式进行加密交换,并且用户不必冒险放弃他们的货币的保管权。

DeFi 的未来是什么

尽管 DeFi 看起来很有前途,并且比传统金融有几个优势,但它是一个仍处于早期发展阶段的新生概念,因此有几个缺点。

目前来看,日常用户采用 DeFi 的潜力是巨大的。如果 DeFi 继续稳步增长,那么它将改变我们所知的金融业,很可能会变得更好。

fin tech 中的区块链

如果现金为王,Fintech 就是弑君者!

金融科技行业正乘着 ABCD 技术的浪潮——人工智能、区块链、云和数据分析。区块链和分布式账本技术可能是这些技术中最具颠覆性的。他们正在建立新的经营方式、共享数据、信任和创建商业网络的新方式。

金融科技正在广泛使用区块链来改善跨境支付、证券交易、监管合规、保险、资产跟踪、贸易融资和交易后结算等服务。

区块链允许跨不同参与者的分类账实时查看条目和交易,将清算和结算时间从几天缩短到几乎实时。

埃森哲 2017 年的一份报告声称,DLT 可以大幅降低银行的基础设施成本:“区块链技术可以将全球 10 大投资银行中的 8 家的基础设施成本平均降低 30%,相当于这些银行每年节省 80 亿至 120 亿美元的成本”。

那么,金融机构应该直接采用区块链吗?银行在采用区块链时面临巨大的监管挑战。对银行来说,这是一个漫长而繁琐的过程,减缓了区块链的采用。此外,银行需要强大的用例来使用区块链,任何银行的 IT 部门都会问这样一个问题:“为什么我们不能在普通数据库中做到这一点?”。

金融机构可以从一些成本降低中受益,并且我确实相信区块链也可以通过区块链应用程序为客户提供更好的用户体验来为他们带来投资回报。

支付清算和结算是金融科技的一大用例,无论是跨境支付还是股票和债券等证券的结算。这是该行业的一大痛点,也是效率低下的一个重要原因,由于缓慢的交易处理,锁定了数十亿美元。发生这种情况是因为每个参与者维护他们自己的分类帐,并且必须进行通信以更新分类帐以及他们在流程中的位置。因此,结算通常需要几天时间,考虑到我们是在 21 世纪,这是令人愤慨的。

因为区块链几乎实时共享数据(可能需要几秒钟,与几个小时或几天相比,这已经非常好了),它消除了手动调解和所有缓慢的遗留系统的需要。

支付是金融科技的另一个重要应用领域,区块链在这方面正变得越来越重要。在支付领域,摩根大通创建了迄今为止区块链最大的私人支付网络之一——Liink——前身为 IIN 银行间信息网络。Liink 使用一种名为 Onyx 的专有区块链,使银行和企业等实体能够以点对点的方式安全地进行支付和共享数据。在许可的区块链中的对等网络中,参与者在加入网络之前要经过审查过程,这使得参与者更加安全。

创始人约翰·亨特说:“我们创建 Liink 是因为我们了解全球银行系统的巨大复杂性。通过利用分布式分类帐技术,我们创建了一个更加开放和高效的信息共享网络,其中包括世界上许多最大的金融机构。”

区块链应用程序还允许集成 API,以便银行和企业可以将它们连接到现有的后端系统。

万事达卡在 2017 年宣布了万事达卡区块链,使企业和银行不仅可以使用基于账户和基于卡的系统,还可以使用新的区块链支付系统进行跨境支付。

万事达卡区块链可以带来更多的隐私-交易细节只在区块链需要知道的基础上共享,灵活性-除了现有的万事达卡 API,合作伙伴还可以使用区块链 API。此外,可扩展性——区块链万事达卡可以处理许多交易和网络效应——该公司已经有 22,000 家金融机构在转移资金。

用于低价值电子外汇交易的波利尼西亚支付系统 KlickEx 也推出了区块链,以实现点对点支付,每天为太平洋地区八个国家的约 100 万用户提供服务。对于 KlickEx,区块链帮助解决了一个与批量支付相关的痛点:交易所可以在 90 到 200 秒内处理支付。虽然它看起来很快,但还不够快,而且它需要交易所使用批处理,从而进一步降低支付速度,因为收到的支付速度通常会超过没有批处理的支付速度。这可能会导致处理付款需要很多时间。随着区块链的实施,KlickEx 能够将支付处理时间缩短到几秒钟。使用 IBM 云区块链平台,他们现在可以使用一个基于账户的系统,每天可以近乎实时地处理多达 800 万笔支付,而不是批量处理。

由于其去中心化、消除信任问题、防篡改、安全可靠的特点,区块链技术已经被应用于很多领域,包括金融服务、信用和所有权管理、贸易管理、云存储、用户生成内容、版权保护、广告甚至游戏。在这些案例中,区块链要么解决了交易中的多方信任问题,要么降低了传统行业的成本和风险。

还有很多潜在的用例,但我们应该从区块链的特点出发,找到合适的应用场景和用例。我们还需要考虑区块链应用程序的目标以及区块链技术的界限和局限性。

区块链收养有哪些障碍?

采用区块链的主要障碍是缺乏相关知识。

就像任何其他新技术一样,组织在采用区块链时可能会面临挑战。这些采用障碍可能被视为需要解决和探索的约束,以改进组织的创新方式。例如,假设一家银行正在实施一种新的区块链产品,并需要获得当地监管机构的批准,就像他需要实施任何其他应用程序一样,但区块链可能会提出额外的担忧。在这种情况下,他可能会利用与监管机构的合作,为未来打造更好的创新产品打下更多的基础。

成本壁垒。与集中式解决方案相比,跨多个节点复制数据的需求可能会增加维护这些数据的成本。集中式数据库的复制仅用于 HA/DR 目的(高可用性和灾难恢复)。用于高可用性/灾难恢复的冗余旨在确保系统的高可用性,即它根据业务需求提供 SLA【IX】。例如,像支付系统这样的关键系统可能需要在 99.9%的时间内可用。为了确保这一点,该系统需要通过复制数据库来实现一定程度的冗余。例如,假设其中一个数据库因为电力短缺、被黑客攻击或仅仅因为系统正在更新而无法工作。在这些情况下,系统将自动读取复制的数据库。

另一方面,区块链系统本质上是高度冗余的。区块链非常冗余,数据在区块链的所有节点上复制(尽管一些区块链如 Corda 和 Hyperledger 可能没有这种级别的冗余)。多次复制相同的数据会增加与数据库存储和带宽相关的成本。

我们大概可以说,比特币或以太坊数据库拥有有史以来最好的 SLA,因为它几乎 100%的时间都在更新,并且 100%可靠。一直都是。

比特币之所以能达到如此高的可靠性水平,仅仅是因为比特币数据库/账本被复制了数千次,而维护成本高昂。当然,并不是所有的区块链应用程序都需要这样的冗余级别,但即使是许可的区块链,其存储成本也比单一的集中式数据库高。

使用区块链时需要考虑的另一个成本因素是,与集中式数据库相比,通常一个实体拥有一个节点。如果我们看一下我们之前讨论过的汽车商人的例子,考虑到减少摩擦和手工作业,采用区块链更有可能降低成本。

在决定使用许可型还是非许可型区块链时,还需要考虑成本。以太坊等公共区块链可以运行应用程序(或分散应用程序的 dApps),但每次执行智能合约或网络中的新交易时,都要支付费用,即燃气费。根据这些交易的频率、交易金额和付款人,需要考虑与区块链公共场所交易费用相关的成本,因为这些成本可能会变得相当可观。

延迟和可伸缩性:同样,跨许多节点复制数据的需要带来了可伸缩性的挑战,因为所有的事务都需要在所有的节点中广播和记录,这可能是事务数量方面的瓶颈。所有区块链都有共识机制,确保所有节点同步。当区块链需要用非常大量的事务更新时,即每秒数千个事务,区块链开始减速并将变得缓慢。比特币可能是最安全、最分散的区块链,但它也有代价:它每秒最多只能处理 7 笔交易(尽管闪电网络可以处理更多交易)。其他不太分散的公共区块链,如 EOS,每秒可以处理大约 1000 个事务。

如果我们能够折衷分散化和安全性,我们可以让区块链系统处理更多的事务。例如,一个只有几个节点的被许可的区块链将能够处理大量的事务,但是一个有几个节点的区块链不是一个非常有意义的区块链,并且它不会带来区块链所具有的好处,如安全性、分散性、不变性、网络效应等。

法规和合规性:金融机构和银行可能不太愿意采用区块链,因为向监管机构解释区块链参与者之间如何共享数据很复杂。像银行和保险这样的行业更加传统,因为它们有很大的信托责任。它们基本上必须是传统的。这些行业的监管者也更加厌恶风险,在许多国家,监管框架落后了许多年。

区块链带来的数据共享新模式可能会让监管机构感到困惑。我们可以使用区块链来存储私有/机密数据的散列吗?常识会说是的,因为区块链使用的哈希算法是抗镜像的,这意味着不可能将哈希转换成输入数据。然而,有时,一些监管机构用“一刀切”的镜头看世界,不会接受任何以公开方式共享的数据,即使是不可能破解的哈希。

在与监管机构接触时,澄清区块链数据存储在哪里(内部数据中心或云提供商)、在哪些国家(在某些国家,数据不能跨境存储)以及数据如何在各方之间传输至关重要。

与监管机构合作可能是一个漫长的过程,但在一些国家,通过监管沙箱和金融机构与监管机构之间的共识,这一过程正在改善。

不同的党派需要联合起来,尤其是在一个私人的区块链。为了构建有意义的区块链解决方案,业务网络的参与者不需要同意走到一起,处理解决方案并加入新的应用程序。例如,如果有相当数量的银行加入应用程序,那么区块链贸易融资应用程序将更加有用。如果一个实体在没有银行参与的情况下开发贸易融资应用程序,将很难产生网络效应并吸引客户。这就像建一条电话线,只有一个人管理和拥有电话。不是很有用吧?

为了克服采用区块链的障碍,我们需要让整个组织都参与进来。这通常意味着创新团队、It 团队、网络安全、合规、管理、财务等等,以确保克服障碍和阻碍。哦,在决定区块链的申请时,组织不能使用河马决策法:最高收入者的意见。

第三章

区块链科技深潜

Chapter 3

现在让我们开始这本书最激动人心的部分,把理论抛在脑后,开始钻研技术吧!我们现在将仔细研究技术组件以及它们是如何工作的。

让我们从问什么是区块链开始。是的,我知道,我们一直在谈论区块链,但现在,我希望你穿上极客西装,从技术角度看这个问题。不要跳过这一部分!把什么都讲清楚,巩固知识,这是必不可少的!

什么是区块链?

尽管区块链有几个定义,但都归结为一点:区块链是一个分散的类似数据库的系统,对网络中的所有节点都非常透明。区块链的参与者有一个共识机制,可以就区块链应包含哪些内容以及如何包含达成一致。

因此,区块链是一种分散式协议,它将数据库分布在多个节点上,为过去和当前的事务建立共识机制,其中数据块表示数据结构。

区块链特征

分散化:区块链不依赖于中央权威,也没有集中的控制点。相反,它依赖于一种共识机制,让参与者对什么是真的达成一致

透明:区块链的任何人都可以看到和审计区块链的交易

不可变:一旦在区块链中确定,数据和交易就不能改变,除非得到共识机制的同意

加密:区块链协议依赖于加密算法,用于签署交易,验证交易的有效性,并保持区块链中的数据不可改变和安全

区块链是做什么用的?

在这本书里,我谈到了一些区块链的应用。虽然区块链并不是所有问题的解决方案(肯定不是大型工作负载或集中式数据库的解决方案),但有数百种可能的用例。我可以写一本关于所有多重用例的 2000 页的书,但是那太无聊了。然而,我们可以奠定区块链背后的关键技术,并帮助创建一个框架来理解什么是区块链用例。

谈论区块链用例有点像谈论数据库用例。数据库有大量的用例,区块链也是如此。然而,与传统数据库相比,区块链可以带来更高的透明度、可靠性、更快的事务处理(与多个集中式数据库相比)等等。区块链可以强制执行合约,即所谓的智能合约(我们稍后会看到这是什么),它可以自动复制几乎任何现实生活中的合约。

比特币最初于 2008 年末推出区块链,当时比特币白皮书刚刚发布。第一个区块链第一次允许以完全分散的方式进行简单的交易。后来,以太坊和其他区块链 2.0 带来了将代码嵌入区块链的可能性——智能合约——在区块链图灵完备系统中自动自我执行。

我们已经讨论过区块链是一个分布式的、不可变的数据库,但是这是如何实现的呢?

区块链中的每个块都通过哈希机制链接到前一个块。每个块都包含前一个块中数据的散列,从而创建了一个相互链接的块链。不能改变块的顺序或改变任何数据,因为如果块被改变,块的散列将改变,将其标记为无效。这就是区块链不变性的来源。任何更改都会自动失效,因为它与哈希不匹配。

理论上,改变数据或阻止历史是可能的,但你必须获得共识,也就是 51%的攻击,这通常很难实现。

我们看到,每个块在块头中都包含了前一个块哈希(包括前一个块事务)。该块还包含该块中包含的事务处理。交易可以是金融交易或事件,即交易不一定需要转移价值。它可以是资产的转移,或者仅仅是数据的转移。

所有区块链参与者就如何将区块纳入区块链的共同规则达成一致。每个区块链可能有不同的共识机制来定义如何包括块。不过,你可能听说过工作证明、利益证明、委托利益证明和 PBFT——实用的拜占庭容错。我们稍后将详细介绍这些很酷的共识机制是如何工作的。

区块链的种类

有不同的区块链类型,它们有不同的用例——公共区块链和私有区块链。

诸如比特币、以太坊等公共区块链允许任何人加入一个有助于共识机制或发行交易的节点。

公共区块链通常也被称为无许可,认为任何人都可以加入而不需要许可或成员证书。这些区块链在本质上是完全分散的,没有所有权或集中治理。公共区块链中的用户/节点可以访问所有数据并保留一份分类账副本,但 DLT 的一些情况除外。在大多数公共区块链中,他们通过工作证明或利害关系证明等共识机制达成共识。例如,我们将在本书的后面部署一个以太坊节点,并与区块链同步,这是任何人都可以做的事情。

公共区块链通常有大量的参与者,它们基本上依靠这些参与者来运行节点,这些节点将保持区块链对攻击的弹性。在公共区块链中,网络安全性和弹性随着节点数量的增加而增加。区块链越大,就越难被成功攻击。所使用的共识机制还包括对节点(也称为矿工)的一些激励,以维护区块链和验证事务。例如,比特币激励矿工每创造一个新区块,就奖励他们 6.25 BTC(按 2021 年计算)。这样,人们就有动力为网络做贡献。

公共区块链的一大优势是它们也非常安全,因为它们有许多节点参与。如果一个区块链只有 10 个节点,黑客需要控制至少 6 个节点来控制网络,这可能不是很困难。然而,如果一个区块链有 10 万个节点(这是比特币的情况),黑客将不得不控制超过 50%的网络节点,这实际上是不可能的,除非黑客可以花费数十亿美元的设备和电力。真的不值得。

由于分散的性质、加密和共识机制,参与者被激励保持分类账可信。比特币和大多数主要的加密货币可能是世界上最安全的 IT 系统。

然而,公共区块链并不是天堂。也有一些缺点:缓慢的处理时间和延迟-交易可能需要几分钟才能完成-低吞吐量,有时还有交易成本。

公共区块链

二等兵区块链

任何人都可以加入,阅读,写作和下载分类帐

| 通常基于许可的参与 | 任何人都可以看到数据 | | 只有会员才能看到数据 | 分散的 | | 分散程度较低 | 匿名的 | | 用户的身份是已知的 | 工作证明或股份共识证明 | | PBFT、拉夫特或逝去时间共识的证明 | Users identity is known | | 因此,我们可以看到,在公共区块链中,任何人都可以加入公共区块链,下载整个分类帐,读取历史交易,编写新交易(但永远不会更改现有交易),并作为节点/矿工参与。公共区块链是完全透明的,任何人都可以看到一切,并有助于达成共识。 | |

另一方面,私人区块链通常是许可的,这意味着参与者需要获得许可才能参与。私人区块链通常有较少的参与者。这些参与者可以是共享某种业务流程的一组人、公司或组织。通常,私人区块链是由区块链邀请的,参与者与他们现实世界的身份相关联——姓名、公司名称等。

在公共区块链,用户是化名的。它们与现实世界的身份无关,而用户的身份在《私人区块链》中并不是无名的。

诸如 Hyperledger Fabric、Quorum、Multichain 和 Corda 之类的私有区块链技术允许不同种类的配置,因此参与者在区块链中可能具有不同的许可和能力。与公共区块链相比,私有区块链通常更具可扩展性,允许高吞吐量、快速事务处理和低延迟。私人区块链的用户数量一般较少;因此,在他们之间传播数据并达成共识更容易。一些专用区块链每秒钟可以处理数千笔交易。

私立区块链的一个主要缺点是,它们倾向于更加集中,而错过了分散化的优势。更高的集中化程度可能会带来更高的吞吐量、更好的治理和合规性,但这是以额外的安全问题为代价的。考虑到涉及的节点数量较少,一个糟糕的节点更容易操纵或试图利用系统。

半私有的区块链和区块链也可以是混合的,这意味着它们部分是私有的,部分是公有的。在混合网络的公共端,任何人都可以加入(例如,编写新的事务),而一些功能可以保持私有(例如,验证节点)。EOS 可以被看作是一个半私有的区块链,其中验证节点,在 EOS 区块链上被称为块生产者,是 21 个选择的节点。用户可以访问网络,并可以以公开的方式进行交易。在 EOS 的情况下,委托的利害关系证明机制用于提名将伪造块的 21 个块生产者节点。我们将在后面读到更多关于 EOS 授权的利益相关者共识机制的证明。

侧链

侧链是连接到主区块链的区块链,其中资产或交易可以在侧链中进行,稍后记录在主链中。资产最终也可以从侧链转移到主链,反之亦然,用户可以将资产发送到侧链,以便在那里使用它们。侧链的一个很好的例子是比特币闪电网络,在这里比特币可以以更快的方式进行交易。

区块链顶上的区块链?这是什么巫术?

一个区块链可以连接多个用于不同目的的侧链,并且它们可以独立管理。

侧链还可以允许在链之间无缝转移资产,或者在某些情况下允许交叉加密货币交换。

闪电网络与比特币区块链 a 相连,记录主链中的余额。私有区块链还可以有记录与主链或处理支付的侧链相关的资产的侧链,扩展了区块链的功能。

比特币闪电网络被认为是运行在比特币区块链上的“二级”支付系统。它旨在提高所有贡献节点之间的交易速度,也是解决处理比特币交易时缺乏可扩展性问题的推荐解决方案。

闪电网络为比特币区块链增加了另一层,并允许用户在这一层建立双方之间的支付通道。只要你需要,这些渠道就可以存在,一旦在交易双方之间建立起来,交易将几乎立即发生,费用将非常低或根本没有。

正如我们之前已经讨论过的那样,比特币每秒只能处理大约七笔交易。起初这已经足够了,但是随着网络用户越来越多,系统变得不堪重负。因此,交易处理需要更长的时间,交易费用有时不合理。

如果比特币想要成为现有支付系统的成熟替代品,它必须能够成为一个高性能的网络,并消除扩展瓶颈。目前,比特币甚至还没有接近。

闪电网络似乎是可扩展性问题的正确答案。Lightning Network 是构建在区块链之上的一个附加连接层,可显著提高性能。这使得比特币每秒钟可以处理数百万笔交易,费用几乎为零,开辟了比传统货币更多的机会。

其他侧链示例是以太坊和液体网络的等离子体,也在比特币网络中。其他项目也通过构建侧链来解决区块链互操作性问题。一些例子是波尔卡多特和宇宙。顺便说一下,你不喜欢加密项目的名字吗?

你认为还有哪些应用可以利用侧链?我们能否将其他区块链连接在一起,从而形成一个区块链超级连接器?

特许区块链

现在让我们来看看被许可的区块链。我们已经讨论过《区块链列兵》,虽然大多数《区块链列兵》也是被允许的,但是《列兵》和《被允许》不是同义词,为了保持本书的准确性,最好还是做一个清楚的区分。

想象一个派对(是的,一个有音乐和酒的派对),对所有人开放,任何人都可以去参加派对,看看谁在那里。这是一个没有公共许可的区块链。

现在想象一下,聚会被限制为 21 个 VIP 聚会-动物,但是这个聚会正在互联网上广播。这是一个公开许可的区块链,也就是说,只有这 21 个人被允许参加聚会。

第三个例子是秘密聚会。“大开眼界”派对。这是一个只有受邀者才能参加的派对,不会在任何地方播出。这是一种在豪宅里举行的半秘密聚会,只有被邀请的人才知道里面发生了什么。这是私人许可的区块链。

而隐私指的是谁可以看到数据,许可指的是区块链的控制层来控制参与者的行动。许可分类账最终可以公开,但同时有一套规则,规定参与者可以参与和如何参与。企业以太坊和 Hyperledger Fabric 是许可区块链的好例子。他们也有更集中的治理模式,背后有财团、基金会或公司。

分布式总账

分布式分类账经常与区块链混淆。它们可以是私有的,也可以是公共的,通常在参与者之间共享需要知道的数据。每个参与者保留他们自己的分类账副本或与他共享的数据子集的副本。这些数据记录不是放在块中的。相反,它们被连续记录和散列,每个节点单独更新。

分布式分类帐可能具有成员资格/看门人节点(用于控制/表决谁可以成为网络中的成员)和公证节点(用于批准和公证分类帐中的数据)。当公证节点对交易达成一致同意时,参与者可以用新交易更新他们自己的分类帐。

代替记录交易和数据块,它们被广播给公证人,公证人管理投票机制和共识。如果数据通过了检查,它就会根据业务逻辑被广播和记录到某些节点。数据带有时间戳,并且出于不变性和数据来源的目的记录了散列,但是它并不分布在分布式分类帐中的所有节点上。只有几个特定的节点,公证节点,保持散列和时间戳。

Corda 是 DTL 最著名的例子,如果我们真的想要准确,我们不应该称它为区块链,因为它缺乏块,并且信息只在需要知道的基础上共享。

区块链 VS 加密货币

区块链是从一种加密货币——比特币开始的。我们可以把这些区块链 1.0 看作是第一次以分散的方式交换价值的手段。然而,许多新的区块链技术不是加密货币,也不代表可交换资产。

区块链 1.0 如比特币和比特币叉子,加密货币如莱特币、比特币现金、Zcash 和我最喜欢的 Dogecoin,都是纯粹的加密货币,除了来回发送价值之外不能做太多。

区块链 2.0 开始允许脚本功能,即智能合约,嵌入业务逻辑和功能,作为许多许多用例的数据存储。其中一些区块链 2.0 不是加密货币。

密码货币是区块链货币,由于它们的性质和用途,也需要一个“货币”。这些“货币”不仅用于在用户之间交换价值或存储价值,它们还有另一个重要的功能:密码货币是公共的,通常是没有权限的,区块链需要人们作为一个节点加入来保持网络的运行。人们可以拥有“货币”作为奖励,与节点/挖掘者一起贡献,这将保持网络验证交易。

Blockchain 2.0 并不仅仅存储与密码货币交易相关的数据。它存储任何数据。所谓的区块链协议也可以包含在区块链 2.0 中。它们允许脚本功能、创建智能合约和运行分散的应用程序。

模块链组件

让我们看看构成区块链和区块链的一些要素。在本节中,我们将从地址开始,即什么是区块链地址、交易和交易费用、区块、区块是如何形成的、智能合约等等。虽然我们已经在高层研究了这些概念,但我们现在将更多地从技术角度来研究它。最后,这本书的目标是让你成为区块链的专家,对吗?

这将变得更加技术性,但请耐心等待。好吗?

地址

在区块链,地址是与实体、钱包或智能合约相关联的唯一标识符。它们通常由 26 到 35 个字符的字母数字字符串组成。在比特币的情况下,地址是由 ECDSA 私钥生成的公钥的 160 位散列。

地址和公钥可以与任何人共享,没有安全限制。另一方面,私钥不能共享,应该保持安全(除非你想输掉所有的钱)。

在大多数区块链,地址来自公钥,创建地址有 3 个简单的步骤:

1-创建私钥(ECDSA)

2-从私钥中获取公钥(公钥基础设施总是有私钥/公钥对)

3-散列公钥以生成地址

虽然我们将在本书的后面深入探讨 ECDSA 密钥,但是让我们看看如何在命令行中实现这一点。根据区块链的不同,地址生成可能会稍微复杂一点,但这就是它的滚动方式。

打开你的命令行,开始做那些无聊的事情。要在您的计算机上打开命令行,请单击 Windows 图标并键入“cmd”,然后按 enter 键。如果您是苹果用户,您可以打开“应用程序”文件夹,然后打开“实用程序”,双击“终端”,或者按下 Command -空格键启动“聚光灯”,然后键入“终端”。

然后,以下命令将创建一个新的 RSA 密钥对。生成密钥对后,可以运行 SHA256 哈希算法来生成地址。

ssh-keygen

sha256sum publickey.pub

长哈希 97e 75487 c 0 AFC 7 c 54 e 7d 0 a 463 bafd 6a 099 a 55 C4 CAC 8d 1130 ce 1 db 5714 eeb ad 7 a 是唯一地址!几乎不可能生成相同的地址。

哦,你可能还会问 randomart 图像是什么。这是您生成的密钥的图形表示。您的私钥将始终具有相同的 randomart 图像。这个想法是,人类可以很容易地识别图像中是否有变化,而在一个长的十六进制字符串中识别变化会比较困难。你可以很容易地看到以前的 randomart 看起来有点像一棵树。但是,如果您检查您的 RSA 密钥,它看起来像一个 dong,您就知道有问题了!

交易

在区块链,一笔交易就是一个事件。交易不一定意味着价值的转移。它可以是 Alice 发送给 Bob 的事件、消息或一些数据。然而,在区块链,像比特币一样,交易确实是指以加密货币形式进行的价值转移。这些转移发生在从一个地址到另一个地址。

在大多数区块链中,事务将包括值、消息、发送者、接收者、它所属的块、时间戳和所有事务数据的散列。然后,事务被一起打包成块。唯一的例外是 DLT 技术或哈希图,在这种技术中,事务按顺序进行哈希处理,而不是存储在块中。

交易手续费

区块链中的验证节点(也称为挖掘器)需要执行一些工作,以便将事务包含在区块链中。因此,他们需要有做这项工作的动机,这种动机可以以交易费的形式支付。

交易费用并不取决于交易金额的大小。无论你是转移价值 100 美元还是 100,00 0,00 0 美元的比特币,交易费用都差不多。在区块链中,影响交易费用的是以字节为单位的交易规模,而不是价值的大小。比特币交易大小平均为 500 字节,用户根据大小和他希望交易多快被纳入区块链支付交易费。矿工从事务内存池中选择事务,优先选择支付最高费用的事务。因此,如果用户希望他的交易被包含在下一个块中,他将不得不支付更高的费用来“贿赂”矿工首先获得交易。

你可以把区块链的街区当成卡车。或者载客量有限的列车。每辆卡车可以装载 1000 公斤货物。司机是一只贪婪的狗,试图最大化每辆卡车的报酬。您发送的每个包裹的价格将取决于包裹的重量。如果你的包裹更重,你需要付给卡车司机更多的钱,以确保你的包裹被包括在下一辆卡车里。是的,这也是区块链的工作方式。继续读,我会再讲几页这个。

来源 https://privacypros.io/tools/bitcoin-fee-estimator/

在比特币中,交易费用以 Satoshi/Byte 计量,其中一个 Satoshi 对应 0.00000001 个比特币。

在 2021 年 1 月,包括下一个块中的交易(10 分钟内)的平均交易费用是 90 Satoshi/字节:

90 聪/字节* 500 字节= 45 000 聪= 0.00045 BTC

按照 2021 年 3 月的 BTC/美元汇率,约为 13 美元。

请注意,矿工迟早会拿起低费用的交易,但他们可能需要几个小时才能被纳入区块链。如果你支付的价格非常低,矿商甚至可能需要几天时间才能完成交易。

在区块链,交易费也是避免网络垃圾邮件或拒绝服务攻击的一个重要特征。在这种攻击中,攻击者会用虚拟事务淹没网络,以耗尽区块链资源并阻塞整个网络。DoS 或 DDoS 攻击通常不会发生在区块链,如比特币,因为费用会使攻击极其昂贵和不可行。

T2图灵完成

一些区块链,如以太坊或 Hyperledger Fabric,使用图灵完全编程语言,这意味着开发人员可以使用它来创建智能合约,它可以做几乎任何事情,从简单到更复杂的功能。图灵完全意味着它是计算通用的,能够执行任何现实世界的通用功能。

例如,以太坊虚拟机是图灵完全去中心化虚拟机,这意味着它可以复制任何可能的计算逻辑或功能。以太坊中的这种计算逻辑是通过智能合约实现的,它们可以用 Solidity 编程语言编写(尽管它们也可以用其他语言编写)。

阻挡

区块链中的块通常由块散列、前一个块散列、时间戳、随机数、Merkle 根和/或多个事务组成。一旦一个块被区块链中的其他节点挖掘、广播和接受,它就不能再被修改或删除。每个块包含前一个块的散列,在它们之间形成一个链。

街区探险家

块浏览器是用户查看区块链的用户界面。它是一个工具,通常是一个基于网络的应用程序,允许用户查看和浏览区块链中的所有信息,包括交易、交易历史、地址、区块等..在幕后,block explorer 连接到一个包含整个分类帐的完整节点,并作为该分类帐的搜索引擎。

来源 https://www.blockchain.com/explorer

任何主要的公共区块链都有一个在线块浏览器,但我们可以在这里看到一个比特币块浏览器显示什么信息的例子。在此图中,您可以看到块的完整结构:

哈希:块中数据的阿沙 256 哈希。

区块高度:表示在当前区块和 genesis 区块之间开采了多少区块。每天大约有 144 个新的比特币区块被挖掘出来。

时间戳:区块开采的确切时间。

前一个块的散列:虽然没有在这个图像中显示,但是每个块也包含前一个块的散列。

事务数量:对应于该特定块中包含的事务数量。每个数据块都有大小限制,例如 1MB、1.3MB 或 8MB,并且数据块可以包含的事务数量是对数据块大小的限制。你可以看到卡车大小的块大小。一辆小卡车可以装载 1000 公斤的货物,而一辆大卡车可以装载 8000 公斤的货物。同样,一个更大的块可以包含更多的事务。

块奖励:比特币块奖励目前是 6.25 BTC。这是矿工的奖励,作为对他们为网络做出贡献和创造区块的激励。街区奖励从 50 开始。2009 年每个数据块的 BTC,每四年减半,或者更准确地说,每 210,000 个数据块减半。由于减半,区块奖励将在 2140 年为零。

奖励包含在每个块的比特币基地事务中,该事务是为支付块奖励而创建的唯一事务。对于本例中的区块,6.25 BTC 奖励相当于约 184 000.00 美元。不错吧。!

有趣的事实(特别是对那些做过的人):在 2009 年,你可以用你的个人电脑挖掘比特币。如果你开采了一个区块,2021 年的 50 BTC 奖励将价值 230 万美元。

费用奖励:除了块奖励,费用也支付给矿工。例如,在该区块,矿工的工资约为 0.7398 BTC,约合 22,000.00 美元。

Merkle root:Merkle room 来自 Merkle 树,它是块中所有事务的散列,组织在一棵树中。如果 Merkle 树中任何事务中的任何数据发生变化,Merkle 根也会发生变化。

事务数量:块中包含多少个事务。

交易量:大宗交易中 BTC 的交易量。在我们看到的例子中,在上面的区块中,大约有 7401 个比特币被交易,价值约为 217,589,400.00 美元(仅在 10 分钟内!).

Nonce,难度和比特与采矿有关,我们将在另一章的后面有趣地看它。

如您所见,block explorer 中有大量信息,任何人都可以完全公开透明的方式检查每个块中包含的事务。

作为一个例子,让我们看看比特币区块链的第一个区块——创世纪区块中包含的 coinbase 交易!

比特币起源区块的比特币基地交易细节

这是有史以来的第一笔交易。如您所见,没有支付任何费用,该区块有超过 60 万个确认,这意味着已经在该区块顶部开采了超过 60 万个区块。这个街区正好在区块链洋葱内部。它还包含一个非常酷的隐藏信息,你也可以自己检查!

交易的输入有以下十六进制 Sigscript:5468652054696d 65732030332 F4 a 616 e2f 323039204368616 e 63656 c6c 6f 72206 f 6e 206272696 E6 b 206 f 66207365636 f 6e 64206261696 c6f 7574206666 f 722222

通过在命令行中键入以下内容,可以将此十六进制消息转换为 ASCII 文本:

echo 5468652054696d 65732030332 f 4 a 616 e 2 f 32303039204368616 e 63656 c 6 c 6 f 72206 e 6 e 206272696 e 6 b 206 f 66207365636 f 6e 64206261696 c 6 f 7574206666 f 7220620662616 e 6 e 6 b 72062062616 e 6 b 73 | x

在命令行中将十六进制转换为 ASCII

这条消息是 2009 年 1 月 3 日伦敦时报的头条。对比特币来说,这有着特殊的意义。这个标题代表了 2009 年整个金融系统的失败,它激发了人们对比特币、区块链和去中心化系统的兴趣。

2009 年 1 月 3 日的伦敦时报

智能合约

智能合约是计算机程序的一部分,可以执行双方之间的合约协议。智能合约几乎可以执行任何合约条件或功能。它们是图灵完备的,这意味着它们使用带有条件语句和条件分支的编程语言。这些编程语言有“if,then,else ”,它们可以复制任何计算机逻辑。

智能合约是自动执行的,这意味着一旦部署,就不需要第三方的干预来执行,并且它们的执行不能被停止。智能合约可以自动执行它们在智能合约中编写/编码的规则。例如,您可以将智能合约编程为托管和结算服务,智能合约可以从 Alice 接收资金,并在 Bob 将资产 D 发送给 Alize 后将资金释放给 Bob。在智能合约中,代码就是法律。你也可以编写一份智能合约,锁定价值 1000 美元的加密货币,只在 2030 年解锁。一旦这份合约生效,你就无法改变它,无论如何,这笔钱都会被锁在这个金库里,直到 2030 年。您在智能合约中编写的任何内容都将在以后自动执行。

智能合约部署在以太坊等区块链中,在 EVM 以太坊虚拟机中执行。许多其他区块链,包括私人区块链,都以智能合约为特色。

区块链的托管智能合约的一个部分的图示

智能合约的一些特征是:

智能合约是自动执行的

智能合约是图灵完全的

当事人仍使用假名

  • 智能合约是透明的,完全可审计的
  • 智能合约是不可变的
  • 旁注:图灵完备性更多的是一种理想化。在现实中,计算机和虚拟机受到有限的内存和计算能力的限制。此外,区块链的智能合约需要执行费用。因此,智能合约是有限的,因此不完全是图灵完全的。
  • 在选择编写智能合约的协议和编程语言时,我们还需要考虑它的表达性和复杂性。有一个有效的边界,需要在智能合约的表达性和复杂性之间进行权衡。执行它所需的计算能力,以及执行智能合约愿意支付的费用(功能越多,费用越高)。

诺贝尔奖获得者 Harry Markowitz 在 1952 年引入了有效前沿理论,并在现代投资组合理论中广泛应用,以有效地创建最优投资组合。有效边界显示了特定风险水平下的最高预期回报。如果我们把它应用到区块链的图灵完备性中,我认为这很酷。

不同的区块链和编程语言呈现不同的回报/复杂性水平,并与特定的风险和合约表达水平相关。更松散的编程语言可能允许更多的复杂性。尽管如此,它们可能不太容易推理,开发人员会犯更多的错误,容易出现更多的错误,并且区块链容量也在计算能力、吞吐量和支付费用方面限制了它们。

在以太坊,开发者可以使用一种叫做 Solidity 或者 Kotlin 和 C++的编程语言。然而,DAML 是一种更安全的智能合约编程方式。考虑到以太坊是图灵完全的,这些智能合约可以实现不同程度的复杂性。

尽管可能,但不建议构建极其复杂的智能合约,因为执行更复杂的智能合约需要更多的汽油(执行智能合约所支付的费用)。智能合约由以太坊节点执行(任何人都可以拥有以太坊节点,因为它是一个无权限的网络),这些节点运行 EVM 以太坊虚拟机。用户的燃气费奖励节点执行交易和执行智能合约中的功能。

每个以太坊智能合约都有一个用于与之交互的地址,包括与其他智能合约的交互,这扩展了自动化功能。

智能合约允许在 IT 历史上首次创建 dApps,提供新的优势:

增强的安全性:通过公钥加密和区块链共识机制提高了 dApps 的安全性,确保了智能合约的正确执行

自治:dapp 是在智能合约(app 逻辑)之上开发的,这些智能合约在区块链中以去中心化的方式运行。dApps 可以自动自主运行,无需第三方干预

可追踪:考虑到信息(与智能合约相关)存储在区块链中,dApp 的交易或任何事件都是可追踪的(注意,dApp 也可能有链外信息)

  • 稳定性:由于智能合约分布在区块链的许多节点上,具有冗余性,即使一些节点出现故障,dApps 也能继续平稳运行。
  • 其他无权限区块链允许智能合约创建和执行。除了以太坊,区块链如 Cardano,Tron,Lisk,Stellar,Monax,RSK 和 Counterparty 也允许智能合约脚本,可以作为以太坊的一个不错的替代方案。这些区块链中的一些使用以太坊使用的相同编程语言,因为他们的创作受到以太坊的启发。哦,别忘了私人/特许区块链。Hyperledger 区块链、Corda 和其他公司也允许智能合约。
  • T2神谕
  • Oracles 是被认为可信的第三方数据源。Oracles 可以将外部来源的信息导入分类帐。甲骨文可以是通过彭博输入智能合约以执行交易的股票价格,也可以是芝加哥商品交易所集团输入区块链以跟踪牛肉供应链市场的牛肉价格。

这种链外数据源的其他例子可以是连接到区块链的 ERP 软件或用于跟踪商品的物联网设备。

这些神谕有助于创建智能合约,在区块链和外部世界之间架起桥梁。神谕可以在合约协议上达成一致,其中同意来自外部的某个信息来源与执行智能合约或链上交易相关。

其他 oracle 数据源也可以是数据库、设备、物联网源或 RFID。它们向智能合约提供信息,因为智能合约本身无法访问外部信息。智能合约和 oracle 之间交互的一个例子是当产品离开商店时自动执行支付的智能合约。该产品配备了 RFID 传感器,只要它离开商店的大门,智能合约就会被触发进行支付。

现在你可能想知道:如果神谕向区块链发送不准确的信息怎么办?

这的确是一个很好的问题——垃圾进-垃圾出问题。如果您向区块链发送不准确的信息,数据将保留在那里,并且由于区块链的不变性,无法对其进行更改。但是,至少您可以审计这些数据,并了解这些数据是由谁以及如何到达那里的。

想象一下:如果超过 45 天不下雨,区块链应用程序会自动向农民支付保险。这个区块链连接到一个提供天气数据的神谕:当地的气象站。还有一个小问题,tho:在那里工作的女孩的哥哥是一个大农场主,她决定伪造一些天气数据,这样他就可以得到保险。这可能是一个问题,但区块链将允许我们随时审计每个行动。

共识

共识机制值得写一整本书,但在这里我将尝试直奔主题。共识机制是一种算法,它为区块链上的多个节点定义规则,以就区块链的外观以及区块链中的有效数据构成达成一致。共识是定义节点如何就区块链的状态达成一致的一组规则。所有区块链都有一个最小阈值,即需要多少节点同意才能达成共识。

这被称为容错百分比,它对应于攻击者为了创建一个单独的链或获得对主区块链的控制而必须积累的功率。在比特币和大多数公共/无许可的区块链,这个比例是 50%。在允许的区块链,这一比例更低。PBFT【x】区块链,容错 33%,Ripple 可以容忍 20%节点的拜占庭问题。

确认

当整个网络处理完交易,在区块链中结算数据时,就会发生确认。一旦交易被确认,它就被认为是不可改变的。对于要确认的交易,两个交易节点同意该交易是不够的。需要在验证节点内达成共识,以便认为交易是最终的。以比特币为例,交易需要分块挖掘。这就是为什么在处理大额比特币支付时,人们总是需要等待至少一次确认,即等待交易被包含在一个块中。否则,交易最终会被撤销。

别忘了,在区块链中,交易被认为是完整的,不是当它被发送出去的时候,而是当它被记录在区块链上的时候。因此,当你收到某人的交易时,等待至少一个确认的重要性。

比如有人可能给你发一笔交易,费用很低(比如 1 satoshi/byte)。同时,发送者会以更高的交易费向自己发送等量的比特币。收款人可能会在他的钱包中看到有人向他的钱包付款,但仍然没有任何确认。在这种情况下,更有可能的是,费用较高的交易首先被清除,而您实际上永远不会收到比特币金额。但是,如果您有一个或多个确认,这意味着交易包含在一个块中,并在区块链上永久注册。

为什么有些交易所或供应商要求 6 次确认?只是为了更加安全。如果你收到的是小额付款,一次确认就足够了。然而,价值 10 00 万美元的比特币(或另一种加密货币)值得额外的防范。假设发送者也是一个大的比特币矿工,他能够伪造一些块,将他的假交易放在一个或两个块中,这些块稍后将不会被区块链中的其他节点验证,并将成为“孤儿”块。我们稍后将查看孤立块。

加密货币

加密货币是数字货币。他们依赖于区块链,但他们不应该与区块链混淆。我的意思是,加密货币总是坐在区块链的顶端,但不是所有的区块链都有加密货币(超级账本区块链、科达和其他企业区块链是区块链没有加密货币的一些例子)。

加密货币利用了区块链的密码术和加密功能,第一个也是最著名的是市值万亿美元的比特币。其他加密货币有:

狗狗币——狗狗最喜欢的加密货币

以太——以太坊加密货币

USDT——系绳加密货币

XRP——Ripple 加密货币

ADA–卡达诺加密货币

XMR–Monero 加密货币

还有很多很多!这些加密货币中的每一种都有特定的功能,并以不同的方式使用。比特币可以用于支付,也可以用作价值储存手段。以太可用于与比特币相同的用途,但也用于支付与以太坊智能合约执行相关的费用。USDT 是一种稳定的货币,与美元挂钩。XMR 是一种匿名加密货币,采用先进的加密技术设计,确保用户完全匿名。甚至 Dogecoin 也有很好的用例:它的交易费用非常低,这意味着它是一种优秀的发送微交易的加密货币。

哈希函数

哈希函数是区块链技术的核心。哈希函数接受任何大小的输入值,并创建固定长度的输出。无论输入有多大,输出总是有相同的大小。如果输入值有任何变化,输出会自动改变。

任何东西都可以被散列。区块链交易,威廉莎士比亚全集,一个图像或者一个文档,哈希输出总是一样的大小,有特定的特征。SHA-256、SHA-3 和 Keccak 在几个区块链中被广泛使用,它产生 256 位(32 字节)大小的散列(输出)。

让我们来看看哈希函数的特征:

计算效率高:计算或验证一个散列不需要很多计算资源。

确定性:只要输入是相同的,散列的输出总是相同的。如果我将一张特定的猫照片哈希 1000000 次,输出将始终相同。然而,如果我改变猫照片中的一个像素,输出(散列字符串)将完全不同。

在这个截图中,我们检查一个句子的 SHA256 散列输出是什么。您可以看到,改变句子中的一个字母会完全改变散列输出。

抗冲突:两个不同的输入极不可能有相同的散列输出。SHA256 具有 2^256 结果,这是一个非常非常大的数字:

2^256 = 11579208923731619542357098500868790785326998466564039457584007913129639936

那是一个 75 位数的数字!发现碰撞的几率是 115 万分之一。当大爆炸发生的 43519680000000000 秒前,上帝创造了宇宙。

抗前映像:不可能将散列的输出转换为输入。

散列的输出并不揭示输入的任何信息。目前不可能发现某个散列输出的输入是什么。即使是量子计算机也会发现这项任务非常困难。

消化什么是散列,散列是散列函数返回的输出。无论文件、文本或输入哈希函数的事务有多大,输出总是有固定的长度。如果输入改变了一个字母,输出散列将会不同。

dApp(或 DAPP)

dApp 是一个在区块链外包部分逻辑的应用程序。dApps 资源智能合约的一些逻辑,但他们不是 100%托管和分散在区块链。

大多数 dApps 托管在传统的数据中心或云提供商上,而业务逻辑依赖于区块链上的智能合约。

网络/移动应用和后端将由云提供商托管,而智能合约则在区块链。

与 dApps 类似,DAO——去中心化自治组织——是一个几乎像公司一样运作的组织,但所有规则都写在区块链上。

难度

这种困难表明,在区块链的工作证明中找到开采区块链新区块所需的散列值有多困难。难度表示矿工猜测散列的可能性/组合的数量。难度越大,挖掘者需要执行的工作就越多,以便猜测散列并创建新的块。比特币区块链调整了难度,平均每 10 分钟就有一个新的区块产生。如果更多的矿工加入比特币网络,从而贡献更多的哈希能力,难度将增加并调整,以便矿工平均每 10 分钟发现一次哈希。

开采难度每 2016 个区块调整一次,考虑到每个区块平均 10 分钟,这大约需要两周时间。比特币算法非常容易提供这种调整。如果先前的 2016 块花费了多于或少于两周的时间来寻找,则难度以时间差的量与两周的量的比例来增加或减少。

数字签名

与传统的手写签名相比,数字签名很难伪造。数字签名用于签署发送者正在发送的消息、交易或文档。根据使用的算法,它通常由[私钥+交易+时间戳+幻数]的散列组成

在此图像中,您可以看到组成数字签名的元素,使其独一无二。

我们稍后将详细了解如何使用 ECSDA 对交易进行数字签名。

多重签名

多重签名是一种安全功能,需要多个预定义实体的签名才能进行交易。它被认为比单一签名更安全,是一些加密货币钱包和托管服务的基本功能。

例如,多签名钱包需要三把钥匙中的两把来进行交易。这将符合组织的合规性、风险管理和治理。

单个签名钱包可能会将存储在该钱包中的资金置于风险之中,尤其是当我们谈论大型组织时。

2019 年,加拿大最大的密码交易所的首席执行官神秘失踪或死亡,与他一起,装有 1.9 亿美元的钱包的钥匙也死了。多签名钱包可以用来确保资金安全,没有单点故障。

双倍支出

重复消费是一种攻击者试图复制交易的攻击。在这种攻击中,攻击者试图花费相同的货币两次,例如,同时发送给接收者和他自己。区块链试图通过给事务打上时间戳并将其包含在一个块中来防止这种情况。攻击者可能试图挖掘包含重复事务的块,以增加欺骗接收者发送该事务的可能性。

这种攻击在工作证明区块链中更常见,攻击者可以利用两个事务的发起和确认之间的中间时间。

在第二个事务被挖掘为无效之前(因为有一个冲突的第一个事务),攻击者已经得到了第一个事务的输出,导致了双重花费。在这种类型的攻击中,攻击者会向供应商的 BTC 地址和攻击者自己控制的共谋钱包发送相同的交易。然后,如果他的交易首先被挖掘,他设法为自己保留 BTC。因此,任何接收 BTC 的人都应该至少等待一次确认,即等待交易被包含在一个块中。这样,您可以确保交易已结算。

在现实中,双重支出攻击需要攻击者获得超过 51%的网络才能成功,这在任何主要的公共区块链都很难或不可能发生。然而,攻击者可能在短时间内欺骗接收者,这就是为什么等待几个块确认以确保交易在网络中结算是重要的。

2020 年,一群三个人从香港的比特币自动取款机上偷走了大约 3 万美元。该组织瞄准了不需要确认的比特币自动取款机。这些比特币自动取款机接受零确认交易,这意味着客户可以发送比特币并立即获得交易现金。这个漏洞很容易被小偷利用。他们以非常低的交易费用(1 个/字节)将比特币发送到 ATM,然后以更高的费用将金额发送到他们控制的另一个钱包。由于费用较低,第一笔交易从未在区块链上得到确认,第二笔交易得到确认后,第一笔交易无效。窃贼拿到了现金,并保留了比特币。

以太坊

以太坊是第一个区块链 2.0,允许在图灵-完全 EVM-以太坊虚拟机中使用智能合约脚本,使用一种叫做 Solidity 的编程语言。你可以把以太坊看作一台巨大的分布式计算机,拥有巨大的计算能力,能够执行任何事情。它还有一种叫做以太的本地加密货币。智能合约可以部署在以太坊区块链,与比特币相比,块更小,生产更频繁——平均块大小为 20 kb 至 30kb。以太坊也是众所周知的市场上许多代币的主要发行平台,是大多数 DeFi 应用程序和许多其他 dApps 的家园。

EVM

以太坊虚拟机是世界上最大的分布式计算平台,一个运行以太坊软件的节点网络。任何人都可以部署以太坊节点/矿工。实际上,我们将在本书的后面学习如何去做。

Testnet

测试网是模拟主网络的网络,但它是为测试而不是为生产而设计的。它也可以被称为 UAT 网络或分级网络。它允许开发人员在类似于生产环境的环境中进行测试。它可以被视为区块链的发展环境。开发人员需要测试应用程序和智能合约,然后才能进入生产环境,即主网络。以太坊有不同的 testnet:Gorli,Kovan,Rinkeby 和 Ropsten。你能猜出这些名字的共同点吗?

叉子是你用来吃食物的东西。哦,等等,在这种情况下,我们谈论的是区块链。叉子是对区块链的更新。协议的变化可能会导致分叉。在区块链,更新永远不能追溯。

软叉

软叉是那种塑料叉…开玩笑,软分叉是向后兼容的分叉,这意味着更新与以前的版本兼容,或者与仍在运行旧版本的节点兼容。这些更新仅代表一种软分叉,只要它们继续遵守协议规则。

软分叉是向后兼容的

在软分叉之后,运行先前版本的节点仍然可以交互和添加新的块,只要它们遵守规则

硬叉

  • 硬分叉是一个更新,它不是向后兼容的。更新到新协议的节点将不再与以前的版本兼容,并将创建区块链的新分支。更新到新协议的节点不能处理以前协议中的事务。
  • 硬分叉没有向后兼容性

所有节点都必须升级到新版本,否则区块链将一分为二

不接受升级的节点将与接受升级的节点不兼容

  • 例如,比特币频繁更新,代表软分叉,它们被称为 BIP-比特币改进提案。然而,在 2017 年,当一些开发者决定提议将比特币块大小从 1 MB 增加到 8 MB 时,出现了一个硬分叉。继续运行前一版本的节点继续运行比特币协议。采用将块大小增加到 8 MB 的变化的节点创建了一个单独的区块链,称为比特币现金。这个分叉创造了两个截然不同的区块链:比特币和一个新的区块链,比特币现金。
  • 分叉和 51%攻击

当一个人或一个团体试图通过获取超过 50%的网络计算能力来获得对网络的控制时,就会发生 51%的攻击。

为了更好地理解 51%攻击是如何发生的,我们需要考虑一些假设。我们知道:

区块链没有中央集权

矿工跟踪交易有效性

挖掘器将新事务附加到区块链,并向区块链挖掘器/节点广播新块

  1. 矿工遵循最长链规则
  2. 根据现有的共识机制,51%或更多的矿工达成共识
  3. 51%的攻击只会发生在未经许可的区块链。对于许可的区块链,这不是一个问题,因为共识机制是不同的,参与者的身份在网络中是已知的,并且网络的治理也将保护它
  4. 51%的攻击发生在坏人获得区块链 51%的开采权时,这是区块链最著名的安全漏洞之一。
  5. 区块链和区块链的百分比可能不同,但在比特币的例子中,如果一个坏演员可以获得 51%的开采权或 hashrate,他就可以获得共识机制的控制权,并最终试图重写交易。一旦攻击者获得了区块链共识的控制权,他就可以开始垄断区块开采,并开发自己版本的区块链。他将能够进行重复支出、反向交易,并阻止其他矿商确认交易。

当矿工的数量增加时,对 51%攻击的弹性增加,但是较小的工作证明区块链可能被暴露。2018 年,一些加密货币是 51%攻击的受害者:例如,Verge、Zencash 和以太坊经典就是其中的一些受害者。攻击者通过这些攻击获利超过 2000 万美元。

然而,进行这些攻击是非常昂贵的。仅仅是尝试对比特币区块链网络进行 51%的攻击,每天就要花费超过 2500 万美元的设备和超过 1500 万美元的电力。将特定区块链调整难度的频率带入等式也是必要的。例如,在比特币区块链中,每 2016 个区块(大约 2 周,考虑到每个区块平均每 10 分钟被开采一次),整个区块链使用一些聪明的数学来决定接下来的 2016 个区块应该有多“困难”,以便继续每 10 分钟开采一个新区块,基于区块被发现的速度,在过去的 2016 个区块中平均。

这对于 51%的攻击者来说将是一个优势,考虑到挖掘一个新区块的难度对于攻击者来说将保持两周不变。然而,一些区块链调整难度要快得多,DigiShield 也已经被添加到许多区块链中,包括比特币现金、以太坊、Zcash、Dogecoin、Startcoin 等等。DigiShield 允许每个区块的挖掘难度进行调整,根据需要增加或减少难度,并降低 51%的攻击可行性。

同样重要的是,即使攻击者成功发动了 51%的攻击,大多数矿工也会通过将攻击者排除在网络之外来转移计算能力。这意味着,即使有人成功进行了 51%的攻击,他也不会长期控制网络,因为大多数矿工会转移计算能力,让攻击者独自一人。

比特币 SV 51%攻击比特币现金

2018 年 11 月,Craig Write 和一群比特币 SV 支持者希望通过对比特币现金网络 51%的攻击来创建一个硬分叉。他们希望将数据块限制从 32 MB 增加到 128 MB,推出一个具有更大数据块大小的竞争版本。

虽然两个链都可以干净利落地分裂成一个硬分叉,但比特币 SV 的支持者希望比特币 SV 成为唯一的幸存者。

为此,比特币 SV 计划接管比特币现金哈希权力,并以敌对的方式彻底消灭该协议,汇集足够的资源来创建 51%的攻击。通过这次攻击,理论上,他们可以通过挖掘空区块给矿工额外的奖励,阻止矿工在比特币现金网络中采矿,并转向比特币 SV。

比特币社区的许多知名人士都加入了比特币现金方面的战争,包括的联合创始人吴(比特币挖矿最大的计算机芯片和 ASIC 公司)和比特币现金的联合创始人罗杰·维尔(Roger Ver)。为了应对哈希战争,并防止 51%的攻击会杀死比特币现金区块链,比特大陆在一段时间内为网络分配了 90 000 个 Antminer S9 设备。比特币 SV 获得了几个矿池的支持,但没有获得足够的支持,并在 51%的攻击中失败。

比特币现金 VS 比特币 SV 散列率。来源:www.bitinfocharts.com

这场战争导致两个链都损失了数百万美元(约 2000 万美元),比特币 SV 最终宣布从比特币现金网络中分离出来,放弃了敌意收购。

这是一个关于区块链治理冲突如何导致社区主导的 51%攻击的有趣案例研究。

哈希速率

哈希速率是硬件可以执行的计算哈希数。不同的硬件有不同的哈希速率。从 CPU 到 GPU 或 ASIC 芯片-专用集成电路-矿工,试图拥有最有效的硬件,以获得最佳散列率,这将增加他们在区块链开采区块并获得回报的概率。

采矿

挖掘是区块链中使用的方法,用于将事务分组到一个块中,将该块附加到区块链,并将新块广播到网络。采矿确保共识机制得以维持,并保持区块链的分散化。

我们将在本书后面深入了解采矿是如何工作的。

钱包

钱包用于存储私钥和公钥。它基本上是一个软件,存储私人/公共密钥,允许用户签署交易以便发送交易,并允许用户使用他们的公共密钥或钱包地址接收交易。

比特币钱包的一个例子,在这种情况下,是纸质钱包。完美的结婚礼物。

钱包有不同的种类,它们有不同的安全级别:在线钱包,移动/桌面钱包,冷藏钱包或硬件钱包,纸质钱包是最常见的钱包。

还有许多保护私钥的其他方法,如纸质钱包、冷藏和多签名钱包,以保持私钥离线和安全。这些钱包不太容易被盗,因为它们可以离线存储。另一方面,热门钱包是一种在线存储私钥的钱包,因此更容易被黑客攻击和窃取。

Trezor 和 Ledger 等硬件钱包被认为是存储私钥最安全的方式。

比特币社区有句话:“你的钥匙,你的钱包。不是你的钥匙,也不是你的钱包。”

公钥

公钥是从用户的私钥(PKI 基础设施)生成的。它们可以与任何人共享,事务的接收者使用它们来检查某个事务是否由签名它的用户签名。公钥允许接收者 B 验证交易是由用户 A 的私钥签署的,而不需要用户 B 看到 A 的私钥。

让我们通过创建一个私钥并从私钥生成一个公钥来找点乐子吧!

这里你可以看到一些简单的步骤,如何从你的计算机创建一个私钥和一个公钥。这些私钥/公钥在区块链中没有任何用处,但它们说明了如何创建私钥/公钥对。

要生成私钥,请打开命令行,导航到一个文件夹并键入以下内容:

OpenSSL gen RSA-out RSA . private 1024

然后按回车。私钥已生成。您可以使用 ls 命令检查私钥文件,或者对该文件进行 cat 以查看其内容。

要生成公钥,请键入以下命令:

OpenSSL RSA-in RSA . private-out RSA . public-pub out-out form PEM

我们将在本书后面看到创建这些 RSA 密钥背后的数学原理。这种不对称加密在区块链世界之外有多种用途:从安全访问 HTTPS 网站到使用 TLS 通信。每次我们在线支付或使用安全的 messenger 应用程序时,都会用到 RSA 非对称加密。

CPU 挖掘、GPU 挖掘和 ASIC 挖掘

CPU、GPU 和 ASIC 挖掘以不同的方式响应不同的区块链算法。一些算法更容易挖掘(即具有更好的哈希速率), CPU 更通用,GPU 更资源密集,用于简单计算,更适合内存密集型算法,或 ASIC,用于特定目的。ASIC 矿工,虽然效率很高,但是也有一些缺点。一些区块链开发者一直在试图更新协议,以使它们具有 ASIC 抗性,即不可能使用 ASIC 设备来开采。当这种情况发生时,ASIC 挖掘器就变得毫无用处,因为它们是按照特定的算法设计的,不能执行任何其他任务。一些区块链开发者认为 ASIC 设备可能会增加集中化。

注意,这只适用于区块链的工作证明,不适用于区块链。

挖掘算法

工作证明区块链有挖掘算法或加密哈希函数,它将块作为输入,并创建一个小输出,就像我们之前看到的一样。散列函数的设计使得挖掘者必须不断地散列块,直到他得到想要的输出。为了完成这项任务,矿工需要尝试同样的任务数百万或数十亿次,这需要硬件、电力和时间。

对于比特币,挖掘哈希函数是 SHA256,比特币应用双 SHA256 过程来提高安全性。以太坊用的是 Ethash 或者 Dagger-Hashimoto Keccak。不同的工作证明区块链使用不同的算法,但最著名的是:

sha 256–256 位“安全哈希算法”可以被通用 CPU 挖掘,并被比特币、字节币、Peercoin、Namecoin 等加密货币使用。SHA256 是一个非常简单的函数,即它是一个简单的布尔运算和 32 位加法。像这样的简单功能可以在 ASIC 芯片中的数字逻辑中实现,从而创建非常高效的采矿硬件。

et hash–et hash 是以太坊的工作证明挖掘算法。因为它更占用内存,所以 GPU 提供了更高效的哈希速率。ASIC 矿机也被开发出来开采 Ethash。一些区块链使用这种算法,包括 Etehreum 和 Ethereum 经典。

X11-Dash 开发人员创建了 X11 算法,它被认为是最安全的算法之一。ASIC 矿机也是为 X11 矿开发的。使用它的一些加密货币是 Dash、Karmacoin 和 MonetaryUnit。

Scrypt–Scrypt 也是一种广泛使用的挖掘算法。它比 SHA256 快,使用它的主要区块链是 Dogecoin,Litecoin,Potcoin,MidasCoin 和居尔登。

crypto night——这是另一个名字很酷的工作证明算法。它被设计成通过 CPU 挖掘来提高效率。使用它的加密货币有 Monero、Dashcoin、DigitalNote、Bytecoin 等。

第四章

区块链架构

Chapter 4

本书的这一部分将着眼于区块链技术中一些最重要和最酷的组件:块、共识机制和密码学。没有这些要素,区块链就无法存在,而这些要素紧密相连,确保了区块链的安全。让我们来分析一下区块链业界人士爱用的加密术语。

首先,让我们看看区块链中的块是如何构成的,然后,我们深入了解块的一些组件。这是 2021 年开采的第一块比特币。它是在新年前夜 13 分钟后被开采的。虽然我们将看到一个比特币区块,但大多数区块链遵循非常相似的原则,在它们的区块中有非常相似的数据和字段。比特币区块是开始研究区块架构的绝佳场所。

垫块高度:663852

块大小:1,346,857 字节

块哈希:000000000000000000092 F5 f 21 CD 6 db 1d 3d 74252 D6 e 343 BD 7 a 0 fcac 448 ef 01 a 5

| 标题: | | 版本:0x20a00000 | | 时间戳:2021-01-01 00:13 | | 位数:386,867,735 | | 难度:18599593048299.49 | | 随机数:2082724677 | | hashPrevBlock:000000000000000000059 d6c 6 ef 39775d 01 feec 638 c 693 b 881 ACC 0546 e7a 249 | | hashMerkleRoot:956 C3 CDC 34 c 804 e 47 ff 344 fc 19077 a 3122 ea 87413 CB 133 c 038 c 92 e F9 b 08d 2d | | 交易数量:2 907 | | 街区奖励:6.25 BTC | | 交易: | | tx hash:4b 65 af 0 b 601 df 3 EB 6 e 7237 f 44218 b 9d 951 ef 6 DCD 2 BD 7 ab 45744 C3 EC 80556 bcce | | 1.82428143 BTC 发自 1 cutyyyxgbkvtcdoymceqjczlxcde 5 akix 2 | | 致:1 cutyyyxgbkvtcdoymceqjczlxcde 5 akix 2 | | 费用:0.00200000(775.194 sat/B-193.798 sat/WU-258 字节) | | Tx 2,Tx 3,Tx 4 … | | 您也可以通过访问在线提供的众多块浏览器之一来检查该块或任何其他块。 | | 现在让我们来看看比特币区块的不同部分: | | 区块高度:也被称为区块编号,它基本上是区块链链中区块的编号,这意味着在此区块之前已经开采了 663852 个区块。 |

块大小:嗯,块大小就是块大小。在这种情况下,块大约为 1.34 MB,它包括块头和事务信息。

块散列:块散列是通过 SHA-256 函数散列的块头数据的输出。

版本:它给出了关于区块链版本的信息。

hashMerckeRoot:Merkle 根就像块中所有事务的指纹。它来自梅克尔树。它们在密码学中被广泛使用,在区块链发明之前就已经被使用了。1979 年,这些树以拉尔夫·默克尔的名字命名。它们是验证共享数据未被更改、破坏或篡改的基本方法。

Merkle 树也是一种验证区块链中数据有效性的轻量级方法。例如,如果你在手机上使用比特币钱包,你的钱包不需要下载所有的区块链交易来验证它们。带有 Merkle 根的 Merkle 树将验证所有以前的事务。

Merkle 树的结构:Merkle 树结果或 Merkle 根是递归构建的,即它是由 Merkle 树中的叶子的散列产生的,这些叶子又对应于事务。

Merkle 根是通过散列单个事务来求解的,这些事务被称为树叶。附加的叶对被散列以创建可以对应于区块链网络中的事务的附加叶节点。

虽然 Merkle 树可以从大量事务中创建,但 Merkle 根总是对应于 32 字节的字符串或 256 位(例如,SHA256 哈希算法总是输出 32 字节的固定长度,而不管输入的大小)。这样,我们可以使用小到 32 字节的东西来验证一些事务——可能是数千个——是不可变的。

事务数量:事务数量因块而异。这可能取决于块的最大容量,即大小、事务有多大(不是值而是多少字节)以及用户发出的实际事务量。例如,一个比特币块可以容纳高达 1.3MB 的数据,交易大小平均为 500 字节。

时间戳:时间戳是块散列发生的确切时间。

交易:根据协议,交易可以是价值转移或任何事件,即不一定是支付。相反,它可以仅仅是数据传输。

HashPrevBlock:每个块包含前一个块的散列。这是块以不可变的方式互连的方式。每个块都有前一个块的散列。不能改变先前块中的数据,因为这将改变已经记录的块散列。

Bits:代表该块的难度。它用十六进制符号表示,它表示该块难度的当前目标。

难度:难度由散列过程开始时散列需要的零的数量决定。创世纪区块(第一个区块)难度=1。本章开头我们看到的那块,难度是 18,599,593,048,299.49。困难总是与网络中矿工的数量(即散列能力)成比例。当更多的矿工加入网络时,它增加,当矿工离开网络时,它减少。矿工可能根据采矿盈利能力加入或离开网络,这通常与比特币价格有关。

比特币的挖矿难度其实和黄金的挖矿难度很像。当黄金价格上涨时,通常会有更多的人和公司开始开采黄金,增加了竞争,从而增加了实际发现黄金的难度。一个很好的例子是加利福尼亚淘金热。旧金山的勘探者从 1846 年的 100 人增加到 1852 年的 3 万多人,同时黄金价格也在上涨。大多数勘探者在寻找黄金方面运气不佳,因为竞争使得寻找变得非常困难。在这期间,赚了大部分钱的人实际上是在卖采矿设备。一把铲子过去卖 36 美元,相当于现在的 1500 多美元。

在这种情况下,现代采矿者,即加密采矿者,加入采矿池,以便分担工作和增加利润。

让我们回到现在,更深入地挖掘困难,好吗亲爱的读者?

您可能已经注意到,块散列以几个零开始。在我们的块中,它以 19 个零开始,但是…为什么呢?为什么需要以 19 个零开头?这是从哪里来的?它来自比特场和难度。让我们来看看如何用一种简化的方式来计算这个。

D =预期/实际

困难就在这里。什么是“预期”值?比特币协议预计在 20160 分钟内增加 2016 个新块。这是平均每 10 分钟一个街区。

难度重评每 20160 分钟(约 2 周)进行一次,期望值为 20160 分钟。实际=开采最后 2016 个区块所用的时间。

d = 20160/实际

如果 D > 1,则耗时不到 20160 分钟。对于矿工来说,开采 2016 区块的难度将会增加。如果 D < 1,则意味着挖掘 2016 块花费了超过 20160 意味着难度需要降低,因为它有点太难了。

如果 D > 1

难度增加(0.25,4)

如果 D < 1

Difficulty decrease (0.25, 4)

The difficulty increases/decreases at least 0.25 or a maximum 4, depending on how the difficulty is adjusted.

Now the new difficulty that is going to be calculated every two weeks will be:

newDiff = oldDiff x 20160/actual

比特币总杂凑率和难度。来源:http://bitcoin.sipa.be

挖掘难度根据网络中的哈希功率增加,以保持平均 10 分钟挖掘一个块的时间。如图所示,根据添加区块的平均时间,难度将每两周增加或减少一次,这与网络中的采矿能力密切相关(左侧 y 轴)。

现在我们已经看了块的最重要的组成部分,让我们看看数字签名是如何创建的。我们需要他们签署交易、文件并真正每天使用它!

数字签名

让我们详细地看一下数字签名。数字签名是区块链交易的一个重要的加密组件,其中交易由发送方进行数字签名,并由接收方进行验证。

数字签名比手写签名安全得多,因为它们不能被复制或拷贝,而手写签名很容易被拷贝。你小时候有没有试过模仿父母的签名?我也没有。

现在我们将讨论签署交易或文件,而不是加密文件。加密将是一个独立的过程。

当 Alice 向 Bob 发送事务(或文档)时,她希望确保消息在传输过程中不会被破坏或破解。确保 Alice 唯一地签署交易也很重要。

签名算法对事务进行解析以对事务进行签名,这将创建文档的散列加上签名密钥(私钥)。如果有任何变化,即使是一个单独的位发生了变化,哈希也会发生变化,从而使其无效。有确保文档完整性的自动化保护。

Alice 还将为 Bob 发送一个验证密钥(公钥)来验证文档签名。验证密钥源自签名密钥。Bob 随后可以使用 Alice 的验证/公钥并使用验证算法来验证文档的完整性以及谁签署了该文档。

让我们执行对文档进行数字签名的步骤。我们需要大质数来做到这一点。在现实生活中,我们将依赖代码和现有的算法和库,而不是手动完成,但只是为了举例,让我们看看它的工作原理。让我们先来看看 DSA–数字签名算法:

选择一个素数 q

选择质数 p

p-1 必须能被 q 整除

  1. mod((p-1)/q=0
  2. 从 g 创建 L:{ 2…p-2 }
  3. L = (g^((p-1)/q) mod p)!= 1

选择范围内的随机整数

  1. 1= < d => q-1

计算

  1. B = (L^d 国防部 p)

生成公钥

  1. Kpub = (p,q,L,B)

私人密钥

  1. Kpriv = d

选择范围内的随机整数

  1. 0 < Ke < q | Ke : Ephemeral Key

Compute the first part of the signature

  1. R = (L^Ke mod p) mod q !=0

Compute the second part of the signature

  1. S = ((SHA(m) + d * r)Ke^-1 mod q !=0

We will also need very long prime numbers. These are the recommended prime number length in bits. The bigger the length, the more secure the digital signature is.

  1. L = 1024, N = 160

L = 2048, N = 224

L = 2048, N = 256

| L = 3072, N = 256 | | Voila, we are now supposed to have a DSA digital signature! Hmmm…. But the reality is that we don’t have it yet, right? | | Later in we book, we will also see how to create programmatically a ECDSA signature and actually do most of these steps in the Python console, which will help a lot consolidate knowledge! | | 共识机制 |

有许多不同的共识算法,它们都有优缺点和安全性权衡。区块链三难困境很好地说明了这些权衡。当计划使用或部署新的区块链时,我们需要检查我们试图解决什么用例,可伸缩性、安全性和分散化方面的需求,然后问一个问题…

…问题是:我们如何在不损害安全性和保持良好的网络去中心化水平的情况下获得良好的可扩展性?

你想要一个非常安全的共识机制吗?好吧,这里你有工作证明,但它会消耗电力,使区块链缓慢,不太容易扩展。

你想要一个非常快速的共识和可扩展的吗?好吧,这里有 dpo,但是它会更加集中,安全性会稍差一些。

你想要一个可扩展且无成本的共识吗?好吧,这里是 PBFT,但会不太安全,而且有点集权。

传统上,当考虑安全性、可伸缩性和分散性时,我们只能选择两个。

一般来说,主要的共识机制有哪些?

有几种类型的共识机制,但它们中的大多数适合于两个组:基于拜占庭容错和基于领导者的机制。我肯定你会问,“这家伙到底在说什么?!"

拜占庭容错共识取决于如何安排节点来签署和广播事务。当大多数节点同意广播的内容时,可以说达成了共识。另一方面,基于领导者的共识要求节点之间在某种彩票中竞争,其中他们必须猜测某些值或采取一些行动,如下注货币,以增加赢得彩票的几率。获胜节点是将块提交给区块链的节点。我们可以把 Hyperledger Fabric 看作是基于拜占庭的容错,以太坊看作是基于领袖的共识。

工作证明

让我们先来看看工作证明,比特币的共识机制,以及大多数第一代区块链。工作证明是一种基于领导的共识机制。

矿工需要使用工作共识机制的证明,在比特币区块链和其他区块链中计算一个具有挑战性的彩票或数学问题。这有点像猜彩票的号码。一旦一个节点解决了彩票,他将结果广播给其他节点,一个新的块被附加到区块链。

彩票的难度进行了调整,以确保所有矿工的计算能力平均每 10 分钟产生一个比特币块。假设网络中矿工的数量或计算能力增加,计算数学问题的难度(aka nonce)将增加,以保持货币分配/供应和块生产的可预测性。在这种情况下,当更多的人加入或离开网络时,工作难度的证明会进行调整。

在其他区块链,如以太坊,块可以添加不同的频率。例如,在以太坊中,每 15 秒增加一个新块。

你可以把工作证明看作是一串难以产生的数据(这既费时又耗费资源),但一旦发现,其他人就很容易核实它。

向区块链添加新区块需要一些工作的原因之一是为了使其更加安全。每个矿工需要解决一个困难的彩票来添加一个新的区块,但如果太容易,那么任何黑客都可以轻松地尝试添加新的区块或改变区块链对他有利。

数学问题无非是猜测一个随机数,一长串数字,经过数百万或数十亿次的反复试验。换句话说,暴力破解的结果。挖掘器必须猜测一个 nonce,将其添加到当前头的散列中,重新散列该值,并将结果与目标散列进行比较。

挖掘难度主要是衡量在区块链中找到一个新块的难度,或者换句话说,矿工需要强行找到一个小于目标哈希的哈希的概率有多低。

当人们说矿工们正在做的事情是“解决一个非常复杂的数学问题”时,我总是认为这很有趣,而他们实际上正在做的事情是试图猜测一个“彩票”号码。

在大多数公开的/未经许可的区块链,矿工们会因为他们的工作而得到一笔固定的报酬。这种奖励可能会支付他们与硬件和电力相关的费用,并且是继续运行网络的一种激励。2021 年,比特币块奖励为 6.25 BTC,并将持续到 2024 年再次减半(大约每 4 年减半,或者更准确地说,每 21 万块)。所以在 2024 年,比特币块奖励将是 3.125 BTC。2028 年将是 1.5625 BTC,依此类推。

工作证明主要由无需许可的区块链使用,任何人都可以向区块链添加节点,而区块链的节点身份未知。因此,有必要建立一种共识机制,允许节点以不信任的方式进行协作。

其他许可或私人区块链可以选择其他方法来添加区块并达成共识。它们可以对网络中的节点具有不同的信任级别(例如,因为节点必须获得与其真实身份相关的证书)。

工作证明占现有加密货币总市值的 90%。它需要参与验证块的节点做一些困难的工作。节点,也就是矿工,需要一定的激励来完成这项工作。我们还将看到,在比特币网络中挖掘一个区块需要许多万亿次计算。这就是为什么在所有的区块链工作证明中,矿工会得到一笔奖励,交易费或两者兼而有之。

Proof of work is used mainly by permissionless blockchains where any person can add a node to the blockchain, and the identities of nodes in the blockchain are not known. Thus, it is necessary to have a consensus mechanism that allows nodes to collaborate in a trustless way.

工作证明背后的经济激励是如何在一个完全分散的网络中保持共识的完美例子。要成为工作证明区块链中的节点/矿工,需要硬件资源、电力和时间,但是如果节点遵守规则,即根据共识机制,则它们会获得奖励。如果节点试图攻击区块链,篡改数据或执行双重消费,他们将不会得到奖励,他们只会浪费资源。

2020 年,矿工获得了价值约 70 亿美元的比特币作为整体奖励,用户支付了约 8 亿美元的比特币费用。不错吧。虽然当矿工是一项艰苦的工作。

工作证明的优点:

网络的可扩展性(就节点数量而言)

安全性随着节点数量的增加而增加,即挖掘社区越大,安全性越高

矿工因其对网络的计算能力贡献而获得激励

  • 大多数情况下非常安全
  • 工作证明的缺点:
  • 易受 51%的攻击(特别是小工作证明区块链)
  • 采矿难度通常会变得更难,采矿硬件很快就会过时(盈利能力仅在 3 年内就会变为零)

采矿成本高昂,通常需要专门的硬件才能盈利

  • 它需要大量的电力
  • 工作证明区块链一般都有较低的吞吐量(研究表明,工作证明区块链可以达到每秒 60 笔交易而不损害安全性)【Xi】
  • 根据使用的区块链协议,在区块链验证交易需要时间,这就是为什么建议等待 10 到 20 分钟,直到比特币网络(1 或 2 个区块)或以太坊区块链(约 20 个区块)验证/提交交易
  • 工作证明挖掘流程如何工作
  • 开采比特币比开采黄金还难。想象一下,你必须重复散列千万亿次,直到你找到正确的!

不同的区块链可能有不同的机制,但让我们看看我们的创世区块链,比特币,作为一个例子。

在比特币挖矿中,矿工需要想出一个满足一定要求的块 hash。为了得到这个散列,他们需要改变块中的一段数据,称为 nonce,并且他们需要做很多次。这就是彩票猜测过程。听起来很复杂?别担心,让我们简单点。

全球比特币矿工平均要进行多少次哈希运算才能开采一个区块?嗯,我说过很多次了:

Different blockchains may have different mechanisms but let's look at our genesis blockchain, Bitcoin, as an example.

每个比特币的哈希数

=(网络哈希速率)/(每 10 分钟 6.25 BTC)

= (140 秒)/ (6.25 * BTC / (600 秒) )

= 140 * 600 / 6.25 * Th / s / BTC * s

= BTC 街 13,440 号

= 134.4 亿小时/BTC

= 140 * 600 / 6.25 * Th / s / BTC * s

我们将当前网络每秒哈希速率除以 6.25(每 10 分钟 BTC 区块奖励),我们得到一个非常大的数字。

截至 2021 年 1 月,矿工平均需要计算 13.44 万亿次哈希才能生成一个比特币。如果我们把它乘以 6.25,就需要 84 万亿次散列来挖掘一个单独的块!矿工们需要重复上图中的计算,确切地说是千万亿次,直到一个区块开采完毕。

假设你正试图独自找到我的比特币,而你拥有的是市场上最好的 CPU,AMD 锐龙 9 3900X 12 核处理器。以目前的难度,开采一块比特币需要 225 730 年。

可惜用普通电脑挖矿比特币是蛮没用的。这在 2009 年和 2010 年时是可能的,当时网络中的哈希能力仍然很低,但目前只有非常强大的硬件,如专业的 ASIC 矿工才能完成这项工作。当时,没有多少人对开采比特币感兴趣,BTC 价格也只有几分钱。

早期挖掘比特币的比特币早期信徒能够买到兰博基尼。

但是……为什么挖掘比特币那么难??而挖掘过程是如何完成的?

正如我们之前看到的,当更多的散列能力被添加到网络中时,工作证明的难度增加。块的难度和比特字段表示目标散列具有的零的数量。哈希开头的零的数量是挖掘者需要满足的条件。为了生成符合这一条件的散列,挖掘者必须遵循下面的过程,尝试不同的随机数,直到他们创建所需的散列。

要创建块哈希(即挖掘块),需要满足工作证明中的某些条件。根据所使用的算法,可能会有一些小的变化,但条件通常是找到一个值符合特定要求的散列。换句话说,散列需要以多个零开始。

这个过程非常简单,但非常重复(正如我们所看到的,矿工重复了数十亿或数万亿次)。

根据该图,为了执行必要的工作来挖掘块并获得块散列,挖掘器将执行该任务。这就是块头中的一个字段 nonce 发挥作用的地方。nonce 是一个 32 位的数字,挖掘器需要猜测,以便根据目标创建散列。

挖掘器将创建块头,将其转换成一串数据

挖掘器向数据添加一个随机数,并将其提供给哈希算法(随机数是挖掘器可以自由更改的块的唯一部分)

获取结果哈希

  1. 运行测试以检查是否满足条件,即目标哈希
  2. 如果满足条件,这意味着挖掘器找到了根据目标生成散列的 nonce
  3. 如果不满足条件(很可能),挖掘器将尝试不同的现时,即,他返回到点 2,尝试新的现时,直到它产生满足目标的散列
  4. 矿工们很可能不得不执行这些计算千万亿次,直到他们得到正确的值。
  5. 一旦一个挖掘者找到正确的散列,他将把该块广播到网络,并且其他挖掘者可以容易地验证该随机数根据目标产生散列。挖掘该块的矿工也将在该块中包括 coinbase 事务。该交易对应于他将获得的整体奖励。
  6. 比特和目标

在挖掘中,挖掘者试图找到低于目标值的哈希值。哈希值必须低于块头中的位字段所代表的值。这也意味着目标散列必须以多个零开始。这个零的数量将很难增加。难度越大,挖掘一个块就越难,因为找到一个满足所需目标的 hash 就越难。

为什么散列中的这些“零”会对难度产生如此大的影响?如果你认为,用 20 个连续的 0 来散列一个块的概率是非常低的。这就像试图在千万亿张彩票中找到一个以 20 个 0 开头的彩票丛林。或者和掷骰子一样,连续 15 次得到相同的数字。这是一个非常非常低的概率,这就是为什么它如此困难。

为了说明概率以及获得比目标散列值低的具有大量零的散列值有多难,让我们想象我们正在玩骰子。投掷 15 个骰子并得到相同价值的概率是多少?

pⁿ = (1/s)ⁿ

假设我们的骰子是 6 面骰子:

1 个骰子:(1/6)^1 = 0.16 或 16%的概率

2 个骰子:(1/6)^2 = 0.02(7)或 2.77%的概率

4 个骰子:(1/6)^4 = 0.00077160493827 或 0.077160493827%概率

6 个骰子:(1/6)^6 = 0.00002143347050 或 0.002143347050%概率

15 个骰子:(1/6)^15 = 0.0000000000212682249 或 0.00000000212682249%

这个概率意味着你需要平均投掷 15 个骰子 470 184 984 737 次才能让它们都面对相同的值。那就是 4700 亿次!

现在你可以看到,要得到所有具有相同值的骰子或有这么多“0”的散列比看起来要困难得多。

既然理解了概念,那我们就用实际的公式来看一下,看看矿工们是怎么根据难度来找 hash 的。

难度=最大目标/当前目标

所以 MAX_TARGET 是为第一块设置的难度,基本上就是难度= 1,写成 1d00ffff 十六进制值。

如果我们将 386,867,735 块的位值转换为十六进制,我们将得到值 0x170f2217。该值分为四个字节。第一个是索引,后面是 3 个字节。这种情况下,位是 0x17 的索引和 0x0f2217 的系数。在这里,0x 意味着我们正在谈论一个十六进制数,又名 hex,一个用于计算的数字系统。

目标阈值是一个 256 位整数,哈希需要等于或小于该整数才能满足目标哈希。这是我们在挖掘过程中提到的目标散列。

我们还可以将这个目标值与哈希值进行比较,遵循一个简单的等式:

目标=系数 2 ^(8 (指数–3))

我们首先需要将我们的比特值转换成十六进制:

386867735 0x 170 f 2217

然后,我们用我们的值代替等式,

0x0f 2217 * 2^(0x08 *(0x 17–0x 03))

您可以使用 Python 计算器来帮助进行十进制到十六进制和十六进制到十进制的转换:

从十六进制转换成十进制,我们得到,

991767 x 2 ^(8 x(23–3))= 1449469094350757594478113895488529861555105250349678592

十六进制的意思是

0x 0000 0000 0000 0000 00 f 2217 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

与数据块的哈希相比,我们看到我们的数据块哈希更低:

0x 0000 0000 0000 0000 0000 000 92 F5 f 21 CD 6 db 1d 3d 74252 d6e 343 BD 7 a 0 fcac 448 ef 01 a 5

简单对吗?

我们还可以使用 Python 计算器直接到达目标点,检查散列值是否低于目标值。

让我们使用以下等式来计算目标值:

目标=系数 2 ^(8 (指数-3)

如你所见,我们得到了完全相同的结果,这是一个目标值。如果你想自己试试,可以通过你的命令提示符下载 python。

我们还可以检查块哈希是否低于目标值:

int(block_hash) < int(target) = True

This last function shows that the block hash integer is lower than the target integer, meaning that the hash met the target, i.e. condition is true. YAY!

股权证明

在工作证明之后,利益证明是第二个最广为人知和使用的共识算法。一些加密货币使用它,与工作证明相比,它有一个非常不同的机制。

状态证明算法的机制和激励机制是不同的。当创建一个新的区块时,赌注证明算法通过检查一个人下了多少货币来选择谁是区块验证者。赌注越大,被选为块验证者的概率就越高。为了证明利害关系,我们称做工作的节点为块验证器而不是挖掘器,我们说块验证器创造新的块而不是挖掘新的块。

当发出一个新事务时,它与其他事务一起被放入一个块中,并且该块被限制在一定的大小(MB)。验证节点验证块中事务的有效性,并将该块广播给区块链中的其他节点。在验证该块并将其与其他节点共享之后,如果其他节点同意该块的内容,则验证节点将收到奖励。

以太坊正在向以太坊 2.0 迁移,集成了 Casper,一种利益证明共识机制,将以太坊从工作证明切换到利益证明。新的以太坊利益证明协议要求块验证者支付安全押金,以便验证者能够参与协商。如果他们创建了一个欺诈块,他们的存款将被没收,块验证者失去了参与的能力。

利害关系的利弊证明

赞成的意见

与工作证明相比,它不需要太多的电力

与小型验证加密货币相比,它被认为是安全的,可以抵御 51%的攻击

骗局

  • 无关紧要的问题
  • 假股份攻击和 DDoS 攻击——有人可以谎报他们拥有多少股份,以便连接到另一个节点,并向他发送大量连接(DoS 攻击)

  • 在利害关系证明中,块验证器根据它们的利害关系增加了被选中验证块的机会。赌注越大,被选中验证区块并赢得奖励的几率就越高。也就是说,买彩票越多,中奖概率越高。以我们图表中的例子为例,假设 Eve 买了 10 张彩票,Frank 买了 20 张彩票,Carol 买了 30 张彩票,这样增加了她的机会。
  • 为了执行 51%的攻击,一个人需要购买至少 50%的可用加密货币,这将非常昂贵。大多数股权证明机制对此都有保护,但对股权证明加密货币进行 51%的攻击无论如何都不是很明智。

虽然对于一个人来说,获得一种加密货币的所有货币的 51%是非常昂贵的,但一个人确实可以这样做并尝试攻击。然而,攻击他占多数的网络并不符合他的最佳利益。这将损害网络,并使加密货币的价值下降,这意味着攻击者的持有量也会下降。因此,在网络中占多数的人会受到激励去维护网络安全。

stake block 验证或“挖掘”的证明是如何工作的?

赌注越大,被选中的机会就越大。在节点网络中,卡罗尔被选为这一轮的验证节点。

卡罗尔被选中验证该回合的封锁

Carol 必须投入比他可能获得的交易费和奖励更大的赌注。该股份将被锁定,直到验证完成

Carol 用事务生成一个块

  1. 新块被广播给网络上的其他对等节点
  2. 需要经过一段固定的时间,以便让对等节点有时间确认 Carol 做得很好,并且他正确地验证了该块
  3. 如果验证正确,该块将被永久附加到区块链
  4. 如果验证不正确(即数据不正确、交易不正确,或者 Carol 试图为自己伪造一些假货币),Carol 将失去赌注和奖励,并可能被禁止进入网络
  5. dpo 股权委托证明
  6. 授权证明与民主非常相似。姑且只叫 DPoS 吧因为名字太长了,打这么多手指都开始疼了。
  7. DPoS 是一种共识机制,加密货币的利益相关者或所有者可以在选举过程中选举有限数量的验证节点。验证节点,在 dpo 中也称为见证节点或块生成节点,验证事务/块并获得工作报酬。

通常,验证节点的选举是实时和持续的,即用户/代表可以随时投票。利益相关者可以投票决定他们想让谁做代表,并阻止验证者/见证人。投票权是根据他们拥有的货币数量来定义的,即更多的货币转化为更多的选票(就像公司的股东投票权一样)。利益相关者也可以将他们的投票委托给其他利益相关者,他们将代表他们投票(同样,非常类似于公司股东代理投票)。因此,残疾人组织是一个民主进程。

类似于股权证明,块验证者因验证交易而获得报酬。他们还可能被要求持有股份,如果出现不良行为,这些股份可能会被没收。具有新事务的块可以每隔几分钟被附加到区块链。因为 DPoS 更集中在少数节点上(例如,EOS 有 21 个块生产者/见证人),所以网络广播要快得多,并且允许更好的吞吐量。

如果一个验证节点不能产生一个块或者表现出一些不好的行为,他可能会失去他的股份并被踢出网络。然后,涉众将投票选举一个新的验证节点。

EOS、Steem 和 BitShares 是 DPoS 区块链的一些例子。

通常,为了成为验证节点的候选节点,节点管理器将向网络提交他们的提议,并试图说服社区他们具有成为验证节点的所有要求。通常,一些标准,如节点背后的团队、硬件容量、位置、第三方审计、预算和社区参与是有利于节点当选的因素。

与股权证明类似,在 dpo 中,股权越高,投票权重越高。根据区块链的不同,用户(或利益相关者)通常可以通过代理投票或直接投票给见证人。代表是社区中的活跃成员,他们改进区块链、开发新功能、改善治理,有时还促进区块链的采用。

见证方或块验证方将是网络中的“矿工”。他们的工作是验证交易,向区块链添加块,维护共识机制并保持网络健康。他们需要分配计算资源(本地服务器或基于云的服务器),并且必须确保高可用性、数据完整性和高吞吐量。如果证人未能遵守标准或行为恶意,她可以很容易地从网络中删除。

EOS 块生产商或见证人需要投资一些基础设施和设计节点,以便提供必要的安全性、可扩展性和网络要求。在上图中,我们可以看到节点架构的高级图。

虽然任何人都可以成为块生产商的候选人,但考虑到他们在社区中的参与和硬件能力,市场中的一些参与者可能更有优势。作为区块链最大的 dpo 之一,EOS 与谷歌云合作,成为 EOS 区块链区块生产商。

基于云的见证利用了云的可扩展性、安全性、可靠性和成本效益。谷歌云(Google Cloud)或 AWS 等云提供商非常适合作为见证人做出贡献。

DPoS 的利弊

赞成的意见

证人的动机是诚实,并向网络提供必要的计算能力

高性能和更好的可扩展性,以及良好的 TPS–每秒事务数

恶意的证人或代表几乎可以被实时投票淘汰

  • 见证人可以在几秒钟内验证交易
  • 交易费用通常很低或不存在
  • 高能效和高成本效益,因为它不需要工作证明,并且可以基于云
  • 半分散化,具有更强大的治理体系
  • 骗局
  • 当大“鲸鱼”在网络中获得很大权力,并可以投票给他们的亲信时,它可以创造某种程度的集权

  • 更容易受到 51%的攻击

小股东可能没有投票的动机

  • It can create some degree of centralization when big "whales" gain much power in the network and can vote for their cronies
  • 燃烧的证明
  • 烧伤的证明是一个实验性的共识机制,也是一个迷人的概念。Slimcoin 是一种废弃的加密货币,曾经使用过。burn 的证明旨在为参与验证事务的节点提供一种非常不同的激励机制。

烧钱的证据可以被视为与央行所做的正好相反:它销毁货币,而不是印刷货币。

不像工作证明那样“燃烧”电力和硬件,燃烧证明只是燃烧自己的货币来激励节点成为区块链中的好演员。烧伤矿工的证明需要发送一些货币到一个不可描述的地址。他们送去烧的币越多,被算法选中去挖矿块的概率就越高。如果他们验证交易并正确开采区块,他们将获得奖励。如果没有,他们只是简单地烧掉货币,浪费金钱。

矿工是根据他们送去焚烧的货币数量随机挑选的

燃烧更多的货币意味着更多的承诺,因此被选为矿工的机会更高(就像在工作证明上花费更多的电增加机会或开采一个区块)

烧毁的货币永远丢失了,锁在一个烧毁的地址

  • 不可描述的地址或烧录地址是没有私钥的区块链地址,因此,发送到该地址的货币将永远丢失。货币不会从区块链消失;它们被简单地送进黑洞,再也不能使用了。
  • 证明燃烧是一个通货紧缩的概念,随着时间的推移,货币的供应减少,增加了稀缺性,更有可能增加货币持有者的价值。BNB(币安货币)也定期焚烧 BNB 货币,减少市场供应。另一方面,随着时间的推移,增加供应量的货币往往会贬值,也就是说,它们会引起通货膨胀。通货膨胀货币的例子是法定货币,如美元和美元。随着时间的推移,这些货币通过印刷降低价值,因此购买某些商品所需的货币数量随着时间的推移而增加。
  • 另一方面,流通中的美元有 22%是在 2020 年印刷的。超过 9 万亿美元涌入市场,使得美元更加便宜。美元在 2020 年失去了很多价值,这意味着我们现在可以用同样数量的美元购买更少的商品。另一方面,你可以用同样数量的比特币购买更多的商品,因为这些货币有固定和可预测的供应。

T2实用拜占庭容错

PBFT 试图解决拜占庭将军的问题。拜占庭将军问题是一个假设的情况,许多将军带领他们的拜占庭军队需要决定他们是进攻还是从他们包围的城市撤退。

他们只有全部同时进攻,无人撤退,才能攻克城池。为了确保行动的成功,将军们需要达成共识:他们需要放弃进攻或者全部撤退。他们需要在将军之间传递信息的马信使。其中一个问题是,送信人可能是叛徒,也可能中途被杀。其中一个信使也可以改变主意或临阵脱逃,这将危及整个军队。这就是为什么拜占庭将军需要有一个共识机制来确保每个人都在同一页上。

在区块链网络的上下文中,潜在的叛徒可能是节点,而信使可能是它们之间潜在的被破坏的通信信道。这个问题在 1999 年由两位计算机科学家 Miguel Castro 和 Barbara Liskov 开发的 PBFT 算法解决了。PBFT 也可用于除区块链之外的其他分布式系统,如对等网络和物联网网络。

PBFT 使分散式系统对故障具有弹性,并允许有多个参与者的系统一致工作。PBFT 系统对于恶意节点或无法与其他节点正常通信的节点是有弹性的,即容错的。PBFT 可以保护具有多个节点的系统,并增加一些弹性和容错能力。

拜占庭将军的问题:

通信信道可能不可信

该消息可以被改变或替换

信使可以被杀死

  • 信使可以被延迟
  • 解决方案是:
  • 共识算法,它不受信任缺失的影响
  • 诸如 PBFT、PoW 和 PoS 的共识机制是拜占庭容错的

“好的”将军在网络中必须比那些有缺点的将军拥有更多权力

  • 加密集成创建共识和数据不变性
  • 在比特币和其他区块链工作证明中,当安德鲁将军想要给“大老爹”将军发送消息时,他可以接收消息,并添加随机数,产生特定的唯一散列。然后,他可以把这个送给大爸爸。即使送信人试图改变消息(中间人攻击),他也必须改变这条消息和其他将军发送的其他消息的散列。这将需要太多的工作,使得这种攻击不可行。
  • 一旦 Big Daddy 将军收到来自 Andrew 将军的消息,他可以很容易地验证该消息没有被修改,并且他将向该组回复“我同意”,添加 nonce 和 hash,以便其他人看到该消息是合法的。其他将领也会这样做,达成共识。每个人都必须执行这种工作证明,使得攻击者(内部或外部攻击)很难改变将军们的共识。

如果其中一个将军决定撤退而不是进攻,这个决定不会影响共识,因为其他三个将军都保持共识。这就是为什么这些共识机制被称为“容错”的原因,因为它们容忍大量节点的故障。一旦将军们达成共识,他们就可以进攻提斯特,攻克这座城市!

没有工作证明的区块链也应用拜占庭容错机制。例如,Hyperledger 锯齿使用 PBFT-实用拜占庭容错。

我们看到拜占庭容错系统是分布式系统,可以在一定程度上容忍故障节点。在 PBFT 中,如果 f 是故障节点的数量,那么需要 2f + 1 个非故障节点来达成共识。

让我们看看 PBFT 算法是如何恢复的。假设以下情况

n =节点总数

f =故障节点的数量

PBFT 最多可以容忍 f = (n-1) / 3

或者 n–f =(2n+1)/3

PBFT 算法的概要说明:

一个客户端,在本例中是我们的将军 Andrew,向一个对等节点发送消息/请求——将军 Big Daddy

Andrew 和 Big Daddy 都将消息多播到其他节点,有时在 PBFT 也称为副本(Sophia 和 Elizabeth 将军)

副本执行请求并向其他节点发送回复

  1. 客户端等待来自将军的 n + 1 个具有相同结果的回复。这将导致积极的共识
  2. 瞧,达成了共识,拜占庭将军的问题解决了!让我们征服狂喜!
  3. 经过时间的证明
  4. 也被称为诗人,这种共识是一切,但诗歌!该算法主要用在许可的区块链,如 Hyperledger 锯齿(除了 PBFT)。PoET 使用彩票式的随机选择来选择将要赢得新块的节点。
  5. PoET 于 2016/2017 年开始在 Hyperledger 锯齿中使用,由英特尔推出。“矿工”必须首先加入网络,获得会员证书。一旦它们进入网络,节点需要等待一段随机决定的时间。在开始在区块链中开采新的区块之前,采矿者必须至少等待规定的时间量。在 PoET 中,时间最短的矿工被选为该轮的区块开采者。该系统倾向于公平,并选择具有良好随机性的矿工。它不需要太多的电力消耗,矿工可以在等待轮到他们的时候“睡觉”。

POeT 基于英特尔开发的名为 SGX 的特殊 CPUs 软件保护扩展。SGX 允许对不能访问或更改的 CPU 内存进行逻辑分离。这些部分也称为 enclaves,可以执行独立的命令和内存加密。只有飞地可以进入和改变储存在这个隔间。代码是加密的,不能在 enclave 之外访问,这使得 enclave 内部的进程非常安全。

耗时证明的主要用例是 Hyperledger 锯齿,这是一个许可的区块链,为主要使用 POeT 作为共识机制的企业而设计。锯齿它用于开发和制定智能合约,以及分布式分类账。它可以部署在内部或云上。锯齿可用的共识机制有 RAFT、PBFT 或 POeT,有趣的是,共识机制可以根据网络的需求或增长而动态改变。它与医疗保健、供应链可追溯性、金融系统、数字资产交易、资产结算等广泛的用例兼容,与其他 Hyperledger 产品相似,并且是开源的。锯齿的主要用例是允许在区块链上创建和跟踪资产。锯齿最知名的用例与供应链追溯和食品追溯应用有关。

要作为节点参与锯齿的诗人共识,节点需要下载应用软件并获得会员证书。然后,代码将为参与节点生成一个密钥对。SGX 使用非对称密钥方法和私钥/公钥对。矿工需要将 SGX 的证明发送到网络以获得批准。

POeT 机制为挖掘器生成一个随机等待时间,挖掘器从 SGX 可信代码中获取签名计时器。在等待时间过去后,矿工得到一个证书,表明他已经等待了必要的时间。一旦区块被开采,采矿者就将区块与证书一起广播。取决于区块链是如何设计的,矿工可能会因为工作而获得报酬,也可能不会。

重要性的证明

在重要性共识证明中,节点根据它们拥有的股份(即拥有的货币数量)加上节点拥有这些货币的时间长度来接收评级。重要性证明计算中还包括其他指标,如交易次数和净交易量——过去 x 天内交易的数量和规模。与赌注的证明不同,在重要性的证明中,节点不仅需要赌注,它们还需要通过在一段时间内拥有货币,即授权,并实际使用它们进行交易,来获得网络中的一些重要性。

作为赌注的证据,富有的节点通过积累货币变得更加富有。重要性证明试图通过添加其他变量来解决这个问题,这些变量将赋予节点“重要性”。这种共识机制是由加密货币 NEM 开发和实现的。

NEM 是加密货币 NXT 的一个分支。它于 2015 年 3 月推出,是一款面向企业的高能效区块链。它建议解决一些与证明利害关系有关的问题,例如越富越富的弊端。重要性证明引入了基于附加变量的评级或评分系统。评级越高,节点被选为块采集器的概率越大(他们称之为矿工块采集器)。计算得分时包括的变量有归属、交易伙伴以及交易的数量和规模。

在 NEM 重要性证明机制中,节点需要满足以下条件作为条件的一部分,以获得更高的评级并被选为收集节点:

至少有 10000 XEM(NEM 本地加密货币)的余额。这也称为最低既得利益,这是一个需要在节点的帐户中存在一段时间才能开始收获的金额

已经转移了至少 1 000 XEM

发生在最近 43 200 个街区内(大约 30 天)

  • 拥有交易伙伴,即与网络中的其他节点进行交易。在这种情况下,网络理论被用于验证节点的重要性(例如,它避免了某人创建两个帐户以便仅相互交易)
  • 截至 2015 年 4 月 29 日的 Nem 交易图。资料来源:国民经济管理白皮书
  • 然后,该算法将这些值放在一起,并计算每个节点的评级。根据评分,该节点将有一定概率被随机选中进行下一轮分块收割。如果选定的节点不在线,可以将块收集委托给另一个节点,也称为委托收集。

重要性证明不需要节点来计算复杂的问题,因此,它不需要花费太多的能量,也不需要任何专门的硬件。

别担心,你不需要给出任何重要性的证明。如果到目前为止阅读这本书,我敢肯定你是重要的!

密码学

哇,密码学!那么什么是密码学呢?我们如何使用质数和随机数等东西来加密信息?继续阅读,这是超级 duper 酷!

质数

质数在哈希和密码学中非常重要,所以我们将在本书的这一部分讨论它们。

对于散列,使用质数是因为质数为散列函数提供了更好的创建唯一值的机会。哈希函数使用模数,使用合数(即非质数)会增加哈希冲突的概率(即不同的输入会导致相同的哈希)。质数将通过将值乘以质数来增加散列时创建唯一值的机会。这就是数学的本质。例如,如果你有一个字符串“Unblockchain ”,将每个字母乘以一个质数,然后将它们相加,就会得到一个非常独特的散列。明白了吗?

质数是只能被自身整除且能被 1 整除的数。质数的一些例子有:1,3,5,7,11,13,17...89,97,8191 也是已知最大的质数是 2^82,589,933,这是一个天文数字,写出来有 24,862,048 位数。

素数的数目向无穷大递减。数字越高,找到的概率越低。比如 1 到 100 之间有 25 个质数,但 100 到 200 之间只有 21 个质数,200 到 300 之间有 15 个质数,10 000 到 10 100 之间只有 6 个质数。

欧几里德在 2000 多年前就证明了质数是无穷的。虽然检查一个小数字是否是质数很容易,但它越大,就越难检查它是否是质数,这对数学和计算机科学提出了巨大的挑战。此外,数字的范围越大,我们找到素数的概率就越小,验证一个数字是否是素数就越困难。很难找出一个有效的计算公式来寻找大素数。

质数可以用公式 x/In(x)近似计算,质数的密度用 1/In(x)近似计算。X 越大,公式越精确。

怎么才能发现一个素数是不是素数?最直接的方法是用这个数字除以它下面的每一个数字。如果它不能被其中任何一个整除,那么它就是一个素数。然而,这是一项非常繁重工作。

所以我们需要应用一个测试或者算法来测试一个素数是不是素数。同样,如果我们正在寻找一个小的 6 位数的质数,检查 100699 是否是一个质数是非常容易和快速的。然而,如果我们要搜索大素数,比如说,长度超过 1000 位的素数,这项工作就会变得更加困难。

这就是素性测试的切入点,也是为什么我们要讨论它们,因为它们对密码学很重要。

基本上有两种计算质数的方法。一种是使用确定性算法,如试除法(用素数除以它之前的所有数,以检查是否有可能被除)或威尔逊定理。确定性意味着我们将能够 100%准确地说出这个数是否是一个素数。确定性算法的计算效率非常低。

另一种选择是更快获得答案的概率方法,但它不能 100%肯定地告诉我们它是一个素数(虽然适度准确,但不是 100%)。

检验一个素数的确定性方法是非常劳动密集型的,因为它们需要大量的计算。试除法要求 n(要分解的整数)除以任何较小的数。威尔逊定理也需要大量的能量。它是这样工作的:给定一个自然数 n> 1,它是素数当且仅当所有小于 n 的正整数的乘积小于 n 的倍数 1,即 n 素数(n–1)!≡ 1(型号)

米勒-拉宾是概率方法,即它不是 100%准确,但对大多数加密算法来说足够准确。大多数密码系统使用米勒-拉宾素性检验来确定一个数是否可能是素数。

随机数

随机数在密码学中也非常重要。生成随机数听起来很简单,但事实并非如此。一点也不。如果让我随机生成一个两位数的随机数,我可能会说 87。我的选择是随机的吗?还是我受到了我的文化和个人经历的影响?我对 87 的选择可能不是那么随意。8 在中国文化中是个幸运数字,7 是 c 罗的号码。可能是因为这个原因,87 才会在我的脑海里冒出来。

同理,计算机也很难产生随机数。计算机并不关心当地文化或足球比赛,但一切都是在计算机中定义的。计算机代码没有随机性。计算机是确定性的,这意味着在给定某个初始状态和输入的情况下,它们总是产生相同的输出。

关于随机性重要性的冷事实:德国可能因为缺乏随机性而输掉了二战。纳粹德国用来加密战争中使用的信息的恩尼格玛机被英国炸弹破解,该机由艾伦·图灵开发,利用了恩尼格玛机缺乏随机性的特点。在那之后,英国盟军能够监听到这些信息,并最终采取必要的行动打败纳粹德国。

这就是为什么我们需要特殊的方法和途径来产生随机数,这在密码学中是很重要的。随机数是加密的基石,因为它们允许生成唯一的密钥。它们还消除了生成数字的推理和可预测性,使攻击者很难访问这些信息。攻击者将没有办法或机制来推断这些数字是如何生成的,这使得破解和发现密钥是如何创建的变得更加困难。

把熔岩灯放在区块链的书里,这不是随机的!

那么,如何才能产生完全随机数呢?生成随机数有不同的方法,比如硬件设备可以基于一些用作种子的随机数据生成相当随机的数字。这也称为随机种子,它是用于初始化随机数生成的数据。

选择一个好的随机种子对于加密安全性至关重要。如果随机种子不够随机,比如说数字 87,黑客可以很容易地发现用来产生一对加密密钥的种子。然而,如果随机种子具有高熵,黑客就很难或者不可能发现种子。让我们看一些可以产生高熵随机种子源的例子:

Linux 内核可以从击键计时和鼠标移动中产生熵。一些开源项目允许来自音频和视频源的种子数据

Linux 系统有/dev/urandom 伪随机数生成器,它从计算机硬盘上收集的噪声中生成随机性。您可以通过在命令行界面中键入 cat /dev/urandom 来尝试一下。这个随机种子来自于噪音和你执行的随机动作你是你的计算机,它对于每台计算机的活动都是非常独特的

Windows 使用不同的熵源,如主板数据、CPU、中断计时、鼠标移动和击键计时

  • 硬件生成的随机种子由 CPU 模块生成
  • 从计算机麦克风随机收集的声音
  • 传感器测量计算机硬盘内的空气湍流
  • 来自 80 个熔岩灯的图像被 Cloudflare 用作随机性和熵的种子源。哦,我们的熔岩灯来了!
  • DNA 测序数据
  • 电子在亚原子粒子中的运动
  • 光线变化
  • 细菌是如何生长繁殖的
  • …您可以为我们的随机数列出更多潜在的种子,但最重要的是它可以从中创建随机产品。当然,其中一些随机种子比其他的更方便,我们大多数人不需要从一组 80 个熔岩灯中产生随机性。
  • 通过随机鼠标移动生成的比特币密钥

正如你所看到的,生成随机数对于所有加密活动都是极其重要的,计算机可以使用多个 PRNG(伪随机数生成器)来生成相当随机的数字。我说相当随机而不是 100%随机,因为要达到 100%随机几乎是不可能的。或者是?

RSA 算法

RSA 加密算法是由罗恩·里弗斯、阿迪·萨莫尔和伦纳德·阿德勒在 1978 年发明的。RSA 使用公钥基础架构和数字签名实施非对称加密。RSA 是世界上最常用的公钥算法,也是人类历史上被复制最多的软件。每个互联网用户每次进行在线交易或支付时都会使用 RSA,我们每次唱区块链交易或向某人发送比特币时也会使用它。

正如我们之前看到的,在公钥加密中,生成了两种密钥:可以与任何人共享的公钥和只有其所有者知道的私钥。公钥用于加密数据,私钥可以解密数据,这意味着只有拥有相应私钥的用户才能解密数据或签署交易。在交易交换中,两个用户都生成用作数字签名的公钥/私钥对。

你可以用下面的方式看到这个加密系统:Alice 有一把锁和相应的钥匙。她向鲍勃发送了一个打开的锁,鲍勃将消息放入锁中,并将其发送回给爱丽丝。然后,爱丽丝可以用她的私人钥匙打开锁。

在这种公钥基础设施中,用户的数字签名用于验证交易签名的真实性,从而提供了一种安全的方式来检查用户的交易是否由其拥有的私钥签名。任何人都可以使用收件人的公钥发送消息,只有收件人才能用他的私钥打开消息。

这是质数和随机数发挥作用的部分。

RSA 签名是非常安全的,因为它们是由很难分解的大素数的乘法运算生成的。RSA 概念由 4 个步骤组成:生成密钥、分发密钥、加密数据和解密数据。

为什么随机数很重要?嗯,我们看到的随机数将帮助我们选择素数,我们将使用这些素数来生成 RSA 密钥。在得到随机数(一个非常大的数)后,如果这个随机数不是一个质数,函数将搜索下一个最接近的质数。

让我们看看生成 RSA 密钥对的步骤:

生成一个随机数。它需要很大——大约 154 位数或 10^154.

如果随机数不是质数,使用函数 nextprime()选择最接近的质数。另选一个质数。让我们称这两个素数为 p1 和 p2。

得到 p1 和 p2 的乘积:N = p1 x p2,如你所见,这个合数 N 将超过 300 位

  1. 得到φ或 Phi:φ(N)(欧拉定理),用 p1-1 和 p2-1 代替素数并相乘:φ(N)=(P1-1)x(p2-1)。注意φ是一个数的“可破性”。给定 n,φ测量有多少小于或等于 n 的整数不与 n 共享任何公因数。例如φ8 = 4。计算φ在一种情况下很难预料。任何素数的φ总是 p1-1。
  2. 一旦有了φ(N)=(P1-1)x(p2-1),如果有了 N 的因式分解,那么求φ(N)就很容易了。比如 77 =7x11 的质因数分解。
  3. 选择一个指数。选择 e:1 < e < Phi(N)
  4. Lock: Lock (N,e)

Chose private key: choose d:d x e mod Phi(N) = 1

  1. Key: your key result is (d, N), where d is the private key and N is the public key
  2. In step 5, we connect the phi (Φ) function to modular exponentiation, exploring Euler's Theorem relationship between phi function and modular exponentiation: m^Φ(n) ≡ 1 mod n .
  3. This means that we can pick any two numbers with no common factor, let's say 5 and 8 and replace m and n in the equation:
  4. 5^Φ(8) ≡ 1 mod 8

Which is 625 ≡ 1 mod 8

Now we can shuffle things a bit, and we get

m^kΦ(n)+1≡m mod n  OR   m^ed ≡ m mod n which is also ed=k Φ(n)+1

now it's easy to calculate d, only if the factorization of n is known:

意味着 d 是私钥!

让我们做一个简单的例子来看看 Alice 和 Bob 之间的关键点。

Alice 将生成两个素数,p1 和 p2(为了便于举例,我们选择两个小素数)并将它们相乘得到 n。然后,她很容易地计算出,因为她知道 n 的因式分解,等于 3016。然后,她选择一个“公共”指数,这个指数必须是奇数,并且与不同,在这种情况下,我们假设是 3。最后,她找到了她的私钥 d 的值。

现在她有了 d,私钥,n 和 e 是公钥。n 和 e 就像一把打开的锁,她可以寄给鲍勃!现在,Bob 可以发送一条消息,通过计算 m 的 e 次方 mod n,从数学上锁定该消息。这里,m 是 Bob 的消息,我们将这一新的“c”称为 Bob 的加密消息。这样,Bob 就用 Alice 的公钥 n 和 e 加密了他的消息!

现在,Bob 将 C 发送回 Alice,Alice 将使用她的私钥 d 解密该消息。简单!

请注意,任何其他人最终都可能监听到他们交换的消息(中间人攻击),但是没有 c、n 或 e,他们无法找到指数 d,而指数 d 是解密消息所必需的私钥。

正如你所看到的,还需要很多很多年才能找到两个质数相乘得到 n,要找到这么大的数的因式分解——RSA 至少有 200 个十进制数(663 位)——需要花费 10000000 长时间,这在计算上是不可行的。即使是量子计算机也可能需要很长时间才能破解。

哈希算法

SHA–安全哈希算法

我告诉过你我喜欢这个杂碎吗?我们已经在本书中简要介绍了哈希算法,但现在让我们来深入探讨一下。

SHA 对应于美国 NIST 国家标准与技术研究所开发的几种算法。SHA 哈希算法具有哈希算法需要具备的主要特征。它们是抗前映像的,这意味着很难(或不可能)将散列的输出反转为原始输入。比如“我爱在公园里跳的狗”这句话的 SHA1 hash 是 03d 6 FD 883 EDC 045071 efb F5 e 48 f 56811090 fdad 4,但是我们永远无法单独从 hash 输出中得到输入。在每个哈希算法中,这个 n 位哈希总是具有相同的长度,这是一个单向的抗冲突机制,这意味着从两个不同的输入中获得相同的哈希是极不可能的。SHA 哈希算法用于签署包括比特币在内的区块链交易,并在计算机科学中有多种用途,如证书签名。一些散列算法对于输入消息可能具有限制大小,并且所有这些算法将总是具有相同大小的消息摘要,即散列结果。

沙-0

Sha-0 是最初的 Sha 系列哈希算法。它的摘要大小为 160 位。它很快被 SHA-1 取代,虽然也是 160 位,但更安全。加密密钥中不再使用 SHA-0

SHA-2

SHA-1 发布后不久,SHA-2 就开始标准化不同的输出大小。来自沙-224,SHA-256,沙-12 和其他。

SHA-256

SHA-256 允许更大的最大消息大小,即 2^64 比特、256 比特的摘要大小、512 比特的块大小和 32 比特的字大小。别担心,这足够哈希数千本有《莎士比亚全集》、《阿特拉斯耸耸肩》和《悲惨世界》总和那么大的书了。SHA-256 硬限制允许最多 2097152 的输入。SHA-256 有一个 32 位输出。普通计算机一直使用 SHA-256,这也是比特币和许多其他区块链背后的基础哈希算法之一。

SHA-384 和沙-513

这两个 SHA 的最大消息大小为 2^128 位,优于 SHA-256,需要更多的计算能力。最大块大小为 1024 位,字长为 64 位。它们使用 64 位进行计算,使用与 SHA-256 和 SHA-224 几乎相同的操作,并且它们执行 80 轮运算。

沙-3

SHA-3 创建于 2015 年,它允许 224、256、384 和 512 位的不同大小。以太坊中使用的 Keccak 算法是 SHA-3 家族的一部分。SHA-3 可以根据需要提供不同大小的输出,块大小根据摘要大小而变化,从 576 位到 1152 位。SHA-3 能打 24 发子弹。

现在让我们仔细观察并分解 SHA-256,它可能是区块链使用最广泛的散列算法。

正如我们之前看到的,哈希算法将任何输入转换为固定长度的字符串。该字符串不能转换回初始输出,这意味着哈希函数是抗前映像的。

加密哈希函数采用任意数据块并返回固定大小的位串。我们将在下面看到如何将 M(消息)转换成哈希值,也称为摘要或简称为哈希。

让我们手动散列一些东西,好吗?您可以在下面看到从消息处理到散列计算所需的步骤。

让我们来看看产生 SHA-256 弦的幕后发生了什么。

第一步:填充信息

SHA-256 首先将消息转换为二进制数,并获得长度 l。这种填充的目的是在哈希计算开始之前准备好消息。填充确保填充的消息是 512 位的倍数。

我想将消息“M = Moky”转换成 8 位二进制表示。Moky 是我的狗的名字,也是我 17 年来最好的朋友。

m = 01001101 o = 01101111k = 01101011y = 01111001

然后,在消息 M 的末尾添加 1 位

m = 01001101 01101111 01101011 0111111001+1 位

长度= l = 32 位(即原始消息的长度)

现在,将 K 个零比特添加到消息中,使其成为 512 的倍数,并将长度为 I 的 64 比特表示添加到字符串的末尾(我们需要用 K 个零填充它,以完成算法所需的比特大小)

计算要追加的 0 位数:

k = 512-(l+1)-64

现在将 l 转换为输入消息长度的 64 位表示形式:

m = 01001101 01101111 01101011 01111001+1 位+ (k 个零位)+ I 为 64 位 bin newLenght = l + 1 + {k 个零位} + (64 位 i) = 512

我们的填充应该是什么样子的图形表示。

填充后,我们的消息如下所示:

步骤 2:解析消息

现在我们将解析填充的消息。在消息填充之后,我们现在需要将消息解析成 512 位的块,然后才能开始哈希计算。

为了进行解析,我们将取每组 8 位并将元素(即每 4 组 8 位)转换为十六进制值。我们将用 16 * 32 位 W 形成 512 位 W(0)字段,每个 W 代表 4 组 8 位。当您看到“0x”时,这意味着它是一个十六进制值。

步骤 3:初始化哈希值

我们的 SHA-256 将需要一些额外的初始值来工作。

初始哈希值如下:

W(0)代表我们的信息。这是我们在步骤 1 和 2 中生成的内容:

W(0) 0 = 0x4D6F6B79

W(0) 1 = 0x80000000

W(0) 2…14 = 0x00000000

W(0) 15 = 0x00000060

H(0)是前 8 个素数的平方根的小数部分的前 32 位。这些值称为初始哈希值,是 SHA-256 算法提供的常量。这些也是我们工作变量的一部分:

H0 = 0x6a09e667

H1 = 0xbb67ae85

H2 = 0x3c6ef372

H3 = 0xa54ff53a

H4 = 0x510e527f

H5 = 0x9b05688c

H6 = 0x1f83d9ab

H7 = 0x5be0cd19

K(0)代表立方根的前 64 个素数(即从 2 到 311)的前 32 位。这些值是常量,由 SHA-256 码提供,并且始终相同,因为它们是加密标准的一部分:

步骤 4: SHA-256 哈希计算

散列算法然后将执行必要的计算,包括创建散列的迭代。现在,我们将之前准备好的初始化哈希值输入到算法中。

对于哈希函数计算,该算法将获取被分成块的消息,并对其进行 64 轮操作。每一轮中获得的输出作为下一轮计算的输入。

在此图中,我们可以看到将在 512 位消息中执行的 64 轮操作。输入 W(消息块)和 K(质数)在每一轮中被发送。前 16 个将把 512 位的消息分解成 16 个 32 位的部分,我们需要在每一步计算 W。

W(i) = Wⁱ⁻ ⁶ + σ⁰ + Wⁱ⁻⁷ + σ其中,

σ⁰ = (Wⁱ⁻ ⁵ ROTR⁷(x))异或(Wⁱ⁻ ⁵罗特⁸(x))异或(Wⁱ⁻ ⁵ SHR (x))

σ=(wⁱ⁻·罗特·⁷(x))异或(wⁱ⁻·罗特·⁹(x))异或(wⁱ⁻·什尔·⁰(x))

ROTRⁿ(x) =将“x”向右循环旋转“n”位

SHRⁿ(x) =将“x”循环右移“n”位

现在我们能够为所有 64 轮创建 W(i)

该图像说明了每一轮/迭代中发生的情况。一旦所有迭代完成,我们就可以完成散列过程。

阿沙-2 族压缩函数的一次迭代。蓝色组件执行以下操作:

Ch(E,F,G) = (E 和 F) XOR((非 E 和 G)

Ma(A,B,C) = (A 和 B) XOR (A 和 C) XOR (B 和 C)

∑(A) = (A >>> 2)异或(A >>> 13)异或(A >>> 22)

∑(E) = (E >>> 6)异或(E >>> 11)异或(E >>> 25)

  • =模 2 加法

红框是 SHA-256 的模 2^32 加法。

在所有的迭代之后,我们得到了所有的散列,并得到一个 256 位的值,该值将最终转化为最终的散列。搞定了。

哈希为:278282 c 6 C4 fa 7a 2 a3 DC a4 d6d 08721 e 17 e 9 b 8 ca 491d 5 bb 1a 5 FB fc 9 e 6 adfefde

SHA-256 是最广泛使用的算法之一,虽然不可行破解,但计算非常简单。我知道这看起来有很多步骤,但是对于计算机来说,执行这些计算是相当简单的。专家们对 SHA-256 的安全性仍有分歧,但现实是破解阿沙-256…嗯,这几乎是不可能的,因为这需要几十亿年的时间。

第五章

以太坊深潜和节点部署

Chapter 5

如果比特币是新世界的银行,以太坊就是互联网。这些都是很大的索赔,对不对?和我在一起。

在这本书里,我们到处都谈到了以太坊,但现在让我们深入探讨一下。以太坊是一个很好的区块链案例研究,因为大多数其他区块链都有类似的概念。这也会给你一些关于公共以太坊和企业以太坊如何工作的背景知识。

一旦理解了网络的分布方式、块、散列、交易的处理方式以及智能合约,您就可以很好地了解构成大多数区块链主干的大多数技术。还有许多其他的区块链,但要在所有主要的区块链做类似的练习,我们必须有一本 20000 页的书,这将花我一辈子去读。出于这个原因,我想把重点放在以太坊上,它会让你对大多数区块链的主要概念有一个很好的理解。

以太坊由 Vitalik Buterin 于 2013 年在其白皮书中首次描述,并将其描述为“下一代智能合约和去中心化应用平台”。

以太坊有自己的货币,称为以太,股票代码为 ETH,截至 2021 年 1 月,其市值约为 1400 亿美元。以太既用于交易,也用作货币,通过用户支付的交易费和智能合约来奖励矿工的工作。以太坊每天处理超过一百万笔交易,大约是比特币的四倍。

重要的是,以太坊是完全免费阅读的,也就是说,区块链是完全公开的,但它不能自由写作。为了在区块链上书写任何代码、智能合约、数据或交易,必须进行费用支付,也称为汽油。有点像这样:你可以看到谁在聚会上,你也可以听到他们在听什么音乐,但是要参加聚会你必须付费!

以太坊也被描述为第二代区块链(类似于第一代区块链的比特币),支持首次智能合约和脚本功能。智能合约允许一个充满可能性的世界,它们可以几乎自动化任何事情,是生活在去中心化的区块链中的自我执行的计算机代码。一旦满足智能合约的条件,就会触发一个事件(无论智能合约是为什么而设计的),从而实现智能合约的目的。

在以太坊,智能合约是用一种叫做 Solidity 的编程语言编写的,这些程序在 EVM 以太坊虚拟机上运行。你可以把 EVM 看作一个巨大的图灵完备的、分散的虚拟机,它分布在世界各地的以太坊节点上。总共有大约 8500 个节点,几乎任何人都可以成为网络中的一个节点。EVM 是智能合约执行的核心。由于其分散的性质,它还具有高冗余性、高容错性,并且非常能抵抗 DDoS 堆叠和不可变等攻击。有什么条件?代价是以太坊的吞吐量可能有点低,并且/或者交易费用有时可能很高。

每个以太坊节点存储区块链和每个智能合约的状态,为区块链的共识机制做出贡献。以太坊的共识机制目前是工作证明,但它计划很快切换到股权证明。比特币和以太坊的主要区别在于,以太坊可以看做是一台运行图灵完全编程语言的超级计算机,而比特币只能用来发送交易。

以太坊的顶部建造了整个工业。数百家 ico 筹集了数十亿美元。许多 NFTs 市场买卖不可替代的艺术品、收藏品和可爱的纪念品。几十个 DeFi 平台在以太坊上运行,在平台上建立整个银行。

以太坊是一个充满可能性、应用和创造力的巨大宇宙。

以太坊街区

以太坊模块由以下几个字段组成。我们将把它们全部分解开来。下面,你可以看到我们从以太坊区块链取回的一块石头。

以太坊块与比特币相比略有不同,尽管有些字段是相同的。这是一个实际的数据块,更准确地说是 888888 数据块,其挖掘时间时间戳为 1453494307,以人类可读的时间表示为 2016 年 1 月 22 日 8:25:07 PM GMT。这个方块样本很好地展示了其他以太坊方块的样子。

在云上部署以太坊节点

让我们和以太坊先生一起玩吧!对于这一部分,我们将需要使用一个虚拟机来部署您的以太坊节点。你可以跟着读(这是一种很棒的学习方式)或者直接读。如果你因为某种原因被卡住了,请不要犹豫,联系我,寻求帮助!

这一节将有许多来自命令行的截屏,以便更容易理解和检查实际正在做什么。

主要有两种选择:使用 Oracle VM VirtualBox(可以免费使用)部署 Ubuntu 虚拟机,或者可以使用主要的云提供商之一——AWS、Google Cloud、Azure、阿里云或 IBM——部署 Ubuntu 虚拟机。第二种选择可能更容易、更灵活、更快。Ubuntu 只是一个 Linux 操作系统,就像 Windows 或 macOS 一样,但在这种情况下它真的很容易使用。

回到部署你的 Ubuntu VM,如果你在笔记本电脑上部署一个虚拟机,它可能会消耗你电脑的大量资源,使它非常慢。因此,部署在云上可能是最好的选择。这本书的目的不是教如何部署虚拟机,但网上有很多内容,或者,你可以在 LinkedIn 上给我发消息,我会尽快回复。

第三种选择是最终直接从您的计算机上进行,但是如果您从一个基本上可以用作游戏场的隔离虚拟机上进行连接,这确实更安全。另外,假设你用你的个人电脑连接。在这种情况下,你将把你的 IP 暴露给以太网,作为一台处理加密的计算机,你将成为黑客的蜜罐。

好吧,让我们在 AWS 上准备好我们的 Ubuntu 机器!

我将让你一步一步地在 AWS 上部署 Ubuntu VM。真的很简单。只需按照下面的步骤。

假设您有一个 AWS 帐户(打开它需要 3 分钟),进入 AWS 控制台并搜索 EC2

一旦您的 AWS 帐户准备就绪,导航到服务并选择 EC2

单击实例启动实例

  1. 选择 AMI:向下滚动,直到找到第一个“Ubuntu Server”选项。单击选择
  2. 选择实例类型。无论什么是自由层,都可以玩一会儿,但是注意当运行以太坊节点时,“自由层”上的实例可能会变慢。如果是这种情况,替代方法可能是选择 t2.large 或 t2.xlarge,并在不使用实例时停止它,以避免产生额外的成本。单击下一步
  3. 配置实例详细信息。你可以让它保持原样。在“自动分配公共 IP”中选择“启用”。为了节省一些钱,你也可以点击“请求现货实例”。现货实例可以让你节省大约 50%的成本,但请注意,如果现货价格上涨,AWS 可能会终止实例。如果运行的是生产区块链,则不应使用 spot 实例。

  1. 添加存储。我们的节点需要一些存储空间。随便玩玩,200GB 到 300GB 的通用 SDD 应该够了。单击下一步
  2. 标签。你可以在这里命名你的以太坊节点。在键字段中键入“名称”,在值字段中键入“以太坊节点”。

配置安全组:确保 SSH 端口 22 对 IP 范围 0.0.0.0/0 开放。这意味着它对世界开放。确保操场完工后你把这个拿走。单击查看并启动

  1. 选择您已经使用的密钥对,或者创建并下载新的密钥对
  2. 注意:如果您只是测试和使用新的以太坊节点,不要忘记终止 EC2 实例,即使它们是自由层。免费等级有一个限制,例如,750 小时,之后你将开始付费。这些 EC2 实例每小时可能花费几分钱,但是如果让它们运行整整一个月,它们可能会增加一笔相当昂贵的账单。
  3. 最好的设置是让 t2.xlarge 以大约 60%的 CPU 利用率运行来更新以太坊光节点:

因此,如果可以的话,您可以请求 t2.xlarge 或等效文件,以避免节点一直崩溃,从而获得更好的体验。t2.xlarge 将为您提供 4 个 vCPU、16GB 内存和更好的网络性能。在 AWS 上,你可以请求现货实例,这将有一个更好的价格。

好吧!现在已经创建了 Ubuntu EC2 实例,您需要通过 SSH 与 VM 交互并安装以太坊软件。

在 EC2 面板中,选择您的新实例并单击 connect

遵循其中一个选项。您可以使用 EC2 实例连接选项(AWS 提供的基于 web 的命令行界面)或 SSH,使用任何 CLI 命令行界面。要使用 SSH,请按照 SSH 选项中显示的步骤操作。您可以使用计算机中的命令提示符-对于 Windows,请单击 Windows 菜单并键入 cmd。对于 Mac,打开“应用程序”文件夹,然后打开“实用工具”并双击“终端”,或者按 Command -空格键启动 Spotlight 并键入“终端”。或者,你可以下载一个很酷的控制台模拟器,比如 Cmder,我用的就是这个。

要继续操作,您需要找到存储 AWS 密钥对的文件夹,然后按照您的实例的 connect 页面中显示的命令进行操作。

一旦您将/SSH 连接到您的 Ubuntu 机器,运行以下命令来安装我们将需要的一些包和库

sudo apt-get install(安装 APT - Advanced 软件包工具)

sudo apt-get 更新(用于更新软件包)

sudo add-apt-repository PPA:ether eum/ether eum(安装 ethereym 存储库)

sudo apt-get update(更新软件包)

sudo apt-get 安装以太坊(安装最新版本的以太坊 Go/Geth)

我们现在准备好出发了!现在我们已经安装了 Geth,您可以输入

geth 救命。

您还可以快速浏览一下节点中的文件夹,看看以太坊文件夹中有什么。为此,请键入命令

ls -al l(这将在实例中的对象和文件夹存储中列出。你应该能看到。以太坊如下图)然后,

光盘。以太坊/(进入。以太坊文件夹,注意更新可能需要几分钟)

。以太坊/是我们调用以太坊节点中任何函数的默认路径,稍后我们将使用 geth.ipc 连接到区块链。

如果你找不到你的。以太坊文件夹由于某种原因,它可能与路径有关。以太坊文件夹。您或许可以尝试键入以下路径来输入。以太坊文件夹。这是您的默认路径。

cd /home/ubuntu/。以太坊/

要启动我们的节点,第一步是将其与区块链同步。作为区块链节点,我们需要与区块链上的其他节点同步。但是,要将完整的区块链下载到节点上,可能需要几天时间和大量空间。

根据以太扫描,以太坊区块链目前超过 600GB,并且每分钟都在增长。因此,要成为以太坊的完整节点需要很大的空间。

考虑到区块链的大小,我们可以为我们的节点分配最大的缓存(我们使用的 EC2 实例只有几千兆字节的可用空间),并且我们希望选择一种同步模式,允许进行更轻量级的同步。以太坊节点同步有 3 种模式:快速、轻量和完全。

sync mode = Fas t–它下载数据块头和最后 64 个数据块的快照。它不重放事务,并减少了您的机器需要做的工作量

sync mode = ligh t–它仅下载块标头,并根据标头的哈希验证数据。在连接到其他对等完整节点的过程中完成更新。同步模式灯与采矿不兼容

sync mode = ful l–它运行一个完整的节点,下载自 genesis 块以来的所有区块链。它一个接一个地检查区块链中的所有交易,重放所有交易,并提供对区块链的完全验证。它在计算能力、宽带和存储方面需要大量资源

在这种情况下,因为我们只是想玩玩网络,所以我们将使用 syncmode=fast,其中我们的节点将只下载块头并只验证最后 1000 个块。

还有另一种类型的节点:存档节点。这种节点就像是完整节点的扩展。大多数人不需要存档节点,但这种节点可能有利于交易所、数据块探索者、钱包供应商和其他需要快速检索信息的公司。归档节点需要更多的空间,在 2 到 3tb 之间,它们存储所有的历史数据,使我们能够更快地检索信息。存档节点允许快速检索所有历史数据,从而加快处理过程。

让我们回到我们的节点。连接启动以太坊节点的下一步是开始同步它。让我们从键入以下内容开始:

geth - syncmode=fast

一旦您运行这个命令,节点将开始同步,您应该开始看到类似下面的截图。使用- syncmode=fast 或- syncmode=light,您的节点可能需要大约 30 分钟才能与网络同步。

注意:要使用 geth 控制台或 Python3 控制台与以太坊网络交互,您需要运行以太坊节点。否则,它将不起作用。

如果您不想连接到以太坊主网络,而是想连接到一个测试网络,如 Goerli、Rinkeby 或 Ropsten,您可以使用以下命令之一:

盖斯-戈利

格斯-林克比

格斯·罗普斯滕

连接到测试网络可以让你玩游戏,而不需要用真正的乙醚充满你的帐户。测试网有水龙头,可以让你得到一些免费的测试乙醚。请注意,Goerli 和 Rinkeby 是区块链的权威证明,因此可能不会完全复制以太坊的主网络。顺便说一句,如果你还没猜到测试网的名字有什么共同点,这些测试网是以瑞典的村庄命名的。

现在,节点正在运行,我们可以连接到 Geth Javascript 控制台,并开始与区块链交互。

在新窗口中打开第二个命令行,并 SSH 到您的实例中

在命令行中,键入

获取附件

要启动 Geth Javascript 控制台

就像下面的截图一样

欢迎来到黑客帝国!

现在我们可以开始玩了。在 Geth 控制台中首先要学习的命令之一是

eth。快速按下 tab 键两次。

您将看到 API 命令列表。这些 API 命令兼容不同的编程语言,如 JavaScript 和 Python。

如果您按 tab 键,命令行会自动完成您开始编写的任何命令,以便于编写命令。例如,您可以键入 eth.syn,如果您按 tab,它应该会自动完成 eth.syncing

一旦我们进入,我们可以使用命令检查我们的节点是否正在同步

以太网同步

在这里,我们可以看到我们正在与网络同步,状态如何,区块链当前的阻塞等。

“eth.syncing”下还有一些附加命令。要查看列表,您可以键入 eth.syncing .并快速按下 tab 键两次。

使用同步命令,我们可以看到节点正在同步,我们可以使用命令 eth.syncing 或 eth.syncing.currentBlock 来查看我们的节点正在同步的当前块。

探索以太坊

我们也可以看看和探索以太坊区块链的任何街区。例如,让我们使用以下命令获取块 987654:

eth.getBlock()

例如,您可以搜索块号

eth.getBlock(987654)

或者,如果您知道正在寻找的块的散列,则搜索块散列

eth . get block(" 0 x4ca 44 f 16 a98 a6 BC 8206 c 152057 cf 0d 7 a6 CAE B0 b 287 e 845 e 21 a1da 2849 bea 4c 8a ")

在这里,您可以看到关于该块的所有信息,包括难度、gasLimit 和 gasUsed、哈希、十六进制随机数、UNIX 时间中的时间戳、总难度和事务哈希。

timestamp:从 unix 纪元时间开始,块 timespamp 以秒表示。时间是区块开采的时间。时间戳由开采该区块的矿工设定。因此,只要遵守一些基本规则,如块的时间戳必须是未来的某个时间而不是过去的某个时间,矿工就可以以某种方式操纵块或事务的时间戳。

什么是 Unix 时间或纪元 Unix 时间?Unix 时间基本上是计算机测量时间的方式。Unix 时间是自 1970 年 1 月 1 日以来的秒数。Unix 时间" 0 "表示 1970 年 1 月 1 日午夜,例如,当您重置旧手机时,您可能会看到这个日期。1455192272 是指在格林威治时间 2016 年 2 月 11 日星期四下午 12:04:32。

stateRoot:起始根可以被看作是一棵巨大的 Merkle 树,它将以太坊区块链中所有先前的块、事务和代码散列到这个块的 stateRoot 中。

这个状态根有一个非常重要的目的:它允许任何节点很容易地确认他拥有的块是正确的,而不用验证所有的区块链块。相反,他可以只验证来自其他块的散列树。当节点是灯光节点时,这一点尤其重要。

logsBloom: logsBloom 是一个 256 字节的字符串,它并不是传统意义上的日志。它是块日志的布隆过滤器,允许过滤块中每个元素的散列。目标是通过存储一些事件(如 bloom 中的历史事务)来最小化客户端需要进行的查询的数量。当有一个查询“数据 z 在集合中吗?”回答可以是“也许”,也可以是“不”。这是一种概率数据结构。

receiptsRoot:这个 32 字节的字符串是交易收据的根散列。

事务:这里您可以看到块中所有事务的散列。

TransactionsRoot:一个 32 字节的字符串是块中所有事务的 Merkle 树的根哈希。

我们还可以向 eth.getBlock()添加一点魔法,通过使用如下命令获得事务细节:

eth.getBlock(987654,true)

这也将检索同一块中的所有事务。

下面是我们使用 eth.getBlock(987654,true)检索的块 98764 中的一个事务的详细信息。

现在让我们检查我们的网络状态,并检查我们的节点是否正在监听并连接到其他对等节点。

使用命令 net.listening,我们可以看到我们的 net.listening=true 是好的

net.peerCount

我们看到我们连接到 16 个对等节点。太棒了。

另一个了解网络构成的有趣命令是

管理员同事

这将为您提供有关您所连接的对等节点的信息。

在这个截图中,我们可以看到这个节点的一些信息,包括他的软件的版本——在这个例子中,他使用的是 Geth v 1 . 9 . 25——我们还可以看到对等节点的 IP 地址。IP 地址是公开的,这就是为什么您不应该从您的个人笔记本电脑上运行节点。

如果您想获得节点的详细信息,可以运行

管理员节点信息

您将从自己的节点获得类似的信息,包括您的版本、IP 地址、块、共识等等。

玩 Python 和 eth 连载

Python 是一种很好的编程语言,可以用来研究区块链和其他技术,如机器学习、人工智能和数据分析。作为一种非常容易阅读和理解的通用编程语言,将它放在您的工具包中是一件好事。此外,Python 中有许多 Fintech 应用程序,如果你在这个行业,这非常重要!不,与其他 Python 相反,Python 代码不咬人!

我们现在需要在 Ubuntu 实例中安装 Python,并安装 eth-rlp 库来访问一些附加功能。

在 Ubuntu 命令行中,输入

sudo 安装 python3-pip

一旦 Python 安装完毕,让我们安装允许我们进行序列化的库

pip3 安装 eth-rlp

我们将使用这个库来序列化块头数据并创建一个块散列。这将有助于我们处理数据,使其适合哈希算法。

接下来,我们需要安装一个 Python 散列后端和加密库,Cryptodome pysha3。

pip3 安装 pycryptodome pysha3

然后,Web3 是一个与以太网区块链交互的 JavaScript 库。它也被称为下一代万维网,它提供了一个分散的网络,允许我们使用 HTTP 和 IPC 连接与其他以太坊节点进行交互。它还支持发送交易、检索用户帐户以及与智能合约进行交互。让我们安装它。

pip3 安装 web3

sudo pip3 安装 pyethash(稍后我们还需要 pyethash 用于 ethash 算法)

现在我们已经安装了所有需要的东西,让我们进入以太坊节点路径。以太坊/并运行 python。按如下方式键入命令:

光盘。以太坊/

然后,键入

python3

欢迎来到 Python3 控制台!让我们导入一些我们需要的工具,从 Web3 的 IPC 提供程序开始。每次退出 Python3,您都必须重复接下来的两个命令。注意:要实现这一点,您需要用之前看到的 geth 命令并行运行以太坊节点。

从 web3 导入 IPCProvider,Web3

IPC 提供程序将允许您的节点通过 IPC 连接进行连接。以太坊 Geth 也允许 HTTP 和 WebSocket 连接,但是 IPC 应该更安全。

一旦这样做了,我们需要确保它的工作,我们可以获取数据。让我们用下面的命令调用一个对象 w3(你可以称它为任何东西)。类型:

w3 = Web3(IPCProvider())

现在,如果你输入,例如,w3.eth。并按 tab 键两次,您将获得命令列表。请注意,这最后两个命令可能需要几秒钟才能生效。

几秒钟后(有时您可能需要等待一分钟让它连接),您也应该能够键入任何命令,如

w3.eth.getBlock(987654)

得到我们之前看到的相同的块,但是是原始格式:

这与我们之前看到的块完全相同,但是可读性稍差一些。这是原始的狗数据。酷吧?

计算难度

现实情况是,这些原始数据并不容易阅读,但是如果我们要找一个特定的数据,我们可以直接要求:

在这里,您可以看到一些示例,其中,如果您正在寻找块的难度、随机数或挖掘器,您可以分别键入以下命令:

w3.eth.getBlock(987654)["难度"]

w3 . eth . get block(987654)[" nonce "]

w3 . eth . get block(987654)[" miner "]

提高 raw 块可读性的另一个方法是将每个值分隔在不同的行中。

我们可以通过以下方式实现这一目标:

myBlock = w3.eth.getBlock(987654)

print(*myBlock.items(),sep='\n ')

现在更明白了!我在这里只展示了一部分,因为你已经看到了剩下的部分。

区块内总难度值是如何计算的?

一个方块的总难度是所有前面的方块加上前面的方块的总难度。怎样才能创建一个循环来计算某个方块的难度?

totalDiff = 0

limit = w3 . eth . get block(1111)[" number "]

对于范围内的 I(0,极限+ 1):

total diff+= w3 . eth . get block(I)[" difference "]

print(" Block:[% d # % d]-totalDifference:% d " %(I,limit,total diff))

并按两次 enter 键

很快,我们得到了第 1111 块的总难度,但是你可以尝试得到任何块的难度。

这个过程有问题吧?这是一个非常密集的循环,因为它必须多次执行检索、添加和打印输出。区块链以太坊有超过 12 00 万个街区,每 12 秒钟就增加一个新街区。计算方块 1111 的难度是容易的,但是计算更高的方块,如方块 11 111 111,将花费相当多的时间和资源。就算要计算方块 987654 的难度,至少也要 30 分钟。

然而,这是区块链的关键原则之一。您可以随时回到过去,全面审核区块链的价值观。

交易收据

让我们回顾一下 Geth 上的一些附加功能,从交易收据开始。如果您仍然在 Python3 控制台上,请键入 exit()并通过键入 geth attach 进入 geth 控制台。

该功能

eth.getTransactionReceipt()

eth . gettransactionreceipt(" 0xc 280 ab 030 e 20 BC 9 ef 72 c 87 b 420d 58 f 598 BDA 753 ef 80 a 53136 a 923848 b 0 c 89 a 5 c ")(此处带哈希)

会给我们更多的交易信息。为了从任何交易中检索交易收据,我们需要它的散列。

在交易回执中,我们可以看到该交易所属的 blockNumber 和 blockHash。在此 TransactionReceipt 中,contractAddress 为 null,因为该事务不涉及合约。gasUsed 是 21000,这是支付的费用,root 是事务时 rootState 的根哈希,最后,我们还有 transactionHash,它显然是这个事务的哈希。

气体和气体极限

让我们仔细看看气体。Gas 对应的是支付给以太坊网络的交易费用。气体基本上是以太坊区块链的燃料。

GasLimit 是用户愿意为完成交易支付的最大金额,默认设置为最低 21000 Gwei。用户支付的 GasLimit 对一个区块的 GasLimit 有贡献。虽然比特币块是以兆字节为单位限制大小的,但以太坊块是可以用 GasLimit 限制的。GasLimit 是一个区块中所有交易消耗的最大气体量;因此,事务的数量受限于 GasLimit。在上面显示的交易中,GasLimit 与 gasUsed 的数量相同。

一个块中适合多少个事务取决于一个事务花费多少汽油。例如,更复杂的交易可能需要在区块链有更多的存储空间,因此需要更多的天然气。矿商也将优先考虑支付更多天然气的交易。

天然气价格以 Gwei 定义,Gwei 是乙醚的分数。1 Gwei 等于 0.000000001 以太。同样,1 个以太等于 1 000 000 000 Gwei。这基本上是转换。乙醚的最小单位是卫,1 卫等于 0.0000000000000001 乙醚。这么多零!

使用像 Metamask 这样的钱包,我们可以定义 Gwei 中的汽油价格和发送交易的汽油限额。

在上例中,用户将支付费用= 50 * 21 000 = 1 050 000 Gwei,换算成乙醚为 0.000105 乙醚。考虑到 2021 年 2 月的乙醚价格,这大约是 0.14 美元。不太贵。

Using a wallet like Metamask we can define the gas price in Gwei and the gas limit to send a transaction.

In the example above, the user would pay a Fee = 50 * 21 000 = 1 050 000 Gwei, which converting to Ether is 0.000105 Ether. In USD this would be approximately 0.14 USD considering Ether prices in February 2021. Not too expensive.

以太坊区块链中的街区类型

啊?我们有布洛克叔叔却没有布洛克表哥?

孤立块

孤立区块是看起来与任何其他区块都非常相似的区块,它具有区块的所有组件,但它不属于区块链。

在比特币区块链中,孤儿块被称为孤儿块,而在以太坊区块链中,它们被称为大叔块,区别对待,但它们发生的原因却颇为相似。

想象一下,在世界不同地方的两个不同的矿工,Ethan 和 John,同时开采高度为 163638 的区块。一旦他们挖掘了它,他们就会在网络上传播它。在很短的一段时间内,区块链有两条略有不同的链。然而,在地理位置上更接近伊森的克洛伊首先收到了伊森的区块,她也是开采下一个区块的矿工,将其添加到伊森的区块中。这意味着左边的链将是区块链中最长的链,而右边的块将是孤立的。然后,Chloe 将向网络广播新的块 163639,所有节点都会发现应该考虑更长的链。

在区块链,最长的链条总是赢家。这就是所谓的最长链法则。交易会发生什么?约翰街区的一些交易也包括在伊森街区。额外的交易可能会包括在即将到来的区块之一。

在比特币区块链中,孤立区块被完全丢弃,开采该区块的矿工所做的工作只是无用功。在以太坊区块链,孤儿区块被称为叔叔,他们也被列在区块链开采的下一个区块。开采孤儿区块的矿工会获得相当于区块奖励 1/8 的奖励。如果你很好奇一个带大叔的 block 长什么样你可以运行 eth.getBlock(987610)。是啊,闲着没事干,就搜了一下,发现 987610 街区有一个大叔。

以太坊区块链奖励孤儿区块或叔叔区块,通过给予这些奖励来激励独立采矿。通过这种方式,小矿工在开采孤儿区块时浪费资源的风险要低得多,这被视为比比特币区块链等其他区块链更公平。

孤立块是建议用户在比特币区块链等待几次确认,在以太坊区块链等待大约 12 次确认的原因之一。在这种情况下,确认意味着向区块链添加新的块。一个坏的参与者可能试图比其他挖掘者更快地将一个事务包含在一个块中,这可能会创建一个包含该事务的块,该事务稍后将被孤立。为了确保该块不会被孤立,接收者应该等待一些确认。

大部分的交易所和一些钱包都是自动这样做的。例如,当你向交易所发送一笔以太币时,他们会让你等 5 分钟,然后再把这笔钱存入你的账户。

交易所和钱包如何自动检查 x 数量的确认?嗯,可以运行一小段代码,将事务块高度与当前区块链块高度进行比较,但是我们也可以在命令行中做类似的事情:

eth . syncing . highestblock-eth . get transaction(" ")。字组号

因为我们看到的是一个旧的交易,确认的数量是 10 730 786,这意味着许多块已经过去,交易比确认的多。通常,在区块链电子论坛上,你不需要等待 1000 万次确认。12 次确认就够了。

日志和交易明细

我们可以查看所有细节,比如 BlockHash、BlockNumber、from 和 to、gas,以及任何给定事务的更多信息,只需使用事务散列和命令

eth.getTransaction()

如果我们检索同一个事务的 transactionReceipt,我们将获得额外的信息:日志和 logsBloom。

让我们使用以下命令来检查 transactionReceipt:

eth.getTransactionReceipt()

我们之前已经了解了 logsBloom 的用途,但现在我们可以在交易收据中看到一个名为 logs 的字段,它与 logsBloom 直接相关。logsBloom 就像是日志的搜索字段。

地址是日志中生成事务的地址,它可以是某人的地址,也可以是智能合约。然后我们有 blockHash,它只是这个事务所属的块的散列。我们还有 blockNumber,也是来自事务所属的块。然后我们有现场数据和主题,可在 logsBloom 中搜索,并显示一些信息,如这是什么类型的事件,这是 ERC20 标准的一部分。因此,字段数据是以太坊 EIP20 引入的以下事件类型之一的规范签名:

函数传递(address _to,uint256 _value)公共返回(bool 成功)

函数 transferFrom(address _from,address _to,uint256 _value)公共返回(bool 成功)

函数 approve(address _spender,uint256 _value)公共返回(bool 成功)

这个 256 字节是一个布隆过滤器,这意味着它是一个概率数据结构,它告诉你某个集合是否不存在,或者它可能存在。logsBloom 允许简化搜索查询,减少执行查询或搜索时节点需要做的工作量。例如,如果我正在搜索该事务是否属于块 4344444,logsBloom 已经可以告诉我们该事务是否属于该块,或者它是否可能属于该块,然后检查 logs 字段。这种方法减少了完成搜索所需的计算能力。

挖掘以太坊

我们继续把手弄脏吧!现在它会变得更脏,因为我们将谈论采矿!

如果你想通过成为以太坊矿工来赚钱的话,这部分也会非常有用!嗯,你可以通过安装一个挖掘软件来挖掘资金,但是如果你理解其中的逻辑会更好,这就是我们将要做的。

我们已经讨论了工作挖掘的证明以及挖掘如何在比特币上工作,但现在让我们看看以太坊挖掘及其差异。

在以太坊挖掘中,挖掘者从块头和随机数中获取一些数据,并对其进行哈希运算,试图获得低于为每个块提供的特定难度的输入。以太坊方块难度是动态调整的,因此平均每 12 秒产生一个新方块。

对于以太坊挖掘,我们还需要考虑 DAG——有向无环图——这是一个数据集,数据是从这个数据集散列的。

从 Ethereum wiki 页面,我们可以获得 Ethash 挖掘的步骤,但都是从 Ethash 缓存中的参数开始的。Ethash 缓存取决于块号,缓存和数据集大小线性增长,但有两种方法可以做到这一点,要么是缓存大小,要么是完整大小。cash size 允许块验证,但是要进行挖掘,需要 get_full_size 版本。

def 获取缓存大小(块号):

sz =缓存字节初始化+缓存字节增长*(块号//纪元长度)

sz -=哈希字节

while not isprime(sz / HASH_BYTES):

sz -= 2 *哈希字节

返回 sz

while not isprime(sz / HASH_BYTES):

def get_full_size(块号):

sz =数据集字节初始化+数据集字节增长*(块号//纪元长度)

sz -=混合字节

while not isprime(sz / MIX_BYTES):

sz -= 2 * MIX_BYTES

返回 sz

挖掘过程可能因带宽和/或内存而停止。为了挖掘以太坊,拥有一个好的内存缓存很重要,这也是以太坊矿工经常超频 GPU 内存的一个原因。

Dagger Hashimoto 算法是主循环,它将执行验证和挖掘以太坊块所需的计算。它将从完整的数据集中聚合数据,以产生一个标头哈希和一个 nonce。nonce 是一个 64 位大小的整数,挖掘者需要对其进行暴力破解。

def hashimoto ( header,nonce,full_size,dataset_lookup):

n =完整大小/哈希字节

w =混合字节//字字节

mixhashes =混合字节数/哈希字节数

将报头+随机数组合成 64 字节的种子

s = sha3_512(报头+随机数[::- 1 ])

从复制的开始混合

mix = []

for _ in 范围(混合字节/哈希字节):

混合扩展

混合随机数据集节点

对于范围内的 I(访问次数):

p = fnv(i ^ s[ 0 ],mix[I % w])%(n//mix hashes)* mix hashes

newdata = []

对于范围内的 j(混合字节/哈希字节):

new data . extend(dataset _ lookup(p+j))

mix = map (fnv,mix,newdata)

压缩混音

cmix = []

对于范围内的 I(0,len (mix),4):

cmix.append(fnv(fnv(fnv(mix[i],mix[i+ 1 ]),mix[i+ 2 ],mix[i+ 3 ]))

返回{

“混合摘要”:serialize_hash(cmix),

"结果":serialize_hash(sha3_256(s+cmix))

}

"mix digest" : serialize_hash(cmix),

def hashimoto_light ( full_size,cache,header,nonce):

返回 hashimoto(header,nonce,full_size,lambda x:calc _ dataset _ item(cache,x))

def hashimoto_full ( full_size,dataset,header,nonce):

返回 hashimoto(header,nonce,full_size,lambda x : dataset[x])

该算法为每一轮保持 128 字节的混合,从 RAM 中取出它。如果算法的输出低于期望的目标,则 nonce 是有效的,并且矿工赢得该块。还应用了额外的 sha3-256。Hashimoto 函数从 mixHash(来自头)和 Hash 产生这个 hash。

用于挖掘块的数据集是动态变化的,并且每 30 000 个块,DAG 被重新生成。这意味着,考虑到平均每 12 秒生成一个新数据块,DAG 将大约每 100 小时重新生成一次。

定义地雷(全尺寸,数据集,标题,难度):

要与相同数字上的哈希进行比较的零填充目标

target = zpad(encode _ int(2 * * 256//难度),64 )[::- 1 ]

从随机导入 randint

nonce = randint( 0,2 ** 64)

而 hashimoto_full(full_size,dataset,header,nonce) > target

nonce = (nonce + 1 ) % 2 ** 64

返回随机数

while hashimoto_full(full_size, dataset, header, nonce) > target

然后我们有了这个挖掘算法。这将执行桥本函数。我们在挖掘算法中有一个放入目标的难度公式,并且目标被设置为桥本挖掘算法的一个目标

而 hashimoto_full(full_size,dataset,header,nonce) > target

桥本将尝试生成低于目标的散列。否则,它将一遍又一遍地重复,直到找到满足条件的散列。对于这个散列,他将把 Hashimoto 算法应用于完整大小的数据集、报头和随机数。如果生成的哈希大于目标值,挖掘算法需要继续尝试猜测随机数,正如您所看到的,随机数是一个从 1 到 2^64:随机数=(随机数+ 1) % 2**64 的数字

矿工将尝试从 1 到 2^64 的所有随机数变化,直到最终输出为< target. When this happens, eureka! The proof of work is completed, and the nonce that meets the target is going to the block.

块挖掘-以太坊上的工作证明

我们现在将实施工作证明的简单模式,并了解在幕后挖掘和验证数据块的确切原因。

别担心,以太坊先生马上就来帮助我们实现这一点!

我们将从编程的角度来看工作证明是如何工作的,理解一个块是如何被其他节点挖掘和验证的。您也可以在以太坊维基上查看用于本节的代码:

eth.wiki/en/concepts/ethash/ethash

这么多哇!

我们将使用桥本算法和代码实验,所以我希望你喜欢它!目标是使用该算法验证/挖掘一个块,并查看结果。使用下面的代码,我们的节点将进行一些检查,看看一个块是否有效,它是否被正确挖掘,即,矿工是否满足难度条件。

首先,让我们用下面的代码创建一个 myetashtest.py 文件。

您可以通过将代码复制到文本编辑器(如 vim 或 nano)来自己复制代码,也可以使用以下命令将其导入到您的 Ubuntu 机器中:

https://github.com/Bitatlas/etashpython

你可以从 GitHub 链接中克隆代码,或者如果你是 BDSM 人,你可以从下面复制。不需要复制#评论。如果您认为接下来的四页对您来说太枯燥,请随意跳过它,但是我已经在整个代码中提供了注释,以便您可以跟随。

!/usr/bin/python3

git clone https://github.com/Bitatlas/etashpython

导入系统

从集合导入订单直接

从 eth_typing 导入 Hash32

从 eth_utils 导入 big_endian_to_int

import sys

导入 rlp

来自 Crypto。哈希导入 keccak

来自 rlp。sedes 导入 BigEndianInt,big_endian_int,binary,Binary

从 rlp 导入编码

从 eth_utils 导入到 _bytes,到 _hex

从 web3 导入 IPCProvider,Web3

_ BYTES = word 中的 4 #字节

DATASET_BYTES_INIT = 2**30 #字节,位于源数据集中

DATASET_BYTES_GROWTH = 2**23 #每个历元的数据集增长

CACHE_BYTES_INIT = 2**24 #字节在源缓存中

CACHE_BYTES_GROWTH = 2**17 #每个时期的缓存增长

CACHE _ MULTIPLIER = 1024 # DAG 相对于缓存的大小

EPOCH_LENGTH =每个 EPOCH 30000 #块

MIX_BYTES = 128 #混合的宽度

HASH_BYTES = 64 #哈希长度(以字节为单位)

DATASET_PARENTS = 256 #每个数据集元素的父元素数量

CACHE_ROUNDS = 3 #缓存生产中的轮数

访问次数= 64 #桥本循环中的访问次数

HASH_BYTES = 64                   # hash length in bytes

地址=二进制。固定长度(20,allow_empty=True)

hash32 =二进制。固定长度(32)

uint 256 = bigendianit(256)

trie_root = Binary。固定长度(32,allow_empty=True)

address = Binary . fixed_length(20, allow_empty=True)

类 MiningBlockHeader(rlp。可序列化):

字段= [

(' parent_hash ',hash32),

('叔伯 _ 哈希',hash32),

(' coinbase ',地址),

('状态 _ 根',trie _ 根),

('事务 _ 根',trie _ 根),

(' receipt_root ',trie_root),

(‘布鲁姆’,uint256),

('难度',big_endian_int),

(' block_number ',big_endian_int),

(' gas_limit ',big_endian_int),

(' gas_used ',big_endian_int),

('时间戳',big_endian_int),

(' extra_data ',二进制),

('mix_hash ',binary),我们已经删除了这两个字段,因为我们只需要一个挖掘块头

('nonce ',Binary(8,allow_empty=True)

]

('extra_data', binary),

提供商= Web3。IPCProvider('/home/ubuntu/)。以太坊/geth . IPC’)

w3 = Web3(提供商)

打印(w3。isConnected())

blockNumber = int(sys。argv[1],10)

w3 = Web3(provider)

myHeader = MiningBlockHeader(

parent_hash = to_bytes(int(w3。eth。getBlock(blockNumber)。附带说明。十六进制(),16)),

uncles_hash = to_bytes(int(w3。eth。getBlock(blockNumber)。sha 3 大叔们。十六进制(),16)),

coinbase = to_bytes(int(w3。eth。getBlock(blockNumber)。矿工,16 岁),

state_root = to_bytes(int(w3。eth。getBlock(blockNumber)。stateRoot。十六进制(),16)),

transaction _ root = to _ bytes(int(w3。eth。getBlock(blockNumber)。transactionsRoot。十六进制(),16)),

receipt_root = to_bytes(int(w3。eth。getBlock(blockNumber)。收据 Root。十六进制(),16)),

bloom = int(w3。eth。getBlock(blockNumber)。logsBloom。十六进制(),16),

难度= w3。eth。getBlock(blockNumber)。难度,

块号= w3。eth。getBlock(blockNumber)。号,

气体极限= w3。eth。getBlock(blockNumber)。气体极限,

气体使用量= w3。eth。getBlock(blockNumber)。使用煤气,

时间戳= w3。eth。getBlock(blockNumber)。时间戳,

extra_data = to_bytes(int(w3。eth。getBlock(blockNumber)。引渡数据。十六进制(),16)),

mix _ hash = to _ bytes(int(w3 . eth . get block(block number). mix hash . hex(),16)),

nonce = to _ bytes(int(w3 . eth . get block(block number). nonce . hex(),16)),

)

extra_data = to_bytes(int(w3 . eth . getBlock(blockNumber) . extraData . hex(), 16)),

从 pyethash 导入 hashimoto_light,mkcache_bytes

# nonce = to_bytes(int(w3.eth.getBlock(blockNumber).nonce.hex(), 16)),

这里的# Type 注释是为了确保我们不会意外地使用字符串而不是字节。

cache _ by _ epoch:' ordered dict[int,bytearray]' = OrderedDict() #这里我们按纪元顺序进行缓存

CACHE_MAX_ITEMS = 10 #并将项目限制为 10 个

def get _ cache(block _ number:int)->字节:

EPOCH _ index = block _ number//EPOCH _ LENGTH #这是我们获得块号的地方

如果已经生成,则获取缓存,将其标记为最近使用过

如果 epoch_index 在 cache_by_epoch:

c =按时期缓存。pop(epoch_index) # pop 并附加在末尾

按时期缓存[时期索引] = c

返回 c

如果缓存不在内存中,则生成缓存

通过块号模拟请求 mkcache:将索引乘以历元长度

c = mkcache_bytes(纪元索引*纪元长度)

cache_by_epoch[epoch_index] = c #存储生成的现金字节

返回 c

限制高速缓存的内存使用

if len(CACHE _ by _ epoch)> CACHE _ MAX _ ITEMS:#这与长度有关

按时期缓存。popitem(last=False) #删除最近访问的内容

参考行 88

返回 c

现在我们要写工作功能的检查证明。我们需要在这里检查块的数据是否符合要求

def check _ power(block _ number:int,

mining_hash: Hash32,

mix_hash: Hash32,

nonce:字节,

难度:int) ->无:

cache = get_cache(block_number) #我们通过块号获取缓存

mix_hash: Hash32,

mining _ output = Hashimoto _ light(block _ number

缓存,

mining_hash

big_endian_to_int(nonce)) #不是 int_to_big_endian,而是相反

mining_output = hashimoto_light(block_number,

大字节序到整数(随机数)

int _ to _ big _ endian(nonce))#这是桥本光采输出。它采用块号、缓存、挖掘散列、int 到 big endian(nonce)并对其进行散列

big_endian_to_int(nonce)) # not int_to_big_endian but the other way around

print("混合摘要: ",mining_output[b '混合摘要'])

print("MIX HASH:",w3。eth。getBlock(block_number)。mixHash。十六进制())

# int_to_big_endian(nonce)) #this is the hashimoto light mining output. It takes block_number, cache, mining_hash, int_to_big_endian(nonce) and hash it

print("RESULT:",mining_output[b'result'])

print("条件: ",(2**256) //难度)

print("MIX HASH:   ", w3 . eth . getBlock(block_number) . mixHash . hex())

if mining_output[b'mix digest']!= mining_hash: #这就是说如果挖掘摘要不等于 mix hash,那么...

返回 False

elif int _ to _ big _ endian(mining _ output[b ' result '])<= (2**256 // difficulty): # to convert the result int integer and check if it meets the condition of being less or equal to 2^256 divided by the difficulty

return False

else:

return True # if it returns true, then all good! We could do more checks , but this is enough for now. For additional checks see here https://github.com/ethereum/py-evm/blob/d553bd405bbf41a1da0c227a614baba7b43e9449/eth/consensus/pow.py

the next section's objective is tomake sure that data is formatted correctly and make sure we can get the proper hash and that the data is accurately formatted

block_number = blockNumber

myHash = "0x" + keccak . new(data=rlp . encode(myHeader), digest_bits=256) . hexdigest()

mining_hash = to_bytes(int(myHash, 16))

mix_hash = to_bytes(int(w3 . eth . getBlock(block_number) . mixHash . hex(), 16))

nonce = to_bytes(int(w3 . eth . getBlock(block_number) . nonce . hex(), 16))

difficulty = myHeader . difficulty

check_pow(block_number, mining_hash, mix_hash, nonce, difficulty)

Now that I assume that you have this new file in your machine run it by typing

python3 “filename” “blockNumber”

which in my case would be;

python3 myethashtest1.py 999999

哇哦。区块 999999 有效!在这里,我们可以看到条件得到满足,块是有效的,虽然结果不清晰,但结果低于条件,因为它从代码上的这个条件返回“true”:

(挖掘 _ 输出[ b '结果']) <= ( 2 ** 256 // difficulty)

Super blockchain geek stuff, right?! This way, we can see that the block was mined properly and that meets the difficulty condition. For the block to be in the blockchain, he obviously needs to meet the condition, but this is the work that a full node actually does. He needs to go through all the blocks and validate them.

探索块和事务

尽管我们已经研究了块、块内交易和交易收据,但我们没有单独研究交易以及它们是如何构成的。等等,还有吗?是的,以太坊上还有更多关于交易的内容!我们现在需要了解如何找到一个事务,以及如何签署和验证一个事务。

现在让我们看看我从 blockNumber 99999 中“随机”选择的这个交易。

我们可以在这里看到 blockHash、“from”地址、使用的汽油和汽油价格、交易散列和输入数据字段。这个“输入”字段可以用于不同的目的,包括输入一些智能合约数据或矿工姓名,但大多数时候它是空的。然后是与数字 ECDSA 签名相关的 r、s 和 v 字段,我们将详细讨论这些字段。

我们还有价值,在这种情况下为 116288272000000000 魏,换算成乙醚为 1.16288272 乙醚(2021 年 2 月约为 1500 美元)。请注意,当您看到“0x”时,这意味着值以十六进制显示,但您可以轻松地将其转换为十进制。使用的 ECDSA 参数是 secp256k1:比特币和以太坊公钥加密中使用的 ECDSA 椭圆曲线的参数。

检索块数据

现在让我们看看 geth 命令行,以了解我们如何检索一些块和事务数据:

如果我们想检查块中的单个事务,我们可以运行命令

eth.getBlock()。交易[]

正如您在这里看到的,我们检索了与之前相同的事务,因为这是块 999999 的第一个事务。我们可以使用以下方法检索该块的第一个事务

eth.getBlock(999999)。事务[0],

第二次交易

eth.getBlock(999999)。交易记录[1]

诸如此类。

如果不想重复相同的信息,您也可以使用下面的命令检索该事务中的数据,在块号后添加“true”。

eth.getBlock(999999,true)。交易记录[0]

我们在这里所做的基本上是从块的第一个事务,即事务[0]中获取事务的打印输出。

现在,如果我只想知道该事务的“from”地址,我可以使用下面的命令。在这种情况下,我们只需要加上“从”:

eth.getBlock(999999,true)。交易记录[0]。从

如你所见,你可以将搜索范围缩小到任何你想找的特定领域。

现在我们可以做一些比较,这可能对我们有所帮助。例如,检查块中的给定事务是否来自特定地址。

然后,我们可以使用命令

eth.getBlock(999999,true)。交易记录[0]。from = = " 0x 32 be 343 b 94f 860124 DC 4 fee 278 FDC BD 38 c 102d 88 "

检查特定交易是否来自特定地址。上面截图中的结果显然是错误的,但无论如何,这是一个有趣的命令来搜索来自特定地址的交易。

当然,您可以尝试不同的命令组合,并尝试发挥创造力。如果您知道要查找什么事务,可以使用 eth.getTransaction 并将“from”结果与特定地址进行比较。

eth . get transaction(" 0x 22879 E0 BC 9602 fef 59 DC 0602 F9 BC 385 f 12632 da 5 CB 4 eee 4b 813 a0c 27159 C4 d 24 ")。from = = " 0xc 3665 b8a 9224 ba 8da 9a 20322 f31d 599 CAFA 52 C5 "

我们可以从这个地址检查所有的单个事务,将它放在一个循环中检查所有块的事务。

现在让我们回到 python 命令行,看看如何执行它们。请注意,虽然这些命令非常相似,但可能有一些语法差异。

要启动我们的 python3 命令行,请键入 python3 进入您的 python CLI,并开始键入以下命令,以便能够连接到网络:

从 web3 导入 IPCProvider,Web3

从 web3.middleware 导入 geth_poa_middleware

w3 = web 3(IPC provider('/home/Ubuntu/)。以太坊/geth.ipc '))

w3 . middleware _ onion . inject(geth _ poa _ middleware,layer=0)

w3.clientVersion(验证连接和客户端版本)

注意:每次断开连接时,您都需要重新运行这些命令来连接 w3,并使用 python 与以太坊区块链进行交互。

为了从块中检索相同的事务,我们将使用:

w3.eth.getBlock(999999,True)。交易记录[0]

如您所见,我们有相同的数据,因为这是同一个数据块,只是以不同的方式组织(或组织)起来。

类似于我们之前所做的,如果我们跑

w3.eth.getBlock(999999,True)。交易[0]['从']

我们从块 999999 的第一个事务的地址中得到相同的地址

如您所见,当我们在 python 中获得这些结果时,有一些微小但重要的差异。例如,地址只能用大写字母打印。Python 区分了大写字母和非大写字母。

在 python 中,我们可以使用别名来方便我们的检查。在本例中,我将“from”地址转换为“myAdd ”,然后将其与事务中的 from 地址进行比较。不出所料,结果是“真实的”:

这看起来很基本,但是我想展示它在 python 中是如何工作的,因为你可以从这里开始用 python 开发任何东西。

运行脚本以从特定地址查找交易

现在让我们使用一个脚本在一个循环中自动运行它。#后面的文字可以忽略。这些注释有助于理解脚本。

定义查找(地址):

对于 i in range ( 999000,1000000):#这里我们定义了要搜索的块的范围

txLen = len (w3.eth.getBlock(i))。transactions)#获取事务和事务的长度

对于范围内的 j(tx len):#该循环将遍历所有事务,以检查块中的事务

print(" Block:% d/% d-Transaction:% d/% d " %(I,1000000,j,tx len))#将打印块中的事务

if addr == w3.eth.getBlock(i,True)。transactions[j][" from "]:#如果我们用我们正在寻找的地址得到一个事务,它将打印事务散列

print(" FOUND Block \% d \ n TX:% s " %(I,w3.eth.getBlock(i))。交易记录[j]。十六进制()))

返回

你也可以在这里找到这个脚本:https://gist . github . com/Bitatlas/88a 4061 E6 c 466 c 37537695 ab 5004 d7fb

现在将它粘贴到 python 命令行。请注意,python 对代码的对齐和正确缩进非常敏感。如果代码缩进不正确,python 会抛出一个错误。

我们之前已经为“myAddr”定义了一个值,它是块 999999 中第一个事务的“from”地址。粘贴完代码后,让我们运行

查找(我的地址)

注意:如果您得到一个错误,说“highestBlock”未定义,您可以用“100000!或者最高的块的编号。

该脚本将运行所有块中的所有事务,直到找到具有我们正在寻找的地址的事务。他确实找到了我们正在寻找的块,它包含了我们已经定义的事务。耶!

这就是我们如何找到与地址相关联交易。

与 ECDSA 签订交易

你离成为区块链大师越来越近了!请继续关注我,通过 ECDSA 浏览交易签名。这是区块链和密码学中的一个基本功能。不像巧克力那样对我的生存至关重要,但…仍然是必不可少的。

还记得上一章我们谈到 RSA,Alice 和 Bob 共享并签署消息吗?现在我们将通过编程来实现。

要签署交易,用户需要遵循几个步骤。更准确地说,需要用户的钱包或软件来做,而不是真正的用户。令人欣慰的是,签署交易的复杂过程几乎是无缝和自动的。从用户体验的角度来看,只需要按一个按钮。然而,我们想知道幕后是什么,以及交易实际上是如何签名和验证的。

发送的任何交易都必须签名,我们可以随时检查签名的有效性以及是谁签名的。

在我们的例子中,发送者将使用签名密钥对消息进行签名,将消息与签名打包并发送给接收者。然后,收件人将接受签名并用验证密钥验证消息。

为了与 ECDSA 签署交易,我们将使用推荐的 192 位椭圆曲线域参数,更具体地说,secp192k1 的参数可以在 Daniel R. L. Brown 的“SEC 2:推荐的椭圆曲线域参数”中找到,该参数是 SECG 开发的行业标准的一部分——高效加密标准组。

让我们开始吧

让我们经历签名、发送消息和验证消息的步骤。首先,让我们使用 Python3 命令提示符导入 Keccak。Keccak-256 是以太坊中采用的 SHA3 算法的变体。

注意:在您的 ubuntu 机器上,通过运行以下命令确保您拥有 libgmb3 和 fastecdsa 库

sudo apt 安装 gcc python-dev libgmp3-dev

pip3 安装速度快 a

首先,我们将从 Crypto 导入 Keccak。哈希库。让我们通过运行以下命令来实现这一点:

来自 Crypto。哈希导入 keccak

让我们添加从 secp192k1 的推荐参数中提取的椭圆曲线域参数,作为“Pcurve”和我们要用来签名的椭圆曲线的 N 余因子。它们都是大素数,并且它们是私钥的条件的一部分。在 python3 控制台中,键入:

p curve = 2 * * 256-2 * * 32-2 * * 9-2 * * 8-2 * * 7-2 * * 6-2 * * 4-1

它与下面的十六进制符号相同

然后添加

n = 0x fffffffffffffffffffffffffffffffebaaedce 6 af 48 a 03 bbfd 25 e8cd 0364141

我们的私钥将在从 1 到 n 的范围内。

另外,添加以下内容:

Ac = 0

Bc = 7

GX = 0x 79 be 667 ef 9 dcbbac 55 a 06295 ce 870 b 07029 bfc db 2 DC e28 d 959 f 2815 b 16 f 81798

gy = 0x 483 ada 7726 a3 c 4655 da 4 fbfc 0 e 1108 A8 FD 17 b 448 a 68554199 c 47d 08 FFB 10 D4 b 8

这些是我们将用来生成公钥和私钥的参数。

我们还需要导入两个函数,egcd(扩展欧几里德算法的最大公约数除法器函数)和模逆函数:

def egcd ( a,b):

如果 a == 0:

返回(b,0,1)

否则:

g,y,x = egcd(b % a,a)

return (g,x - (b // a) * y,y)

def modinv ( a,m):

g,x,y = egcd(a,m)

如果 g!= 1 :

提高免除(“模逆不存在”)

否则:

返回 x % m

您也可以在这里找到脚本:https://gist . github . com/Bitatlas/4a 6 fa 3742713 f 50 c 07 ed 6 a6 AE 78 BD 94

一旦您导入了这两个函数,我们将需要添加以下导入:

从 fastecdsa.curve 导入曲线

从 fastecdsa.point 导入点

从 fastecdsa.curve 导入 secp256k1

这些是所有的库和参数的推荐值,我们将需要使用它们来签署一个消息!

让我们从签名“我爱区块链”开始,如下所示:

keccak.new(data=b '我爱区块链',digest_bits=256)。hexdigest()

让我们使用下面的命令创建一个变量 msgHash。请注意,我们添加“0x”只是为了用十六进制表示值

msgHash = '0x' + keccak.new(data=b '我爱区块链',digest_bits=256)。hexdigest()

我们要做的下一件事是创建一个生成器点,这将有助于创建验证密钥。验证密钥将通过签名密钥与生成器点相乘来创建。

GenPoint = Point(Gx,Gy,curve=secp256k1)

如果我们打印输出 GenPoint,我们会看到我们的椭圆曲线的 X 和 Y,这是以太坊和比特币中使用的同一条曲线。

现在我们需要创建一个签名密钥和验证密钥。签名密钥是通过创建一个随机数生成的(这就是为什么创建真正的随机数很重要),所以我们可以随机创建一个比 n 小的数。然后,我们通过将签名密钥乘以 GenPoint 来创建验证密钥。然后我们会得到这个:

接下来我们需要 X 和 Y,另一个点,它需要是一个随机数。一个数字越随机,就越安全。我们可以在键盘上键入一个“随机”数字,但是让我们尝试做一些事情来生成一个比这个数字更随机的数字:

随机导入

random.randint(99999,99999999999)

randNum = random.randint(99999,99999999999)

最后,创建 XY1 点和 r:

现在让我们创造我们的“s”。请注意,我们需要将 msgHash 值作为不带引号的整数使用,为此,我调用了 msgHash 并将不带引号的值再次复制粘贴到 msgHash。

然后我们可以创建 s:

s =((msg hash+r * SK)* modinv(randNum,N)) % N

瞧啊。!!我们有自己的签名 r 和 s

现在我们可以开始验证过程了。验证过程的条件是 r = x % N,并且每次我们想要进行新的签名时,我们需要从随机点 k*V 创建新的 k,作为我们的椭圆曲线中的随机点(x,y)。

让我们来验证一下:

w = modinv(s,N)

u1 = msgHash * w % N

u2 = r * w % N

XY2 = u1 * GenPoint + u2 * VK

最后,我们可以进行最后的验证:

r == XY2.x % N

我们变得真实!我们已成功签署并验证了一项交易!呜呜呜。是只有我觉得还是这是件很棒的事?

当我们再次审视事务时,r、s 和 v,它们存在的原因以及它们在签署和验证事务中的作用就更有意义了。

以太坊地址和公钥

以太坊地址不同于公钥。它相当于公钥的散列加上一些额外的计算。让我们看看如何从公钥中获取地址。

我们将使用之前生成的密钥来签署和验证消息。

我们将需要散列公钥(我们的 VK),从我们的 64 个字符串中创建一个 24 个字符的字符串,并将其转换为十六进制。

让我们从检索 VK 开始,将 X 和 Y 合并到一个字符串中,并将其命名为 PubK,如下所示:

然后,我们执行以下操作来获得公钥的散列

keccak . new(data = b ' a 9 ed 8 e 36 feb 2d 77 b 726 b 421907d 8 FD 3d 9 D5 f 0 b 9 c 97d 8 AE 90 f 4c 859471915135 e 16 ce 4 f 3 ad 14b 34 b 74 ab 7d 8 b 8 f 25 ',digest_bits=256)。hexdigest()

这种情况下的哈希如下。从这个散列中,我们需要删除 64 个字符串中的前 24 个字符,这样我们就只剩下公共地址了!

be 8d 5 bbfa 171171 f 128 a7 fc 7 6e 9 D6 c 0 b 98 E0 C4 c 863 abde 47082 AE 461 f 09983d

这是通过公共地址创建的过程。

将输入或消息写入区块链

既然我们已经了解了交易是如何签名的,公共地址是如何创建的,那么让我们来看看如何在以太坊区块链上读取消息。关于信息,我指的是任何信息。

在交易数据中,字段“输入”是我们可以找到消息的地方。这些消息用于不同的目的。它们可用于提供交易的任何附加信息。它们可以被智能合约用作附加字段,以允许智能合约执行某些功能,或者用于在以太坊区块链上发送代币。让我们看几个例子:

我在 11792873 块创建了一个交易“0x 813850 ba 423 Fe 4 a 7 e 38d 89 c 0 C4 a1 d0a 166 f 58 F9 d 369778086 B3 B1 a 28 EDF 92 BC 0”里面有我自己写的消息,你也可以做。让我们来看看这个交易:

您可以注意到交易值为零。发送方只需支付汽油费来处理交易,但他不需要实际发送任何价值。

消息在输入字段中。该消息是用十六进制写的,不可读,但我们可以很容易地转换它。这很简单。在 python 命令提示符下,尝试以下命令将十六进制字符串转换为 UTF-8 文本:

导入编解码器

codecs.decode("十六进制字符串","十六进制")。解码(“utf-8”)

我们可以编写几行代码来自动完成这项工作,但为了示例的目的,只需复制不带 0x 的输入字段并运行命令。让我们解码上述块的输入:

以太坊区块链的信息是不可变的,这意味着没有人可以改变它,而且它是抗审查的。区块链以太坊到处都有人写爱情短信、求婚短信和政治短信。

在以太坊区块链上写消息,需要有一个以太坊钱包,里面有一些以太来交煤气费,需要连接一个钱包接口比如 MEW–My Ether Wallet:

然后,您需要以 0x 开始的十六进制值插入您的消息(您可以在许多在线转换器中将您的文本消息转换为十六进制)。然后,只需点击发送,你的信息将永远留在区块链。要检查此消息,您也可以访问诸如 Etherscan.io 之类的块浏览器,并检查消息:

我随机选择了另一个将 ERC20 令牌转移到智能合约的交易。这种消息看起来像这样:

要读取这个十六进制消息,我们必须将它分成更小的组。我们已经知道,0x 意味着这是一个十六进制消息。随后的 8 个字节“a9059cbb”是功能标识符。之后,每 32 个字节是一段消息,对应地址和金额。该消息将被智能协定解释为传输(地址,uint256)

该消息看起来类似于

MethodID: a9059cbb

地址:00000000000000000000000a 440 e 021 F3 f 18294595489292987 e0dc 273 C1 fc 5

金额:000000000000000000000000000000000000000000000001047 ab 243800

挖掘以太坊上的 geth

采矿有不同的类型,当然,我们可以探索最有利可图的方式,如何连接到采矿池,如何设置必要的采矿设备(对于以太坊,GPU 采矿通常更有效,矿工用例如 6 个 GPU 卡组装 GPU 采矿装备)。然而,我们仍将关注幕后发生的事情。

要使用你的 ubuntu 机器开始挖掘,让我们从创建一个以太坊钱包开始。创建钱包是重要的一步,以确保您有一个可以接收采矿奖励的公共地址。

获取新帐户

是的,永远不要说太多,创建一个强密码,永远不要分享你的私钥!你也可以使用现有的钱包来挖掘。

现在,让我们开始我们的节点,并把我们的钱包为 tendies:

geth-RPC-ether base 0x 104 AC 2177 cd8a 744258 ab 83 b 17 D2 c0 ded 0245695

你现在应该在采矿了!采矿活动的任何奖励都将存入你的账户。请注意,如果您非常重视挖掘,您应该配置一个带有挖掘池的节点。采矿池增加了获得奖励的机会,当然,它们可能会增加你的采矿利润。

要检查您现有的帐户,您可以运行

eth .帐户

要检查您的地址,您可以运行

web 3 . from Wei(eth . get balance(" 0x 104 AC 2177 cd8a 744258 ab 83 b 17 D2 c0 ded 0245695 ")," ether ")

如果您的帐户中有乙醚,您可以使用命令将其发送到另一个帐户:

eth.sendTransaction({from:" ",to:" 【T3 "),value: web3.toWei(0.01," ether")})

挖掘-附加注意事项

采矿池

池子里的矿工!

农业合作社的建立是为了让小农场主贡献他们的葡萄,并从合作社的葡萄酒销售中获得一定比例的收益。

采矿池是一个非常相似的概念,但不是分配葡萄酒销售的收入程序,而是分配工作采矿收入的证明。矿工贡献他们的计算能力,并根据他们对资金池的贡献获得奖励。

每次池中发现一个方块,方块奖励通过参与者按比例分配。因为这个池子集合了很多人的努力,所以增加了找到积木的机会,也增加了获得对大家都好的奖励的机会。如果一个池在比特币区块链中占哈希功率的 20%,该池将平均每小时挖掘 1.2 个块,并通过矿工分发奖励。另一方面,如果矿工正在进行“单独采矿”,即不使用水池,他可能需要等待数月,直到他足够幸运地开采一个区块。

采矿池的问题是,当采矿池变得太大时,它们也可能对区块链构成威胁。例如:尽管可能性很小,但如果中国四大矿池决定联合起来,他们可能会进行 51%的攻击,并阻塞整个比特币网络。

2014 年 7 月,采矿池 GHash。IO 在短时间内超过了 51%的比特币散列率,这足以承受 51%的攻击。这个问题在比特币社区引发了很多讨论。矿池发布声明,宣称将阻止其挖矿能力超过比特币总散列率的 40%。GHash。IO 不再运行。

ASIC 发行

ASIC 代表专用集成电路。它是一种为特定目的而构建的更高效的芯片,而不是像计算机中的 CPU 那样的通用芯片。ASICS 可以设计有一些内置逻辑,并针对特定任务进行编程,如人工智能、图像渲染、语音识别或使用特定算法挖掘加密货币。

理论上,这种硬件专业化使人们很难用他们的普通计算机进行挖掘,因为 ASIC 矿商拿走了大部分的挖掘哈希功率份额。这可能会导致更少的分散化,因为更多的富人/组织可以购买数千个这样的 ASIC 设备,并将它们放在巨大的采矿场,使像你我这样的人与作为矿工节点参与无关。为了平整游戏场地,一些加密货币开发商创建了 ASIC 抵抗功能,以阻止 ASIC 矿工的使用,并避免他们可能带来的所谓的集中化。

In July 2014, the mining pool GHash.IO exceeded for a brief period of time 51% of the Bitcoin hash rate, which was enough to carry a 51% attack. This issue generated a lot of discussion in the Bitcoin community. The mining pool released a statement declaring that it would prevent its mining power from exceeding 40% of Bitcoin's total hash rate. GHash.IO is not operational anymore.

【我】亚马逊网络服务——2020 年最大的云提供商。

【ii】BitTorrent 协议——点对点网络的通信协议。它于 2001 年推出,主要用于文件共享。据估计,BitTorrent 和类似的网络占据了超过 50%的互联网流量。

【iii】reg tech——监管技术。增强监管流程的技术。

【iv】分散式应用——通常是运行在区块链虚拟机如 EVM 之上的应用——以太坊虚拟机。

【v】未结账户——当卖方将货物发运给买方,买方同意在未来某个日期支付卖方的发票时


提单——由承运人签发的作为装运货物收据的文件。该文件代表货物的所有权

【VII】API–应用编程接口–系统间通信的接口

【VIII】RFID-射频识别

【IX】SLA——服务水平协议——IT 服务提供商或软件提供商与客户之间的协议。它通常与服务可用性、恢复时间、吞吐量和安全性等指标相关。

【x】PBFT——实用的拜占庭容错——区块链算法允许节点达成共识,即使有一定比例的节点出现故障

【https://eprint.iacr.org/2016/555.pdf】【Xi】

[vii] API – Application Programming Interface – Interface for system-to-system communication

[ix] SLA – Service Level Agreement – An agreement between an IT service provide or software provider and a client. It is usually related to metrics such as availability of the service, recovery time, throughput and security.

哇,你在这本书里确实涵盖了许多领域!现在,看看区块链世界有哪些让你感兴趣的东西,继续钻研你觉得最有趣的技术吧!

不要犹豫,在 LinkedIn 上联系我,给我留言,问我任何事情。另外,如果你在书中发现任何错误,请让我知道。

干杯

Wow, you sure covered a lot of ground in this book! Now take a look at what may interest you the blockchain world and keep drilling the technologies that you found the most interesting!

不要犹豫,在 LinkedIn 上联系我,给我留言,问我任何事情。另外,如果你在书中发现任何错误,请让我知道。

干杯


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组