Fabric基础架构原理(4):链码的背书策略
2025-11-04 01:52:43阅读量:1 字体:大 中 小
Fabric的智能合约 - 链码,智能合约能够部署和运行在区块链环境中,由一段代码来描述相关的业务逻辑。部署后的智能合约在区块链中无法修改,智能合约的执行完全由代码决定,不受人为因素的干扰。一般来说,参与方通过智能合约规定各自权利和义务、触发合约的条件以及结果,一旦该智能合约在区块链环境中运行就可以得出客观、准确的结果。n1L北海亭 - 区块链数字货币实时行情平台
在 Fabric 中,智能合约也称为链码(chaincode),分为用户链码和系统链码,通常指的是用户链码。链码是访问账本的基本方法,一般是用Go等高级语言编写的、实现规定接口的代码。上层应用可以通过调用链码来初始化和管理账本的状态。只要有适当的权限,链码之间也可以互相调用。n1L北海亭 - 区块链数字货币实时行情平台
1. 链码的背书策略n1L北海亭 - 区块链数字货币实时行情平台
链码实例化时可指定背书策略,当确认节点接收到交易时,节点获知相关链码信息,然后检查该链码的背书策略,判断交易是否满足背书策略,若满足则标注交易为合法。n1L北海亭 - 区块链数字货币实时行情平台
背书策略可分为主体 principal(P )和阈值 threshold(T) 两部分,具体如下:n1L北海亭 - 区块链数字货币实时行情平台
1)principal 指定由哪些成员进行背书。n1L北海亭 - 区块链数字货币实时行情平台
2)threshold 接受两个输入,分别为阈值t和若干个P的集合n,只要交易中包含了 n 中 t 个成员的背书则认为交易合法。n1L北海亭 - 区块链数字货币实时行情平台
例如:n1L北海亭 - 区块链数字货币实时行情平台
T(1, ‘A’, ‘B’) 则需要 A,B 中任意成员背书。n1L北海亭 - 区块链数字货币实时行情平台
T(1, ‘A’, T(2, ‘B’, ‘C’)) 则需要 A成员背书或 B,C 成员同时背书。n1L北海亭 - 区块链数字货币实时行情平台
2. 链码开发n1L北海亭 - 区块链数字货币实时行情平台
链码的在开发过程中需要实现链码接口,交易的类型决定了哪个接口函数将会被调用,如 instantiate 和 upgrade 类型会调用链码的Init接口,而 invoke 类型的交易则调用了链码的 Invoke 接口。链码的接口定义如下:(本文来自公众号:亨利笔记)n1L北海亭 - 区块链数字货币实时行情平台
type Chaincode interface {n1L北海亭 - 区块链数字货币实时行情平台
Init(stub ChaincodeStubInterface) pb.Responsen1L北海亭 - 区块链数字货币实时行情平台
Invoke(stub ChaincodeStubInterface) pb.Responsen1L北海亭 - 区块链数字货币实时行情平台
}n1L北海亭 - 区块链数字货币实时行情平台
下面通过一个例子讲解链码的开发流程,示例链码根据交易的类型创建键值对并记录到账本中,或者根据键名到账本中查找与之相对应的值。n1L北海亭 - 区块链数字货币实时行情平台
请先确保 Go 语言环境已经安装并且正确设置 GOPATH 环境变量。n1L北海亭 - 区块链数字货币实时行情平台
(1)创建链码存放目录n1L北海亭 - 区块链数字货币实时行情平台
创建keyValueStore目录以存放链码,同时进入目录n1L北海亭 - 区块链数字货币实时行情平台
mkdir $GOPATH/src/keyValueStoren1L北海亭 - 区块链数字货币实时行情平台
cd $GOPATH/src/keyValueStoren1L北海亭 - 区块链数字货币实时行情平台
创建并编辑链码文件 keyValueStore.go 。n1L北海亭 - 区块链数字货币实时行情平台
(2)链码源代码分析n1L北海亭 - 区块链数字货币实时行情平台
1)导入头文件。n1L北海亭 - 区块链数字货币实时行情平台
链码必须依赖 chaincode shim 包和 peer protobuf 包,它们分别用于链码的控制与数据传输,其次定义 KeyValueStore 类型,作为 chaincode shim 的载体。n1L北海亭 - 区块链数字货币实时行情平台
package mainn1L北海亭 - 区块链数字货币实时行情平台
import (n1L北海亭 - 区块链数字货币实时行情平台
“fmt”n1L北海亭 - 区块链数字货币实时行情平台
“github.com/hyperledger/fabric/core/chaincode/shim”n1L北海亭 - 区块链数字货币实时行情平台
“github.com/hyperledger/fabric/protos/peer”n1L北海亭 - 区块链数字货币实时行情平台
)n1L北海亭 - 区块链数字货币实时行情平台
type KeyValueStore struct {n1L北海亭 - 区块链数字货币实时行情平台
}n1L北海亭 - 区块链数字货币实时行情平台
2)实现Init方法。n1L北海亭 - 区块链数字货币实时行情平台
Init 方法通过 shim.ChaincodeStubInterface 接口来获取实例化链码交易的相关信息,该接口的 GetStringArgs 方法可获取交易传给链码的参数。链码实例化时接收key 和 value 两个参数,因此先对参数个数进行验证,若验证通过,则第一个和第二个参数分别作为 key 和 value 存入到账本中。n1L北海亭 - 区块链数字货币实时行情平台
把状态存入账本需要借助 shim.ChaincodeStubInterface 接口 PutState 方法来完成,由于账本中的数据都以键值对的形式储存,因此该方法也只接受 key,value两个参数,其中 value 为 byte 格式,里面还包含多个 json 格式的键值对。n1L北海亭 - 区块链数字货币实时行情平台
由于执行结果需要以消息的形式返回给客户端,因此还需要把返回消息封装成 fabric/protos/peer 中 Response 格式。n1L北海亭 - 区块链数字货币实时行情平台
值得注意的是,链码升级的时候都会调用 Init 方法,编写升级链码时应注意 Init 方法的实现,以避免重新初始化或覆盖上一版本的账本状态。n1L北海亭 - 区块链数字货币实时行情平台
n1L北海亭 - 区块链数字货币实时行情平台
3)实现Invoke方法。n1L北海亭 - 区块链数字货币实时行情平台
与Init方法类似,Invoke 方法通过 shim.ChaincodeStubInterface 的 GetFunctionAndParameters 方法来获取 invoke 交易的参数,其中返回的 fn 与 args 分别为交易调用的具体函数名以及相应参数,此时 Invoke 方法进一步判断fn的值以进行下一步操作(set或者get),并把操作结果存放在 result 变量中以返回操作结果。n1L北海亭 - 区块链数字货币实时行情平台
n1L北海亭 - 区块链数字货币实时行情平台
为了完成对账本的读写,链码还需要实现以下两个方法:n1L北海亭 - 区块链数字货币实时行情平台
set:把输入的键值对记录在账本中n1L北海亭 - 区块链数字货币实时行情平台
get:根据键读取账本中与之对应的值n1L北海亭 - 区块链数字货币实时行情平台
4)实现get和put方法。n1L北海亭 - 区块链数字货币实时行情平台
正如前面所说,invoke 方法根据 fn 的值来执行相应的 get 或 put 函数,这两个函数也需要 shim.ChaincodeStubInterface 接口来访问账本数据。n1L北海亭 - 区块链数字货币实时行情平台
n1L北海亭 - 区块链数字货币实时行情平台
5)实现主函数main():n1L北海亭 - 区块链数字货币实时行情平台
链码需要在main函数中调用shim.Start()方法用于链码的部署。n1L北海亭 - 区块链数字货币实时行情平台
n1L北海亭 - 区块链数字货币实时行情平台
(3)测试链码n1L北海亭 - 区块链数字货币实时行情平台
链码的测试需要通过完整的Fabric网络,使用官方提供的例子可以快速构建测试网络,从而简化链码的开发流程。这里介绍搭建测试网络的步骤:n1L北海亭 - 区块链数字货币实时行情平台
1)安装示例代码库。n1L北海亭 - 区块链数字货币实时行情平台
2)进入 fabric-samples 目录。n1L北海亭 - 区块链数字货币实时行情平台
$ cdn1L北海亭 - 区块链数字货币实时行情平台
$GOPATH/src/github.com/hyperledger/fabric-samplesn1L北海亭 - 区块链数字货币实时行情平台
3)把新编写的链码放入fabric-samples的chaincode目录下。n1L北海亭 - 区块链数字货币实时行情平台
$ cp -rn1L北海亭 - 区块链数字货币实时行情平台
$GOPATH/src/keyValueStore ./chaincoden1L北海亭 - 区块链数字货币实时行情平台
4)进入chaincode-docker-devmode目录并启动网络,命令中会创建了一个名称为myc的通道。n1L北海亭 - 区块链数字货币实时行情平台
$ cd chaincode-docker-devmoden1L北海亭 - 区块链数字货币实时行情平台
$ docker-compose -f docker-compose-simple.yaml up -dn1L北海亭 - 区块链数字货币实时行情平台
5)进入chaincode容器,编译并运行链码。n1L北海亭 - 区块链数字货币实时行情平台
$ docker exec -it chaincoden1L北海亭 - 区块链数字货币实时行情平台
$ cd keyValueStore && go buildn1L北海亭 - 区块链数字货币实时行情平台
$ export CORE_PEER_ADDRESS=peer:7051n1L北海亭 - 区块链数字货币实时行情平台
$ export CORE_CHAINCODE_ID_NAME=mycc:0n1L北海亭 - 区块链数字货币实时行情平台
$./keyValueStoren1L北海亭 - 区块链数字货币实时行情平台
$ exitn1L北海亭 - 区块链数字货币实时行情平台
6)进入CLI容器并初始化链码,链码ID为mycc,版本号为0.部署的通道名称是myc。n1L北海亭 - 区块链数字货币实时行情平台
$ docker exec -it cli bashn1L北海亭 - 区块链数字货币实时行情平台
$ peer chaincode install -p chaincodedev/chaincode/keyValueStore -n mycc -v 0n1L北海亭 - 区块链数字货币实时行情平台
$ peer chaincode instantiate -n mycc -v 0 -c ‘{“Args”:[“a”,“10”]}’ -C mycn1L北海亭 - 区块链数字货币实时行情平台
7)Invoke和Query链码。n1L北海亭 - 区块链数字货币实时行情平台
$ peer chaincode query -n mycc -c ‘{“Args”:[“query”,“a”]}’ -C mycn1L北海亭 - 区块链数字货币实时行情平台
$ peer chaincode invoke -n mycc -c ‘{“Args”:[“set”, “a”, “20”]}’ -C mycn1L北海亭 - 区块链数字货币实时行情平台
$ peer chaincode query -n mycc -c ‘{“Args”:[“query”,“a”]}’ -C mycn1L北海亭 - 区块链数字货币实时行情平台
正常情况下,两次 query 返回的结果分别为 10 和 20.n1L北海亭 - 区块链数字货币实时行情平台
开发链码时可以通过上述过程进行测试,但需避免使用相同的链码 ID 以免链码实例化失败。另外,对于链码升级来说,链码的 ID 应该保持不变,同时新链码的版本号需要比先前实例化的版本高,并通过 upgrade 交易来更新链码在通道中的状态。n1L北海亭 - 区块链数字货币实时行情平台
假设对链码 keyValueStore.go 进行了更改,并把最新的链码保存在$GOPATH/src/keyValueStoreNew 下,则升级链码的操作如下:n1L北海亭 - 区块链数字货币实时行情平台
1)进入fabric-samples目录并拷贝最新链码到chaincode目录。n1L北海亭 - 区块链数字货币实时行情平台
$ cd $GOPATH/src/fabric-samplesn1L北海亭 - 区块链数字货币实时行情平台
$ cp -r $GOPATH/src/keyValueStoreNew ./chaincoden1L北海亭 - 区块链数字货币实时行情平台
2)进入chaincode容器,编译并运行更新后的链码。n1L北海亭 - 区块链数字货币实时行情平台
$ docker exec -it chaincode bashn1L北海亭 - 区块链数字货币实时行情平台
$ cd keyValueStoreNew && go buildn1L北海亭 - 区块链数字货币实时行情平台
$ export CORE_PEER_ADDRESS=peer:7051n1L北海亭 - 区块链数字货币实时行情平台
$ export CORE_CHAINCODE_ID_NAME=mycc:1n1L北海亭 - 区块链数字货币实时行情平台
$ ./keyValueStoreNewn1L北海亭 - 区块链数字货币实时行情平台
$ exitn1L北海亭 - 区块链数字货币实时行情平台
3)进入cli容器并升级链码。n1L北海亭 - 区块链数字货币实时行情平台
$ docker exec -it cli bashn1L北海亭 - 区块链数字货币实时行情平台
$ peer chaincode install -p chaincodedev/chaincode/keyValueStoreNew -n mycc -v 1n1L北海亭 - 区块链数字货币实时行情平台
$ peer chaincode upgrade -n mycc -v 1 -c ‘{“Args”:[“a”,“10”]}’ -C mycn1L北海亭 - 区块链数字货币实时行情平台
到此升级链码完毕,可以对最新的链码mycc进行操作。n1L北海亭 - 区块链数字货币实时行情平台
免责声明:
本文《Fabric基础架构原理(4):链码的背书策略》版权归原作者所有,内容不代表本站立场!
如本文内容影响到您的合法权益(含文章中内容、图片等),请及时联系本站,我们会及时删除处理。
推荐阅读

特朗普开卖第四代NFT美国优先系列!每张售价99美元
BzI数字认知网 - 区块链数字货币实时行情平台美国共和党总统候选人特朗普在7月中旬时接受彭博采访时表示,他计划发布第四个NFT系列,他当时说道,他的前三个NFT系列都非常成功,现在打算再做一次,因为...
阅读: 97

史上最贵CryptoPunks 5822传以1500ETH转手!原持有者血亏2000万美元
9Wx数字认知网 - 区块链数字货币实时行情平台蓝筹NFT项目CryptoPunks中最贵,编号5822的NFT于今(19)日完成场外交易(OTC),创下历史性的销售纪录,该CryptoPunk的前持...
阅读: 71

OpenSea收SEC韦尔斯通知、认为NFT属于证券!代币BLUR、TNSR齐跳水
Omf数字认知网 - 区块链数字货币实时行情平台NFT交易平台OpenSea昨(28)晚传出重大利空消息,共同创办人兼执行长Devin Finzer在X上发文表示该平台已经收到来自美国证券交易委员会S...
阅读: 105

周星驰招募演员参与《大话大话西游》演出!必须持有Nobody NFT
HYD数字认知网 - 区块链数字货币实时行情平台在中国微短剧市场蓬勃发展之际,香港喜剧天王、同时也是亿万票房导演的周星驰,在今年也跨界推出网络微短剧,与抖音平台合作开发「九五二七剧场」。首部微短剧《金...
阅读: 68

什么是非同质化代币(NFT)?NFT常见的分类方式
目录什么是非同质化代币(NFT)?NFT常见的分类方式1.按用例分类2.按代币标准分类3.按平台或区块链分类4.按交互性分类基于用例的NFT类别1.个人资料头像(PFP)2.数字艺术3.音乐4.游戏内...
阅读: 76

公链Sui推出首款Web3掌机SuiPlay0x1!需要用加密货币付款购买
6Co数字认知网 - 区块链数字货币实时行情平台Sui公链开发商MystenLabs,今(3)日推出了首款Web3原生的掌上游戏机SuiPlay0x1,目前预订已经开放,预计将于2025上半年出货。6...
阅读: 83

传NFT借贷协议ParaSpace挪用资金!大量用户正撤出资金
aWn数字认知网 - 区块链数字货币实时行情平台今日下午,NFT借贷协议ParaSpace传出内部纠纷与挪用公共资产,各大社群表示保险起见请尽快提快提款,目前USDT贷款APY已突破82%,ETH贷款...
阅读: 96

Magic Eden拆分国际、美国双平台!应对SEC潜在监管风险?
mfg数字认知网 - 区块链数字货币实时行情平台全球最大NFT市场之一的OpenSea日前才传出正面临美国证 监 会(SEC)的证券调查,而Magic Eden恰好在此时宣布改为双平台,是否是为了应对...
阅读: 88

基于Ronin!Gravity推出Web3链游新作Ragnarok:Monster World
AId数字认知网 - 区块链数字货币实时行情平台知名MMORPG游戏仙境传说(Ragnarok,RO),其开发商Gravity于今年宣布推出「第三款」结合区块链与NFT元素与仙境传说IP的新游戏&md...
阅读: 66

TON正空投给NFT用户!分发超10万枚TON
upz数字认知网 - 区块链数字货币实时行情平台公链TON在傍晚发文表示,正在向生态活跃的NFT交易者和持有者空投105,600枚TON(价值约55万美元),快照时间是:4月23日上午8点(CEST)...
阅读: 64
猜你喜欢

PUMP 价格上涨,多头能否维持趋势还是前方有阻力?
2025-11-10

加密货币市场中异常的鲸鱼活动:以太坊和主要代币波动背景下散户投资者的战略切入点
2025-11-10

十月市场震荡后,Tether 发行 10 亿美元 USDT
2025-11-10
加密货币市场暴跌:交易所与传统金融机构如何应对危机
2025-11-10

OpenSea转型新引擎:代币交易崛起与发币预期下的未来
2025-11-10
特朗普家族加密货币计划:权力与金钱交织的新篇章
2025-11-10
Tempo:支付专用区块链能否挑战通用型区块链?
2025-11-10

Odaily办公室交易大赛:用200U探索加密市场的众生相
2025-11-10

XRP鲸鱼活动与机构积累趋势:链上信号揭示价格周期的关键线索
2025-11-10

加密货币投资新焦点:Mutuum Finance (MUTM) 成为长期持有优选
2025-11-10
