使用IBM Blockchain Platform extension开发你的第一个fabric智能合约 (二)

简介: 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约(二)

我们先看看createMyAsset函数:


@Transaction()
    public async createMyAsset(ctx: Context, myAssetId: string, value: string): Promise<void> {
        const exists = await this.myAssetExists(ctx, myAssetId);
        if (exists) {
            throw new Error(`The my asset ${myAssetId} already exists`);
        }
        const myAsset = new MyAsset();
        myAsset.value = value;
        const buffer = Buffer.from(JSON.stringify(myAsset));
        await ctx.stub.putState(myAssetId, buffer);
    }


@Transaction()中的括号告诉你此函数会修改分类帐的内容。


该函数称为createMyAsset,它接受myAssetId和一个值,两者均为字符串。 提交此事务后,将使用关键字myAssetId和值创建一个新资产。


例如,假设你要创建“ 001”,“my first asset”; 然后稍后,当你读取键001的值时,你会知道该特定状态的值是“my first asset”。


现在,看看下一个事务:


@Transaction(false)
    @Returns('MyAsset')
    public async readMyAsset(ctx: Context, myAssetId: string): Promise<MyAsset> {
        const exists = await this.myAssetExists(ctx, myAssetId);
        if (!exists) {
            throw new Error(`The my asset ${myAssetId} does not exist`);
        }
        const buffer = await ctx.stub.getState(myAssetId);
        const myAsset = JSON.parse(buffer.toString()) as MyAsset;
        return myAsset;
    }


这个以@Transaction(false)开头-“ false”表示此函数通常不打算更改分类帐的内容。 这样的事务,称为“查询”。如你所见,此函数仅采用myAssetId并返回键所指向的任何状态的值。


可以详细看下合同中的其他交易。 然后,你可以继续打包和部署该合同,从而来使用它。


打包智能合约


现在,你已经创建了智能合约并了解其中的交易,是时候打包了。智能合约项目打包成.CDS文件,这是一种特殊类型的文件,可以安装在Hyperledger Fabric节点上。


在左侧边栏中,单击IBM Blockchain Platform图标。


将鼠标悬停在SMART CONTRACT PACKAGES面板上,单击“…”菜单,然后从下拉列表中选择“打包智能合约项目”。


如果一切顺利,你应该在列表中看到一个新程序包blockchainExtProject@0.0.1。


你刚创建的程序包可以安装到任何Hyperledger Fabric peer上(以正确的版本运行)。


例如,你可以右键单击并选择“导出包”,然后使用IBM Blockchain Platform操作工具控制台将其部署到云环境中。现在,你将在VS Code扩展程序预配置的运行时本地部署程序包,因此现在无需导出程序包!


Local Fabric Ops


名为LOCAL FABRIC OPS的面板(在IBM Blockchain Platform视图中)使你可以在本地计算机上使用Docker操作简单的Hyperledger Fabric runtime。 最开始的时候Fabric应该是停止的:


Local Fabric runtime is stopped. Click to start.


单击该消息,扩展将开始为你扩展Docker容器。然后,你应该会看到消息“ Local Fabric运行时正在开始……”,当任务完成时,你将看到一组可扩展/可折叠部分,分别标记为“智能合约”,“通道”,“节点”和“组织。”


下面是他们的简单描述:


  • “智能合约”部分向你显示此网络上的实例化和已安装合约。本教程的接下来的两个步骤将向你展示如何安装并实例化打包的智能合约。
  • 在通道下有一个称为“ mychannel”的通道。为了使用智能合约,必须在一个通道上实例化它。
  • “节点”部分包含一个对等节点(peer0.org1.example.com)。命名遵循Hyperledger Fabric约定,你可以从“ org1”部分看到此peer归Org1所有。
  • 还有一个证书颁发机构(CA)ca.org1.example.com和一个order节点orderer.example.com。
  • 在这个简单的区块链网络中只有一个组织称为“ Org1”。只有一个组织的网络在现实世界中使用并不是很现实,因为重点是要在多个组织之间共享一个分类帐,但对于本地开发目的来说已经足够了。在“组织”下,你将看到Org1MSP:这是Org1的MSP ID。


现在,你已经启动了本地Fabric运行时,现在该安装并实例化智能合约了……


安装智能合约


在真实的网络中,每个将支持交易的组织都将在其peer节点上安装智能合约,然后在通道上实例化该合约。 现在本地Fabric运行时只有一个组织(Org1),一个同级(peer0.org1.example.com)和一个通道(mychannel)。


因此,你只需要在该单个peer上安装合同,然后便可以在mychannel中实例化该合同。 方法如下:


  1. 在“本地FABRIC OPS”面板中,找到“ +安装”(在“智能合约”>“已安装”下),然后单击它。
  2. 系统会要求你选择一个节点。 选择唯一的选项peer0.org1.example.com。
  3. 然后,系统会要求你选择要安装的软件包。 blockchainExtProject@0.0.1。


你应该看到blockchainExtProject@0.0.1出现在智能合约>已安装列表下。

接下来,你将实例化智能合约…


实例化智能合约


在“本地FABRIC OPS”面板中,查找+实例化(在“智能合约”>“实例化”下),然后单击它。


系统会要求你选择一个channel。选择唯一的选项,mychannel。


然后,系统会要求你选择一个智能合约进行实例化。选择blockchainExtProject@0.0.1。

然后,系统将询问你要调用的函数。如果要在实例化过程中使用特定功能,则可以在此处输入内容。现在只需按Enter即可跳过此步骤。


然后,系统会询问你是否要提供私有数据配置文件。对于本教程,只需单击“否”.


实例化可能比安装花费更长的时间-请注意成功消息,并在“智能合约”>“实例化”列表中显示blockchainExtProject@0.0.1,以确认它是否有效!


现在你的界面应该是这样的:


image.png


提交和查询事务


Fabric网关和Hyperledger Fabric网络的peer进行连接,客户端应用程序可以使用该网关提交事务。当你在LOCAL FABRIC OPS中启动本地实例时,也会自动为你创建一个网关。你可以在FABRIC GATEWAYS下找到它,它称为“ local_fabric”。


要使用网关,你还需要用于在该网络上进行交易的身份。同样,对于本地Fabric运行时,已经为你设置了此时间。请注意,在FABRIC WALLETS下有一个名为local_fabric_wallet的钱包,其中包含一个名为admin的ID。如果将鼠标悬停在“ FABRIC GATEWAYS”面板中的“ local_fabric”上,你会看到它告诉你“关联的钱包:local_fabric_wallet”。

因此,你已经有了一个网关和一个带有单个身份的关联钱包,这意味着该网关可以使用了。


单击local_fabric(在FABRIC GATEWAYS下)以通过此网关连接。


展开channel,然后展开mychannel和blockchainExtProject@0.0.1。你将看到智能合约中定义的所有交易的列表。


现在你需要创建资产。右键单击createMyAsset,然后选择Submit Transaction。系统将要求你提供交易参数:尝试[“ 001”,“my asset one”](或你喜欢的任何键和值,但请确保记住使用的键!)。


参数以JSON格式提交,因此请确保你完全按照显示的方式输入输入内容,以便你根据此交易要求提交由2个字符串组成的数组。


接下来,以类似方式提交updateMyAsset。这次,为参数提供相同的键和不同的值,例如[“ 001”,“my asset two”]。因此,现在分类帐中的键001的值应该是“my asset two”。让我们来检查一下……


readMyAsset用于读取而不是写入分类帐,因此这次选择查询交易。输入[“ 001”](或任何你设置的键)作为参数。你应该在输出控制台中看到以下内容:


[SUCCESS] Returned value from readMyAsset: {"value":"my asset two"}
相关文章
|
6月前
|
存储 Java 区块链
fabric智能合约
fabric智能合约
185 0
|
存储 JSON 安全
Hyperledger fabric智能合约编写(一)
本篇文章主要对链码编写的主要思路和部分API进行梳理。
186 1
|
存储 JSON JavaScript
fabric.js开发图片编辑器可以实现哪些功能?多图
使用fabric.js开发了图片编辑器,用文字加动图的形式直观的分享出来,帮助做功能参考,项目已开源。
fabric.js开发图片编辑器可以实现哪些功能?多图
在IBM Cloud中运行Fabric (二)
在IBM Cloud中运行Fabric (二)
在IBM Cloud中运行Fabric (二)
|
Kubernetes 区块链 数据安全/隐私保护
在IBM Cloud中运行Fabric (一)
在IBM Cloud中运行Fabric (一)
在IBM Cloud中运行Fabric (一)
|
JavaScript 前端开发 Java
使用IBM Blockchain Platform extension开发你的第一个fabric智能合约(一)
使用IBM Blockchain Platform extension开发你的第一个fabric智能合约(一)
使用IBM Blockchain Platform extension开发你的第一个fabric智能合约(一)
|
开发工具
IBM Watson提供的认知计算服务介绍
IBM Watson提供的认知计算服务介绍
|
传感器 人工智能 自然语言处理
IBM Watson 持续扩张,认知计算正悄然改变我们的生活
在去年 IBM 发布的一则很有创意的广告中,Watson 用 IBM 最新的认知计算机咨询单元与 Bob Dylan 聊了半分钟。Watson 说它每秒能读 8 亿页,并识别出 Dylan 作品中常用的主题,比如时间流逝和爱情消逝。
399 0
|
物联网 区块链 网络架构
带你读《基于区块链的物联网项目开发》之一:了解物联网并在IBM Watson物联网平台上开发
本书首先概述当前业务场景中的物联网概念,帮助读者在IBM Watson物联网平台上开发自己的设备,并使用Watson和Intel Edison创建物联网解决方案。之后介绍如何利用Hyperledger框架开发区块链网络,以及如何创建自己的集成区块链和物联网解决方案。接下来的章节讲述了如何在IBM Cloud平台利用物联网来实现端到端的区块链解决方案。最后,你将掌握如何将物联网和区块链技术融合,利用实践和驱动程序来开发实用集成解决方案。
|
人工智能
IBM Watson被曝给出错误癌症治疗建议,是悲剧还是误会?丨科技云·视角
曾经是公众心目中“人工智能”代名词的IBM Watson,在近4年砸下几百亿美元的研发投入后,前景反而愈发暗淡。医生抱怨Watson给出错误判断,多家医院终止了与Watson肿瘤相关项目,Watson真的能治病吗? 近日,外媒Stat News爆出了IBM的一份内部文件,其中提及Watson计算机经常给出错误的癌症治疗建议,比如给一个已经大出血的癌症病人开了有可能会导致出血的药。
9414 0