HyperLedger Fabric官方文档
中文网址:https://hyperledger-fabric.readthedocs.io/zh_CN/latest
英文网址:https://hyperledger-fabric.readthedocs.io/en/latest
一般情况英文网址的内容更全面,版本也比中文新。
前言
终端用户通过调用智能合约与区块链账本进行交互。在 Hyperledger Fabric 中,智能合约部署在称为链码的包中。想要验证交易或查询账本的组织需要在其Peer节点上安装链码。在加入通道的节点上安装链码后,通道成员可以将链码部署到通道并使用链码中的智能合约在通道账本上创建或更新资产。
链码部署到通道使用称为 Fabric 链码生命周期的过程。Fabric 链码生命周期允许多个组织在链码用于创建交易之前就如何操作链码达成一致。例如,虽然背书策略指定了哪些组织需要执行链码来验证交易,但通道成员需要使用 Fabric 链码生命周期来就链码背书策略达成一致。有关如何在通道上部署和管理链代码的更深入概述,请参阅Fabric 链代码生命周期。
使用Peer CLI部署asset-transfer-basic
链码的四个步骤:
- 第一步:打包智能合约
- 第二步:安装链码包
- 第三步:批准链码定义
- 第四步:将链码定义提交到通道
设置Logspout(可选)
此步骤不是必需的,但对于排查链代码非常有用。要监控智能合约的日志,管理员可以使用该logspout
工具查看一组 Docker 容器的聚合输出。该工具将来自不同 Docker 容器的输出流收集到一个位置,从而可以轻松地从单个窗口查看正在发生的事情。这可以帮助管理员在安装智能合约或开发人员调用智能合约时调试问题。由于某些容器纯粹是为了启动智能合约而创建的,并且只存在很短的时间,因此从您的网络收集所有日志会很有帮助。
Fabric 示例的目录中monitordocker.sh
已经包含一个用于安装和配置 Logspout 的脚本,位于test-network
目录中。Logspout 工具会不断地将日志流式传输到您的终端,因此您需要使用新的终端窗口。打开一个新终端并导航到该test-network
目录。
cd fabric-samples/test-network
然后,您可以通过运行以下命令来启动 Logspout:
./monitordocker.sh fabric_test
打包智能合约
这里只介绍GO语言
在打包链码之前,我们需要安装链码依赖项。导航到包含资产转移(基本)链码的 Go 版本的文件夹。
cd fabric-samples/asset-transfer-basic/chaincode-go
该示例使用 Go 模块来安装链码依赖项。依赖项列在asset-transfer-basic/chaincode-go
目录中的go.mod
文件。
该go.mod
文件将 Fabric 合约 API 导入到智能合约包中。您可以打开asset-transfer-basic/chaincode-go/chaincode/smartcontract.go
以查看如何使用合约 API 来定义SmartContract
智能合约开头的类型:
// SmartContract provides functions for managing an Asset
type SmartContract struct {
contractapi.Contract
}
然后,使用Smartcontract类型为在智能合约中定义的功能创建事务上下文,这些功能将数据读写到区块链账本。
// CreateAsset issues a new asset to the world state with given details.
func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error {
exists, err := s.AssetExists(ctx, id)
if err != nil