我很困惑超级分类系统如何存储数据.After我读了官方的文档,我知道在Ledger中有两个部分: WORLD_STATE和块链。我使用couchdb启动计算机中的fabric网络,使用命令如:./network.sh createChannel -ca -s couchdb,并输入一些存储在Ledger中的数据。
但这是我的困惑:
peer chaincode query -C mychannel -n CC_NAME -c '{"Args":["QueryAll"]}',时,查询结果也会发生变化,这意味着任何人都可以更改分类帐,而无需得到一半的同行的批准?。 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 .,那就不起作用了。
我想知道为什么会发生这种情况,以及如何避免其他人更改数据库,如何确保我得到的数据得到所有同行的批准?任何帮助都可能是有用的,谢谢。
发布于 2021-11-10 08:06:33
每个对等点都有自己的CouchDB DB。这个DB是存储分类帐的世界状态的数据库,所以,如果直接在DB上更改数据--特定对等的world state --它就会改变。但是这样你就不会篡改网络中通道的世界状态。你打破了同伴的状态。该特定对等方将返回错误(更改)状态。但是其他的同龄人会回报好的。当该同行执行和背书时,它将与其他同行的背书不匹配,因此背书将失败(这就是稍后发生在您身上的情况)。在区块链网络中,如果您不同意协商一致意见,那么您就退出了网络。
因此,它正在按预期工作。您不允许直接从CouchDB篡改状态。你只是打破了同龄人的状态。相应组织的系统管理员有责任提供措施,以避免破坏对等方的状态。
无论如何,您始终可以清除被篡改的对等方(链+状态)的分类账,并使其再次与网络同步。
发布于 2022-09-21 09:27:15
众所周知,世界状态是由每个对等层维护的,因此,如果我们试图从CouchDB url直接更改数据,那么它就会破坏通道的状态,从而导致背书验证失败。
https://stackoverflow.com/questions/69908422
复制相似问题