概念理解
在理解solidity之前, 我们需要先了解一些关于区块链的概念
区块链的特征
- 去中心化: 一个或者多个服务器瘫痪的情况下, 应用仍然能够正常的运行
- 分布式: 服务器是多对多, 而不是一对一
- 数据库: 区块节点提供了数据库的基本功能, 数据的输出和导入, 数据的备份和回复
- 账本: 大白话理解就是 有一个专门存储和检索数据的地方。 账本是一种特殊的结构存储方式, 不允许修改, 智能通过追加的方式来实现
区块链是由区块组成的一个链条, 由于去中心化和分布式, 因此区块链是具备了文档、健壮、不可被篡改的特点。由于区块链不可修改历史的特性, 所以区块链具有较高的可信任度, 数据流动过程公开透明, 智能合约是扩展以太坊的手段之一, 本教程也是通过智能合约来扩展以太坊。
数字签名
数字签名类似一个人在纸上手写签名, 确保信息在传递过程中不被篡改。
这是官方解释, 看起来有些云里雾里, 实际上对于数字签名,我们的祖先已经发明过了: 古时候, 国家发生了战争, 皇帝一般不会御驾亲征, 这时候, 就需要派一个将军来领兵作战。 假设已经选定了一个人来领兵, 接下来就是调兵, 可是将军前往军营, 必须要有凭证是皇帝派遣而来的, 否则,谁都有兵权调兵, 那皇帝睡不着觉了。此时就诞生了虎符, 虎符是两块, 一块是皇帝持有, 一块是统兵的将领持有。 然后皇帝把虎符交给调兵的将军前往军营, 统兵的将军与调兵的将军虎符合一, 才算是成功调兵, 否则人头落地。虎符的应用, 极大的降低了因为身份识别错误而发生叛乱的危险。
虎符的作用有点类似证明我是我,但是, 在网络的世界里, 保证信息的安全, 防止数据的篡改确实是很重要的。例如, 韩梅梅和李磊多年未见, 韩梅梅主动给李磊发了一条消息, 但是如何保证信息在发送的过程中, 没有被韩梅梅的老公篡改呢? 首先肯定不能发送原始信息, 首先 韩梅梅需要获取发送信息的散列值, 然后用私钥加密, 加密产生的一个数字签名附加在散列值发送给李磊, 李磊收到信息后, 使用韩梅梅的公钥获取数字签名并且解密, 找到原始的散列值, 同时从实际收到的信息中心提取散列值, 两个散列值如果不一致, 那么,李磊很危险了, 大家自己脑补。
以太币
以太币是以太坊上的虚拟货币, 类似于天朝的人民币, 只要身在天朝, 就要纳税, 发工资要纳税, 买东西要纳税, 通俗点说, 只要发生交易, 就要纳税。同样, 在以太坊上的每次活动都需要消耗以太币, 以太币可以通过交易平台兑换成法定货币。
既然是货币, 那么就肯定有计量单位了, 有wei, gwei, ether, kether 等, 暂时我们不需要关系这些单位, 只需要知道, 最小单位是wei, 1eth = 10**18 wei
gas
gas 最直白的解释 “气体”, 再查一查, 解释是“天然气”, 那么以太坊与“天然气”有啥关系呢?
首先, 比特币大家都知道, 一到年底, 一路猛增, 但是一旦发生啥事情, 又会下跌,比特币都如此, 更何况其它币呢? 这样过山车般的心跳和脉动, 就问你刺激不刺激。 可是想想也有点小激动, 在如此价格不固定的情况下, 也会导致我们的交易费用忽高忽低。 问题来了,大家都在以太币价格低谷的时候交易,峰谷效应,就问你怕不怕。 所以, gas 费用就诞生了, 在用户交易前, 让用户预先确定一个交易的执行成本,大白话理解就是稳定交易市场, 不管以太币的价格高或者低, 都能有一个稳定的gas 费用。
以太坊的结构
区块链的组成有很多, 重要的有EVM(虚拟机, 后续会讲),矿工,区块,交易,账户,智能合约, 还要我们刚才介绍的以太币和gas。
区块链是分布式, 所以会有很多的节点, 一部分节点是挖矿, 一部分节点是执行智能合约或交易(EVM)
每个节点都会保存区块的所有区块(账本),由于节点众多,要是节点不一致, 就会扯皮,所以大家实时同步区块,达成共识, 确保账本一致
那么重点来了, 我们的智能合约也是运行在EVM 上的, 智能合约就是定制化以太坊的能力, 智能合约再执行的时候, 作为交易的一部分, 也会被记录到账本中。
用户用自己的账户, 来调用合约的一个函数, 就是一个交易, 在交易前,首先账户得有钱, 然后使用私钥对交易进行数字签名, 保证了我是我。
交易与区块
啰嗦了这么一大堆, 那么区块和交易到底是什么关系呢?
交易存储在区块中, 交易执行的时候需要消耗一定的gas(就当是交税),交易的同时, 也会有其它的区块在交易, 那么凭什么我的交易被写入, 而不是其它的交易呢? 主要是我的gas 费用给的高, 一旦达到了最高值, 那么有gas就是爷, 区块只能在当前写入我的交易, 其它的交易, 统一在当前交易之后。 然后呢, 之前我们提到的节点开始挖矿。
第一个交易写入区块, 区块会按照执行的顺序依次连接。要是其中有一个篡改, 那么整条链都需要该, 但是这是不可能的, 所以这保证了区块链不可篡改的事实。
矿工的竞争
矿工的日常翻译过来就是, 会计在以太坊上的007。 会计是记账, 那么矿工也是记账——向以太坊写入交易数据。 因为矿工这样做可以获得奖励。之前我们讲到了,交易会产生gas, 交易也需要写入区块。 你不能白嫖节点, 那么你的gas费用, 就给了挖矿的矿工。矿工的收入有两种, 一种是写入区块的奖励, 一种是交易支付的gas 费用。矿工很多, 所以矿工之间会互相金正,当开始挖矿的时候,矿工就需要去做题(计算交易hash, 谁先算出来, 谁就胜出, 有点类似打麻将, 谁先用13章牌糊了, 谁就赢), 一旦有一个矿工竞争胜出写入了区块, 然后发送区块和Nonce值给其它矿工确认, 其它矿工承认了, 然后同步到自己的区块中, 从而就好获得gas的回报( 打牌糊了赢钱一个道理 ), 最终矿工之间的账本就实现了一致性
那么总结下来就是
-
数字签名,发起交易
-
挖矿, 矿工把区块写入账本,发送给其它旷工: 我都算完了, 你们甭忙活了
-
所有矿工都承你牛, 然后达成共识, 也写入自家账本