Files
SHiNE-server/shine-solana/shine/create-SHiNE-DAO/README.md
T

7.1 KiB
Raw Blame History

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-модуля:

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

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

После этого из отчета взять:

  • realm
  • governance
  • communityMint

4. Создать конфиг NFT-flow

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. Подготовить второго голосующего

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.

То есть нужно:

  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.