区块链的已经耳熟能详了,我希望用一个故事来详细直观的阐明区块链的概念。
先说区块链的核心模块
模块 | 主要功能 | 关键组成 / 协议 / 算法 | 子模块或典型实现 |
---|---|---|---|
1. 网络层(P2P 网络) | 节点间通信、区块广播、交易传播、节点发现 | libp2p / devp2p / Kademlia | Peer 管理、Gossip 协议、节点身份验证与签名 |
2. 共识层 | 决定哪个区块加入链,保持全网一致 | PoW(以太坊早期)、PoS(Casper FFG + LMD GHOST)、PBFT、DPoS | 区块验证器、投票逻辑、最终性处理(Finality) |
3. 数据层 | 存储链数据和状态 | LevelDB、Merkle Patricia Trie | 区块存储(Block Store)、状态数据库、交易池(Mempool)、索引(logs/events) |
4. 虚拟机层(智能合约执行) | 运行智能合约字节码 | EVM 或 WASM | 字节码解释器、合约调用上下文、Gas 计费系统、指令执行逻辑、存储读写接口 |
5. 账户与状态管理 | 跟踪地址余额、nonce、合约代码等 | 账户模型(ETH)、UTXO 模型(BTC) | Merkle Patricia Trie(MPT 状态树)、状态快照(snapshot) |
6. 交易处理模块 | 验证并处理交易 | ECDSA 签名验证 | 签名验证、nonce/余额检查、交易池管理、打包入区块 |
7. 区块生成与同步模块 | 生成新区块并同步 | PoW/PoS 打包规则、snap sync、full sync | 打包交易、计算状态 root、快速同步/全节点同步 |
8. RPC 接口 / API 模块 | 对外提供链数据访问与交互接口 | JSON-RPC、REST、GraphQL |
eth_getBalance 、eth_sendRawTransaction 、eth_call
|
9. 钱包与密钥管理模块 | 生成地址、管理私钥、签名交易 | BIP39、BIP32、BIP44、ECDSA(secp256k1) | 助记词生成、私钥管理、Keystore 加密存储 |
10. 合约编译与部署支持 | 编译与部署智能合约 | Solidity、Solc、ABI 解析 | 合约编译、事件与函数调用解析 |
11. 日志与事件系统 | 记录并提供事件订阅 | Event Log(如 ERC20 Transfer) | 合约事件记录、dApp 事件订阅器 |
12. 激励与罚没机制(PoS) | 激励节点参与、惩罚作恶 | Staking、Unstaking、Slash | 质押与解押、区块奖励/提案奖励、双签惩罚、离线罚没 |
假如现在你的楼下有一个菜市场,每天都有人来买菜,很多人赊账。
1.但是有第一个问题,账本很容易被篡改,比如张三今天来赊了3斤白菜,但是他第二天说自己没赊过。这就很难办了。
那怎么办呢,大家统一共识,每个人都一个账本,谁来赊账,都在这个账本上记录一笔。这个张三想赖账,自己改账本就不可能了
2.第二个问题,谁来记账呢,如果大家都偷懒,怎么办,怎么激发大家主动记账的积极性
经过菜市场一致讨论,记账之前,谁先把100斤白菜葱东门挑到西门,就由谁来记账,谁记账奖励这家十斤鸡蛋。这样大家为了鸡蛋,踊跃去记账了。
3.第三个问题,这么多商贩和顾客,怎么确定个人的身份呢,怎么确保真实性呢
给每个人发放一个牌子,上面有编号,牌子后面,每个人收到牌子后,去登记一下,每个人把自己的手印,印在牌子后面,这个每个人交易的时候,报一下自己的牌子号码,为了防止你的牌子被人偷来冒充你买卖,交易的时候,需要把你的手放到牌子背面的手印上,比对一下是否配备(因为没有人的手印是一模一样的)。
这样大家交易的时候,谁也冒充不了你,谁也抵赖不了。