元掩码+ NextJS:对使用Metamask Wallet的令牌事务的各个方面感到困惑

fhity93d  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(134)

我对创建一个代币交易(从用户1的账户到用户2的账户)作为区块链众筹平台的一部分感到有点困惑,我已经弄清楚了应用程序组件和其他东西的大部分问题,但MetaMask、账户和交易的整体集成仍然让我感到困惑。
我最初的目标是让NextJS后端(/api路由)处理合约和事务调用,根据我的观察,大多数在线教程都是从react前端本身管理此类调用的。
从我过去与类似项目的互动来看,MetaMask扩展管理大量web3设置,包括配置提供者(!)和帐户地址。
考虑到无MetaMask-less后端(NextJS API)将处理合约和事务调用。如何将MetaMask钱包集成到后端?我的初始思路如下:
当前配置计划:

  • 网络:歌尔丽测试网
  • 前端提供程序:(?)(这是MetaMask window.ethereum提供程序吗?)
  • 后端提供商:Infura WS/HTTP提供程序

逻辑流程:
1.用户在前端使用MetaMask登录
1.前端对包含所选钱包地址(AddrA)的后端进行API调用
1.后端接收钱包地址(AddrA)
1.发起某种形式的交易,将ETH发送到不同的用户钱包,地址为(AddrB)
这就是我遇到的障碍。我目前的观察是-
1.前端和后端提供商不同,尽管有相同的网络(或者我错了?)
1.如果要执行事务,MetaMask wallet是否会触发用户的批准提示?
1.如果事务由于配置不正确而无法执行,我可以做些什么来使MetaMask确认来自后端的事务请求?是否有任何文档说明了这一点
先谢谢你了,arnitdo
我已经搜索了很多关于元掩码和纯基于后端的事务的文档,但是我没有找到任何足够的文档。也许我的方向是错误的,或者我正在尝试一些不太可行的东西

l7wslrjt

l7wslrjt1#

Metamask是一个chrome扩展,你不能在后端使用它。chrome扩展将一个属性注入到window全局对象中,在本例中metamask添加ethereum属性。所以我们到达window.ethereum来设置一个提供程序。Provider是一个 Package 器对象,它 Package window.ethereum,你通过第三方库创建provider。根据第三方api,您将拥有略微不同的提供者对象。
Metamask只是一种使用钱包签署交易的简单方法,在幕后它使用Infura节点连接区块链。
如果您在后端,您可以通过注册infura创建您的提供商。

const { ethers } = require("ethers");

const provider = new ethers.providers.JsonRpcProvider(INFURA_URL_MAINNET);

如果你在后台,因为你没有元掩码,你必须创建自己的使用密钥墙。你可以去元掩码,选择一个帐户,提取其密钥,并在后台创建一个钱包

const wallet = new ethers.Wallet(WALLET_SECRET);
const signer = wallet.connect(provider);

然后构造一个事务,并通过签名者执行它

const txArgs = {
    to: toAddress,
    from: YOUR_WALLET_ADDRESS,
    data: yourEncodedData,
    gasLimit: ethers.utils.hexlify(3000000),
  };
  const tx = await signer.sendTransaction(txArgs);

相关问题