ubuntu运行fabric-samples

1、前提是fabric环境已经搭建完毕

可以参考https://mp.youkuaiyun.com/postedit/84727178

2、进入目录

cd go/src/github.com/hyperledger

克隆代码

git clone https://github.com/hyperledger/fabric-samples.git

3、

编译configtxgen和cryptogen工具

进入目录go/src/github.com/hyperledger/fabric/common/tools/cryptogen

执行go install --tags=nopkcs11

进入目录/go/src/github.com/hyperledger/fabric/common/tools/configtxgen

执行go install --tags=nopkcs11(或是 make configtxgen)

4、进入目录 fabric-samples/first-network

执行命令

./byfn.sh generate

执行命令

 ./byfn.sh -m up

启动所有容器

关闭 执行命令

./byfn.sh -m down

运行 ./byfn.sh -m up 出现错误:

Creating cli       

root@ubuntu:/home/uu/go/src/github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go# go mod vendor github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go imports github.com/hyperledger/fabric-contract-api-go/v2/contractapi: no required module provides package github.com/hyperledger/fabric-contract-api-go/v2/contractapi; to add it: go get github.com/hyperledger/fabric-contract-api-go/v2/contractapi github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode/mocks imports github.com/hyperledger/fabric-chaincode-go/v2/pkg/cid: no required module provides package github.com/hyperledger/fabric-chaincode-go/v2/pkg/cid; to add it: go get github.com/hyperledger/fabric-chaincode-go/v2/pkg/cid github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode/mocks imports github.com/hyperledger/fabric-chaincode-go/v2/shim: no required module provides package github.com/hyperledger/fabric-chaincode-go/v2/shim; to add it: go get github.com/hyperledger/fabric-chaincode-go/v2/shim github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode/mocks imports github.com/hyperledger/fabric-protos-go-apiv2/ledger/queryresult: no required module provides package github.com/hyperledger/fabric-protos-go-apiv2/ledger/queryresult; to add it: go get github.com/hyperledger/fabric-protos-go-apiv2/ledger/queryresult github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode/mocks imports github.com/hyperledger/fabric-protos-go-apiv2/peer: no required module provides package github.com/hyperledger/fabric-protos-go-apiv2/peer; to add it: go get github.com/hyperledger/fabric-protos-go-apiv2/peer github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode/mocks imports google.golang.org/protobuf/types/known/timestamppb: no required module provides package google.golang.org/protobuf/types/known/timestamppb; to add it: go get google.golang.org/protobuf/types/known/timestamppb 怎么办
最新发布
06-12
### 解决 Hyperledger Fabric Chaincode-go 项目中 go mod vendor 报错问题 在 Hyperledger Fabric 的 Go 语言链码开发过程中,使用 `go mod vendor` 命令时可能会遇到依赖包缺失的问题。以下是针对提示缺少 `fabric-contract-api-go`、`fabric-chaincode-go`、`fabric-protos-go-apiv2` 和 `protobuf` 等依赖包的解决方案[^1]。 #### 问题分析 当执行 `go mod vendor` 时,如果出现依赖包缺失的报错,通常是因为以下原因: 1. **Go 模块代理配置不正确**:某些依赖包可能无法通过默认的 Go 模块代理下载。 2. **Hyperledger Fabric 的依赖包未正确托管**:部分 Hyperledger Fabric 的依赖包(如 `fabric-contract-api-go`)并未托管在官方 Go 模块仓库中,需要手动添加或克隆。 3. **版本兼容性问题**:使用的 Hyperledger Fabric SDK 或链码版本与依赖包版本不匹配。 #### 解决方案 以下是具体的解决步骤: 1. **确保 Go 模块代理配置正确** 在 Linux 或 macOS 系统中,可以通过设置环境变量启用国内的 Go 模块代理,以避免因网络问题导致的依赖包下载失败: ```bash go env -w GOPROXY=https://goproxy.cn,direct ``` 这一配置可以加速依赖包的下载,并减少因网络问题导致的错误[^4]。 2. **手动添加缺失的依赖包** 对于 Hyperledger Fabric 的特定依赖包(如 `fabric-contract-api-go` 和 `fabric-chaincode-go`),可以直接通过 `go get` 命令安装。例如: ```bash go get github.com/hyperledger/fabric-contract-api-go/contractapi go get github.com/hyperledger/fabric-chaincode-go/shim ``` 如果 `go get` 命令仍然无法正常工作,则需要手动克隆这些依赖包到项目的 `vendor` 目录下。例如: ```bash git clone https://github.com/hyperledger/fabric-contract-api-go.git $GOPATH/src/github.com/hyperledger/fabric-contract-api-go git clone https://github.com/hyperledger/fabric-chaincode-go.git $GOPATH/src/github.com/hyperledger/fabric-chaincode-go ``` 3. **处理 `fabric-protos-go-apiv2` 依赖** `fabric-protos-go-apiv2` 是 Hyperledger Fabric 的内部协议缓冲区定义文件生成的 Go 代码。如果项目中缺失该依赖,可以通过以下方式解决: - 确保已安装 `protoc` 编译器以及相关插件。 - 手动克隆 `fabric-protos-go-apiv2` 到项目目录中: ```bash git clone https://github.com/hyperledger/fabric-protos-go-apiv2.git $GOPATH/src/github.com/hyperledger/fabric-protos-go-apiv2 ``` 4. **确保 Protobuf 版本正确** 链码开发中可能需要特定版本的 Protobuf 工具和库。建议安装最新稳定版的 Protobuf 并验证其版本: ```bash protoc --version ``` 如果未安装或版本过旧,可以从 [Protobuf 官方网站](https://developers.google.com/protocol-buffers) 下载并安装。 5. **重新运行 `go mod vendor`** 在完成上述步骤后,再次运行 `go mod vendor` 命令,确保所有依赖包均已正确加载到 `vendor` 目录中: ```bash go mod tidy go mod vendor ``` #### 示例代码 以下是一个简单的链码示例,展示了如何导入必要的依赖包: ```go package main import ( "github.com/hyperledger/fabric-contract-api-go/contractapi" "fmt" ) type SmartContract struct { contractapi.Contract } func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) error { return nil } func main() { chaincode, err := contractapi.NewChaincode(new(SmartContract)) if err != nil { fmt.Println(err) return } if err := chaincode.Start(); err != nil { fmt.Println(fmt.Errorf("error starting smart contract: %v", err)) } } ``` ### 注意事项 - 如果仍然遇到依赖包缺失的问题,可以尝试清理现有的 `go.mod` 和 `go.sum` 文件后重新初始化模块: ```bash rm -rf go.mod go.sum vendor/ go mod init <module-name> go mod tidy go mod vendor ``` - 确保使用的 Hyperledger Fabric 版本与链码开发工具链版本一致,以避免版本不兼容带来的问题[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值