/
mustreets
/
CreateTransactions
Обзор
Документация
Войти
/
mustreets
/
CreateTransactions
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
libJS/wallet/class.TransactionCoordinator.ts
61 строка
2 KB
Slava
Initialize project with essential configurations and structures
14 май 2026, 22:23
14 май 2026, 22:23
a89cd26
Код
Авторство
О чём код?
import BigNumber from "bignumber.js"; import i18n from "i18next"; import { IKeyProvider, IValueTransfer } from "./types"; import { transferSchema } from "./zod.schema"; const ERROR_MESSAGES = { INSUFFICIENT_FUNDS: "wallet:errors.insufficientFunds", } as const; export class TransactionCoordinator { private readonly provider: IKeyProvider; constructor(provider: IKeyProvider) { this.provider = provider; } /** * Комплексная проверка перед созданием транзакции */ public async validateFull(data: IValueTransfer) { // 1. Проверка структуры через Zod transferSchema.parse(data); // 2. Получение данных из сети (баланс и текущий газ) const [balanceRaw, feeRaw] = await Promise.all([ this.provider.getBalance(data.addressFrom), this.provider.estimateGasPrice(), ]); const balance = new BigNumber(balanceRaw); const amount = new BigNumber(data.value); const fee = new BigNumber(feeRaw); const sortLimit = data.gasLimit.sort((a, b) => (new BigNumber(a).lt(b) ? -1 : 1)); // 3. Математика с большой точностью const totalRequired = amount .plus(fee) .multipliedBy(new BigNumber(sortLimit[0]).multipliedBy(0.03)); if (balance.lt(totalRequired)) { throw new Error( i18n .t(ERROR_MESSAGES.INSUFFICIENT_FUNDS) .replaceAll("{totalRequired}", totalRequired.toFixed()) .replaceAll("{currencyChain}", data.currencyChain) .replaceAll("{currencyAmount}", data.currencyAmount) .replaceAll("{currencyFee}", data.currencyAmount) .replaceAll("{amount}", amount.toFixed()) .replaceAll("{fee}", fee.toFixed()) .replaceAll("{balance}", balance.toFixed()), ); } return { fee: fee.toFixed(), isValid: true, totalRequired: totalRequired.toFixed(), }; } }