我所理解的是,链码是智能合约并实现业务逻辑和规则。它还根据业务逻辑在共享分类账中创建和操作实体/资产。但是在结构示例中,诸如readMarble,getAllMarblesforOwner等辅助方法也在链代码中实现。所以我的问题是在保持链代码只实现业务逻辑时,还有其他任何建议的方式与共享分类账和编写帮助方法进行交互吗?
答案 0 :(得分:1)
Chaincode是唯一一个与分类账交互的接口,它必须实现Chaincode接口:
type mychaincode struct {
}
func (cc *mychaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {
panic("not implemented")
}
func (cc *mychaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
panic("not implemented")
}
其中shim.ChaincodeStubInterface
公开了一组API以与分类帐交互,例如更改状态,读取状态和许多其他内容。当然,您可以更清楚,更好地定义辅助功能:
type mychaincode struct {
}
func (cc *mychaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {
panic("not implemented")
}
func (cc *mychaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
function, args := stub.GetFunctionAndParameters()
if args['0'] == "aux" {
// Call aux function
cc.auxFunction(args)
}
}
func (cc *mychaincode) auxFunction(someparameters interface{}) {
// Do some very important logic here
}
答案 1 :(得分:0)
有一个关于访问数据的范围规则:由链代码创建的任何数据(键值对)可能只能被该链代码访问。因此,链码确定谁可以读取和写入其数据并提供适当的访问控制。
为了与分类帐结构交互,例如遍历块和事务,有一个名为qscc的系统链代码(查询系统链代码),它提供了查询有关通道,块和事务的信息的能力。
从信息建模的角度来看,您可以使用多个链代码,每个代码可能负责管理某些部分,有些则会提供聚合。例如,要建模汽车引擎(免责声明:我没有汽车机械的背景),您可能需要EngineChaincode,CylinderChaincode,SparkplugChaincode,OilSumpChaincode等.EngineChaincode会调用其他链代码来聚合查询信息。