用Java为Hyperledger Fabric(超级账本)编写区块链智能合约链代码 (3)

接下来将实现 handleInit() 方法。它的合约要求处理链代码程序的初始化,在本例中,这意味着它将向账本添加一条(由调用方指定的)消息,并在调用成功时将该消息返回给调用方。

/** * Handles initializing this chaincode program. * * Caller expects this method to: * * 1. Use args[0] as the key for logging. * 2. Use args[1] as the log message. * 3. Return the logged message. */ @Override protected String handleInit(ChaincodeStub stub, String[] args) { return null;// ADD YOUR CODE HERE }

练习:完成 handieInit() 方法。如果需要一个参考,请参见 com.makotojava.learn.blockchain.chaincode.solution 包。

实现 handleQuery()

接下来将实现 handleQuery() 方法。它的合约要求查询账本,为此,它会获取指定的键,在账本中查询与这个(这些)键匹配的值,然后将该(这些)值返回给调用方。如果指定了多个键,应该使用逗号分隔返回的值。

/** * Handles querying the ledger. * * Caller expects this method to: * * 1. Use args[0] as the key for ledger query. * 2. Return the ledger value matching the specified key * (which should be the message that was logged using that key). */ @Override protected String handleQuery(ChaincodeStub stub, String[] args) { return null;// ADD YOUR CODE HERE }

确保编写了代码来输出查询调用的结果,以便可以在控制台输出中查看结果(如果想了解我是如何做的,请参阅解决方案)。

练习:完成 handleQuery() 方法。如果需要一个参考,请参见 com.makotojava.learn.blockchain.chaincode.solution 包。

实现 handleOther()

最后需要实现 handleOther() 方法,它的合约要求处理其他消息(这是完全开放的,但正因如此它才是可扩展的)。您将在这里实现 log 函数,它的合同要求将调用方指定的一条消息添加到账本中,并在调用成功时将该消息返回给调用方。这看起来与 init 函数中发生的事非常相似,所以或许您可以在该实现中利用此函数。

/** * Handles other methods applied to the ledger. * Currently, that functionality is limited to these functions: * - log * * Caller expects this method to: * Use args[0] as the key for logging. * Use args[1] as the log message. * Return the logged message. */ @Override protected String handleOther(ChaincodeStub stub, String function, String[] args) { // TODO Auto-generated method stub return null;// ADD YOUR CODE HERE }

练习:完成 handleOther() 方法。如果需要一个参考,请参见 com.makotojava.learn.blockchain.chaincode.solution 包。

如果您为前面的每个练习编写的代码满足本节(以及代码注释中)为它们设定的要求,JUnit 测试应该都能通过,而且将链代码部署在本地区块链网络中并运行时,它们应该能够正常工作。

请记住,如果遇到阻碍,我提供了一个解决方案(但是在查看解决方案之前,您必须自行实现这些方法)。

构建 Java 链代码

现在您已编写 Java 链代码且通过了所有 JUnit 测试,是时候使用 Eclipse 和用于 Eclipse 的 Gradle Buildship 插件构建链代码了。通过转到 Window > Show View > Other... 调出 Gradle Tasks 视图,然后搜索 gradle,选择 Gradle Tasks,并单击 OK。(参见图 12。)

Eclipse:Show View:Gradle Tasks 视图

Gradle Tasks 视图打开后,展开 ChaincodeTutorial > build 节点,选择 buildclean。(参见图 13。)

右键单击 buildclean,然后选择 Run Gradle Tasks(Gradle 将确定运行它们的正确顺序)。您的 Gradle Executions 视图应该显示一个干净的构建版本,如图 14 所示,其中每项的旁边仅有一个复选标记。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydwfp.html