首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超分类器织物分类器与couchdb问题

超分类器织物分类器与couchdb问题
EN

Stack Overflow用户
提问于 2021-11-10 05:39:49
回答 2查看 511关注 0票数 0

我很困惑超级分类系统如何存储数据.After我读了官方的文档,我知道在Ledger中有两个部分: WORLD_STATE和块链。我使用couchdb启动计算机中的fabric网络,使用命令如:./network.sh createChannel -ca -s couchdb,并输入一些存储在Ledger中的数据。

但这是我的困惑:

  1. 如果我在couchdb (如:功用/ )中直接更改数据,我发现当我使用命令:peer chaincode query -C mychannel -n CC_NAME -c '{"Args":["QueryAll"]}'时,查询结果也会发生变化,这意味着任何人都可以更改分类帐,而无需得到一半的同行的批准?
  2. 我正在使用golang来编写代码,queryAll就像:
代码语言:javascript
复制
    os.Setenv("DISCOVERY_AS_LOCALHOST", "true")
    wallet, err := gateway.NewFileSystemWallet("wallet")
    if err != nil {
        fmt.Printf("ERROR:%s\n", err)
        os.Exit(1)
    }
    if !wallet.Exists("appUser") {
        err = populateWallet(wallet)
        if err != nil {
            fmt.Printf("Wallet wrong : %s\n", err)
            os.Exit(1)
        }
    }

    ccpPath := filepath.Join(
        "..",
        "..",
        "network",
        "organizations",
        "peerOrganizations",
        "org1.example.com",
        "connection-org1.yaml",
        )

    gw, err := gateway.Connect(
        gateway.WithConfig(config.FromFile(filepath.Clean(ccpPath))),
        gateway.WithIdentity(wallet, "appUser"),
        )
    if err != nil {
        fmt.Printf("failed to connect to net : %s\n", err)
        os.Exit(1)
    }
    defer gw.Close()

    network, err := gw.GetNetwork("mychannel")
    if err != nil {
        fmt.Printf("%s\n", err)
        os.Exit(1)
    }
    fmt.Println("Start to query all")
    contract := network.GetContract("project_test")

    result, err := contract.EvaluateTransaction("queryAllMessage")
    if err != nil {
        fmt.Printf("ERROR:%s\n", err)
        os.Exit(1)
    }
    fmt.Println(string(result))

我发现在couchdb中直接更改数据后,它无法运行,错误如下:

Failed to evaluate: endorsement validation failed: Endorser Client Status Code: (3) ENDORSEMENT_MISMATCH. Description: ProposalResponsePayloads do not match exit status 1 ,如果一个人改变了他的couchdb .,那就不起作用了。

我想知道为什么会发生这种情况,以及如何避免其他人更改数据库,如何确保我得到的数据得到所有同行的批准?任何帮助都可能是有用的,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-10 08:06:33

每个对等点都有自己的CouchDB DB。这个DB是存储分类帐的世界状态的数据库,所以,如果直接在DB上更改数据--特定对等的world state --它就会改变。但是这样你就不会篡改网络中通道的世界状态。你打破了同伴的状态。该特定对等方将返回错误(更改)状态。但是其他的同龄人会回报好的。当该同行执行和背书时,它将与其他同行的背书不匹配,因此背书将失败(这就是稍后发生在您身上的情况)。在区块链网络中,如果您不同意协商一致意见,那么您就退出了网络。

  1. 不是的。你打破了那个同龄人的世界状态。Fabric网络的通道分类账(因此,其他对等方)保持不变。您需要完成与织物交易流程,这需要履行的背书政策。修改后的对等方的响应不再有效。
  2. 你同龄人的状态被篡改了。因此,它的认可与未被篡改的同行的认可不相匹配,正如人们预期的那样。即使您的背书策略只需要一个对等方的批注,其他对等方在尝试提交时也会检测到readset/writeset版本中的不匹配。

因此,它正在按预期工作。您不允许直接从CouchDB篡改状态。你只是打破了同龄人的状态。相应组织的系统管理员有责任提供措施,以避免破坏对等方的状态。

无论如何,您始终可以清除被篡改的对等方(链+状态)的分类账,并使其再次与网络同步。

票数 3
EN

Stack Overflow用户

发布于 2022-09-21 09:27:15

众所周知,世界状态是由每个对等层维护的,因此,如果我们试图从CouchDB url直接更改数据,那么它就会破坏通道的状态,从而导致背书验证失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69908422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档