Hyperledger Fabric 中的多个智能合约

Har*_*hit 3 hyperledger-fabric

如何在 Hyperledger Fabric 的同一个应用程序中实现多个智能合约?哪个配置文件包含实现此目的的设置?

Dhe*_*mar 8

我将使用 Hyperledger Fabric 1.4 版中的 Fabcar 示例来回答您的问题。我的答案是基于 Javascript 实现。

如果您看到文件夹结构,您会看到有一个 Chaincode 文件夹,其中包含 fabcar.js(chaincode/fabcar/javascript/lib/fabcar.js) 链代码。

智能合约在链码中定义。可以在同一个链码中定义多个智能合约。部署链码后,其中的所有智能合约都可供应用程序使用。

在这个特定的链码中,只有一个智能合约,即 FabCar。您可能会观察到该文件仅导出一个合约。

如果你想添加更多的智能合约,只需在同一个链码中创建另一个类,它扩展了 Contract 类,然后将其导出。下面我展示了一个例子。

  class FabCar extends Contract {
     ...
     ...
     ...
   } 
   class NewContract1 extends Contract {
     ...
     ...
     ...
   } 
   class NewContract2 extends Contract {
     ...
     ...
     ...
   } 

   module.exports.FabCar = FabCar;
   module.exports.NewContract1 = NewContract1;
   module.exports.NewContract2 = NewContract2;
Run Code Online (Sandbox Code Playgroud)

您需要在 index.js (chaincode/fabcar/javascript/index.js) 中进行一些更改。

'use strict';

const FabCar = require('./lib/fabcar').FabCar;
const NewContract1 = require('./lib/careonlineChaincode').NewContract1;
const NewContract2 = require('./lib/careonlineChaincode').NewContract2;
module.exports.FabCar = FabCar;
module.exports.NewContract1 = NewContract1;
module.exports.NewContract1 = NewContract2;
module.exports.contracts = [ FabCar, NewContract1, NewContract2 ];
Run Code Online (Sandbox Code Playgroud)

现在对于客户端应用程序,您可以参考 Fabar 客户端实现。(fabric-sample/fabcar/javascript/invoke.js)。下面我展示了一个关于如何轻松调用这些不同合约的示例。

const contract = network.getContract('fabcar', 'FabCar');
//getContact(chaincode name, contract name)
const newContract1 = network.getContract('fabcar', 'NewContract1');
const newContract2 = network.getContract('fabcar', 'NewContract2');
Run Code Online (Sandbox Code Playgroud)

现在您可以单独调用这些合约并使用它们的交易。

例子:

await contract.submitTransaction('someTrancsaction', 'someData');
await newContract1.submitTransaction('someTrancsactionFromThisContract', 'someDataFromHere');
await newContract2.submitTransaction('differentTransacation', 'randomdata');
Run Code Online (Sandbox Code Playgroud)

希望你理解了整个例子。如果您需要更多说明,请发表评论。我没有涉及如何安装和实例化链码。为此,您可以参考@Artem 的答案。但他的方法是在同一个频道上安装 2 个链码。这也可能有效,我不确定。但这是一种只有一个 Chaincode 的简单方法。


归档时间:

查看次数:

2573 次

最近记录:

5 年,11 月 前