云服务器内容精选

  • 依赖配置 该内容仅适用于Fabric架构版本的 区块链 实例的Java语言链代码开发。 请使用Gradle或Maven构建管理工具组织链代码项目。若链代码项目中包含非本地依赖,请确保对应区块链实例的节点均绑定了弹性ip。若链代码容器将运行在受限网络环境,请确保项目中的所有依赖已配置为本地依赖。示例链代码获取方法:登录 区块链服务BCS 控制台,进入“应用案例”,单击“Java示例Demo-Java SDK Demo”中“Chaincode_Java_Local_Demo”的“下载”按钮。
  • 防止出现panic后链代码容器异常 该内容仅适用于Fabric架构版本的区块链实例的Go语言链代码开发。 为避免出现panic异常时链代码容器异常重启,找不到日志,导致问题无法及时定位,可在Invoke函数入口处添加defer语句时,出现panic异常时返回错误给客户端。 // 定义命名返回值,发生panic在defer里面赋值,确保客户端可以收到返回值// 使用debug.PrintStack()将错误的堆栈信息打印到标准输出,方便问题定位func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) (pr pb.Response) { defer func() { if err:=recover(); err != nil { fmt.Println("recover from invoke:", err) debug.PrintStack() pr = shim.Error(fmt.Sprintf("invoke painc. err: %v",err)) } }() fmt.Println("ex02 Invoke") function, args := stub.GetFunctionAndParameters() if function == "invoke" { // Make payment of X units from A to B return t.invoke(stub, args) } else if function == "delete" { // Deletes an entity from its state return t.delete(stub, args) } else if function == "query" { // the old "Query" is now implemented in invoke return t.query(stub, args) } pr = shim.Error("Invalid invoke function name. Expecting \"invoke\" \"delete\" \"query\"") return pr}
  • 链代码相关的API Fabric源码包中的shim包提供了如下几种类型的接口,您可以参考使用: 参数解析API:调用链代码时需要给被调用的目标函数/方法传递参数,该API提供解析这些参数的方法。 账本状态数据操作API:该API提供了对账本数据状态进行操作的方法,包括对状态数据的查询及事务处理等。 交易信息获取API:获取提交的交易信息的相关API。 对PrivateData操作的API: Hyperledger Fabric在1.2.0版本中新增的对私有数据操作的相关API。 其他API:其他的API,包括事件设置、调用其他链代码操作。 父主题: Go语言链代码开发
  • 链代码接口 链代码启动必须通过调用shim包中的start方法。实际开发中, 您需要自行定义一个类,来继承ChaincodeBase。以下为继承时必须重写的方法: public class SimpleChaincodeSimple extends ChaincodeBase { @Override public Response init(ChaincodeStub stub) { } @Override public Response invoke(ChaincodeStub stub) { } } init方法:在链代码实例化或升级时被调用,完成初始化数据的工作。 Invoke方法:更新或查询账本数据状态时被调用, 需要在此方法中实现响应调用或查询的业务逻辑。
  • 链代码结构 Java语言的链代码结构如下: package main // 引入必要的包,系统自动操作,只要在maven或gradle中配置即可 import org.hyperledger.fabric.shim.ChaincodeBase; import org.hyperledger.fabric.shim.ChaincodeStub; public class SimpleChaincodeSimple extends ChaincodeBase { @Override public Response init(ChaincodeStub stub) { // 在该方法中实现链代码初始化或升级时的处理逻辑 // 编写时可灵活使用stub中的API } @Override public Response invoke(ChaincodeStub stub) { // 在该方法中实现链代码运行中被调用或查询时的处理逻辑 // 编写时可灵活使用stub中的API } //主函数,需要调用shim.Start()方法 public static void main(String[] args) { new SimpleChaincode().start(args); } }
  • 开发前准备 链代码(Chaincode)又称智能合约,在Hyperledger Fabric中是用Go、Java或Node.js语言编写的程序,主要用于操作账本上的数据。链代码是运行在区块链上的、特定条件下自动执行的代码逻辑,是用户利用区块链实现业务逻辑的重要途径。基于区块链特点,智能合约的运行结果是可信的,其结果是无法被伪造和篡改的。 在面向Hyperledger Fabric使用可信数据链接服务时,用户需要结合Hyperledger Fabric链代码开发规范、 可信跨链 服务的要求与自身业务需求开发自己的跨链链代码。 开发环境准备 下载源码包 父主题: 跨链链代码开发(Hyperledger Fabric)