Hyperledger fabric Hyperledger fabric-是区块链上的一项新交易

Hyperledger fabric Hyperledger fabric-是区块链上的一项新交易,hyperledger-fabric,Hyperledger Fabric,我们目前正在为hyperledger结构网络制定计划。我们确实需要知道以下问题的答案:“对区块链/世界状态的查询是否会向区块链添加另一个交易” 文档告诉我们以下内容(这就是发生混淆的地方) “应用程序提交捕获世界变化的事务 状态,这些事务最终会提交到分类账 区块链。” “区块链的结构是相互链接的连续日志 块,其中每个块包含一系列事务,每个 表示对世界状态的查询或更新的事务。“ 那么,更新是否只会在区块链上产生新的交易或查询?答案是否,您不会在区块中插入另一个交易,但会生成一个交易来进行查询

我们目前正在为hyperledger结构网络制定计划。我们确实需要知道以下问题的答案:“对区块链/世界状态的查询是否会向区块链添加另一个交易”

文档告诉我们以下内容(这就是发生混淆的地方)

  • “应用程序提交捕获世界变化的事务 状态,这些事务最终会提交到分类账 区块链。”
  • “区块链的结构是相互链接的连续日志 块,其中每个块包含一系列事务,每个 表示对世界状态的查询或更新的事务。“

那么,更新是否只会在区块链上产生新的交易或查询?

答案是,您不会在区块中插入另一个交易,但会生成一个交易来进行查询

让我解释清楚:

当应用程序想要将数据插入区块链时,它会生成一个事务。 应用程序将联系背书对等方进行交易建议,检查结果,只有当结果相等且正确时,交易才会发送到订购服务。 订购服务是唯一被允许为区块链生成新区块的服务。 订购服务接收这些交易并将其插入数据块,然后将数据块发送给各个对等方,以更新其本地分类账副本

相反,当您想要执行查询时,您生成了一个与一个或多个对等方通信的事务,该对等方将向您发送答案,但在此事务结束。 说到结束,我的意思是交易不会发送给订购方,在您进行查询时,在任何时候都不会联系订购方。 这是因为您查询对等机中包含的分类账,该分类账是分类账的本地副本,并且不生成新块

因此,事务用于与对等方通信,但不会发送给订购方。在这种情况下,它不会写入块中,也不会用于此目的。
在区块内,您将只找到在提案之后由应用程序批准的交易,然后由订购服务进行验证,并可以修改世界状态。

这取决于您的需求。 fabirc 1.4 SDK(java)中有两个函数。如果您不想查询提交到分类账的交易记录,请使用evaluateTransaction功能

/**
*评估事务函数并返回其结果。
*事务函数{@code name}
*将在认可的对等方上进行评估,但不会将响应发送给
*订购服务,因此不会提交到分类账。
*这用于查询世界状态。
*此函数相当于调用{@code createTransaction(name).evaluate()}。
*
*@param name事务处理函数名。
*@param args事务函数参数。
*@从事务函数返回有效负载响应。
*如果无法访问任何对等方或返回错误响应,则@ContractException将引发异常。
*/
字节[]evaluateTransaction(字符串名称、字符串…args)引发ContractException;
/**
*将交易提交到分类账。事务函数{@code name}
*将在背书对等方上进行评估,然后提交给订购服务
*用于提交分类账。
*此函数相当于调用{@code createTransaction(name).submit()}。
*
*@param name事务处理函数名。
*@param args事务函数参数。
*@从事务函数返回有效负载响应。
*@如果事务被拒绝,则抛出ContractException。
*如果事务已成功提交给订购方,但
*在从对等方接收到提交事件之前超时。
*@如果当前线程在等待时被中断,则会引发InterruptedException。
*如果基础架构发生故障,@将引发GatewayRuntimeException。
*
*@见
*/
字节[]submitTransaction(字符串名称、字符串…参数)引发ContractException、TimeoutException、InterruptedException;

这可能会有帮助:记住,如果问题解决了,您可以将其设置为答案。这意味着我们在“演示流程”一节中找到的()是错误的?他们说函数queryCar()-一个查询-生成另一个块(因此它必须是一个事务)。该函数调用一个方法调用来执行查询,这意味着生成了一个新块。如果改用查询方法,只需查询分类账而不生成新的区块。上述问题是关于fabric中的查询和调用的概念性问题。目前,您的答案映射到sdk的调用函数名,当然,根据情况,在sdk上请求查询和调用时,您会使用您编写的代码,但它似乎可以在这里作为一个例子。难道不能在概念解释和答案优先后通过附加例子来进一步处理它吗?此外,使用标记来增加可读性也很好。对于代码,使用代码块;对于要强调的短语或关键字,使用'keyword`->
keyword
。请参考下面的链接