0

这是一个粗略的总结,因为这些东西存在于不同的视图中。

我有一个使用钱包连接的反应原生应用程序。这允许我连接到手机上的元掩码钱包并创建一个连接器实例。

import {
  useWalletConnect,
  withWalletConnect,
} from "@walletconnect/react-native-dapp";

const connector = useWalletConnect();

connector.connect();

在我的应用程序的其他地方,我正在使用 ethers 来部署..

    // local hard hat HTTP and WebSocket JSON-RPC server 
    let provider = ethers.getDefaultProvider('http://127.0.0.1:8545/');
    const signer = provider.getSigner()

    let contract = new ethers.Contract(nftaddress, NFT.abi, signer);

    let transaction = await contract.createToken(url);

    let tx = await transaction.wait();
    let event = tx.events[0];
    let value = event.args[2];
    let tokenId = value.toNumber();
    const price = ethers.utils.parseUnits(formInput.price, "ether");

    contract = new ethers.Contract(nftmarketaddress, Market.abi, signer);
    let listingPrice = await contract.getListingPrice();
    listingPrice = listingPrice.toString();

    transaction = await contract.createMarketItem(nftaddress, tokenId, price, {
      value: listingPrice,
    });
    await transaction.wait();

我想我不完全理解我如何使用我的钱包(连接器实例)来签署这些交易。钱包连接器实例似乎不包含“签名者”,它只是有一个让您签署交易的方法?我完全被这件事难住了。

这是输出

在此处输入图像描述

4

1 回答 1

3

我也偶然发现了你的问题,我也很困惑,直到我意识到这一点:

@walletconnect/web3-provider必须与一起使用,@walletconnect/react-native-dapp以便您可以设置(BSC 链的示例,当您已经调用connector.connect()实例useWalletConnect()时):

import WalletConnectProvider from '@walletconnect/web3-provider';
import { useWalletConnect } from '@walletconnect/react-native-dapp';

const connector = useWalletConnect();
const provider = new WalletConnectProvider({
        rpc: {
            56: 'https://bsc-dataseed1.binance.org:443',
        },
        chainId: 56,
        connector: connector,
        qrcode: false,
    });
await provider.enable();
const ethers_provider = new ethers.providers.Web3Provider(provider);
const signer = ethers_provider.getSigner();

connector传递的实例在哪里@walletconnect/react-native-dapp并且qrcode: false是必需的,否则它会尝试调用 window.document。

也适用于世博会用户:不幸的是,要让 walletconnect 在 Android 11+ 上运行,您至少需要expo prebuild添加

<queries>
    <intent>
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="https"/>
    </intent>
    <intent>
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="http"/>
    </intent>
    <intent>
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="wc"/>
    </intent>
    <intent>
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="mqtt"/>
    </intent>
    <intent>
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="wamp"/>
    </intent>
  </queries>

否则你的应用程序看不到安装了哪些支持钱包连接的应用程序,也无法发送 websocket 请求(这最后一部分我不太确定,如果我错了请纠正我,但至少你需要 wc 意图)

于 2022-02-14T16:26:13.767 回答