区块链入门

本文目标:将比特币、区块链、以太坊、智能合约、solidity语言、geth、ganche单独介绍并且串起来,帮助大家心中有框架,针对性学习

简单介绍一下,我是一个小白,如果不是本科课题是区块链钱包,我可能到现在也不会去了解区块链。由于选题时对区块链的一无所知,导致我在做毕设时格外痛苦,我还找不到一个比较完整的介绍,所以都是东一榔头西一锤子,什么区块链啊、以太坊啊、智能合约啊、solidity语言啊、geth啊、ganche啊等等,一直到最后,我才把这些串起来,才没有那么晕头转向。因此,写这一篇文章的目的,是为了帮助初学者快速入门,心中有一个框架,知道各个部分是干什么的,然后针对性学习!

区块链

我相信入门的时候,大家或多或少都搞不清楚区块链和比特币的区别与联系,因为所有文章都会说,“2008年,一篇名为《比特币:一种点对点式的电子现金系统》的文章横空出世,一种被中本聪(中本聪是个人名)称为“比特币”的新型电子货币出现在大众视野,区块链技术从此诞生”,好像区块链和比特币息息相关,但不知道它们的区别。其实很简单,比特币是以区块链技术为底层核心技术的,也就是说,如果把比特币当成一种“应用”,那么区块链就是基础的“底层原理”。需要注意的是,区块链和区块链技术还有一点不一样的感觉,在中本聪提出比特币之前,区块链并不存在,比特币出现之后,许多人参考着比特币中的区块链,使用类似的技术实现了各种各样的应用,这类技术被统称为区块链技术,区块链技术更像是一类相似技术的合称(这个点也不是很重要,差不多知道就好)。

ok,我们已经明白比特币和区块链的关联之后,让我们正式开始介绍区块链。
大家就把区块链想象成一条真实的链子就好,我们想向这个链子上写东西,就需要拿一个新的节点,在节点上写完后再接到链子上,链子就会越接越长,这可不就是区块(节点)形成的链吗?当然这只是最朴素的理解。在这里插一句,我们在区块上写东西的这个操作就是所谓的记账,如果成功将新的节点链接到区块链上,也就是完成记账的节点,在中本聪设定的比特币区块链里,就可以获得系统给与的一定数量的比特币奖励。赢得记账权,获得比特币奖励,这种行为就是所谓的“挖矿”。
由上所述,区块链由一个或多个区块组成的,系统中的数据呢,也是需要链上所有的区块共同维护的,每个区块的地位都是平等的,都可以处理和存储数据,而且每个区块都与前一个区块相连,依照链接区块链的时间顺序,从前到后将交易块连接形成链式结构。

————下面开始讲区块链的细节,只想了解整个框架而不想深入的,跳过——————
————包含由谁来记账(工作量证明),怎么保证账本的完整性(hash),记完账连接到哪里(最长链共识)——————
区块链的结构,如下图!
区块链示意图
注意看,第一块区块被我手动分为了区块头和区块体,区块体就是账本记录数据、交易的地方。将整个区块体记完后,整个区块头需要经过SHA256(哈希)得到一个独一无二的值,这个值会放到第二个区块头里,也就是我写的“上一个区块的哈希值”,如果说,第一块区块的任何地方被篡改,SHA256之后的值都会随之发生改变,第二块的“上一个区块的哈希值”也会发生改变,因此第二块完整的区块经过哈希时,得到的值也不同,第三块的“上一个区块的哈希值”发生改变……就像多米诺骨牌一样,后面所有的哈希值都会发生变化,因此,坏人篡改数据的行为会被大家发现。有的朋友可能会说,欸,那我篡改区块体的交易数据,你经过哈希的时候,只是把区块头哈希了而已,不会被发现的,嘿嘿,区块头的Mrekle值,就是用来保护交易数据的完整性的(完整性是指,数据正确未被修改)。现在让我来介绍Mrekle到底是什么吧。
首先pou出一张Mrekle树结构。
Mrekle树结构
TX就是交易,交易1哈希之后的值(hash1)与交易2哈希后的值(hash2)再进行哈希,得到了hash12,如果有人篡改TX1,那么hash1就会不同,那么hash12和hash1234也会改变……我这样一说,大家可能就懂了,在这个结构里,无论哪个交易数据被篡改,hash1234都会发生改变!而hash1234,就是Mrekle值!无论哪个交易数据被篡改,Mrekle值都会发生变化,Mrekle作为区块头的字段,SHA256的值发生改变,多米诺骨牌效应发生,篡改被发现!
以上,我们详细说明了区块链如何保障其完整性,确保数据的可靠性和不可篡改性,但是区块链还有共识机制,也就是当区块链如何保障自己不分叉(一个链子,如果某个区块同时被两个区块连接,就会出现分叉)
分叉示意图

简单来说就是选择最长链为主链,挖矿时也会更加倾向于往长链子上连接(我记得是因为这样奖励多,谁会跟比特币过不去呢)。这块我就不详细讲了。
再介绍一下工作量证明,它解决了谁来记账的问题。我们刚刚讲了,上一个区块的区块头都会经过哈希,哈希之后的值会放在下一块的区块头中,但在实际情况中,因为记账成功是有激励的,所以有很多人争着要记账,为了增加记账难度,我们引入一个随机数字段,每个参赛者都要计算这个随机数,谁先成功算出这个随机数,谁就获得了记账权!下面介绍比赛规则!在之前的规则是
Hash(上一个Hash值,交易记录集) = 4889226aBCD(这一块的哈希值可以是任意数)
但现在的新规则是
Hash(上一个Hash值,交易记录集,随机数) = 0000aFD635BCD(这一块的哈希值必须在前几位是0,具体是几位0,不同的链有不同的要求)
因此,为了寻找符合要求的哈希值,参赛者只能不停的改变随机数的值,这对机器的算力就提出了要求,算的慢了,记账权就被别人抢了去了,现在来看,“工作量证明”这个名字,好像也很贴切。
以上,我们要知道整个过程有,由谁来记账(工作量证明),怎么记账保证完整性(hash,mrekle值),记完账连接到哪里(最长链共识)

区块链架构

在区块链技术刚被提出的时候,在架构上通常被分为6层或者4层,6层的概念即数据层、网络层、共识层、激励层、合约层和应用层,下图为区块链技术的6层架构图。某些情况也可将共识层、记录层、合约层统称为协议层。代表链有以太坊链、波场链等。
区块链框架图
我们在上一节中,已经涉及到了数据层,如果大家有看那个图的话,一定很眼熟。网络层我目前没有提起,但实际上也涉及,比如说在工作量证明中就需要验证机制,验证随机数对不对,参赛者也需要把自己记的帐通过传播机制送到裁判方手中。POW就是工作量证明的缩写,激励这个词大家也都很熟悉,不激励怎么让大家积极记账呢?合约层和应用层,是我们下面的重点。

以太坊

2013 年,由Vitalik Buterin首先提出了以太坊概念,并发表了以太坊白皮书,从此,区块链从1.0时代迈向区块链2.0时代。以太坊是一个开源的、公共区块链交易平台,是建立在区块链技术之上的去中心化应用平台,对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,只需专注于开发应用本身逻辑的智能合约,无需修改如加密算法,共识机制,网络协议等底层代码,大大降低了开发难度。
因此,比特币、区块链、以太坊的关系,我们可以捋清楚了,比特币呢,是直接使用区块链技术开发的一个应用,而以太坊,相当于一个开发平台,对区块链技术进行了包装,是一个建立在区块链技术之上的去中心化应用平台,允许开发人员创建使用智能合约来实现任意逻辑和功能的DAPP(DAPP就是app的去中心化),即通过编写和部署智能合约,允许任何人在平台中建立运行去中心化应用。
比特币、区块链技术、以太坊关系图

智能合约

终于到智能合约了,我相信上面每次提到智能合约,大家都挺疑惑,不知道是什么,现在详细来唠唠。
我们刚刚说,以太坊是一个去中心化应用的平台,举个不恰当的例子,有点像我们平常写代码的工具环境,比如说vscode,他就是个平台,你通过编写代码(通过编写智能合约),可以运行程序(可以运行去中心化应用),而智能合约呢,也确实需要编译部署到链上,这样,一旦有什么操作符合智能合约的定义,就可以通过智能合约的接口调用智能合约的处理办法,是不是很像我们平常写代码调用接口?
自然,智能合约也有属于它的高级语言,现在的主要编程语言是solidity和vyper,solidity更为成熟一些,语法跟高级语言相似,合约文件扩展名是.sol。如果你以后想自己编写一个智能合约,那么就需要学习solidity语言,IDE呢,可以使用remix在线工具,remix可以直接编译部署solidity语言编写的智能合约哦,这样我们就不用自己搭建区块链了。
如果你不想用remix在线工具,想自己搭建一个私有链,然后编译部署智能合约,那也没关系,下面介绍。

ganache和geth

如果你需要跟我的毕设一样编写区块链钱包的系统,那老师的第一个要求就是“给你一周的时间,去搭建一个区块链环境”,我当时弄了好久,也不明白搭建区块链环境到底是什么,实际上很简单,无非是搭建一个属于自己的私有链,方便我们的实验,当然有私有链也有公有链,还有一种叫联盟链,那我们为什么不直接在公有链上做实验呢?emmm好问题,我担心我那一行800个bug的破水平被别人看到,占用公共资源 orz,实际上在公有链上一旦部署了智能合约,就没有反悔的余地了,它会自动运行,被众人看到,因此才会出现联盟链,就像建了个群一样,只有联盟里的人员才能看到,而私有链呢,只有自己能看,完美的隐藏了我的破水平。
如果你想搭建一个私有链,你可以去搜geth搭建区块链的教程,我之前做实验也记录了,还没整理,整理了可以分享给大家。
如果大家跟我一样想偷懒,可以使用一个更简单的,ganache,ganache在本地使用内存模拟的一个以太坊区块链环境,而且Ganache会在启动时帮我们创建10个存有资金的测试账户,对于开发调试来说,更方便快捷(不用自己去创建用户了),当然,对我来说还有一个更重要的原因,虽然geth和ganache都是典型的开发以太坊时使用的客户端,但是geth只能用命令行操作,而ganache有操作页面,第一张是geth,第二张是ganache

geth
ganache
ok,我们基本上已经介绍结束了,现在总结一下
区块链技术被以太坊封装,我们可以直接在以太坊通过编写只能合约来创建DAPP,但智能合约也需要编译部署到链上,我这种菜鸟选择搭建私有链,搭建私有链有两种方法,geth搭建一个真正的私有链,ganache在内存模拟一条私有链。智能合约需要用solidity语言,IDE可以选择remix在线工具,remix可以在线编译部署,等检查无误后,在部署到我们自己的私有链上即可。区块链技术作为实验的根本,也是需要大家了解的。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾酥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值