Files
test-front/TASK-token-bet.md
Caffeine 32470d89b2 feat: токеновая подпись create_bet (8 аккаунтов по IDL) + дефолтный programId 9ALs
- 8 аккаунтов строго по порядку IDL: bettor/global/bet/clock/system_program/bettor_token/vault_token/token_program
- vault_token = ATA от PDA[global,vault]; bettor_token = ATA игрока (ASSOCIATED_TOKEN_PROGRAM_ID)
- minAmount: st.minAmountToken ?? st.minAmountLamports
- programId по умолчанию = 9ALsnx... (токеновый контракт)
2026-09-10 02:36:36 +03:00

70 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK — Привести test-front под актуальную токеновую подпись create_bet
Репозиторий: `test-front`, файл `index.html`.
## Контекст
Контракт `smart-updown-token` переведён на SPL-токен (фантики). IDL (актуальная токеновая
версия) имеет для `create_bet` 8 аккаунтов в ТОЧНОМ порядке:
```
1 bettor (signer, writable) — кошелёк игрока
2 global (PDA [b"global"]) writable
3 bet (PDA [b"bet", id]) writable
4 clock (SysvarC1ock...) не writable
5 system_program (111111...) не writable
6 bettor_token (ATA игрока, getAssociatedTokenAddress(mint, bettor)) writable
7 vault_token (ATA ваулта, getAssociatedTokenAddress(mint, vaultPda)) writable
8 token_program (Tokenkeg.../TokenProgram.programId) не writable
```
Дискриминатор create_bet = [0xc5,0x2a,0x99,0x02,0x3b,0x3f,0x8f,0xf6] (уже зашит).
Сейчас в `index.html:#placeBet` ключи на позициях 0-4 верны, но позиции 5-6-7 — заглушка
(плейсхолдеры). Нужно добавить настоящие токен-аккаунты.
## Что исправить (только в `index.html`, функция `placeBet` + конфиг)
### 1. Конфиг-дефолты (шапка)
- `programId` по умолчанию: `9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf` (токеновый контракт).
- `tokenMint`: оставить пустым (вводится), но в комментарий/README добавить, что на localnet
это созданный mint e.g. `8zd15Zoy1t3MDeCTT2eDa7y8jB1fBW8ynFD91ubKt2t3` (выдаётся вручную).
- RPC по умолчанию оставить (public; на localnet — http://127.0.0.1:8890).
### 2. `placeBet` — аккаунты create_bet (позиции 0..7)
Заменить массив `keys` на 8 элементов строго по порядку IDL:
```js
const vaultPda = web3.PublicKey.findProgramAddressSync(
[new TextEncoder().encode('global'), new TextEncoder().encode('vault')], c.programId)[0];
const vaultAta = web3.PublicKey.findProgramAddressSync(
[vaultPda.toBuffer(), web3.TokenProgram.programId.toBuffer(), ctx.mint.toBuffer()],
web3.ASSOCIATED_TOKEN_PROGRAM_ID)[0];
const bettorAta = web3.PublicKey.findProgramAddressSync(
[pubkey.toBuffer(), web3.TokenProgram.programId.toBuffer(), ctx.mint.toBuffer()],
web3.ASSOCIATED_TOKEN_PROGRAM_ID)[0];
const keys=[
{pubkey,isSigner:true,isWritable:true}, // 0 bettor
{pubkey:ctx.globalPda,isSigner:false,isWritable:true}, // 1 global
{pubkey:ctx.betPda(st.nextBetId),isSigner:false,isWritable:true},// 2 bet
{pubkey:new web3.PublicKey('SysvarC1ock11111111111111111111111111111111'),isSigner:false,isWritable:false}, // 3 clock
{pubkey:new web3.PublicKey('11111111111111111111111111111111'),isSigner:false,isWritable:false}, // 4 system_program
{pubkey:bettorAta,isSigner:false,isWritable:true}, // 5 bettor_token
{pubkey:vaultAta,isSigner:false,isWritable:true}, // 6 vault_token
{pubkey:web3.TokenProgram.programId,isSigner:false,isWritable:false}, // 7 token_program
];
```
(ваулт-ATA и бет-ATA считать через `getAssociatedTokenAddress`/findProgramAddress с
ASSOCIATED_TOKEN_PROGRAM_ID — как уже сделано для ATA игрока в refreshBalances).
### 3. Проверка minAmount
`st.minAmountLamports` (стр.196) — имя поля могло поменяться на токеновое. Читать поля
аккуратно (если `/api/state` отдаёт `minAmountToken` — использовать его). Не ломать при отсутствии.
### 4. amount
Уже в токен-единицах (умножается на 10^decimals) — ок, не менять.
## Гейт
- Файл корректный (нет JS-опечаток): открыть в браузере/`node -c` синтаксис.
- Аккаунты create_bet точно 8 и по порядку IDL.
## НЕ делать
- Не менять swap/балансы/подключение (работают).
- Не трогать бэкенд.
- Не коммитить без фразы пользователя.