【问题标题】:How to create a transaction using web3 or ethers.js without setting private_key如何在不设置 private_key 的情况下使用 web3 或 ethers.js 创建交易
【发布时间】:2022-08-03 02:34:08
【问题描述】:

我正在尝试做的事情:

构建一个允许用户以一定数量的代币购买服务的小型应用程序。例如,服务 A 100 个代币,服务 B 500 个代币。这将用于和谐区块链上的自定义代币。

我知道的:我已经知道如何连接到 metamask 并获取用户地址。我可以使用签名者和提供者。

让我感到困惑的是:示例和文档都引用了 private_key 并创建了一个钱包,我不需要这样做,我需要使用用户现有的钱包。

我需要做什么:

  1. 提示用户钱包(和谐钱包或元掩码)中的交易,以获得一定数量的代币。

  2. 检查用户是否需要余额(知道我可以读取他们的余额似乎微不足道)。

  3. 进行交易。阅读文档后似乎还可以。

  4. 获取收据,然后调用回调/我的代码。同样,阅读文档后似乎还可以。

    一切都非常简单,但同样 - 我阅读的每个文档总是提到设置私钥 - 我肯定不需要这样做吗?

    标签: blockchain web3js ethers.js


    【解决方案1】:

    一笔交易总是需要由生成发件人地址的私钥签名。否则会被网络拒绝。

    示例和文档都引用了 private_key 并创建了一个钱包,我不需要这样做,我需要使用用户现有的钱包。

    我阅读的每个文档总是提到设置一个私钥——我当然不需要这样做吗?

    后端方法是将私钥导入应用程序并使用它来签署交易。

    但是,还有一种前端方法:向钱包浏览器扩展发送请求以签署交易并将其广播到网络。然后钱包扩展会弹出一个窗口,让用户选择是否要签署交易(使用他们的私钥,不与应用程序共享)并广播它 - 或不。

    您可以在MetaMask docs page 中找到此类请求的示例。

    这种方法的一个优点是您的应用程序不需要询问用户的私钥。一个缺点是,如果用户没有安装与您的应用程序兼容的浏览器钱包,他们就无法发送交易(或者至少不那么容易)。


    注意:我不熟悉 Harmony 钱包,但我假设它的工作方式与 MetaMask 类似——因为 Harmony 是一个与 EVM 兼容的网络,而 MetaMask 仅支持与 EVM 兼容的网络。

    【讨论】:

    • 感谢您的回复。它的私钥让我感到困惑,因为我肯定不需要将一个硬编码到应用程序中吗?即使我这样做了,那是谁的私钥,我也没有任何意义。您的前端方法基本上是我需要做的 - 只需设置令牌和金额,让用户接受(或不接受),发送 TX,获取收据,成功调用我的更多代码......
    • 存储在应用程序中的私钥有不同的用例(通常在单独的加密数据库中 - 未在应用程序代码中硬编码)。例如,应该执行自动化操作的机器人 - 提供包含真实数据的合同、交易……在这种情况下,您不希望每次都被要求手动签署交易。它通常是创建合同或正在维护应用程序的开发人员/团队的私钥(例如,如果您运行自己的交易机器人,您可能会使用自己的账户进行交易)。
    • 明白了。所以在我的情况下,我忽略了示例/文档的那部分,可以只使用从用户钱包创建的“签名者”..?
    • @Stuart 正确
    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2022-01-11
    相关资源
    最近更新 更多