使用 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 集成到您的解决方案中。为便于讲解,我们创建了一个示例站点,点击此处即可访问。
步骤
1.连接钱包
AlgoSigner 在用户访问的每个网页中注入 JavaScript 库,以便相关网站与扩展程序交互。dApp 可使用已注入的库连接至用户钱包、发现钱包持有的账户地址、查询网络(可调用 algod
v2 或 algorand-indexer
),以及请求 AlgoSigner 要求用户签署该应用发起的交易。注入库的每个方法都会返回一个需要由 dApp 处理的 Promise。
在应用中,您可以实现 AlgoSigner.connect 方法以请求获取 dApp 的钱包访问权限,而该请求将由用户拒绝或批准。
示例 AlgoSigner dApp 中执行上述方法的演示代码显示在按钮右侧。
在这个示例 dApp 中,如果用户授权访问,则会返回空对象作为响应。否则 Promise 将遭到拒绝,并显示一条错误消息。
上述情况需通过正在开发的应用进行处理。
2.查询 algod
以获取网络状态
开发人员还可以使用 AlgoSigner.algod 方法来调用网络中的中继节点。使用此方法将返回当前状态,包括网络和查询路径。
在下面的示例中,我们将调用 algod
V2 API 来查询 TestNet 的状态。
如您所见,该响应提供了节点返回的所有信息。
您可以使用 AlgoSigner 来访问任何公开端点并根据需要配置调用。例如:通过 POST 请求发送一个二进制文件。
您还可以使用 AlgoSigner.indexer 方法来调用 algorand-indexer
。点击下方链接获取关于 REST API 的更多信息:
algod
v2:https://developer.algorand.org/zh-hans/docs/reference/rest-apis/algod/v2/algorand-indexer
:https://developer.algorand.org/zh-hans/docs/reference/rest-apis/indexer/- PureStake API 服务支持用户与上述两个 API 交互。
3.请求获取钱包中的地址
您还可以通过提供网络名称(本例中为 TestNet 或 MainNet),使用 AlgoSigner.accounts 方法针对给定的网络请求获取钱包中的地址。
可用地址将返回为 JSON 对象。
4.使用 AlgoSigner 创建和签署交易
在这一部分中,我们将使用示例 dApp 的支付选项卡。
为了能够签署交易,我们首先要创建交易对象。为此,我们可以使用参数路径来查询 algod
(在本例中来自 TestNet)。
algod
将返回一个对象。在本例中,我们已将该对象保存在变量 txParams 中。这样我们就能够构建交易对象并将其传递给 AlgoSigner.sign 方法。请注意,要对来自钱包的账户注入信息,首先需要进行账户查询。
一旦调用此方法,AlgoSigner 将立即弹出,并显示与 dApp 需要用户签署的交易相关的用户详情。经过确认后,输入该用户的密码即可签署交易。
此方法返回的响应如上图所示,包括交易 ID 和 blob 对象。在本例中,我们已将该响应存储为 signedTx。
注:已返回的blob对象不是标准的SDK格式,而是base64编码。由于Chrome内部消息传递的限制,AlgoSigner只能以base64字符串对交易blob对象进行编码。以下仓库中提供了助手函数:Python和NodeJS
最后一步是发送已签署的交易。为此,我们需要使用 AlgoSigner.send 方法来提供打算发送交易的目标网络,同时还需使用上一步的 blob 对象。
我们可以使用诸如 GoalSeeker 之类的区块浏览器来查阅交易详情。
5.创建 Algorand 标准资产 (ASA)
和前面的示例一样,资产是通过签署和发送交易来创建的。主要区别在于交易对象的构建方式不同,我们需要提供诸如资产名称、单元名称、总发行量和小数点后位数等字段。点击此处获取关于 ASA 的更多信息。在这一部分中,我们将使用示例 dApp 的资产创建选项卡。
在连接至 AlgoSigner 钱包并获取账户信息和建议交易参数后,我们可以构建自己的交易对象并将其传递给 AlgoSigner.sign 方法。与前面的示例一样,AlgoSigner 将立即弹出,以便用户确认并签署应用请求的交易。
然后像之前一样,我们可以使用 AlgoSigner.send 方法传递交易 blob 对象。一旦确认,我们可以使用交易 ID 在 GoalSeeker 中查看详情。
我们还可以使用 AlgoSigner.indexer 方法来查询 algorand-indexer
API。
6.选择加入资产
在 Algorand 中,只有选择加入资产后才能持有资产(点击此处阅读更多内容)。为此,我们可以使用之前描述的相同方法,但需要构建一个特定的交易对象,以便我们的地址接收指定资产。
在这一部分中,我们将使用示例 dApp 的资产选择选项卡以及上一步中创建的资产。
正如前面的示例,我们需要连接至 AlgoSigner 钱包以获取账户信息和建议交易参数。然后,我们可以通过提供资产索引来创建交易对象。我们可以从 AlgoSigner 钱包中获取索引,点击创建资产的地址(本例中为 12220825)。
与前面的示例一样,我们可以将交易 blob 对象传递给 AlgoSigner.send 方法,并验证交易详情。
举例而言,我们可以使用 AlgoSigner.indexer 方法来查阅以相同名称创建的所有资产。为此,我们需要构建正确的路径(点击此处了解更多信息)。
在本例中,响应是指显示具有相同名称的资产对象(此处限定为 1,这正是我们设置的limit的值)以及所有资产相关信息。
从上述示例中可知,dApp 可以利用 AlgoSigner 与 Algorand 进行简单安全的交互。这只需要用户点击几下鼠标,以及只需要开发者使用 AlgoSigner JavaScript 库付出极少的开发量。
目前,AlgoSigner 无法签署应用调用交易。此限制问题将在未来发行的版本中解决。欢迎社区为 AlgoSigner GitHub 仓库做出贡献。