Обновить документацию и словари

This commit is contained in:
AidarKC
2026-06-30 11:39:31 +04:00
parent 5720f1cb50
commit b0887648f7
89 changed files with 1297 additions and 8 deletions
@@ -0,0 +1,206 @@
# create-SHiNE-DAO
Чистый актуальный комплект для создания SHiNE DAO с governance NFT и для работы с NFT, которые:
1. можно выпускать через голосование DAO;
2. можно сжигать через голосование DAO;
3. в будущем можно будет сжигать через отдельную быструю программу-исполнитель только для одного конкретного `mint`.
Этот набор сделан как production-style папка:
- без старых `runs/`;
- без старых `keypairs/`;
- без legacy-скриптов;
- без смешивания нескольких исторических подходов.
## Что внутри
- `dao.config.env.example` - шаблон конфига для создания самого DAO.
- `nft-flow.config.env.example` - шаблон конфига для выпуска и burn NFT через уже созданное DAO.
- `scripts/01_check_dao_config.sh` - предстаровая проверка конфига DAO.
- `scripts/02_create_dao_with_governance_nfts.js` - создание DAO с governance NFT.
- `scripts/03_prepare_second_voter.js` - подготовка второго голосующего.
- `scripts/04_create_empty_nft_template_with_metadata.js` - создание NFT mint-шаблона с metadata и картинкой.
- `scripts/05_propose_vote_mint_nft.js` - proposal/sign/vote на mint NFT.
- `scripts/06_execute_mint_nft.js` - execute mint proposal.
- `scripts/07_propose_vote_burn_nft.js` - proposal/sign/vote на burn NFT.
- `scripts/08_execute_burn_nft.js` - execute burn proposal.
- `docs/FUTURE_FAST_BURN_EXECUTOR.md` - описание будущей программы для быстрого burn одного конкретного `mint`.
## Подтвержденная база, на которой собран комплект
Комплект собран из тех сценариев, которые уже были подтверждены на devnet:
- DAO с `Realm / Governance / Native Treasury`;
- mint NFT через DAO;
- burn NFT через DAO.
## Важное ограничение текущей схемы burn через DAO
Текущий стандартный burn через proposal работает так:
1. в proposal вшивается конкретная burn-инструкция;
2. в ней зашит конкретный token account, из которого надо сжигать NFT;
3. если владелец успеет переложить NFT в другой token account до `execute`, этот `execute` может не пройти.
То есть:
- burn определяется по `mint`;
- но исполняется из конкретного текущего token account;
- если токен двигают между proposal и execute, нужна более быстрая схема.
Именно для этого отдельно описан future-подход с одноразовым fast-burn executor.
## Что нужно заранее
В корне Solana-модуля:
```bash
cd shine-solana/shine
npm install
```
Нужны зависимости:
- `@solana/web3.js`
- `@solana/spl-token`
- `@solana/spl-governance`
- `@metaplex-foundation/mpl-token-metadata`
- `@metaplex-foundation/umi`
Также должны быть установлены CLI:
- `solana`
- `solana-keygen`
- `node`
## Быстрый сценарий: создать DAO и запустить NFT-flow
### 1. Создать конфиг DAO
```bash
cp create-SHiNE-DAO/dao.config.env.example create-SHiNE-DAO/dao.config.env
```
Заполнить:
- имя DAO;
- путь к keypair создателя;
- имя и символ governance NFT;
- `DAO_GOV_NFT_SUPPLY` (обычно `10`);
- `DAO_GOV_TOKEN_METADATA_URI` и `DAO_GOV_TOKEN_IMAGE_URL`.
### 2. Проверить конфиг DAO
```bash
./create-SHiNE-DAO/scripts/01_check_dao_config.sh ./create-SHiNE-DAO/dao.config.env
```
### 3. Создать DAO
```bash
node create-SHiNE-DAO/scripts/02_create_dao_with_governance_nfts.js ./create-SHiNE-DAO/dao.config.env
```
После этого из отчета взять:
- `realm`
- `governance`
- `communityMint`
### 4. Создать конфиг NFT-flow
```bash
cp create-SHiNE-DAO/nft-flow.config.env.example create-SHiNE-DAO/nft-flow.config.env
```
Подставить:
- `REALM`
- `GOVERNANCE`
- `GOVERNING_MINT`
- `MAIN_KEYPAIR`
- `VOTER2_KEYPAIR`
- metadata URI и картинку для целевого NFT.
### 5. Подготовить второго голосующего
```bash
node create-SHiNE-DAO/scripts/03_prepare_second_voter.js ./create-SHiNE-DAO/nft-flow.config.env
```
### 6. Создать NFT mint-шаблон с metadata
```bash
node create-SHiNE-DAO/scripts/04_create_empty_nft_template_with_metadata.js ./create-SHiNE-DAO/nft-flow.config.env
```
Скрипт вернет `mint` будущего NFT.
### 7. Поднять proposal на mint NFT
```bash
node create-SHiNE-DAO/scripts/05_propose_vote_mint_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<TARGET_WALLET> \
<NFT_MINT>
```
### 8. Выполнить mint proposal
```bash
node create-SHiNE-DAO/scripts/06_execute_mint_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<PROPOSAL> \
<PROPOSAL_TX> \
<TARGET_WALLET> \
<NFT_MINT>
```
### 9. Поднять proposal на burn NFT
```bash
node create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<CURRENT_OWNER_WALLET> \
<NFT_MINT>
```
### 10. Выполнить burn proposal
```bash
node create-SHiNE-DAO/scripts/08_execute_burn_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<PROPOSAL> \
<PROPOSAL_TX> \
<CURRENT_OWNER_WALLET> \
<NFT_MINT>
```
## Что важно про картинку NFT
У конкретного NFT картинка идет не отдельным on-chain полем, а через metadata JSON по `uri`.
То есть нужно:
1. загрузить JSON metadata на Arweave/IPFS/HTTPS;
2. в JSON указать `image`;
3. в конфиге передать `NFT_METADATA_URI`;
4. `NFT_IMAGE_URL` хранить для явной проверки и документации.
## Что важно про стартовые governance NFT
На старте governance NFT mint'ятся создателю DAO, а затем депонируются в Realm.
Практически это означает:
- первоначальный voting power принадлежит создателю DAO;
- затем governance NFT можно дополнительно распределять между другими участниками.
## Future
Если нужен сценарий "хитрый владелец постоянно перекладывает NFT", смотреть:
- `docs/FUTURE_FAST_BURN_EXECUTOR.md`
Там описана целевая отдельная программа, которой DAO может выдать одноразовое право сжечь только один конкретный `mint`.