Hyperledger Fabric1.4.4开发应用程序-应用程序设计元素-钱包

受众:架构师,应用程序和智能合约开发人员

钱包包含一组用户身份。用户运行的应用程序在连接到通道时会选择这些身份之一。结合MSP使用此身份确定对诸如分类帐之类的信道资源的访问权限。

在本主题中,我们将介绍:

  • 为什么钱包很重要
  • 钱包的组织方式
  • 不同类型的钱包
  • 钱包操作

情境

例如,当应用程序连接到诸如PaperNet的网络通道时,它会选择一个用户身份进行连接ID1。通道MSP ID1与特定组织内的角色相关联,该角色最终将确定应用程序对通道资源的权利。例如,ID1可能将某个用户标识为可以读写账本的MagnetoCorp组织成员,而ID2可能会在MagnetoCorp中标识可以向联盟添加新组织的管理员。

Hyperledger Fabric1.4.4开发应用程序-应用程序设计元素-钱包_第1张图片
钱包方案

伊莎贝拉(Isabella)和巴拉吉(Balaji)这两个用户拥有包含不同身份的钱包,可用于连接到不同的网络渠道PaperNet和BondNet。

考虑两个用户的例子;MagnetoCorp的Isabella和DigiBank的Balaji。Isabella将使用App 1在PaperNet中调用一个智能合约,在BondNet中调用另一个智能合约。同样,Balaji将使用App 2调用智能合约,但仅限于PaperNet。(应用程序很 容易访问其中的多个网络和多个智能合约。)

怎么看:

  • MagnetoCorp使用CA1颁发身份,而DigiBank使用CA2颁发身份。这些身份存储在用户钱包中。
  • Balaji的钱包拥有ID4由CA2发行的单一身份。伊莎贝拉的钱包有很多身份,ID1ID2ID3,由CA1颁发。钱包可以为一个用户保留多个身份,并且每个身份可以由不同的CA颁发。
  • Isabella和Balaji都连接到PaperNet,并且其MSP确定Isabella是MagnetoCorp组织的成员,而Balaji是DigiBank组织的成员,因为各自的CA均发布了它们的身份。(这是 可能的组织使用多个CA,且单个CA支持多个组织。)
  • Isabella可以ID1用来连接PaperNet和BondNet。在这两种情况下,当Isabella使用此身份时,她都被视为MangetoCorp的成员。
  • Isabella可以用于ID2连接到BondNet,在这种情况下,她被确定为MagnetoCorp的管理员。这给了伊莎贝拉两个不同的特权:ID1将她标识为可以读写BondNet总帐的MagnetoCorp的简单成员,而将ID2她标识为可以向BondNet添加新组织的MagnetoCorp管理员。
  • Balaji无法使用连接到BondNet ID4。如果他尝试连接,ID4 将不会被视为DigiBank的成员,因为BondNet的MSP不知道CA2。

种类

根据其存储身份的钱包有不同类型:

Hyperledger Fabric1.4.4开发应用程序-应用程序设计元素-钱包_第2张图片
钱包类型

钱包的四种不同类型:文件系统,内存,硬件安全模块(HSM)和CouchDB。

  • FileSystem:这是最常见的存放钱包的地方;文件系统无处不在,易于理解,并且可以通过网络安装。对于钱包来说,它们是一个很好的默认选择。

    使用FileSystemWallet 该类 来管理文件系统钱包。

  • 内存中:应用程序存储中的钱包。当您的应用程序在受限环境中运行而无法访问文件系统时,请使用这种钱包。通常是网络浏览器。值得记住的是,这种钱包是易变的。应用程序正常结束或崩溃后,身份将丢失。

    使用InMemoryWallet 该类 来管理内存中的钱包。

  • 硬件安全模块:存储在HSM中的钱包 。这种超安全,防篡改的设备可存储数字身份信息,尤其是私钥。HSM可以本地连接到您的计算机或可通过网络访问。大多数HSM提供了使用私钥执行机载加密的功能,这样私钥就永远不会离开HSM。

    当前,您应该 结合使用FileSystemWallet 该类和 HSMWalletMixin 类来管理HSM钱包。

  • CouchDB:存储在Couch DB中的钱包。这是钱包存储的最稀有形式,但是对于那些希望使用数据库备份和还原机制的用户,CouchDB钱包可以提供简化灾难恢复的有用选项。

    使用CouchDBWallet 该类 来管理CouchDB钱包。

结构体

单个钱包可以保存多个身份,每个身份由特定的证书颁发机构颁发。每个身份具有一个标准结构,包括描述性标签,一个包含公共密钥,私有密钥和某些特定于Fabric的元数据的X.509证书。不同的钱包类型将此结构适当地映射到其存储机制。

Hyperledger Fabric1.4.4开发应用程序-应用程序设计元素-钱包_第3张图片
钱包结构

Fabric钱包可以使用由不同证书颁发机构颁发的证书来保存多个身份。身份包括证书,私钥和结构元数据。

有几种关键的类方法可以简化钱包和身份的管理:

const identity = X509WalletMixin.createIdentity('Org1MSP', certificate, key);

await wallet.import(identityLabel, identity);

了解该X509WalletMixin.createIdentity() 方法如何 创建identity具有元数据Org1MSPcertificate和的私有 key。了解如何wallet.import()将此身份添加到具有特定的钱包中identityLabel

在上面的示例中,Gateway该类仅需要mspid为身份设置元数据Org1MSP当前,例如,当请求特定的通知策略时,它使用此值从连接配置文件中标识特定的对等方。在DigiBank网关文件中,查看通知将如何 与以下内容关联:networkConnection.yaml``Org1MSP``peer0.org1.example.com

organizations:
  Org1:
    mspid: Org1MSP

    peers:
      - peer0.org1.example.com

您确实不需要担心不同钱包类型的内部结构,但是如果您有兴趣,请导航到商业票据示例中的用户身份文件夹:

magnetocorp/identity/user/isabella/
                                  wallet/
                                        [email protected]/
                                                              [email protected]
                                                              c75bd6911aca8089...-priv
                                                              c75bd6911aca8089...-pub

您可以检查这些文件,但是正如所讨论的,使用SDK来操作这些数据更加容易。

运作方式

不同的钱包类派生自一个通用的 电子钱包 基类,该基类提供一组标准的API来管理身份。这意味着可以使应用程序独立于底层钱包存储机制。例如,文件系统和HSM钱包的处理方式非常相似。

Hyperledger Fabric1.4.4开发应用程序-应用程序设计元素-钱包_第4张图片
钱包操作

钱包遵循生命周期:可以创建或打开钱包,并且可以读取,添加,删除和导出身份。

应用程序可以根据简单的生命周期使用钱包。可以打开或创建钱包,然后可以添加,读取,更新,删除和导出身份。花一些时间在JSDOC中的不同Wallet方法上 ,看看它们如何工作。商业论文教程在以下方面提供了一个很好的示例 :addToWallet.js

const wallet = new FileSystemWallet('../identity/user/isabella/wallet');

const cert = fs.readFileSync(path.join(credPath, '.../[email protected]')).toString();
const key = fs.readFileSync(path.join(credPath, '.../_sk')).toString();

const identityLabel = '[email protected]';
const identity = X509WalletMixin.createIdentity('Org1MSP', cert, key);

await wallet.import(identityLabel, identity);

注意如何:

  • 首次运行该程序时,会在本地文件系统上创建一个钱包 .../isabella/wallet
  • 从文件系统加载证书cert和私有证书key
  • 一个新的身份与创建certkeyOrg1MSP使用 X509WalletMixin.createIdentity()
  • 新身份wallet.import()带有标签 导入钱包[email protected]

这就是您需要了解的所有钱包信息。您已经了解了它们如何保留应用程序代表用户使用的身份来访问Fabric网络资源。根据您的应用程序和安全需求,可以使用不同类型的钱包,并且有一组简单的API可以帮助应用程序管理钱包及其中的身份。

你可能感兴趣的:(Hyperledger Fabric1.4.4开发应用程序-应用程序设计元素-钱包)