Hyperledger Fabric学习笔记——Transaction context

transaction context主要有两个功能:首先,它允许开发人员在一个智能合约中跨transaction调用时定义和保存用户变量,其次,它提供了范围很广的Fabric APIs访问权限,范围包括从查询或者更新账本(包括不可变的blockchain和可修改的world state)到检索交易提交应用程序的数字身份。

1、示例

如下图,CommericalPaperContext中就定义了一个用户变量paperList,这个用户变量可以跨transaction使用。

2、结构

transaction context除了可以包括任意数量的用户变量(自己定义)外,还包含两个内建的元素,这两个元素提供了广泛的Fabric功能,从提交transaction的客户端到账本访问权限。

  • ctx.stub:用于访问提供了广泛transaction处理操作的APIs。这些API包括控制访问账本的putState()和getState(),以及用于获得当前transaction id的getTxID()等
  • ctx.clientIdentity:用于获得提交transaction的用户的身份信息

下图展示了智能合约可以通过stub和clientIdentity做什么:

3、Stub

stub中的APIs分为以下几类:

(1)world state数据APIs。在图中1处,这些APIs可以使智能合约能够从账本中get,put和delete对象对应的state,通过它们的key:getState()、putState()、deleteState()。

上面基本的APIs可以由查询APIs补充,使得能够检索一组状态而不是单个状态。可以通过使用完整或者部分key或者根据数据库中的value进行查询,对于大型查询,可对结果集进行分页以减少存储需求:getStateByRange()、getStateByRangeWithPagination()、getStateByPartialCompositeKey()等。

(2)私有数据APIs。在图中3处,这些APIs使智能合约能与私有数据集进行交互,类似上面的world state交互API:getPrivateData()、putPrivateData()、deletePrivateData()。

同样的,也可以由查询API进行补充,以查询私有数据(key或者value),不同的是,当前没有用于私有数据集的分页API:getPrivateDataByRange()等。

(3)transaction APIs。在图中5处,智能合约使用这些API来检索有关智能合约正在处理的当前transaction提议的详细信息,包括transaction表示符,创建的时间等:getTxID()、getTxTimestamp()、getCreator()(如果是X.509证书则通常更适合使用ctx.ClientIdentity)、getSignedProposal()、getBinding()、getTransient()(允许智能合约访问应用程序传递给智能合约的临时数据,是交互的私有数据,通常与私有数据集结合使用)。

(4)Key APIs。在图中2和4处,key api被智能合约用来操纵私有数据集或world state中的状态key。这些api中最简单的允许智能合约从其各个组件中形成和拆分组合key。ValidationParameter()api可以获取和设置针对world state和私有数据的基于state的认可策略。getHistoryForKey()返回存储值的集合来检索state的历史记录,该存储值包括执行state更新的transaction标识符,从而允许区块链读取交易。

(5)Event APIs。用于管理智能合约中的事件处理。

(6)实用APIs。有用的API的集合,不太好放入某一与定义的API类型中,因此单独形成一个集合。包括检索当前通道名称,将控制权传递给同一对等节点上的不同链码等。其中一些实用API仅在使用低级链码而不是智能合约的情况下使用,这些API主要用于链码输入的详细操作。

4、ClientIdentity

ClientIdentity接受getCreator()返回的信息并将一系列的X.509实用APIs放在顶部使得更容易使用。如getX509Certificate()、getAttributeValue()、assertAttributeValue()等。

总的来说,transaction context提供了一个自定义跨transaction的变量空间,还有两个默认的元素,这两个默认的元素提供了对于world state和blockchain以及应用程序等的许多APIs。

发布了38 篇原创文章 · 获赞 0 · 访问量 2014

猜你喜欢

转载自blog.csdn.net/Nemoosi/article/details/104727178
今日推荐