为链代码数据编写辅助API的建议方法是什么?

时间:2017-06-20 20:53:04

标签: hyperledger-fabric

我所理解的是,链码是智能合约并实现业务逻辑和规则。它还根据业务逻辑在共享分类账中创建和操作实体/资产。但是在结构示例中,诸如readMarble,getAllMarblesforOwner等辅助方法也在链代码中实现。所以我的问题是在保持链代码只实现业务逻辑时,还有其他任何建议的方式与共享分类账和编写帮助方法进行交互吗?

2 个答案:

答案 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会调用其他链代码来聚合查询信息。