# 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 \ \ ``` ### 8. Выполнить mint proposal ```bash node create-SHiNE-DAO/scripts/06_execute_mint_nft.js \ ./create-SHiNE-DAO/nft-flow.config.env \ \ \ \ ``` ### 9. Поднять proposal на burn NFT ```bash node create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js \ ./create-SHiNE-DAO/nft-flow.config.env \ \ ``` ### 10. Выполнить burn proposal ```bash node create-SHiNE-DAO/scripts/08_execute_burn_nft.js \ ./create-SHiNE-DAO/nft-flow.config.env \ \ \ \ ``` ## Что важно про картинку 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`.