我正在阅读超级账本面料的文档。在transaction flow页面上,我找到了这一行
The chaincode (containing a set of key value pairs representing
the initial state of the radish market) is installed on the peers and
instantiated on the channel.
这句话使我感到困惑。我认为这是分类帐的定义,但是这里以链码的形式编写。
我的看法正确吗?
有人能解释我吗?
答案 0 :(得分:2)
Chaincode(或更常用的术语“智能合约”)定义了一组业务模型,交易定义和逻辑,应用程序(SDK)可以利用这些逻辑来创建交易。 对于上面显示的句子,这并不涉及链码的定义。我相信它只是传达了这样的想法,即已经在链代码中定义了一个萝卜列表(在键和值对中),因此一旦实例化(或调用initRadish函数,如果链代码中存在它),那萝卜列表将成为分类帐中世界国家的一部分。
分类帐和链码在Fabric中如何关联?
分类帐由两个部分组成,即世界状态和区块链。世界状态存储密钥的最新值,而区块链存储所有导致世界状态的交易日志。
如上所述,chaincode在功能方面定义了事务逻辑,以便应用程序可以调用以创建事务,从而触发状态转换或状态检索。
例如,您在链码中定义了一个名为buyRadish(radishID, newOwner)
的函数。假设有一个萝卜,其键为R1001
,值为{"owner": FarmerA, "status": OnSale}
。这是任何交易发生之前的键值对。一旦用参数radishID = R1001, newOwner = Ken
调用了链码中的函数,就创建了一个事务,并且键为R1001
的萝卜状态将变为{"owner": Ken, "status": Sold}
。请注意,萝卜的最新状态将在世界状态中显示。
在上面的示例中,您可以这样思考:
分类帐存储最新的键值对(或者确切地说是键的最新值)。链码可能具有一些键值对以进行初始化;但是,关键是我们要在链码中传递一组新的键值对(radishID = R1001, newOwner = Ken
)作为该函数的参数,以便在其中更新同一键(radishID = R1001
)的值。分类帐的世界状态。
希望有帮助。
答案 1 :(得分:0)
链码是部署在网络上的程序代码,在共识过程中,链验证程序将链码一起执行和验证。开发人员可以使用链码来开发业务合同,资产定义以及集中管理的分散式应用程序。 more about chaincode click here
How ledger and chaincode relate in Fabric?
Chaincode是编写用于读取和更新分类帐状态的程序(智能合约)。