关于区块链的一些概念

undefined1、绝大多数情形只会用到公钥

一般除了签名和验证签名的情形下会用到私钥,其他情形下一般只会用到公钥,使用公钥的形式包括公钥本身,或者公钥的哈希,而这其中又以使用公钥哈希为主。

undefined2、一个交易的构成

一个交易包括交易ID、输入和输出。

所谓输入,即包含的发送者可花费的币,不一定是发送者可花费的币的全部,和发送者的公钥;

所谓输出,即接收者接收到的币,一般包括发送者指定的接收者们接收到的币和给发送者发送的找零,和接收者的公钥哈希。

输入之和等于输出之和。

输入:

typeTxInputstruct {

  1. Txid []byte//前一笔交易的ID
  2. Vout int//前一笔交易在该笔交易所有输出中的索引(一笔交易可能有多个输出,需要有信息指明具体是哪一个)
  3. Signature []byte//输入数据签名
  1. //PubKey公钥,是发送者的钱包的公钥,上链之前,可以通过签名验证检查此笔交易是否是冒名顶替者发送的
  2. //如果PubKey无法解锁包含的输入,也就是说花的是他人的币,将无法验证通过,交易无效
  3. //这种机制,保证了用户无法花费其他人的币

PubKey []byte

}

输出:

typeTxOutputstruct {

  1. Value int//输出里面存储的“币”

//锁定输出的公钥(比特币里面是一个脚本,这里是公钥)

  1. PubKeyHash []byte

}

undefined3、一个区块链的六个核心功能

(1)创建新链(同时挖出创始区块)(一次性工作)

(2)创建交易

(3)挖矿

(4)交易签名和验证交易签名

(5)创建钱包

(6)共识算法

undefined4、一个区块链实现的五个核心对象

(1)Blockchain

实现核心功能:创建新链、挖矿

(2)Block

(3)Transaction

实现核心功能:创建交易、交易签名和验证交易签名

(4)共识

实现核心功能:共识算法

(5)Wallet

创建钱包

undefined5、关于钱包

(1)钱包自行创建,一般是通过客户端创建,也必须通过可信客户端创建

(2)一个钱包文件可以有多个钱包地址

(3)钱包创建后保存在本地

(4)钱包文件包含公钥和密钥,不上传网络,必须自行保管!

undefined6、转账通过传递双方钱包地址的公钥哈希进行

转账通过传递双方钱包地址的公钥哈希以及转账金额进行,一方面更安全,另一方面公钥哈希后,数据字节更短(只有32个字节),更节省存储和带宽(公钥有128个字节长,是哈希后的长度的3倍)。

undefined7、关于交易签名

(1)交易必须被签名,因为这是比特币里面保证发送方不会花费属于其他人的币的唯一方式。

(2)如果一个签名是无效的,那么这笔交易就会被认为是无效的,因此,这笔交易也就无法被加到区块链中。

(3)签名实质上是对交易的每一个输入所引用的输出的索引对应的输出的公钥哈希值进行签名。

undefined8、区块链里面的信息没有加密

区块链应用了加密技术,但那是用来签名用。区块链里面保存的信息,从根本上都是明文,不存在加密操作。