4.7.8 Hyperledger Fabric - 应用程序开发 - 应用程序设计元素 - 钱包

应用程序开发 - 应用程序设计元素 - 钱包

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

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

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

1. 场景

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

image

Isabella 和 Balaji 这两个用户拥有包含不同身份的钱包,可用于连接到不同的网络通道 PaperNet 和 BondNet。

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

注意:

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

2. 类型

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

image

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

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

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

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

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

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

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

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

    使用 CouchDBWallet 管理 CouchDB 钱包。

3. 结构

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

[图片上传失败...(image-4374ca-1576754700042)]

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

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

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

await wallet.import(identityLabel, identity);

请参阅 X509WalletMixin.createIdentity() 方法 如何创建具有元数据 Org1MSP,证书和私钥的身份。查看 wallet.import() 如何使用特定的 identityLabel 将此身份添加到钱包。

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

organizations:
  Org1:
    mspid: Org1MSP

    peers:
      - peer0.org1.example.com

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

magnetocorp/identity/user/isabella/
                                  wallet/
                                        User1@org1.example.com/
                                                              User1@org.example.com
                                                              c75bd6911aca8089...-priv
                                                              c75bd6911aca8089...-pub

你可以检查这些文件,但是如上所述,使用 SDK 可以更轻松地操作这些数据。

4. 运作方式

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

image

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

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

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

const cert = fs.readFileSync(path.join(credPath, '.../User1@org1.example.com-cert.pem')).toString();
const key = fs.readFileSync(path.join(credPath, '.../_sk')).toString();

const identityLabel = 'User1@org1.example.com';
const identity = X509WalletMixin.createIdentity('Org1MSP', cert, key);

await wallet.import(identityLabel, identity);

注意:

  • 首次运行该程序时,将在本地文件系统上的 .../isabella/wallet 中创建一个钱包。
  • 从文件系统加载证书 cert 和私钥。
  • 使用 X509WalletMixin.createIdentity() 使用 cert,key 和 Org1MSP 创建一个新的身份。
  • 新身份将通过带有标签 User1@org1.example.com 的 wallet.import() 导入到钱包中。

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

Reference

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容