知识卡片
无状态链码容器靠交易上下文字典代理账本访问
内容
链码容器本身不持有任何本地数据、不认识账本,只能通过ChaincodeStubInterface与Endorser节点通信来读写状态。Peer侧维护一个交易上下文字典(键为链ID+交易ID),把每笔正在模拟执行的交易与一个绑定了交易模拟器的上下文对象关联起来;容器发来的每条读写请求都要靠这张表找到对应的模拟器才能代理访问真实账本,模拟结果也只是暂存在该模拟器里,不直接落盘。这种”容器无状态、账本访问权集中代理”的设计既让同一个链码容器可以被多个通道复用([[链码安装与实例化的职责分离]]),也直接决定了Committer后续做MVCC检查时比较的对象——账本截至上一个已提交区块时的版本,而非容器内部状态。
参考来源
《Hyperledger Fabric技术内幕:架构设计与实现原理》第4章《Endorser背书节点》