Hyperledger链码"注册" vs" deploy"

时间:2016-09-09 22:25:58

标签: hyperledger hyperledger-fabric

我看到以下ref文章" what-happen-exact-on-chaincode-deploy-and-invoke-query-in-hyperledger"。

对于"注册" chaincode,链码作者是否必须在其他节点找到网络中的链码并将源下载到本地并构建docker镜像之前,将链码注册到ValidationPeer?如果之后多次部署相同的链码会发生什么情况,它会覆盖以前的状态吗?

参考: What happened exactly on chaincode deploy and invoke , query, in Hyperledger?

在“部署”期间,链代码以事务的形式提交给分类帐,并分发到网络中的所有节点。每个节点都会创建新的Docker容器,并嵌入此链代码。之后将启动该容器并执行Init方法。

在“查询”期间 - 链代码将读取当前状态并将其发送回用户。此交易未保存在区块链中。

在“调用”期间 - chaincode可以修改分类帐中变量的状态。每个“调用”事务都将添加到分类帐中的“块”。

2 个答案:

答案 0 :(得分:3)

没有在链码级别上看到“注册”功能。我可以做一个假设(请纠正我,如果我错了)我们正在谈论核心API方法“Registrar”

“注册商”由chaincode的作者用于通过验证或非验证对等方登录网络。要登录,作者应通过提供EnrolmentID和EnrolmentPassword确认其身份。如果ID和密码正确,将为此特定作者生成新的注册和交易证书。

从这时起,作者可以将链代码部署到网络中。 “部署”请求将发送给其中一个对等方。该对等体将创建“事务”,其中包含有关“链码的路径”,“init参数”,“链码源代码”的信息。然后peer将计算此事务的HASH代码,如下所示:

a13c53fe822da398aaca7af59f064ae6f85c1d048fcb2ed77c3cacc137964a424deba679390df8d156e49c5fff7cdfc9fecec373a3cddd17e46ca9404096a52d

此哈希稍后将用作链码名称。

VP与网络中的所有其他VP保持开放连接,并可以向所有VP广播交易(有关更多详细信息,请参阅共识说明)。
每个对等体都将使用来自事务的信息来创建部署的链代码所需的本地docker镜像。启动新的docker容器,然后执行Init方法。

如果您尝试再次部署相同的链代码,Fabric将检测已部署具有此类名称的链代码并跳过初始化。

如果您更改部署请求中的任何内容(路径,参数,链代码中的任何符号),则peer将生成另一个哈希并将部署新的链代码(以前的版本不会受到影响)。

答案 1 :(得分:0)

从技术上讲,REGISTER是部署事务的一部分

Chaincode提供了Deploy,Invoke,Query方法/ API来与之交互。当您谈到部署chiancode时,您实际上是在谈论在链代码上调用Deploy方法的最终用户(或应用程序)。

对等处理Deploy事务,在Docker容器中启动链代码,但部署事务处理不会在此处结束。在链代码容器上有一个垫片层,它实际上与同行进行通信。填充层和对等体之间的这种通信由ChaincodeMessage控制。此声明定义了不同类型的ChaincodeMessage:

enum Type {
    UNDEFINED = 0;
    REGISTER = 1;
    REGISTERED = 2;
    INIT = 3;
    READY = 4;
    TRANSACTION = 5;
    COMPLETED = 6;
    ERROR = 7;
    GET_STATE = 8;
    PUT_STATE = 9;
    DEL_STATE = 10;
    INVOKE_CHAINCODE = 11;
    INVOKE_QUERY = 12;
    RESPONSE = 13;
    QUERY = 14;
    QUERY_COMPLETED = 15;
    QUERY_ERROR = 16;
    RANGE_QUERY_STATE = 17;
}

现在引用来源http://hyperledger-fabric.readthedocs.io/en/latest/protocol-spec/#33-chaincode

Upon deploy (chaincode container is started), the shim layer sends a one
time REGISTER message to the validating peer with the payload containing the 
ChaincodeID. The validating peer responds with REGISTERED or ERROR on 
success or failure respectively. The shim closes the connection and exits if 
it receives an ERROR.   

因此你得到了

10:08:38.450 [shim] DEBU : Registering.. sending REGISTER
10:08:39.901 [shim] DEBU : []Received message REGISTERED from shim
10:08:39.965 [shim] DEBU : []Handling ChaincodeMessage of type: REGISTERED(state:created)
10:08:40.037 [shim] DEBU : Received REGISTERED, ready for invocations

之后您的链码实际上已准备好接收查询和调用。

相关问题