基于 Node.js、TypeScript 和 WebSockets 的区块链客户端 - 服务器通信
1. 区块链引入服务器
区块链技术以去中心化著称,无需服务器。但我们添加的服务器并非用于创建、验证和存储区块的中央权威,而是提供诸如缓存哈希、广播新交易、请求最长链或宣布新创建的区块等实用服务。
假设 M1 节点挖到一个区块,并向服务器请求最长链。服务器会将此请求广播给区块链上的其他所有节点,各节点会以其链(仅区块头)作为响应,服务器再将这些响应转发给 M1。M1 节点接收到最长链后,会通过检查每个区块的哈希来验证它,然后将新挖到的区块添加到这个最长链上,并将该链本地保存。在一段时间内,M1 节点将拥有最长链,成为“真相来源”,直到其他节点挖出一个或多个新块。
若 M1 想创建一笔新交易,如“Joe 给 Mary 转了 1000 美元”,为每笔交易创建一个新区块会很慢且成本高。通常一个区块包含多笔交易,M1 只需将新交易广播给区块链的其他成员即可。其他矿工节点也会对其交易进行同样操作。
在去中心化系统中,所有节点需要就有效事件达成共识。例如,若两个节点同时计算出一个新块的哈希,哪个块将被添加到链上,哪个节点将获得奖励?区块链的所有节点必须达成共识,确定获胜者。在我们的应用中,将使用工作量证明结合最长链来达成区块链真实状态的共识,以确保使用单一链。
所有广播的交易都会进入待处理交易池,任何节点都可以从中挑选一组交易(如 10 笔)并开始挖矿。
2. 项目结构
区块链应用由服务器和客户端两部分组成,均使用 TypeScript 实现。项目结构如下:
超级会员免费看
订阅专栏 解锁全文
67

被折叠的 条评论
为什么被折叠?



