67 lines
3.7 KiB
Markdown
67 lines
3.7 KiB
Markdown
# CreateGovernmentNFTAndDAO
|
||
|
||
## RU
|
||
|
||
Скрипты для Devnet, чтобы управлять NFT через DAO (Realms/SPL Governance):
|
||
1) создать предложение на выпуск NFT (`mint`) и выполнить его;
|
||
2) создать предложение на сжигание NFT (`burn`) и выполнить его.
|
||
|
||
### Что лежит в папке
|
||
|
||
- `config.env` — параметры кластера, DAO, ключей.
|
||
- `keypairs/` — ключи оператора и второго участника.
|
||
- `runs/` — отчёты запусков (proposal, tx и т.д.).
|
||
- `00_prepare_voter2_deposit.js` — депонирование governance-токена для второго голосующего.
|
||
- `01_create_nft_for_wallet_admin.js` — создать NFT на кошелёк и делегировать право governance PDA.
|
||
- `01b_create_empty_nft_template.js` — создать пустой NFT mint-шаблон (supply=0) для будущего DAO mint.
|
||
- `02_propose_vote_mint_nft.js` — создать+подписать+проголосовать за proposal на mint.
|
||
- `03_execute_mint_nft.js` — выполнить proposal mint.
|
||
- `04_propose_vote_burn_nft.js` — создать+подписать+проголосовать за proposal на burn.
|
||
- `05_execute_burn_nft.js` — выполнить proposal burn.
|
||
|
||
### Важно перед запуском
|
||
|
||
1. Нужен `node`, `@solana/web3.js`, `@solana/spl-token`, `@solana/spl-governance`.
|
||
2. В `config.env` должен быть корректный `REALM`, `GOVERNANCE`, `GOVERNING_MINT`, `MAIN_KEYPAIR`.
|
||
3. Для `mint via DAO` целевой ATA должен существовать заранее (скрипт `02` это проверяет).
|
||
|
||
### Быстрый полный тест (mint + burn)
|
||
|
||
1. Создать NFT-шаблон (куда DAO будет минтить):
|
||
- `node 01b_create_empty_nft_template.js ./config.env`
|
||
2. Создать ATA для целевого кошелька и этого mint (если ещё нет).
|
||
3. Поднять proposal на mint:
|
||
- `node 02_propose_vote_mint_nft.js ./config.env <target_wallet> <nft_mint>`
|
||
4. Выполнить proposal (команду берёшь из консоли шага 3):
|
||
- `node 03_execute_mint_nft.js ./config.env <proposal> <proposal_tx> <nft_mint> <target_wallet>`
|
||
5. Создать NFT для burn-теста:
|
||
- `node 01_create_nft_for_wallet_admin.js ./config.env <wallet_with_nft>`
|
||
6. Поднять proposal на burn:
|
||
- `node 04_propose_vote_burn_nft.js ./config.env <wallet_with_nft> <nft_mint>`
|
||
7. Выполнить proposal burn (команда из шага 6):
|
||
- `node 05_execute_burn_nft.js ./config.env <proposal> <proposal_tx> <nft_mint> <wallet_with_nft>`
|
||
|
||
### Как проверить результат
|
||
|
||
Смотри JSON-отчёты в `runs/`: там есть `proposal`, `proposalTransaction`, tx подписи и mint/кошельки.
|
||
|
||
Для проверки через час:
|
||
1) поднимаешь proposal (скрипт `02` или `04`);
|
||
2) ждёшь;
|
||
3) запускаешь соответствующий `execute` скрипт с параметрами из отчёта.
|
||
|
||
### Проверка DAO
|
||
|
||
В текущем `config.env`:
|
||
- Realm: `2DTh1ivaekAW8kRYzGPsL2taFLJFFkBjEwqPisebxsS7`
|
||
- Governance PDA: `EMZ8vmr1xB4HZBDCFL9rHB98m1C5cYrGnRA8ZHayyGwD`
|
||
- Governing mint: `F1KctLRvVzqwcBYNGsivnjR39gY8Uvq5U3uyaqEBNASg`
|
||
|
||
## EN
|
||
|
||
Devnet scripts for DAO-governed NFT flow (Realms/SPL Governance):
|
||
- propose/sign/vote/execute NFT mint to a wallet;
|
||
- propose/sign/vote/execute NFT burn from a wallet.
|
||
|
||
Main idea: first script in each pair creates proposal and vote, second script executes proposal later.
|