结构链代码API文档
一、Fabric-shim.ChaincodeInterface
-
Chaincodeinterface在链代码中,我们必须实现在Chaincodeinterface接口中定义的方法,例如init()和invoke()。只有实现这些方法,才不会出现错误。这两种方法都将传入一个存根对象。init()方法用于链码初始化或升级。该方法可以生成一些实例化结构,Invoke()负责链码交互,执行一些业务逻辑和方法,对账簿中的内容进行添加、删除、修改和查询。
-
init
Init 负责链码的初始化,以及链码的升级。具体调用方法如下,因方法过长,不过多赘述,将一些需要初始化的内容序列化保存至账本。
func (f FarmingChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {
//初始化一个企业以及一个企业的子账户 初始化两个场地 初始化两个资产
//初始化一个子账户
sub := SubAccount{
Id: "2001",
Password: "123456",
Name: "王大壮",
Address: "安徽省合肥市瑶海区",
Phone: "15655649906",
Subjection: "1001",
}
//对密码进行MD5加密
sub.Password = Hash(sub.Password, "md5", false, false)
subKey, err := stub.CreateCompositeKey(SubAccountKeyPrefix, []string{sub.Id})
if err != nil {
return shim.Error("create key error ")
}
subByte, err := json.Marshal(sub)
if err != nil {
return shim.Error("marshal error")
}
if err := stub.PutState(subKey, subByte); err != nil {
return shim.Error("put state error ")
}
-
Invoke
Invoke方法负责链码交互,判断当前该执行哪个方法,执行业务逻辑,具体调用方法如下:
func (f FarmingChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
fun, args := stub.GetFunctionAndParameters()
switch fun {
case "createCompany": //创建公司即注册公司
return createCompany(stub, args)
case "updateCompany": //修改公司
return updateCompany(stub, args)
case "createSubAccount": //创建子账户
return createSubAccount(stub, args)
case "updateSubAccount": //修改子账户
return updateSubAccount(stub, args)
case "delCompany": //公司注销,即删除公司
return delCompany(stub, args)
case "delSubAccount": //删除公司的某个子账户
return delSubAccount(stub, args)
case "queryCompany": //查询公司
return queryCompany(stub, args)
case "querySubAccount": //查询子账户
return querySubAccount(stub, args)
case "querySubAccounts": //查询公司旗下所有子账户
return querySubAccounts(stub, args)
case "querySpaces": //查询公司旗下所有子账户
return querySpaces(stub, args)
case "queryAssetss": //查询公司旗下所有子账户
return queryAssetss(stub, args)
}
return shim.Error("not find function")}
二、fabric-shim.ChaincodeStub
-
createCompositeKey
createCompositeKey方法的作用是创建一个string组合键,通过前缀和需要拼接的字段,创建组合键,返回一个string组合键,以及一个错误信息,具体调用方法如下:
compKey, err := stub.CreateCompositeKey("Company", []string{"sjdhgf"})
-
putState
putState通过一个键值和一个byte数组将其按照key value 存入账本当中,若账本中已经存在则会覆盖原有的值,返回值为错误信息,所以一般用来更新账本,即保存、修改账本中的内容。 -
getState
getState根据key从账本中取出数据(value)返回值为数据的byte数组和一个错误信息。通常用于查询。 -
delState
delState根据key值删除账本中对应key的键值对,返回一个错误信息。 -
getHistoryForKey
getHistoryForKey 根据key值在帐本中查找key对应的历史记录,每次历史更新都将会保存至账本当中,都记录有当时的值和关联的交易id、时间戳。时间戳取自交易提议头。此方法需要对peer节点的配置来使用。具体配置方法如下:
此方法返回一个Promise对象,其解析值为HistoryQueryIterator对象。
core.ledger.history.enableHistoryDatabase = true
-
getStateByRange
getStateByRange此方法返回一个账本状态键的迭代器,遍历起始键至结束键之间的所有状态键,返回结果按照词典顺序排列。一般来说操作账本的常用的就以上几种,还有很多其他方法,具体方法在fabric官方文档中有详细的解释,链接如下:
Fabric官方文档
三、fabric-shim.Shim
-
Shim
shim提供了链码底层的开发接口,用于链码逻辑的判断来返回内容。 -
Error
error返回500状态码以及错误信息。 -
Success
success返回200状态码以及字节数组。