我看到了下面这篇关于"what-happened-exactly-on-chaincode-deploy-and-invoke-query-in-hyperledger".的参考文章
对于“注册”链码,在其他节点可以在网络中找到链码并将源代码下载到本地并构建ValidationPeer镜像之前,链码作者是否必须将链码注册到docker?如果相同的链代码随后被多次部署,会发生什么情况,它会覆盖以前的状态吗?
参考:What happened exactly on chaincode deploy and invoke , query, in Hyperledger?
在“部署”期间,链码以事务的形式提交到账本,并分发到网络中的所有节点。每个节点都会创建新的Docker容器,并嵌入此链码。之后,容器将被启动,Init方法将被执行。
在“查询”期间-链代码将读取当前状态并将其发送回用户。此交易不会保存在区块链中。
在“调用”期间- chaincode可以修改账本中变量的状态。每个“调用”事务将被添加到分类账中的“块”中。
发布于 2016-09-11 06:20:12
还没有看到链码级别的“register”特性。我可以做一个假设(如果我错了,请纠正我),我们谈论的是核心API方法“Registrar”
链码的作者使用“注册器”通过验证或非验证对等方登录到网络。为了登录,作者需要提供EnrolmentID和EnrolmentPassword来确认自己的身份。如果ID和密码正确,将为该特定作者生成新的注册证书和交易证书。
从这一刻起,作者可以将链码部署到网络上。“Deploy”请求将被发送到其中一个对等体。此对等体将创建“事务”,其中包含有关“链接代码的路径”、“初始化参数”、“链接代码源代码”的信息。然后,peer将计算此事务的散列代码,如下所示:
a13c53fe822da398aaca7af59f064ae6f85c1d048fcb2ed77c3cacc137964a424deba679390df8d156e49c5fff7cdfc9fecec373a3cddd17e46ca9404096a52d此哈希值将在以后用作链码名称。
VP保持与网络中所有其他VP的开放连接,并可以向所有VP广播事务(有关更多详细信息,请参阅共识描述)。
每个peer将使用来自事务的信息来创建部署的链代码所需的本地docker映像。启动新的docker容器,执行Init方法。
如果您尝试再次部署相同的链码,Fabric将检测到已部署具有该名称的链码,并跳过初始化。
如果您在部署请求中更改了任何内容(路径、参数、chaincode中的任何符号),peer将生成另一个哈希,并将部署新的chaincode(以前的版本不会受到影响)。
发布于 2016-10-09 16:06:45
从技术上讲,注册是部署事务的一部分
Chaincode提供了部署、调用、查询方法/API来与其交互。当您谈论部署chiancode时,您实际上是在谈论终端用户(或应用程序)调用链码上的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在此之后,您的链代码实际上已准备好接收、查询和调用。
https://stackoverflow.com/questions/39420520
复制相似问题