Har*_*hit 3 hyperledger-fabric
如何在 Hyperledger Fabric 的同一个应用程序中实现多个智能合约?哪个配置文件包含实现此目的的设置?
我将使用 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 次 |
| 最近记录: |