Blockchain 当Chaincode具有权限或事件的编码块时,如何准确达成共识?

Blockchain 当Chaincode具有权限或事件的编码块时,如何准确达成共识?,blockchain,hyperledger,Blockchain,Hyperledger,我阅读协议规范 我想知道: 当chaincode有一个权限编码块时,到底发生了什么 当chaincode有一个事件编码块时,到底发生了什么 例如,有A、B、C、D四个参与方,它们在四个验证对等方上运行。 链码a中有一个权限编码块,只有甲方有权运行该编码块。 链码a中有一个事件编码块,只有甲方才能得到事件结果 因此,只有甲方才能进入编码区。乙方、丙方、丁方不能进入编码区 在这种情况下,PBFT如何就A、B、C、D达成共识 考虑到上面的评论,这个问题可以改成这样: 一个例子有一个“isCaller”

我阅读协议规范

我想知道:

  • 当chaincode有一个权限编码块时,到底发生了什么
  • 当chaincode有一个事件编码块时,到底发生了什么
  • 例如,有A、B、C、D四个参与方,它们在四个验证对等方上运行。 链码a中有一个权限编码块,只有甲方有权运行该编码块。 链码a中有一个事件编码块,只有甲方才能得到事件结果

    因此,只有甲方才能进入编码区。乙方、丙方、丁方不能进入编码区


    在这种情况下,PBFT如何就A、B、C、D达成共识

    考虑到上面的评论,这个问题可以改成这样:

    一个例子有一个“isCaller”方法,它只能由“调用者”执行。在这种情况下如何达成PBFT共识

    但这个定义是不正确的,因为如果事务是用原始的“admin”证书签名的,那么所有A、B、C和D验证对等方都可以执行“transfer”、“assign”和“isCaller”中的代码

    让我们通过这个例子一步一步地研究它

  • “asset_management.go”链码可由角色为“client”的任何用户部署到分类账
  • 在部署期间,在
    Init
    方法中,此用户的证书将作为“admin”保存在分类账中:

    adminCert, err := stub.GetCallerMetadata()
    ...
    stub.PutState("admin", adminCert)
    
  • 当某人想要将
    分配
    转移
    交易提交到分类账时,他必须用自己的证书签署此请求

  • 此请求将传播到网络中的所有VP
  • 每个VP将从分类账中加载“管理员”证书,并将其与用于签署此特定请求的证书进行比较:

    adminCertificate, err := stub.GetState("admin")
    ...
    ok, err := t.isCaller(stub, adminCertificate)
    
  • 如果证书不相同-在PBFT协商一致阶段,VPs将不接受此请求


    如果证书相同-所有VP将知道此请求由原始“调用者”签名,并将继续执行链码,因为他们拥有执行此操作所需的所有信息。

    考虑到上述注释,此问题可以改为类似以下内容:

    一个例子有一个“isCaller”方法,它只能由“调用者”执行。在这种情况下如何达成PBFT共识

    但这个定义是不正确的,因为如果事务是用原始的“admin”证书签名的,那么所有A、B、C和D验证对等方都可以执行“transfer”、“assign”和“isCaller”中的代码

    让我们通过这个例子一步一步地研究它

  • “asset_management.go”链码可由角色为“client”的任何用户部署到分类账
  • 在部署期间,在
    Init
    方法中,此用户的证书将作为“admin”保存在分类账中:

    adminCert, err := stub.GetCallerMetadata()
    ...
    stub.PutState("admin", adminCert)
    
  • 当某人想要将
    分配
    转移
    交易提交到分类账时,他必须用自己的证书签署此请求

  • 此请求将传播到网络中的所有VP
  • 每个VP将从分类账中加载“管理员”证书,并将其与用于签署此特定请求的证书进行比较:

    adminCertificate, err := stub.GetState("admin")
    ...
    ok, err := t.isCaller(stub, adminCertificate)
    
  • 如果证书不相同-在PBFT协商一致阶段,VPs将不接受此请求


    如果证书相同-所有VP将知道此请求由原始“调用者”签名,并将继续执行链码,因为他们拥有执行链码所需的所有信息。

    那么我们如何才能获得整个链码的最终共识?我认为事件和权限的编码块可以将其唯一结果广播给其他VP。请你检查一下,再检查一下好吗?或者让我改变我的问题,什么样的代码或API代码需要共识?这是所有的链码吗?setEvent()?PutState()?“权限编码块”-我们谈论的是源代码由甲方证书加密的私人智能合同吗?“权限编码块”-就像“isCaller”函数一样-只有调用方可以运行“transfer”和“assign”,所以我们如何才能获得整个链码的最终共识?我认为事件和权限的编码块可以将其唯一结果广播给其他VP。请你检查一下,再检查一下好吗?或者让我改变我的问题,什么样的代码或API代码需要共识?这是所有的链码吗?setEvent()?PutState()?“权限编码块”-我们谈论的是源代码由甲方证书加密的私人智能合同吗?“权限编码块”-类似于中的“isCaller”功能---只有调用者才能进入“transfer”和“assign”谢谢。1.
    此请求将传播到网络中的所有VP。
    这是否意味着广播方法?如果是广播节目,播放了哪些内容**2.*
    如果证书不相同且相同
    我能认为PBFT共识发生在链码程序编码的每一行中吗?否则,PBTF如何知道Cux>程序中的“<代码> >相同的<代码> >代码>不相同的< /代码>。每个验证对等方与网络中的所有其他VP保持开放连接。作为达成共识的第一步,领导者(被选为领导者的副总裁之一)将准备有序的交易列表,并将其广播给其他验证同行。内容包括链码id、函数名、参数等。不,不是在“每条线”级别的事件中达成共识。每个验证对等方将执行列表中的所有事务,然后VP将计算新“世界状态”的哈希,然后VP将计算整个块的最终哈希。然后