HOME/Articles/

什么是区块链?

Article Outline

什么是区块链?

区块链英文名称叫blockchain,顾名思义,它就是由一个个区块连接起来形成的一条链。(分布式账簿)

什么是区块?

所谓区块(block),在计算机领域,指的就是信息块:

block:a large piece of text processed as a unit

区块的结构

包含区块头和一批交易信息(区块体)

区块头

主要包含区块的元信息,例如,它的上一个区块、困难度、时间戳、随机数、merkle树根等,总计80个byte。

区块体

包含了交易(transaction)信息平均每条交易信息至少250个byte,可保存超过500条记录,所以区块体所占空间至少是区块头的1000倍。

区块标识

方式一、每一个区块主要由一个hash值来唯一标识。该值是由区块头通过两次sha256运算得到,它不作为区块数据结构的一部分在网络中传输,而是通过计算得到。

方式二、还可以通过区块高度来标识,(在区块链上)某一个区块对应到唯一个固定不变的高度。但是反过来,一个高度有可能对应多个区块,这在区块竞争时出现(两个矿工几乎同时破解谜题,打包区块,并广播到网络中,出现不同节点接受到不同区块的情况)

区块是怎么得到的?

简单来说区块是由矿工(miner)创造的,怎么得到的?······

什么是交易(transaction)?

简介

在bitcoin平台上交易记录了比特币价值的转移。

在以太坊平台上,交易主要被外部用户用来与以太坊网络进行交互,达到更新以太坊网络状态的目的。

结构

在bitcoin中,交易的结构是什么样的?

每条交易信息主要包含:输入、输出。

输入:引用上一条交易信息的输出(UTXO)

输出:转移给目标用户的具体的价值

数据结构:

image-20220426094814204

字段描述:

vin是输入,其中txid值是交易id,指向链上某一条与该用户相关的交易。

vout是下标,指向交易的输出,下标以0开始。

scriptSig是unlockscript,用来解锁被指向的UTXO(unspent transaction output),其值主要是数字签名等与用户持有的私钥可进行匹配的相关信息。

nSequence,原打算用来记录交易池mempool中可修改的交易状态,例如,该值小于232时表明该交易还没有达到最终不可修改的状态,可以不断更新,直到等于232,但是并没有这么使用。实际上,这个值通常都被设置成232,表示没有使用timelock。一旦小于232(通常设置为232-1,0xFFFFFFFE),则表示使用了timelock。(什么是timelock?)

vout是输出。

value的值是比特币数量,单位是聪(1BTC=10^9聪)。

scriptPubKey是lockscript,它主要用来锁住本身,通常包含公钥的相关信息,只能由持有相关私钥的用户才能够解锁。

另外还存在一种特殊的交易,coinbase transaction,它是每一个块中的第一条交易记录,它包含特殊的input,这种input不会指向任何UTXO,所以它不会花费,它的output包含的比特币是第一个成功打包该区块的miner的奖励。

image-20220426110717984

在以太坊中,交易的结构是什么样的?

image-20220426170350410

From,交易发起者的地址,20个字节。

To,交易接收者的地址,20个字节,可为空值、EOA地址、合约地址。

Nonce,动态地进行计算的一个数,用来记录从同一个地址发出的已经确认的消息数量,标识交易的唯一性以避免重复交易,定义交易的优先级。

Gas price,消息发送人愿意支付的油价,单位是wei。

Gas limit,消息发送者针对这条交易消息的处理所愿意购买的油量。

Recipient,消息接收者的地址。

Value,从发送者传给接收者以太币数量(1 ether = 10^18 weis)。

Data/Input,主要用于合约,若是新部署合约,该值为合约的字节码;若是执行已经部署过的合约,那么该值为函数签名与函数参数。

v,r,s,发送者的椭圆曲线算法签名的三个成份,可以用来生成from地址。

类型

比特币

仅存在一种类型的交易,就是账户之间bitcoin价值的流动。

以太坊

三种不同类型的交易

  • EOA账户之间ether的流动转移
  • 发布合约到以太坊网络
  • 执行以太坊网络中某一个合约的方法

什么是区块链的节点?

以比特币网络为例,它是一个基于互联网之上的点对点的网络。

其中,每一个点指的就是运行着相应客户端软件的计算机。客户端软件有很多,例如C++版本的Bitcoin Core、Java版本的bitcoinj、Go版本的btcd等。

客户端软件主要包含:路由、保存区块数据库、挖矿、钱包服务这四项功能。

开启了这四种功能的节点被称为fullnode。

开启了路由、数据库功能的节点被成为Full Block Chain Node。

开启了路由、数据库、挖空功能的节点被称为miner矿工。

开启了路由、钱包功能的节点被称为SPV。

有什么核心特点?

不可篡改,为什么?

为什么需要区块链?

目的与手段

总结

区块链技术本质上就是一种不可篡改的分布式数据库技术!(为什么不可篡改?)

参考:

https://bityl.co/BxY4

https://kctheservant.medium.com/transactions-in-ethereum-e85a73068f74

https://amz.run/5Xal

https://amz.run/5Xam