2017-06-20 20 views
1

我的理解是chaincodes是智能合约并实现业务逻辑和规则。它还根据业务逻辑创建和操作共享分类账中的实体/资产。但是在结构示例中,像readMarble,getAllMarblesforOwner这样的辅助方法也在chaincode中实现。所以我的问题是,保持chaincodes只实现业务逻辑它有任何其他建议的方式来与共享分类帐和编写帮助器方法进行交互?为chaincode数据编写helper API的建议方法是什么?

回答

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 
} 
0

有关于对访问数据的范围规则:任何一块由chaincode创建的数据(键值对)的可能只是该链代码可访问。所以chaincode决定谁可以读写数据并提供适当的访问控制。

要与分类帐结构进行交互,例如遍历块和事务处理,系统链代码称为qscc(查询系统链代码),该代码提供查询通道,块和事务信息的功能。从信息建模的角度来看,您可以使用多个链接代码,每个链接代码可以负责管理某些部分,有些可以提供聚合。例如,为了模拟汽车引擎(声明:我没有汽车机械背景),您可能需要EngineChaincode,CylinderChaincode,SparkplugChaincode,OilSumpChaincode等。EngineChaincode会调用其他链代码来聚合查询信息。

相关问题