create-SHiNE-DAO
Чистый актуальный комплект для создания SHiNE DAO с governance NFT и для работы с NFT, которые:
- можно выпускать через голосование DAO;
- можно сжигать через голосование DAO;
- в будущем можно будет сжигать через отдельную быструю программу-исполнитель только для одного конкретного
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 работает так:
- в proposal вшивается конкретная burn-инструкция;
- в ней зашит конкретный token account, из которого надо сжигать NFT;
- если владелец успеет переложить NFT в другой token account до
execute, этотexecuteможет не пройти.
То есть:
- burn определяется по
mint; - но исполняется из конкретного текущего token account;
- если токен двигают между proposal и execute, нужна более быстрая схема.
Именно для этого отдельно описан future-подход с одноразовым fast-burn executor.
Что нужно заранее
В корне Solana-модуля:
cd shine-solana/shine
npm install
Нужны зависимости:
@solana/web3.js@solana/spl-token@solana/spl-governance@metaplex-foundation/mpl-token-metadata@metaplex-foundation/umi
Также должны быть установлены CLI:
solanasolana-keygennode
Быстрый сценарий: создать DAO и запустить NFT-flow
1. Создать конфиг DAO
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
./create-SHiNE-DAO/scripts/01_check_dao_config.sh ./create-SHiNE-DAO/dao.config.env
3. Создать DAO
node create-SHiNE-DAO/scripts/02_create_dao_with_governance_nfts.js ./create-SHiNE-DAO/dao.config.env
После этого из отчета взять:
realmgovernancecommunityMint
4. Создать конфиг NFT-flow
cp create-SHiNE-DAO/nft-flow.config.env.example create-SHiNE-DAO/nft-flow.config.env
Подставить:
REALMGOVERNANCEGOVERNING_MINTMAIN_KEYPAIRVOTER2_KEYPAIR- metadata URI и картинку для целевого NFT.
5. Подготовить второго голосующего
node create-SHiNE-DAO/scripts/03_prepare_second_voter.js ./create-SHiNE-DAO/nft-flow.config.env
6. Создать NFT mint-шаблон с metadata
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
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
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
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
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.
То есть нужно:
- загрузить JSON metadata на Arweave/IPFS/HTTPS;
- в JSON указать
image; - в конфиге передать
NFT_METADATA_URI; 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.