# 1、绝大多数情形只会用到公钥
一般除了签名和验证签名的情形下会用到私钥,其他情形下一般只会用到公钥,使用公钥的形式包括公钥本身,或者公钥的哈希,而这其中又以使用公钥哈希为主。
# 2、一个交易的构成
一个交易包括交易ID、输入和输出。
所谓输入,即包含的发送者可花费的币,不一定是发送者可花费的币的全部,和发送者的公钥;
所谓输出,即接收者接收到的币,一般包括发送者指定的接收者们接收到的币和给发送者发送的找零,和接收者的公钥哈希。
输入之和等于输出之和。
输入:
typeTxInputstruct {
Txid []byte//前一笔交易的ID
Vout int//前一笔交易在该笔交易所有输出中的索引(一笔交易可能有多个输出,需要有信息指明具体是哪一个)
Signature []byte//输入数据签名
//PubKey公钥,是发送者的钱包的公钥,上链之前,可以通过签名验证检查此笔交易是否是冒名顶替者发送的
//如果PubKey无法解锁包含的输入,也就是说花的是他人的币,将无法验证通过,交易无效
//这种机制,保证了用户无法花费其他人的币
PubKey []byte
}
输出:
typeTxOutputstruct {
Value int//输出里面存储的“币”
//锁定输出的公钥(比特币里面是一个脚本,这里是公钥)
PubKeyHash []byte
}
# 3、一个区块链的六个核心功能
(1)创建新链(同时挖出创始区块)(一次性工作)
(2)创建交易
(3)挖矿
(4)交易签名和验证交易签名
(5)创建钱包
(6)共识算法
# 4、一个区块链实现的五个核心对象
(1)Blockchain
实现核心功能:创建新链、挖矿
(2)Block
(3)Transaction
实现核心功能:创建交易、交易签名和验证交易签名
(4)共识
实现核心功能:共识算法
(5)Wallet
创建钱包
# 5、关于钱包
(1)钱包自行创建,一般是通过客户端创建,也必须通过可信客户端创建
(2)一个钱包文件可以有多个钱包地址
(3)钱包创建后保存在本地
(4)钱包文件包含公钥和密钥,不上传网络,必须自行保管!
# 6、转账通过传递双方钱包地址的公钥哈希进行
转账通过传递双方钱包地址的公钥哈希以及转账金额进行,一方面更安全,另一方面公钥哈希后,数据字节更短(只有32个字节),更节省存储和带宽(公钥有128个字节长,是哈希后的长度的3倍)。
# 7、关于交易签名
(1)交易必须被签名,因为这是比特币里面保证发送方不会花费属于其他人的币的唯一方式。
(2)如果一个签名是无效的,那么这笔交易就会被认为是无效的,因此,这笔交易也就无法被加到区块链中。
(3)签名实质上是对交易的每一个输入所引用的输出的索引对应的输出的公钥哈希值进行签名。
# 8、区块链里面的信息没有加密
区块链应用了加密技术,但那是用来签名用。区块链里面保存的信息,从根本上都是明文,不存在加密操作。
- 重要更新说明
- linechain发布
- linechain新版设计
- 引言一
- 引言二
- 引言三
- vs-code设置及开发环境设置
- BoltDB数据库应用
- 关于Go语言、VS-code的一些Tips
- 区块链的架构
- 网络通信与区块链
- 单元测试
- 比特币脚本语言
- 关于区块链的一些概念
- 区块链组件
- 区块链第一版:基本原型
- 区块链第二版:增加工作量证明
- 区块链第三版:持久化
- 区块链第四版:交易
- 区块链第五版:实现钱包
- 区块链第六版:实现UTXO集
- 区块链第七版:网络
- 阶段小结
- 区块链第八版:P2P
- P2P网络架构
- 区块链网络层
- P2P区块链最简体验
- libp2p建立P2P网络的关键概念
- 区块链结构层设计与实现
- 用户交互层设计与实现
- 网络层设计与实现
- 建立节点发现机制
- 向区块链网络请求区块信息
- 向区块链网络发布消息
- 运行区块链
- LineChain
- 系统运行流程
- Multihash
- 区块链网络的节点发现机制深入探讨
- DHT
- Bootstrap
- 连接到所有引导节点
- Advertise
- 搜索其它peers
- 连接到搜到的其它peers
- 区块链网络的消息订发布-订阅机制深入探讨
- LineChain:适用于智能合约编程的脚本语言支持
- LineChain:解决分叉问题
- LineChain:多重签名
- libp2p升级到v0.22版本
- 以太坊基础
- 重温以太坊的树结构
- 世界状态树
- (智能合约)账户存储树
- 交易树
- 交易收据树
- 小结
- 以太坊的存储结构
- 以太坊状态数据库
- MPT
- 以太坊POW共识算法
- 智能合约存储
- Polygon Edge
- block结构
- transaction数据结构
- 数据结构小结
- 关于本区块链的一些说明
- UML工具-PlantUML
- libp2p介绍
- JSON-RPC
- docker制作:启动多个应用系统
- Dockerfile
- docker-entrypoint.sh
- supervisord.conf
- docker run
- nginx.conf
- docker基础操作整理
- jupyter计算交互环境
- git技巧一
- git技巧二
- 使用github项目的最佳实践
- windows下package管理工具