Регистрация: проверка реального баланса wallet.key перед продолжением
This commit is contained in:
parent
50da3e868d
commit
14cc3be620
@ -1,2 +1,2 @@
|
|||||||
client.version=1.2.18
|
client.version=1.2.19
|
||||||
server.version=1.2.18
|
server.version=1.2.19
|
||||||
|
|||||||
@ -44,9 +44,7 @@ export function render({ navigate }) {
|
|||||||
walletValue.className = 'input';
|
walletValue.className = 'input';
|
||||||
walletValue.type = 'text';
|
walletValue.type = 'text';
|
||||||
walletValue.value = state.registrationPayment.walletAddress || '';
|
walletValue.value = state.registrationPayment.walletAddress || '';
|
||||||
walletValue.addEventListener('input', () => {
|
walletValue.readOnly = true;
|
||||||
state.registrationPayment.walletAddress = walletValue.value;
|
|
||||||
});
|
|
||||||
|
|
||||||
const walletRow = document.createElement('div');
|
const walletRow = document.createElement('div');
|
||||||
walletRow.className = 'inline-input-row';
|
walletRow.className = 'inline-input-row';
|
||||||
@ -83,8 +81,8 @@ export function render({ navigate }) {
|
|||||||
refreshButton.textContent = '↻';
|
refreshButton.textContent = '↻';
|
||||||
refreshButton.title = 'Обновить';
|
refreshButton.title = 'Обновить';
|
||||||
|
|
||||||
const refreshBalance = async ({ showError = true } = {}) => {
|
const refreshBalance = async ({ showError = true, addressOverride = '' } = {}) => {
|
||||||
const address = String(walletValue.value || '').trim();
|
const address = String(addressOverride || walletValue.value || '').trim();
|
||||||
if (!address) return null;
|
if (!address) return null;
|
||||||
refreshButton.disabled = true;
|
refreshButton.disabled = true;
|
||||||
try {
|
try {
|
||||||
@ -107,6 +105,19 @@ export function render({ navigate }) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const deriveUserWalletAddress = async () => {
|
||||||
|
const draftPassword = String(state.registrationDraft.password ?? '');
|
||||||
|
if (!draftPassword) {
|
||||||
|
throw new Error('Не найден пароль регистрации для вычисления wallet.key');
|
||||||
|
}
|
||||||
|
const wallet = await deriveWalletFromPassword(draftPassword);
|
||||||
|
const address = String(wallet?.address || '').trim();
|
||||||
|
if (!address) throw new Error('Не удалось вычислить адрес wallet.key');
|
||||||
|
state.registrationPayment.walletAddress = address;
|
||||||
|
walletValue.value = address;
|
||||||
|
return address;
|
||||||
|
};
|
||||||
|
|
||||||
refreshButton.addEventListener('click', () => {
|
refreshButton.addEventListener('click', () => {
|
||||||
void refreshBalance();
|
void refreshBalance();
|
||||||
});
|
});
|
||||||
@ -117,9 +128,15 @@ export function render({ navigate }) {
|
|||||||
topupButton.className = 'ghost-btn';
|
topupButton.className = 'ghost-btn';
|
||||||
topupButton.type = 'button';
|
topupButton.type = 'button';
|
||||||
topupButton.textContent = 'Пополнить кошелёк';
|
topupButton.textContent = 'Пополнить кошелёк';
|
||||||
topupButton.addEventListener('click', () => {
|
topupButton.addEventListener('click', async () => {
|
||||||
const walletAddress = String(walletValue.value || '').trim();
|
try {
|
||||||
|
const walletAddress = await deriveUserWalletAddress();
|
||||||
window.open(getTopupSiteUrl(walletAddress), '_blank', 'noopener,noreferrer');
|
window.open(getTopupSiteUrl(walletAddress), '_blank', 'noopener,noreferrer');
|
||||||
|
} catch (error) {
|
||||||
|
status.className = 'status-line is-unavailable';
|
||||||
|
status.textContent = `Не удалось подготовить кошелёк: ${error?.message || 'unknown'}`;
|
||||||
|
status.style.display = '';
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const submitButton = document.createElement('button');
|
const submitButton = document.createElement('button');
|
||||||
@ -141,15 +158,8 @@ export function render({ navigate }) {
|
|||||||
submitButton.disabled = true;
|
submitButton.disabled = true;
|
||||||
submitButton.textContent = 'Регистрация...';
|
submitButton.textContent = 'Регистрация...';
|
||||||
|
|
||||||
const walletAddress = String(walletValue.value || '').trim();
|
const walletAddress = await deriveUserWalletAddress();
|
||||||
if (!walletAddress) {
|
const currentBalance = await refreshBalance({ showError: true, addressOverride: walletAddress });
|
||||||
status.className = 'status-line is-unavailable';
|
|
||||||
status.textContent = 'Кошелёк не подготовлен. Нажмите «Обновить» и попробуйте снова.';
|
|
||||||
status.style.display = '';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const currentBalance = await refreshBalance({ showError: true });
|
|
||||||
if (currentBalance == null) return;
|
if (currentBalance == null) return;
|
||||||
if (currentBalance < MIN_REQUIRED_SOL) {
|
if (currentBalance < MIN_REQUIRED_SOL) {
|
||||||
status.className = 'status-line is-unavailable';
|
status.className = 'status-line is-unavailable';
|
||||||
@ -205,11 +215,8 @@ export function render({ navigate }) {
|
|||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
try {
|
try {
|
||||||
const draftPassword = String(state.registrationDraft.password ?? '');
|
const walletAddress = await deriveUserWalletAddress();
|
||||||
const wallet = await deriveWalletFromPassword(draftPassword);
|
await refreshBalance({ addressOverride: walletAddress });
|
||||||
state.registrationPayment.walletAddress = wallet.address;
|
|
||||||
walletValue.value = wallet.address;
|
|
||||||
await refreshBalance();
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
status.className = 'status-line is-unavailable';
|
status.className = 'status-line is-unavailable';
|
||||||
status.textContent = `Не удалось подготовить wallet.key: ${error?.message || 'unknown'}`;
|
status.textContent = `Не удалось подготовить wallet.key: ${error?.message || 'unknown'}`;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user