使用 ether.js 的 reactnnative walletconnect
Use reactnnative walletconnect with ether.js
这是一个粗略的总结,因为这些东西存在不同的观点。
我有一个使用 wallet connect 的 React 本机应用程序。
这允许我连接到我的 phone 上的元掩码钱包并创建一个连接器实例。
import {
useWalletConnect,
withWalletConnect,
} from "@walletconnect/react-native-dapp";
const connector = useWalletConnect();
connector.connect();
在我的应用程序的其他地方,我正在使用以太来部署..
// 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();
我想我不完全明白我是如何使用我的钱包(连接器实例)来签署这些交易的。钱包连接器实例似乎不包含“签名者”,它只有一种方法可以让您签署交易?我完全被这个难住了。
这是输出
我也偶然发现了你的问题,我也被难住了,直到我意识到这一点:
@walletconnect/web3-provider
必须与 @walletconnect/react-native-dapp
一起使用,以便您可以设置(BSC 链的示例,当您已经为 useWalletConnect()
实例调用了 connector.connect()
时):
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.
同样对于 expo 用户:不幸的是要让 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>
否则你的app看不到安装了哪些支持wallet connect的app,也不能发送websocket请求(这最后一部分我不太确定,如果我错了请指正,但至少你需要 wc 意图)
这是一个粗略的总结,因为这些东西存在不同的观点。
我有一个使用 wallet connect 的 React 本机应用程序。 这允许我连接到我的 phone 上的元掩码钱包并创建一个连接器实例。
import {
useWalletConnect,
withWalletConnect,
} from "@walletconnect/react-native-dapp";
const connector = useWalletConnect();
connector.connect();
在我的应用程序的其他地方,我正在使用以太来部署..
// 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();
我想我不完全明白我是如何使用我的钱包(连接器实例)来签署这些交易的。钱包连接器实例似乎不包含“签名者”,它只有一种方法可以让您签署交易?我完全被这个难住了。
这是输出
我也偶然发现了你的问题,我也被难住了,直到我意识到这一点:
@walletconnect/web3-provider
必须与 @walletconnect/react-native-dapp
一起使用,以便您可以设置(BSC 链的示例,当您已经为 useWalletConnect()
实例调用了 connector.connect()
时):
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.
同样对于 expo 用户:不幸的是要让 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>
否则你的app看不到安装了哪些支持wallet connect的app,也不能发送websocket请求(这最后一部分我不太确定,如果我错了请指正,但至少你需要 wc 意图)