Подготовка перед деплоем в mainnet

This commit is contained in:
AidarKC
2026-07-01 12:23:30 +04:00
parent ab4dab34aa
commit 0240db59ee
52 changed files with 1018 additions and 473 deletions
+128 -33
View File
@@ -1,6 +1,6 @@
# create-SHiNE-DAO
Чистый актуальный комплект для создания SHiNE DAO с governance NFT и для работы с NFT, которые:
Чистый актуальный комплект для создания SHiNE DAO с переносимым governance mint (`Liquid`) и для работы с NFT, которые:
1. можно выпускать через голосование DAO;
2. можно сжигать через голосование DAO;
@@ -15,16 +15,18 @@
## Что внутри
- `dao.config.env.example` - шаблон конфига для создания самого DAO.
- `dao.config.env.example` - шаблон конфига для создания mint и DAO в три шага.
- `scripts/01_create_governance_mint.js` - создание governance mint и metadata без депозита в Realm.
- `scripts/02_create_dao_with_governance_nfts.js` - создание `Realm / TokenOwnerRecord / Governance / Treasury` без deposit и без передачи authority.
- `scripts/03_transfer_dao_authorities.js` - передача `mint authority`, `freeze authority`, `realm authority` и `metadata update authority` на 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.
- `scripts/01_check_dao_config.sh` - проверка конфига перед созданием DAO из существующего mint.
- `scripts/04_prepare_second_voter.js` - подготовка второго голосующего.
- `scripts/05_create_empty_nft_template_with_metadata.js` - создание NFT mint-шаблона с metadata и картинкой.
- `scripts/06_propose_vote_mint_nft.js` - proposal/sign/vote на mint NFT.
- `scripts/07_execute_mint_nft.js` - execute mint proposal.
- `scripts/08_propose_vote_burn_nft.js` - proposal/sign/vote на burn NFT.
- `scripts/09_execute_burn_nft.js` - execute burn proposal.
- `docs/FUTURE_FAST_BURN_EXECUTOR.md` - описание будущей программы для быстрого burn одного конкретного `mint`.
## Подтвержденная база, на которой собран комплект
@@ -74,9 +76,9 @@ npm install
- `solana-keygen`
- `node`
## Быстрый сценарий: создать DAO и запустить NFT-flow
## Быстрый сценарий: создать mint, раздать токены, создать DAO и затем передать все права на DAO
### 1. Создать конфиг DAO
### 1. Создать конфиг
```bash
cp create-SHiNE-DAO/dao.config.env.example create-SHiNE-DAO/dao.config.env
@@ -86,29 +88,116 @@ cp create-SHiNE-DAO/dao.config.env.example create-SHiNE-DAO/dao.config.env
- имя DAO;
- путь к keypair создателя;
- имя и символ governance NFT;
- `DAO_GOV_NFT_SUPPLY` (обычно `10`);
- имя и символ governance mint;
- при необходимости `DAO_GOV_MINT_KEYPAIR` для красивого или фиксированного mint address;
- `DAO_GOV_TOKEN_METADATA_URI` и `DAO_GOV_TOKEN_IMAGE_URL`.
### 2. Проверить конфиг DAO
Обычно используются два keypair-файла:
- `DAO_ISSUER_KEYPAIR` - временный кошелёк создателя/оператора;
- `DAO_GOV_MINT_KEYPAIR` - keypair самого mint, если нужен красивый адрес governance mint.
Сгенерировать их можно так:
```bash
solana-keygen new --outfile ./dao-issuer.json
solana-keygen new --outfile ./dao-gov-mint.json
```
Публичные ключи посмотреть так:
```bash
solana-keygen pubkey ./dao-issuer.json
solana-keygen pubkey ./dao-gov-mint.json
```
Практическое правило:
- первый keypair обычно временный, его красивый адрес не важен;
- красивым обычно имеет смысл делать именно `DAO_GOV_MINT_KEYPAIR`, потому что это постоянный публичный адрес governance mint.
### 2. Создать governance mint
```bash
node create-SHiNE-DAO/scripts/01_create_governance_mint.js ./create-SHiNE-DAO/dao.config.env
```
Этот шаг:
1. создаёт mint;
2. прикрепляет metadata на Arweave;
3. оставляет у кошелька создателя:
- `mint authority`
- `freeze authority`
- `metadata update authority`
Актуальные Arweave-ссылки для governance mint сейчас такие:
- image: `https://arweave.net/rPGo-uYIFoLxMBVTGyPr5K6fuF0y9xL-8TlAaZyBJgY`
- metadata: `https://arweave.net/PdupvtRhj_DTBjTLcjD7Z5GSiEcFUf01GHaYMDs6gGw`
### 3. Раздать токены вручную
```bash
spl-token mint <GOVERNANCE_MINT> 1 <WALLET_1>
spl-token mint <GOVERNANCE_MINT> 1 <WALLET_2>
```
После этого можно руками наминтить управляющие токены на нужные кошельки.
На этом этапе токен ещё обычный и переносимый.
### 4. Проверить конфиг DAO
```bash
./create-SHiNE-DAO/scripts/01_check_dao_config.sh ./create-SHiNE-DAO/dao.config.env
```
### 3. Создать DAO
Перед проверкой в `dao.config.env` нужно указать:
- `DAO_GOV_TOKEN_MINT` - уже созданный mint;
- `DAO_REALM_NAME` - новое имя DAO;
- `DAO_ISSUER_KEYPAIR` - кошелёк создателя;
- `DAO_VOTING_TIME_SEC` - по умолчанию `86400` секунд (1 день);
- `DAO_APPROVAL_THRESHOLD_PERCENT`.
### 5. Создать DAO
```bash
node create-SHiNE-DAO/scripts/02_create_dao_with_governance_nfts.js ./create-SHiNE-DAO/dao.config.env
```
Этот шаг:
- создаёт `Realm`;
- создаёт `TokenOwnerRecord` для кошелька создателя без deposit;
- создаёт `Governance` и `Native Treasury`;
- задаёт community token type = `Liquid`;
- не делает deposit токенов;
- не передаёт authority.
После этого из отчета взять:
- `realm`
- `governance`
- `communityMint`
- `tokenOwnerRecord`
### 4. Создать конфиг NFT-flow
### 6. Передать все authority на DAO
```bash
node create-SHiNE-DAO/scripts/03_transfer_dao_authorities.js ./create-SHiNE-DAO/dao.config.env
```
Этот шаг передаёт на DAO:
- `mint authority`
- `freeze authority`
- `realm authority`
- `metadata update authority`
После этого у создателя не должно остаться административных прав на governance mint и Realm.
### 7. Создать конфиг NFT-flow
```bash
cp create-SHiNE-DAO/nft-flow.config.env.example create-SHiNE-DAO/nft-flow.config.env
@@ -123,33 +212,33 @@ cp create-SHiNE-DAO/nft-flow.config.env.example create-SHiNE-DAO/nft-flow.config
- `VOTER2_KEYPAIR`
- metadata URI и картинку для целевого NFT.
### 5. Подготовить второго голосующего
### 8. Подготовить второго голосующего
```bash
node create-SHiNE-DAO/scripts/03_prepare_second_voter.js ./create-SHiNE-DAO/nft-flow.config.env
node create-SHiNE-DAO/scripts/04_prepare_second_voter.js ./create-SHiNE-DAO/nft-flow.config.env
```
### 6. Создать NFT mint-шаблон с metadata
### 9. Создать NFT mint-шаблон с metadata
```bash
node create-SHiNE-DAO/scripts/04_create_empty_nft_template_with_metadata.js ./create-SHiNE-DAO/nft-flow.config.env
node create-SHiNE-DAO/scripts/05_create_empty_nft_template_with_metadata.js ./create-SHiNE-DAO/nft-flow.config.env
```
Скрипт вернет `mint` будущего NFT.
### 7. Поднять proposal на mint NFT
### 10. Поднять proposal на mint NFT
```bash
node create-SHiNE-DAO/scripts/05_propose_vote_mint_nft.js \
node create-SHiNE-DAO/scripts/06_propose_vote_mint_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<TARGET_WALLET> \
<NFT_MINT>
```
### 8. Выполнить mint proposal
### 11. Выполнить mint proposal
```bash
node create-SHiNE-DAO/scripts/06_execute_mint_nft.js \
node create-SHiNE-DAO/scripts/07_execute_mint_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<PROPOSAL> \
<PROPOSAL_TX> \
@@ -157,19 +246,19 @@ node create-SHiNE-DAO/scripts/06_execute_mint_nft.js \
<NFT_MINT>
```
### 9. Поднять proposal на burn NFT
### 12. Поднять proposal на burn NFT
```bash
node create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js \
node create-SHiNE-DAO/scripts/08_propose_vote_burn_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<CURRENT_OWNER_WALLET> \
<NFT_MINT>
```
### 10. Выполнить burn proposal
### 13. Выполнить burn proposal
```bash
node create-SHiNE-DAO/scripts/08_execute_burn_nft.js \
node create-SHiNE-DAO/scripts/09_execute_burn_nft.js \
./create-SHiNE-DAO/nft-flow.config.env \
<PROPOSAL> \
<PROPOSAL_TX> \
@@ -190,12 +279,18 @@ node create-SHiNE-DAO/scripts/08_execute_burn_nft.js \
## Что важно про стартовые governance NFT
На старте governance NFT mint'ятся создателю DAO, а затем депонируются в Realm.
В новом трёхшаговом flow governance mint создается отдельно, токены можно распределить вручную до создания DAO, а затем отдельным шагом DAO получает права на:
Практически это означает:
- `mint authority`
- `freeze authority`
- `realm authority`
- `metadata update authority`
- первоначальный voting power принадлежит создателю DAO;
- затем governance NFT можно дополнительно распределять между другими участниками.
Это сделано специально, чтобы:
1. сначала спокойно распределить токены;
2. затем создать Realm без блокировки стартовых токенов;
3. и только потом окончательно передать контроль DAO.
## Future