вопрос 1:
Цепной код (hyperledger/fabric/examples/chaincode/go/examplexx/chaincode.go
) обращается к регистру через ChaincodeStubInterface
, например, stub.GetState(.)
, stub.PutState(.)
.
ChaincodeStubInterface
реализовано hyperledger/fabric/core/chaincode/shim/chaincode.go
.
Если я правильно понимаю, stub
, используемый для PutState
и GetState
, создается handleInit(.)
из hyperledger/fabric/core/chaincode/shim/handler.go
:
stub := new(ChaincodeStub)
handleInit
вызывается handleReady
, который вызывается handleMessage
, который вызывается chatWithPeer
, который вызывается Start
(hyperledger/fabric/core/chaincode/shim/chaincode.go
), который вызываетсяmain
функция hyperledger/fabric/examples/chaincode/go/examplexx/cmd/main.go
a) С какой командой вызывается эта main
функция?По $peer chaincode install
?
б) И где в коде ткани вызывается эта функция main
, которая затем вызывается (я был бы рад по поводу некоторых указателей).
вопрос 2:
Предположим, $peer chaincode invoke .. '{"Args":["yy","a","b","10"]}'
вызывает метод транзакции yy
в файле chaincode.go
(hyperledger/fabric/examples/chaincode/go/examplexx/chaincode.go
).Предположим, что эта транзакция оправдывает stub.GetState(.)
, который вызывает stub.handler.handleGetState(.)
.
a) Является ли этот обработчик своего рода промежуточным звеном между цепным кодом и одноранговым / бухгалтерским регистром?
b) Принадлежит ли обработчиксверстнику?Если да, есть ли один обработчик на одноранговый узел или несколько обработчиков (по одному на каждый цепной код)?
c) Когда создается этот обработчик?
d) Когда создается экземпляр локальной книги для однорангового узла?
Я знаю, что это много вопросов.Но я был бы очень рад некоторым подсказкам, чтобы я мог выяснить, как создается локальная копия регистра и как с ней связывается цепной код / узел.Спасибо!