2017-06-20 9 views
1

チェーンコードはスマートな契約であり、ビジネスロジックとルールを実装しています。ビジネスロジックごとに共有元帳のエンティティ/アセットを作成して操作します。しかし、ファブリックの例では、readMarble、getAllMarblesforOwnerなどのヘルパーメソッドもチェーンコードで実装されています。だから私の質問は、ビジネスロジックだけを実装するチェーンコードを維持する一方、共有元帳と相互作用し、ヘルパーメソッドを書くための他の提案された方法ですか?チェーンコードデータのためのヘルパーAPIを書くために推奨される方法は何ですか?

答えて

1

ChaincodeはそれがChaincodeインターフェイスを実装する必要があり台帳と対話するための1のための唯一のインタフェースです。状態を読んで、

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 { 
    panic("not implemented") 
} 

と他の多くのもちろん、あなたができる補助機能を定義するために、より明確で素敵なものを維持します

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によって作成されたデータの任意の部分(キーと値のペア)が唯一かもしれそのチェーンコードにアクセスできます。チェーンコードは、誰がデータを読み書きできるかを決定し、適切なアクセス制御を提供します。

ブロックやトランザクションを通過するなどの元帳構造とやりとりするには、qscc(クエリシステムチェーンコード)と呼ばれるシステムチェーンコードがあり、チャネル、ブロック、トランザクションに関する情報を照会する機能を提供します。

情報モデリングの観点からは、複数のチェーンコードを使用することができます。各チェーンコードは、特定の部分を管理する責任があり、集約を提供する部分もあります。たとえば、自動車エンジンをモデル化するには、EngineChaincode、CylinderChaincode、SparkplugChaincode、OilSumpChaincodeなどが必要です。EngineChaincodeは、他のチェーンコードを呼び出してクエリに関する情報を集計します。

関連する問題