couchdb - 通过 Fauxton 进行的 Hyperledger Fabric CouchDB 更新被视为有效更新,但在区块链中没有记录
问题描述
我有一个带有 3 个对等点的 Hyperledger Fabric 网络设置,每个对等点都有一个 CouchDB 持久性容器。
如果我通过 Fauxton 接口并更改 JSON 记录,则此状态更改将传播到同一组织中的所有三个对等点。
但是,区块链中没有状态变化的记录。没有为它创建事务。
如果不是区块链事务导致状态更改传播到所有对等方,是什么机制导致的?
在没有交易的情况下,通过 Fauxton 进行的状态变化到底是如何被认为是有效的?
在生产环境中对 Fauxton 的期望是什么?
编辑:回到这个话题:原来我是个白痴,我的 docker 端口映射有问题。
解决方案
如果您直接在对等点 CouchDB 中更改数据,它不会传播到其他对等点。您不应将 CouchDB 端口暴露在对等网络之外,以避免数据被篡改。只有 peer 的管理员应该能够访问 CouchDB,并且管理员没有篡改自己数据的动机。让我进一步解释...
Hyperledger Fabric 状态数据库类似于比特币未使用交易数据库,如果一个节点管理员篡改了他们自己节点的数据库,节点将无法让其他节点相信来自它的交易是有效的。在这两种情况下,数据库都可以被视为当前区块链状态的缓存。在这两种情况下,如果数据库损坏或被篡改,它可以在区块链的对等点上重建。对于比特币,这是通过 -reindex 标志完成的。对于 Fabric,这是通过删除状态数据库并重新启动对等方来完成的。
在 Fabric 中,背书策略中指定的来自不同组织的对等节点必须返回相同的链码执行结果才能验证交易。如果节点上的账本状态数据已被更改或损坏(在 CouchDB 或 LevelDB 文件系统中),则链码执行结果在背书节点之间将不一致,“坏”节点/组织将被发现,应用程序客户端应在提交交易以进行排序/提交之前,丢弃来自不良对等方/组织的结果。如果客户端应用程序无论如何都尝试提交具有不一致背书结果的交易,则将在验证时在所有对等方上检测到这一点,并且该交易将无效。
推荐阅读
- flutter - Flutter 重构选项未显示在 Visual Studio Code 上下文菜单中
- r - 识别共享重复值的组
- python - 为什么 pipenv 指的是本地库而不是虚拟环境中的库?
- terraform - 如何让 gitlab 管道中的外部阶段“等待”直到所有 gitlab 内部阶段都完成?
- angular - 我无法使用 Angular 发布到与“localhost”不同的地址
- python - AWS(亚马逊网络服务)带有 IMB MQ python 模块 pymqi 的 Lambda 函数(没有名为“pymqe”的模块)
- three.js - 渲染到平面纹理的场景中的 Three.JS 相机控件?
- python - Scipy.stats norm vs lognorm
- linux - 解压缩函数在 Bash 脚本中显示奇怪的输出
- javascript - 无法关闭硒中的上传文件窗口