forked from Junirezz/YieldVault-RWA
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtransactionConfirmationBuilder.ts
More file actions
105 lines (94 loc) · 2.66 KB
/
Copy pathtransactionConfirmationBuilder.ts
File metadata and controls
105 lines (94 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/**
* Utilities for building TransactionSummary from transaction parameters.
* Used by transaction handlers to construct confirmation modal data.
*/
import type { TransactionSummary } from '../types/transaction';
import {
UNUSUAL_AMOUNT_THRESHOLD,
UNUSUAL_FEE_MULTIPLIER,
STELLAR_BASE_FEE_XLM,
TRUSTED_CONTRACT_ADDRESSES,
} from './transactionThresholds';
import { networkConfig } from '../config/network';
interface BuildTransactionSummaryParams {
actionType: 'deposit' | 'withdraw' | string;
amount: number;
asset: string;
feeXlm: number;
contractAddress: string;
}
/**
* Constructs a complete TransactionSummary for the confirmation modal.
*
* Pure function: no side effects, same input always produces same output.
*
* @param params Transaction details (amount, asset, network, fee, contract)
* @returns TransactionSummary with all fields populated and unusual values detected
*/
export function buildTransactionSummary(
params: BuildTransactionSummaryParams
): TransactionSummary {
const {
actionType,
amount,
asset,
feeXlm,
contractAddress,
} = params;
// Determine network name
const networkName = networkConfig.isTestnet
? 'Testnet'
: 'Mainnet';
// Look up contract name from allowlist
const contractName = TRUSTED_CONTRACT_ADDRESSES[contractAddress] || null;
// Detect unusual values
const isUnusualAmount = amount >= UNUSUAL_AMOUNT_THRESHOLD;
const isUnusualFee = feeXlm > STELLAR_BASE_FEE_XLM * UNUSUAL_FEE_MULTIPLIER;
const isUnknownContract = contractName === null;
return {
amount: `${amount.toFixed(2)} ${asset}`,
asset,
network: networkName,
estimatedFee: `${feeXlm.toFixed(6)} XLM`,
contractAddress,
contractName,
actionType,
isUnusualAmount,
isUnusualFee,
isUnknownContract,
};
}
interface DepositTransactionParams {
amount: number;
feeXlm: number;
contractAddress: string;
}
/**
* Helper to build TransactionSummary for deposits.
*/
export function buildDepositSummary(params: DepositTransactionParams): TransactionSummary {
return buildTransactionSummary({
actionType: 'deposit',
amount: params.amount,
asset: 'USDC',
feeXlm: params.feeXlm,
contractAddress: params.contractAddress,
});
}
interface WithdrawalTransactionParams {
amount: number;
feeXlm: number;
contractAddress: string;
}
/**
* Helper to build TransactionSummary for withdrawals.
*/
export function buildWithdrawalSummary(params: WithdrawalTransactionParams): TransactionSummary {
return buildTransactionSummary({
actionType: 'withdraw',
amount: params.amount,
asset: 'USDC',
feeXlm: params.feeXlm,
contractAddress: params.contractAddress,
});
}