/
mustreets
/
CreateTransactions
Обзор
Документация
Войти
/
mustreets
/
CreateTransactions
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
libJS/wallet/index.ts
107 строк
3 KB
Slava
Initialize project with essential configurations and structures
14 май 2026, 22:23
14 май 2026, 22:23
a89cd26
Код
Авторство
О чём код?
import { useEffect, useMemo, useState } from "react"; import { reporter } from "../services/Reporting"; import { CexTransaction, HardwareWalletTransaction, SoftwareWalletTransaction, } from "./class.Transaction"; import { KeyProviderFactory } from "./provider"; import { ICipherTransaction, IValueTransfer, Wallet } from "./types"; export const useCreateTransaction = ({ wallet, sendTransaction, }: { wallet: Wallet; sendTransaction: (value: ICipherTransaction) => void; }) => { const [value, changeValue] = useState<IValueTransfer>({ addressFrom: "", addressTo: "", chainId: "", currencyAmount: "", currencyChain: "", currencyFee: "", gasLimit: ["21000"], value: "0", }); useEffect(() => { reporter.track("useCreateTransaction_mount", { wallet }); }, [wallet]); const getWalletBallance = async () => { return "1000000000000000000"; }; const getEstimateGasPrice = async () => { return "0.002"; }; const getStoragePublicKey = async () => { return "pk_from_secure_storage"; }; const getStoragePrivateKey = async () => { return "sk_from_secure_storage_" + Math.random(); }; const getHardwarePublicKey = async () => { return "pk_from_hardware_nfc"; }; const getHardwarePrivateKey = async () => { return "sk_from_hardware_nfc"; }; // Используем useMemo для провайдеров, чтобы не пересоздавать их при каждом рендере const providers = useMemo(() => { const balance = getWalletBallance; const gas = getEstimateGasPrice; return { hardware: KeyProviderFactory.create( { type: "hardware", sources: { balance, gas, pk: getHardwarePublicKey, sk: getHardwarePrivateKey, }, }, reporter, ), storage: KeyProviderFactory.create( { type: "software", sources: { balance, gas, pk: getStoragePublicKey, sk: getStoragePrivateKey, }, }, reporter, ), }; // Колбэки и провайдеры задуманы как стабильные на время жизни хука; расширение deps приведёт к лишним пересозданиям. }, []); const transactionInstance = useMemo(() => { const args = { sendTransaction, value }; switch (wallet) { case Wallet.CEX_WALLET: return new CexTransaction({ ...args, provider: providers.storage }); case Wallet.HARDWARE_WALLET: return new HardwareWalletTransaction({ ...args, provider: providers.hardware }); case Wallet.SOFTWARE_WALLET: return new SoftwareWalletTransaction({ ...args, provider: providers.storage }); } }, [wallet, value, sendTransaction, providers]); return { changeValue, transaction: transactionInstance, }; }; export { HardwareKeyProvider, KeyProviderFactory, StorageKeyProvider } from "./provider"; export type { ProviderAsyncSource, ProviderConfig } from "./types"; export { BaseKeyProvider } from "./types";