You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fabric Chaincode Dev模式下新增/更新链码的位置及操作步骤咨询

在Fabric Samples v1.1 Chaincode-Docker-Dev模式下新增/更新链码

我来帮你梳理下这个模式下新增和更新链码的具体操作——毕竟dev模式的流程和生产模式有区别,得抓准细节:

一、链码存放位置

不管是新增链码还是修改现有链码,都建议放在fabric-samples/chaincode目录下。这是samples默认的链码工作目录,dev模式的docker-compose配置已经默认把这个目录映射到了容器内部,方便容器直接访问链码文件。比如你要新增一个叫my_custom_chaincode的链码,直接在chaincode下创建对应文件夹,把你的链码文件(比如my_custom_chaincode.go)放进去就行。

二、新增链码的具体操作步骤

因为是Chaincode-Docker-Dev模式,链码是本地启动并注册到peer,不需要打包成tar包,步骤比生产模式简化不少:

  1. 启动dev模式环境(如果还没运行)
    先进入fabric-samples/chaincode-docker-devmode目录,执行启动命令:

    docker-compose -f docker-compose-simple.yaml up
    

    这会启动peer、orderer和一个cli容器,保持这个终端运行。

  2. 新开终端,启动链码容器
    切换到你新增的链码所在目录(比如fabric-samples/chaincode/my_custom_chaincode),执行以下命令启动链码容器并注册到peer:

    docker run -it --rm --name my_custom_chaincode \
      -v $(pwd):/opt/gopath/src/github.com/hyperledger/fabric/chaincode \
      -e CORE_PEER_ADDRESS=peer:7052 \
      -e CORE_CHAINCODE_ID_NAME=mycc:1.0 \
      hyperledger/fabric-peer:1.1 chaincode run -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}'
    

    说明:

    • CORE_CHAINCODE_ID_NAME是链码的唯一标识,格式为链码名:版本号
    • -C mychannel指定通道名,dev模式默认通道就是mychannel
    • 最后的init参数是链码初始化的参数,根据你的链码逻辑自行调整
  3. 在cli容器中完成安装与实例化
    再开一个终端,进入cli容器:

    docker exec -it cli bash
    

    先安装链码:

    peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/chaincode/my_custom_chaincode
    

    然后实例化(第一次使用这个链码必须执行):

    peer chaincode instantiate -o orderer:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member')"
    

    这里的-P是权限策略,按需调整即可。

  4. 调用/查询验证链码
    实例化完成后就可以测试了:

    # 查询a的余额
    peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
    # 执行转账操作
    peer chaincode invoke -o orderer:7050 -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
    

三、更新/升级现有链码(比如chaincode_example02)

如果是修改现有链码并升级,按以下步骤来:

  1. 修改链码文件
    直接编辑fabric-samples/chaincode/chaincode_example02/chaincode_example02.go的代码,比如调整转账逻辑、新增查询方法等。

  2. 停止并删除旧链码容器
    先找到旧链码的容器名(比如之前启动的chaincode_example02),执行:

    docker stop chaincode_example02
    docker rm chaincode_example02
    
  3. 启动新版本链码容器
    进入chaincode_example02目录,启动新版本链码——注意版本号要更新(比如从1.0改成2.0):

    docker run -it --rm --name chaincode_example02_v2 \
      -v $(pwd):/opt/gopath/src/github.com/hyperledger/fabric/chaincode \
      -e CORE_PEER_ADDRESS=peer:7052 \
      -e CORE_CHAINCODE_ID_NAME=mycc:2.0 \
      hyperledger/fabric-peer:1.1 chaincode run -C mychannel -n mycc -v 2.0 -c '{"Args":["init","a","100","b","200"]}'
    
  4. 在cli容器中执行升级操作
    进入cli容器,先安装新版本链码:

    peer chaincode install -n mycc -v 2.0 -p github.com/hyperledger/fabric/chaincode/chaincode_example02
    

    然后执行升级命令:

    peer chaincode upgrade -o orderer:7050 -C mychannel -n mycc -v 2.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member')"
    

    注意:如果你的链码升级不需要重置状态,可以根据链码的升级逻辑调整init参数,有些链码支持无状态升级,按需修改即可。

  5. 验证升级效果
    调用新版本链码,确认修改后的逻辑正常运行:

    peer chaincode invoke -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
    peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
    

几个关键注意事项

  • 链码版本号必须唯一,升级时不能和旧版本重复,否则会报错
  • dev模式下链码容器是临时的,停止后会自动删除,所以每次修改链码后都需要重新启动链码容器
  • 如果你的链码依赖第三方Go包,需要先在本地生成vendor目录(用go mod vendor命令),并把vendor目录放到链码文件夹下,确保容器能读取到依赖

内容的提问来源于stack exchange,提问作者Skadoosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:27:01