在这个教程中,我们将逐步建立一个业务网络,定义我们的资产,参与者和交易,并通过创建一些参与者和资产来测试我们的网络,并提交交易以将资产的所有权从一个更改为另一个。本教程旨在使用在线游乐场环境作为Hyperledger Composer概念的介绍。
在前面的教程中我们已经使用npm在本地安装了composer-playground,我们可以使用本地启动,也可以使用docker启动,还可以打开运行在IBM Bluemix 中的Playground。
composer-playground
docker run -d --name composer-playground --publish 8080:8080 --detach hyperledger/composer-playground
图: Composer Playground欢迎界面通过http://127.0.0.1:8080/login访问本地启动的composer-playground。
接下来,我们想要从头开始创建一个新的业务网络。业务网络有几个定义属性; 名称和可选说明。您还可以选择在现有模板上建立新的业务网络,或导入您自己的模板。
单击“Web浏览器”标题下的“ Deploy a new business network”开始使用。
新的业务网络需要一个名称,让我们称之为tutorial-network。
(可选)您可以输入业务网络的说明。
接下来我们必须选择一个基于我们的业务网络,因为我们想要从头开始构建网络,点击empty-business-network。
现在我们的网络已定义,请单击“ Deploy”。
注意:如果您在本地使用Playground并连接到真正的 Fabric,请参阅本教程底部的其他说明。
图:创建新的业务网络现在我们已经创建并部署了业务网络,您应该在钱包中看到一个名为admin的新业务网卡,用于我们的业务网络教程网络。钱包可以包含业务网卡以连接到多个部署的业务网络。
连接到外部区块链时,业务网卡代表连接到业务网络所需的一切。它们包括连接详细信息,身份验证材料和元数据。
要连接到我们的业务网络,请单击我们的业务网卡下的Connect now。
图:连接到业务网络如您所见,我们现在位于“ Define”选项卡中,此选项卡是您在部署它们并使用“ Test”选项卡测试它们之前创建和编辑构成业务网络定义的文件的位置。
当我们选择空的业务网络模板时,我们需要修改提供的模板文件。第一步是更新模型文件。模型文件定义业务网络中的资产,参与者,事务和事件。
有关我们的建模语言的更多信息,请查看CTO建模语言文档。
1. 单击Model File 查看它。
2. 删除模型文件中的代码行并将其替换为:
/**
* My commodity trading network
*/
namespace org.example.mynetwork
asset Commodity identified by tradingSymbol {
o String tradingSymbol
o String description
o String mainExchange
o Double quantity
--> Trader owner
}
participant Trader identified by tradeId {
o String tradeId
o String firstName
o String lastName
}
transaction Trade {
--> Commodity commodity
--> Trader newOwner
}
此域模型定义单个资产类型
Commodity
和单个参与者类型Trader
以及Trade
用于修改商品所有者的单个事务类型。
现在已经定义了域模型,我们可以为业务网络定义事务逻辑。Composer使用JavaScript函数表达业务网络的逻辑。提交事务进行处理时,将自动执行这些功能。
有关编写事务处理器函数的更多信息,请查看我们的文档。
单击“ Add a file”按钮。
单击Script File,然后单击“ Add”。
删除脚本文件中的代码行,并将其替换为以下代码:
/**
* Track the trade of a commodity from one trader to another
* @param {org.example.mynetwork.Trade} trade - the trade to be processed
* @transaction
*/
async function tradeCommodity(trade) {
trade.commodity.owner = trade.newOwner;
let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
await assetRegistry.update(trade.commodity);
}
此功能仅
owner
根据newOwner
传入Trade
事务的属性更改商品的属性。然后它将修改Commodity
后的内容保留在资产注册表中,用于存储Commodity
实例。
访问控制文件定义业务网络的访问控制规则。我们的网络很简单,因此默认的访问控制文件不需要编辑。基本文件为当前参与者networkAdmin
提供对业务网络和系统级操作的完全访问权限。
虽然您可以拥有多个模型或脚本文件,但在任何业务网络中只能有一个访问控制文件。
有关访问控制文件的更多信息,请查看我们的文档。
现在我们有模型,脚本和访问控制文件,我们需要部署和测试我们的业务网络。
单击"Deploy changes"以升级业务网络。
注意:如果您在本地使用游乐场并连接到真正的 Fabric,请参阅本教程底部的其他说明。
接下来,我们需要通过创建一些参与者(在本例中为交易者),创建资产(商品),然后使用我们的交易交易来更改商品的所有权来测试我们的业务网络。
单击“ Test”选项卡开始
我们应该向业务网络添加的第一件事是两个参与者。
1. 确保您在左侧选择了“ 交易者”选项卡,然后单击右上角的“ 创建新参与者 ”。
2. 您可以看到的是交易者参与者的数据结构。我们想要一些容易识别的数据,所以删除那里的代码并粘贴以下内容:
{
"$class": "org.example.mynetwork.Trader",
"tradeId": "TRADER1",
"firstName": "Jenny",
"lastName": "Jones"
}
3. 单击“ 新建”以创建参与者。
4. 您应该能够看到您创建的新交易者参与者。我们需要另一个交易者测试我们的交易交易,所以创建另一个交易者,但这一次,使用以下数据:
{
"$class": "org.example.mynetwork.Trader",
"tradeId": "TRADER2",
"firstName": "Amy",
"lastName": "Williams"
}
在继续之前确保两个参与者都存在于交易者视图中!
现在我们有两个交易员参与者,我们需要一些东西供他们交易。创建资产与创建参与者非常相似。我们正在创建的商品将拥有一个所有者属性,表明它属于交易者,其tradeId为TRADER1
。
1. 单击“ Commodity”下的“ Assets”选项卡,然后单击“ Create New Asset”。
2. 删除资产数据并将其替换为以下内容:
{
"$class": "org.example.mynetwork.Commodity",
"tradingSymbol": "ABC",
"description": "Test commodity",
"mainExchange": "Euronext",
"quantity": 72.297,
"owner": "resource:org.example.mynetwork.Trader#TRADER1"
}
3. 创建此资产后,您应该可以在“ Commodity”标签中看到它。
现在我们有两个交易商和一个商品在他们之间进行交易,我们可以测试我们的交易交易。
事务是Hyperledger Composer业务网络中所有更改的基础,如果您想在本教程之后尝试自己的事务,请尝试从“ 我的业务网络”屏幕创建另一个业务网络并使用更高级的业务网络模板。
要测试交易交易:
1. 单击左侧的“ 提交事务”按钮。
2. 确保交易类型为交易。
3. 用以下内容替换事务数据,或者只更改详细信息:
{
"$class": "org.example.mynetwork.Trade",
"commodity": "resource:org.example.mynetwork.Commodity#ABC",
"newOwner": "resource:org.example.mynetwork.Trader#TRADER2"
}
4. 点击Submit.。
5. 检查我们的资产已经改变所有权从TRADER1到TRADER2,通过扩大资产数据部分。您应该看到所有者列为resource:org.example.mynetwork.Trader#TRADER2。
6. 要查看我们的业务网络的完整交易历史记录,请单击左侧的All Transactions。以下是提交时每笔交易的清单。您可以看到,我们使用UI执行的某些操作(如创建交易者参与者和商品资产)被记录为交易,即使它们未在我们的业务网络模型中定义为交易。这些事务称为“系统事务”,对所有业务网络都是通用的,并在Hyperledger Composer Runtime中定义。
现在交易已经成功运行,我们应该退出业务网络,最后到我们开始的“ My Business Networks”屏幕。
在本地使用Playground,您可以使用连接到浏览器本地存储中的“Web浏览器”,或者您可以使用连接到名为“hlfv1”的组中的真实 Fabric
如果您要连接到真正的 Fabric,那么您可能已经创建了一个具有PeerAdmin和ChannelAdmin角色身份的卡 - 这通常称为PeerAdmin。这是用于使用Composer部署和更新网络的卡。
当您将网络部署到真实结构时,在单击“ Deploy”按钮之前还有其他字段需要完成- 您需要提供Network Administrator的详细信息。
滚动到“部署”屏幕的底部以查找“CREDENTIALS FOR NETWORK ADMINISTRATOR”。对于简单的开发结构和许多测试网络,您可以提供ID和密钥。注册ID - admin注册秘密 - adminpw
指定ID和密钥后,可以单击“ Deploy”按钮并在第3步中继续教程。
当您使用真正的 Fabric并单击Deploy Changes时,您将看到一个额外的弹出对话框,要求您从下拉列表中指定安装卡和升级卡。通常,您指定与用于部署初始网络的PeerAdmin卡相同。如果您不确定,请联系您的Fabric Administrator。
选择卡,然后单击“ Upgrade”按钮。请注意,在真正的Fabric上,这可能需要几分钟才能完成。