时间:2023-06-16|浏览:246
链码支持多种语言编写,包括Nodejs、golang和java。每个链码程序都必须实现Chaincode接口,包含Init、Invoke和Query三个基本操作:
- Init方法:链码初始化的方法,在链码实例化或升级时调用,以便链码可以执行必要的初始化,包括应用程序状态的初始化。 - Invoke方法:接收和处理链下业务系统的调用事务处理提案,其参数包含调用的链码程序中函数的名称和具体业务处理数据参数。在Invoke中根据不同的方法参数调用其他分支处理响应的业务。Invoke可以简单理解为链码方法的入口。 - Query方法:提供查询链码数据的方法,该方法只用于查询,不提供对链上数据的操作。可在Query操作时调用,也可在Invoke方法中以及在BSN中对智能合约开发的规范和建议。
如何开发智能合约:
编写链码关键是实现Init和Invoke两个方法。
- Init方法:在链码实例化或升级时调用一次,完成初始化数据的工作。建议处理一些简单的处理,禁止使用该方法去初始化大量基础数据,如果需要初始化数据,建议在Invoke中处理。 - Invoke方法:更新或查询提案事务中的账本数据状态时,Invoke方法被调用。因此响应调用或查询的业务逻辑都需要在此方法中编写实现。
在实际开发中,开发人员可以自定义一个结构体,然后重写Chaincode接口的Init和Invoke方法,并将这两个方法指定为自定义结构体的成员方法。这两个方法被调用时都会传入一个存根对象(stub),链码可以利用该对象来获取请求的相关信息,例如调用者身份、目标通道、参数等等。下面具体说一下如何开发智能合约。
目录说明:
- main.js:程序入口; - bsnchaincode:链码文件夹; - models:数据转换包; - utils:通用工具包。
chaincode.js代码示例,依赖包包括:
- "fabric-shim":"~1.4.0":fabric-shim包提供了链码访问/操作数据状态、事务上下文以及调用其他链代码的API。
链码方法介绍:
- getFunctionAndParameters:返回一个方法调用描述对象,第一个值是调用的链码方法名,第二个值是要传入目标方法的参数对象。 - getArgs:从链码调用请求中返回参数字符串数组,等价于getStringArgs方法。 - getStringArgs:返回链码调用请求中的参数字符串数组。 - getTxID:返回当前链码调用
用戶喜愛的交易所
已有账号登陆后会弹出下载