创建文章

We are looking for publications that demonstrate building dApps or smart contracts!
See the full list of Gitcoin bounties that are eligible for rewards.

Tutorial Thumbnail
中级 · 小于15分钟

使用 AlgoSigner 在 dApp 中发送交易

AlgoSigner 是专为 Chrome 设计的开源钱包扩展程序,有助于用户使用基于 Algorand 的 Web 应用。通过阅读本使用指南,您将了解如何把 AlgoSigner 集成到去中心化应用 (dApp) 中,从而请求连接至访客钱包、发送交易以获取访客签名,以及将已签署的交易传递给 Algorand TestNet 或 MainNet,所有这些操作均无需处理密钥或机密信息。

需要的工具和环境

您需要安装 AlgoSigner Chrome 扩展程序。从 Chrome 商店下载 AlgoSigner从源代码构建

如果您想使用示例 dApp 来继续操作,请点击此处查看

背景

PureStake 最近发布了一款基于浏览器的区块链钱包——AlgoSigner,有助于用户通过去中心化应用来使用 ALGO。AlgoSigner 由 Algorand 基金会的奖励计划提供资金支持,并已在 Chrome 商店上线。

通过将 AlgoSigner 集成到 dApp 中,您将能够请求连接至访客钱包、发送交易以获取访客签名,以及将已签署的交易传递给 Algorand TestNet 或 MainNet,所有这些操作均无需处理密钥或机密信息。

接下来,我们将进一步探讨如何将 AlgoSigner 集成到您的解决方案中。为便于讲解,我们创建了一个示例站点,点击此处即可访问

EditorImages/2020/09/29 13:17/1.png

步骤

1.连接钱包

AlgoSigner 在用户访问的每个网页中注入 JavaScript 库,以便相关网站与扩展程序交互。dApp 可使用已注入的库连接至用户钱包、发现钱包持有的账户地址、查询网络(可调用 algod v2 或 algorand-indexer),以及请求 AlgoSigner 要求用户签署该应用发起的交易。注入库的每个方法都会返回一个需要由 dApp 处理的 Promise。

在应用中,您可以实现 AlgoSigner.connect 方法以请求获取 dApp 的钱包访问权限,而该请求将由用户拒绝或批准。

示例 AlgoSigner dApp 中执行上述方法的演示代码显示在按钮右侧。

EditorImages/2020/09/29 13:33/2.png

在这个示例 dApp 中,如果用户授权访问,则会返回空对象作为响应。否则 Promise 将遭到拒绝,并显示一条错误消息。

上述情况需通过正在开发的应用进行处理。

2.查询 algod 以获取网络状态

开发人员还可以使用 AlgoSigner.algod 方法来调用网络中的中继节点。使用此方法将返回当前状态,包括网络和查询路径。

在下面的示例中,我们将调用 algod V2 API 来查询 TestNet 的状态。

EditorImages/2020/09/29 13:52/3.png

如您所见,该响应提供了节点返回的所有信息。

您可以使用 AlgoSigner 来访问任何公开端点并根据需要配置调用。例如:通过 POST 请求发送一个二进制文件。

您还可以使用 AlgoSigner.indexer 方法来调用 algorand-indexer。点击下方链接获取关于 REST API 的更多信息:

3.请求获取钱包中的地址

您还可以通过提供网络名称(本例中为 TestNet 或 MainNet),使用 AlgoSigner.accounts 方法针对给定的网络请求获取钱包中的地址。

EditorImages/2020/09/29 13:46/4.png

可用地址将返回为 JSON 对象。

4.使用 AlgoSigner 创建和签署交易

在这一部分中,我们将使用示例 dApp 的支付选项卡。

为了能够签署交易,我们首先要创建交易对象。为此,我们可以使用参数路径来查询 algod(在本例中来自 TestNet)。

EditorImages/2020/09/29 13:52/5.png

algod 将返回一个对象。在本例中,我们已将该对象保存在变量 txParams 中。这样我们就能够构建交易对象并将其传递给 AlgoSigner.sign 方法。请注意,要对来自钱包的账户注入信息,首先需要进行账户查询。

EditorImages/2020/09/29 13:54/6.png

一旦调用此方法,AlgoSigner 将立即弹出,并显示与 dApp 需要用户签署的交易相关的用户详情。经过确认后,输入该用户的密码即可签署交易。

此方法返回的响应如上图所示,包括交易 ID 和 blob 对象。在本例中,我们已将该响应存储为 signedTx

注:已返回的blob对象不是标准的SDK格式,而是base64编码。由于Chrome内部消息传递的限制,AlgoSigner只能以base64字符串对交易blob对象进行编码。以下仓库中提供了助手函数:PythonNodeJS

EditorImages/2020/09/30 13:24/7.png

最后一步是发送已签署的交易。为此,我们需要使用 AlgoSigner.send 方法来提供打算发送交易的目标网络,同时还需使用上一步的 blob 对象。

EditorImages/2020/09/29 20:32/8.png

我们可以使用诸如 GoalSeeker 之类的区块浏览器来查阅交易详情

5.创建 Algorand 标准资产 (ASA)

和前面的示例一样,资产是通过签署和发送交易来创建的。主要区别在于交易对象的构建方式不同,我们需要提供诸如资产名称、单元名称、总发行量和小数点后位数等字段。点击此处获取关于 ASA 的更多信息。在这一部分中,我们将使用示例 dApp 的资产创建选项卡。

在连接至 AlgoSigner 钱包并获取账户信息和建议交易参数后,我们可以构建自己的交易对象并将其传递给 AlgoSigner.sign 方法。与前面的示例一样,AlgoSigner 将立即弹出,以便用户确认并签署应用请求的交易。

EditorImages/2020/09/29 20:39/9.png

然后像之前一样,我们可以使用 AlgoSigner.send 方法传递交易 blob 对象。一旦确认,我们可以使用交易 ID 在 GoalSeeker 中查看详情

我们还可以使用 AlgoSigner.indexer 方法来查询 algorand-indexer API。

6.选择加入资产

在 Algorand 中,只有选择加入资产后才能持有资产(点击此处阅读更多内容)。为此,我们可以使用之前描述的相同方法,但需要构建一个特定的交易对象,以便我们的地址接收指定资产。

在这一部分中,我们将使用示例 dApp 的资产选择选项卡以及上一步中创建的资产。

正如前面的示例,我们需要连接至 AlgoSigner 钱包以获取账户信息和建议交易参数。然后,我们可以通过提供资产索引来创建交易对象。我们可以从 AlgoSigner 钱包中获取索引,点击创建资产的地址(本例中为 12220825)。

EditorImages/2020/09/29 20:53/10.png

与前面的示例一样,我们可以将交易 blob 对象传递给 AlgoSigner.send 方法,并验证交易详情

举例而言,我们可以使用 AlgoSigner.indexer 方法来查阅以相同名称创建的所有资产。为此,我们需要构建正确的路径(点击此处了解更多信息)。

EditorImages/2020/09/29 20:59/11.png

在本例中,响应是指显示具有相同名称的资产对象(此处限定为 1,这正是我们设置的limit的值)以及所有资产相关信息。

从上述示例中可知,dApp 可以利用 AlgoSigner 与 Algorand 进行简单安全的交互。这只需要用户点击几下鼠标,以及只需要开发者使用 AlgoSigner JavaScript 库付出极少的开发量。

目前,AlgoSigner 无法签署应用调用交易。此限制问题将在未来发行的版本中解决。欢迎社区为 AlgoSigner GitHub 仓库做出贡献。