mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-11-05 16:21:07 +00:00
fix(web): correct asset IDs/decimals + chain routing, string-BigInt amounts, presale signer
Fund-logic hardening (audit remediation):
- TransferModal: source asset id/decimals from the canonical MINTABLE_ASSETS
(wUSDT=1000, wDOT=1001, wETH=1002, wBTC=1003) instead of the wrong hardcoded
ids (BTC=3 was the deprecated "Old USDT", ETH=4, DOT=5). Route every non-native
asset through the Asset Hub api; only native HEZ uses the relay balances pallet.
Removes the latent wrong-asset / wrong-chain transfer.
- Replace BigInt(parseFloat(x)*10**dec) with string-based parseTokenInput in
TransferModal + 3 DEX init modals; BigInt(float) threw RangeError on common
fractional amounts (e.g. 100.3 HEZ), breaking sends and pool/bridge init.
- Presale.contribute now resolves a signer via getSigner and passes { signer }
to signAndSend (was signer-less -> broken for all users).
- presale.ts contribute/refund/claimVested now reject on dropped/invalid/usurped/
retracted tx states instead of hanging the UI forever.
This commit is contained in:
1 parent
686eecc09e
commit
1c6ff3d578
8 files changed
+57
-36940
No files matched your search
@@ -14,7 +14,7 @@ import { toast } from 'sonner';
|
||||
export default function Presale() {
|
||||
const { t } = useTranslation();
|
||||
const navigate = useNavigate();
|
||||
const { api, selectedAccount, isApiReady } = usePezkuwi();
|
||||
const { api, selectedAccount, isApiReady, walletSource } = usePezkuwi();
|
||||
const { balances } = useWallet();
|
||||
|
||||
const [wusdtAmount, setWusdtAmount] = useState('');
|
||||
@@ -107,9 +107,13 @@ export default function Presale() {
|
||||
try {
|
||||
const amountWithDecimals = Math.floor(amount * 1_000_000); // 6 decimals
|
||||
|
||||
// Get signer (extension or WalletConnect) — no global api.setSigner exists
|
||||
const { getSigner } = await import('@/lib/get-signer');
|
||||
const injector = await getSigner(selectedAccount.address, walletSource, api);
|
||||
|
||||
const tx = api.tx.presale.contribute(amountWithDecimals);
|
||||
|
||||
await tx.signAndSend(selectedAccount.address, ({ status, events }) => {
|
||||
await tx.signAndSend(selectedAccount.address, { signer: injector.signer }, ({ status, events }) => {
|
||||
if (status.isInBlock) {
|
||||
if (import.meta.env.DEV) {
|
||||
console.log(`Transaction included in block: ${status.asInBlock}`);
|
||||
|
||||
Reference in new issue
Block a user