写点什么

MetaForce 佛萨奇系统开发技术流程(成熟代码)佛萨奇 2.0 源码部署教程

作者:I8O28578624
  • 2023-02-01
    广东
  • 本文字数:1715 字

    阅读完需:约 6 分钟

  在 Hyperledger Fabric 中,链码一般分为:(刘森-180-2857-8624)

 

  系统链码

 

  用户链码

 

  系统链码

 

  系统链码负责 Fabric 节点自身的处理逻辑,包括系统配置、背书、校验等工作。系统链码仅支持 Go 语言,在 Peer 节点启动时会自动完成注册和部署,所以安装,实例化和升级不适用于系统链码。

 

  Init 函数在链码实例化以及升级的时候会被调用。在实现 Init 函数的过程中,可使用 Go 语言版本的合约 API 列表来对参数和分布式账本进行操作。

 

  func(t*SimpleChaincode)Init(stub shim.ChaincodeStubInterface)peer.Response{

 

  fmt.Println("ex02 Init")

 

  //调用 GetFunctionAndParameters 方法对参数进行解析

 

  _,args:=stub.GetFunctionAndParameters()

 

  var A,B string//Entities

 

  var Aval,Bval int//Asset holdings

 

  var err error

 

  if len(args)!=4{

 

  return shim.Error("Incorrect number of arguments.Expecting 4")

 

  }

 

  //初始化相关数据

 

  A=args[0]

 

  Aval,err=strconv.Atoi(args[1])

 

  if err!=nil{

 

  return shim.Error("Expecting integer value for asset holding")

 

  }

 

  B=args[2]

 

  Bval,err=strconv.Atoi(args[3])

 

  if err!=nil{

 

  return shim.Error("Expecting integer value for asset holding")

 

  }

 

  fmt.Printf("Aval=%d,Bval=%dn",Aval,Bval)

 

  //调用 PutState 方法将数据写入账本中

 

  err=stub.PutState(A,[]byte(strconv.Itoa(Aval)))

 

  if err!=nil{

 

  return shim.Error(err.Error())

 

  }

 

  err=stub.PutState(B,[]byte(strconv.Itoa(Bval)))

 

  if err!=nil{

 

  return shim.Error(err.Error())

 

  }

 

  return shim.Success(nil)

 

  }

 

  本示例要求用户输入的参数为 KEY1_NAME,VALUE1,KEY2_NAME,VALUE2,并初始化 2 个键值对,调用 PutState 将数据写入分布式账本中。

 

  Invoke 示例

 

  Invoke 函数是对用户具体业务逻辑的实现,用户可以根据不同的业务处理逻辑,调用不用的业务函数,如 invoke,delete 和 query 函数。

 

  //Invoke 把用户调用的 function 细分到几个子 function,包含 invoke,delete 和 query

 

  func(t*SimpleChaincode)Invoke(stub shim.ChaincodeStubInterface)peer.Response{

 

  fmt.Println("ex02 Invoke")

 

  //调用 GetFunctionAndParameters 方法对参数进行解析

 

  function,args:=stub.GetFunctionAndParameters()

 

  if function=="invoke"{

 

  //将 A 的资产转移 X 个单位给 B

 

  return t.invoke(stub,args)

 

  }else if function=="delete"{

 

  //从状态中删除实体

 

  return t.delete(stub,args)

 

  }else if function=="query"{

 

  //老的“Query”功能可以在调用中实现

 

  return t.query(stub,args)

 

  }

 

  return shim.Error("Invalid invoke function name.Expecting"invoke""delete""query"")

 

  }

 

  系统链码主要包括以下几种:

 

  生命周期系统链码(LSCC):Lifecycle System Chaincode,负责对用户链码的生命周期进行管理。

 

  配置系统链码(CSCC):Configuration System Chaincode,负责处理 Peer 端的 Channel 配置。

 

  查询系统链码(QSCC):Query System Chaincode,提供账本查询 API,如获取区块和交易等信息。

 

  Go 语言的链码主要由以下方法组成:

 

  //Chaincode interface must be implemented by all chaincodes.The fabric runs

 

  //the transactions by calling these functions as specified.

 

  type Chaincode interface{

 

  //Init is called during Instantiate transaction after the chaincode container

 

  //has been established for the first time,allowing the chaincode to

 

  //initialize its internal data

 

  Init(stub ChaincodeStubInterface)peer.Response

 

  //Invoke is called to update or query the ledger in a proposal transaction.

 

  //Updated state variables are not committed to the ledger until the

 

  //transaction is committed.

 

  Invoke(stub ChaincodeStubInterface)peer.Response

 

  }

用户头像

I8O28578624

关注

还未添加个人签名 2022-05-13 加入

还未添加个人简介

评论

发布
暂无评论
MetaForce佛萨奇系统开发技术流程(成熟代码)佛萨奇2.0源码部署教程_I8O28578624_InfoQ写作社区