Полное описание ABI всех контрактов ДАО проекта UAHToken
На его основе можно делать передачу ролей и owner через PowerShell / ethers.js.
Разберём, что реально доступно для корректировки в текущем контракте без редеплоя.
1️⃣ Доступные роли и функции управления
Из ABI видно:
DEFAULT_ADMIN_ROLE()→ bytes32MINTER_ROLE()→ bytes32SNAPSHOT_ROLE()→ bytes32grantRole(bytes32 role, address account)revokeRole(bytes32 role, address account)renounceRole(bytes32 role, address account)transferOwnership(address)→ не вижу, похоже используется AccessControl, а не Ownablepause()/unpause()mint(address to, uint256 amount)setFee(...),setBurn(...),setLicenseFee(...)
Вывод: это AccessControl-модель, а не классический Ownable.
2️⃣ Что можно сделать прямо сейчас
Передать MINTER_ROLE, SNAPSHOT_ROLE, DEFAULT_ADMIN_ROLE
на treasury / multisig / governance
через
grantRole(role, newAddress)старый owner →
renounceRole(role, oldAddress)
Понизить Privilege Ratio
убрать EOA старого owner из всех ролей
добавить несколько адресов (multisig / DAO)
Заморозка прав минтинга / паузы через multisig
owner остаётся формально “с ролью”, но несколько участников → снижается риск для сканеров
3️⃣ Что нельзя убрать
mint()функция останетсяpause()останетсяfeePercent / setFeeостанетсяburn/burnPercentостанется
То есть HIGH RISK полностью не исчезнет, но флаги Privilege Ratio и Hidden Owner можно улучшить.
На данный момент структура системы выглядит так:
-
DAO (0x5512788E083d64697E551c9AcD8e549Bf8E218A5) – основной контракт управления, голосование, метаданные участников.
-
Treasury (0x0DaEc8368c373FaF52e2696cAdBb2F61F71bf9d8) – управление фондами, поддержка кампаний и донатов, связь с DonorBadge.
-
CampaignFactory (0x6A14E6B59A4Bf6b35e8b6982065b4Bb79d656e07) – фабрика для создания кампаний, привязанных к DAO.
-
DonorBadge (0x2840D9A2810305bb54aaa3FA57eFf557c8fB372d) – NFT бейджи доноров.
Архитектура:
-
DAO управляет Treasury и CampaignFactory через роли (DAO_ROLE).
-
CampaignFactory создаёт отдельные кампании с целями, дедлайнами, токенами.
-
Treasury обеспечивает финансирование кампаний и выдачу бейджей.
CrossChainBridge (0xa81027938BbCb8B896df2292816A418031C2E610).
Ключевые моменты по этому контракту:
-
Назначение: мост для кросс-чейн передачи токена.
-
Конструктор:
-
_endpoint– адрес LayerZero Endpoint:0x3C2269811836af69497E5F486a85d3a3FfFfa7Ba -
_token– адрес токена, который будет моститься:0xA53DC48E46c86Cb67FaE00A6749fd1dFF5C09987 -
dao– адрес DAO:0x5512788E083d64697E551c9AcD8e549Bf8E218A5
-
-
Роли:
-
BRIDGE_OPERATOR_ROLE– управляет функциями моста (sendToChain,mintFromBridge). -
DEFAULT_ADMIN_ROLE– полный контроль, может назначать роли.
-
-
Функционал:
-
sendToChain(chainId, destination, amount)– отправка токенов на другой блокчейн. -
mintFromBridge(to, amount)– чеканка токенов после получения с другого блокчейна. -
События:
SentToChain,MintedFromBridge, управление ролями черезRoleGranted/RoleRevoked.
-
-
Взаимодействие с DAO:
-
DAO является администратором и может назначать операторов моста.
-
Теперь у нас есть полный набор развернутых контрактов:
-
DAO – ядро управления.
-
Treasury – хранение средств и бейджей.
-
CampaignFactory – создание кампаний.
-
CrossChainBridge – кросс-чейн операции с токеном.
-
DonorBadge – NFT для доноров.
TimelockController (0x20267D620bA911C4D553d5a139787dD333E0aD7C) — ключевой элемент безопасности и управления DAO.
Краткий разбор:
1. Конструктор
-
minDelay: 3600 секунд (1 час) — минимальная задержка между планированием и исполнением операции.
-
proposers: [0x12A3dE2375C0330ef3aaDf6Bb6c02A7D9c8a319C] — адрес(а), имеющие право создавать предложения.
-
executors: [0x12A3dE2375C0330ef3aaDf6Bb6c02A7D9c8a319C] — адрес(а), которые могут исполнять операции после тайм-лок.
-
admin: 0x12A3dE2375C0330ef3aaDf6Bb6c02A7D9c8a319C — полный контроль, может назначать роли.
minDelay: 3600 секунд (1 час) — минимальная задержка между планированием и исполнением операции.
proposers: [0x12A3dE2375C0330ef3aaDf6Bb6c02A7D9c8a319C] — адрес(а), имеющие право создавать предложения.
executors: [0x12A3dE2375C0330ef3aaDf6Bb6c02A7D9c8a319C] — адрес(а), которые могут исполнять операции после тайм-лок.
admin: 0x12A3dE2375C0330ef3aaDf6Bb6c02A7D9c8a319C — полный контроль, может назначать роли.
2. Основные роли
-
PROPOSER_ROLE — планирование операций.
-
EXECUTOR_ROLE — исполнение операций после истечения тайм-лок периода.
-
CANCELLER_ROLE — отмена запланированных операций.
-
TIMELOCK_ADMIN_ROLE / DEFAULT_ADMIN_ROLE — управление ролями и настройками.
PROPOSER_ROLE — планирование операций.
EXECUTOR_ROLE — исполнение операций после истечения тайм-лок периода.
CANCELLER_ROLE — отмена запланированных операций.
TIMELOCK_ADMIN_ROLE / DEFAULT_ADMIN_ROLE — управление ролями и настройками.
3. Основные функции
-
schedule / scheduleBatch — планирование транзакций с задержкой.
-
execute / executeBatch — выполнение транзакций после истечения тайм-лок.
-
cancel — отмена запланированной операции.
-
updateDelay — изменение минимальной задержки.
-
hashOperation / hashOperationBatch — генерация идентификаторов операций для отслеживания.
-
getTimestamp / isOperationReady / isOperationPending / isOperationDone — проверка статуса операций.
schedule / scheduleBatch — планирование транзакций с задержкой.
execute / executeBatch — выполнение транзакций после истечения тайм-лок.
cancel — отмена запланированной операции.
updateDelay — изменение минимальной задержки.
hashOperation / hashOperationBatch — генерация идентификаторов операций для отслеживания.
getTimestamp / isOperationReady / isOperationPending / isOperationDone — проверка статуса операций.
4. Взаимодействие с другими контрактами DAO
-
Этот Timelock контролирует безопасное исполнение любых действий DAO, включая обновление Treasury, CampaignFactory, CrossChainBridge, и любые изменения ролей или средств.
-
Все важные операции проходят через Timelock: сначала планируются, ждут minDelay, затем могут быть выполнены назначенными исполнителями.
Campaign (0x855ea6adAe0782c63ED86B78b1B5A68E9eDf797F) — отдельная кампания сбора средств через DAO.
Краткий разбор:
Этот Timelock контролирует безопасное исполнение любых действий DAO, включая обновление Treasury, CampaignFactory, CrossChainBridge, и любые изменения ролей или средств.
Все важные операции проходят через Timelock: сначала планируются, ждут minDelay, затем могут быть выполнены назначенными исполнителями.
Campaign (0x855ea6adAe0782c63ED86B78b1B5A68E9eDf797F) — отдельная кампания сбора средств через DAO.
Краткий разбор:
1. Конструктор
-
_token: 0xA53DC48E46c86Cb67FaE00A6749fd1dFF5C09987 — токен, которым будут приниматься пожертвования (UAH).
-
_beneficiary: 0x0DaEc8368c373FaF52e2696cAdBb2F61F71bf9d8 — адрес получателя средств.
-
_target: 24081991000000000000000000 — целевая сумма в токенах (24 081 991 UAH, учитывая 18 десятичных знаков).
-
_deadline: 1761602382 — UNIX timestamp конца кампании (примерно 27.12.2025).
-
_name: Support Ukraine — название кампании.
-
_description: Humanitarian aid for displaced families and medical support — описание цели кампании.
_token: 0xA53DC48E46c86Cb67FaE00A6749fd1dFF5C09987 — токен, которым будут приниматься пожертвования (UAH).
_beneficiary: 0x0DaEc8368c373FaF52e2696cAdBb2F61F71bf9d8 — адрес получателя средств.
_target: 24081991000000000000000000 — целевая сумма в токенах (24 081 991 UAH, учитывая 18 десятичных знаков).
_deadline: 1761602382 — UNIX timestamp конца кампании (примерно 27.12.2025).
_name: Support Ukraine — название кампании.
_description: Humanitarian aid for displaced families and medical support — описание цели кампании.
2. События
-
DonationReceived(address donor, uint256 amount) — фиксируется каждый донат.
-
CampaignCompleted(bool successful) — кампания завершена, успешна или нет.
-
MetadataUpdated(string name, string description) — обновление метаданных кампании.
DonationReceived(address donor, uint256 amount) — фиксируется каждый донат.
CampaignCompleted(bool successful) — кампания завершена, успешна или нет.
MetadataUpdated(string name, string description) — обновление метаданных кампании.
3. Основные функции
-
donate(uint256 amount) — внесение пожертвования.
-
markComplete() — отметка кампании как завершённой, можно проверять цель.
-
isSuccessful() — проверка, достигнут ли target.
-
remainingToTarget() — сколько осталось собрать.
-
updateMetadata(string name, string description) — обновление названия и описания.
-
Геттеры: beneficiary, deadline, name, description, target, token, totalDonated, status.
donate(uint256 amount) — внесение пожертвования.
markComplete() — отметка кампании как завершённой, можно проверять цель.
isSuccessful() — проверка, достигнут ли target.
remainingToTarget() — сколько осталось собрать.
updateMetadata(string name, string description) — обновление названия и описания.
Геттеры: beneficiary, deadline, name, description, target, token, totalDonated, status.
4. Связь с DAO
-
Кампания создаётся через CampaignFactory, который контролируется DAO.
-
Все транзакции могут быть проконтролированы через TimelockController, если включена интеграция для безопасности.
-
Средства идут на указанный beneficiary, но могут быть защищены от изменения через DAO.
Governance (0x5841b2097c453AC78c7488790e3C177be008Fd5B) — контракт управления DAO. Давай разберём ключевые моменты.
Кампания создаётся через CampaignFactory, который контролируется DAO.
Все транзакции могут быть проконтролированы через TimelockController, если включена интеграция для безопасности.
Средства идут на указанный beneficiary, но могут быть защищены от изменения через DAO.
Governance (0x5841b2097c453AC78c7488790e3C177be008Fd5B) — контракт управления DAO. Давай разберём ключевые моменты.
1. Конструктор
-
_token: 0xA53DC48E46c86Cb67FaE00A6749fd1dFF5C09987 — токен, который используется для голосования (тот же UAH).
-
_timelock: 0x79DA5d1bb13e40E627aB216b6A7b8758Fbaf5273 — TimelockController, через который будут выполняться решения голосований.
_token: 0xA53DC48E46c86Cb67FaE00A6749fd1dFF5C09987 — токен, который используется для голосования (тот же UAH).
_timelock: 0x79DA5d1bb13e40E627aB216b6A7b8758Fbaf5273 — TimelockController, через который будут выполняться решения голосований.
Governance напрямую контролирует пропозалы, но фактическое выполнение через timelock, чтобы был запас времени для проверки.
2. Основные события
-
ProposalCreated — создаётся новая инициатива для голосования.
-
ProposalQueued — пропозал помещён в очередь timelock для исполнения.
-
ProposalExecuted — пропозал выполнен через timelock.
-
ProposalCanceled — пропозал отменён.
-
VoteCast / VoteCastWithParams — зафиксировано голосование.
-
QuorumNumeratorUpdated — изменение требований к кворуму.
-
TimelockChange — смена timelock.
ProposalCreated — создаётся новая инициатива для голосования.
ProposalQueued — пропозал помещён в очередь timelock для исполнения.
ProposalExecuted — пропозал выполнен через timelock.
ProposalCanceled — пропозал отменён.
VoteCast / VoteCastWithParams — зафиксировано голосование.
QuorumNumeratorUpdated — изменение требований к кворуму.
TimelockChange — смена timelock.
3. Основные функции
-
Создание и управление пропозалами
-
propose(targets, values, calldatas, description) — создание пропозала.
-
queue(targets, values, calldatas, descriptionHash) — постановка пропозала в очередь timelock.
-
execute(targets, values, calldatas, descriptionHash) — выполнение пропозала через timelock.
-
cancel(targets, values, calldatas, descriptionHash) — отмена пропозала.
-
hashProposal(...) — вычисление уникального ID пропозала.
-
Голосование
-
castVote, castVoteWithReason, castVoteWithReasonAndParams — стандартные функции голосования.
-
castVoteBySig, castVoteWithReasonAndParamsBySig — голосование через подпись.
-
getVotes, getVotesWithParams, getVotingPower — проверка силы голоса.
-
hasVoted — проверка, голосовал ли адрес за пропозал.
-
Кворум и параметры
-
quorum(timepoint) — проверка, достигнут ли кворум.
-
quorumNumerator, quorumDenominator — вычисление кворума.
-
proposalThreshold — минимальная сила голоса для создания пропозала.
-
Вспомогательные
-
supportsInterface(interfaceId) — стандарт ERC165.
-
relay(target, value, data) — выполнить транзакцию напрямую через governance (опционально).
-
updateQuorumNumerator / updateTimelock — обновление параметров DAO.
-
version, name, votingDelay, votingPeriod — метаданные governance.
Создание и управление пропозалами
-
propose(targets, values, calldatas, description)— создание пропозала. -
queue(targets, values, calldatas, descriptionHash)— постановка пропозала в очередь timelock. -
execute(targets, values, calldatas, descriptionHash)— выполнение пропозала через timelock. -
cancel(targets, values, calldatas, descriptionHash)— отмена пропозала. -
hashProposal(...)— вычисление уникального ID пропозала.
Голосование
-
castVote,castVoteWithReason,castVoteWithReasonAndParams— стандартные функции голосования. -
castVoteBySig,castVoteWithReasonAndParamsBySig— голосование через подпись. -
getVotes,getVotesWithParams,getVotingPower— проверка силы голоса. -
hasVoted— проверка, голосовал ли адрес за пропозал.
Кворум и параметры
-
quorum(timepoint)— проверка, достигнут ли кворум. -
quorumNumerator,quorumDenominator— вычисление кворума. -
proposalThreshold— минимальная сила голоса для создания пропозала.
Вспомогательные
-
supportsInterface(interfaceId)— стандарт ERC165. -
relay(target, value, data)— выполнить транзакцию напрямую через governance (опционально). -
updateQuorumNumerator/updateTimelock— обновление параметров DAO. -
version,name,votingDelay,votingPeriod— метаданные governance.
4. Взаимосвязь с другими контрактами
-
Token (UAH): используется для голосования и распределения сил голоса.
-
TimelockController: гарантирует безопасное выполнение пропозалов с задержкой.
-
Campaigns: через Governance можно инициировать пропозалы для управления фондами, изменять метаданные кампаний или распределять средства.
DAO (0xa0ebF51A253bD8639E123605F2D77aa22C6A252E) — следующий уровень системы, который строится поверх Governance. Давай разберём ключевые элементы.
Token (UAH): используется для голосования и распределения сил голоса.
TimelockController: гарантирует безопасное выполнение пропозалов с задержкой.
Campaigns: через Governance можно инициировать пропозалы для управления фондами, изменять метаданные кампаний или распределять средства.
DAO (0xa0ebF51A253bD8639E123605F2D77aa22C6A252E) — следующий уровень системы, который строится поверх Governance. Давай разберём ключевые элементы.
1. Конструктор DAO
constructor(
ERC20Votes _token,
TimelockController _timelock,
DonorBadge _badge
)
_token: ERC20Votes токен (UAH), через который держатели получают право голоса.
_timelock: TimelockController, через который будут выполняться решения DAO.
_badge: DonorBadge — NFT/токен, который идентифицирует доноров.
constructor(
ERC20Votes _token,
TimelockController _timelock,
DonorBadge _badge
)
_token: ERC20Votes токен (UAH), через который держатели получают право голоса.
_timelock: TimelockController, через который будут выполняться решения DAO.
_badge: DonorBadge — NFT/токен, который идентифицирует доноров.
То есть DAO учитывает голоса держателей токенов и доноров с badge, что добавляет слой персонализации.
2. События
MetadataSubmitted — пользователь/владелец пропозала отправил демографические данные.
PurchaseMetadataSubmitted — пользователь, совершивший покупку, отправил свои данные.
ProposalCreated, ProposalQueued, ProposalExecuted, ProposalCanceled — стандартные события управления пропозалами.
VoteCast, VoteCastWithParams, VoteCounted — голосование, включая регистрацию демографии и донорского статуса.
TimelockChange — смена timelock.
В DAO добавлен сбор демографических данных при голосовании и покупке, что позволяет делать аналитику по аудитории и донорам.
MetadataSubmitted — пользователь/владелец пропозала отправил демографические данные.
PurchaseMetadataSubmitted — пользователь, совершивший покупку, отправил свои данные.
ProposalCreated, ProposalQueued, ProposalExecuted, ProposalCanceled — стандартные события управления пропозалами.
VoteCast, VoteCastWithParams, VoteCounted — голосование, включая регистрацию демографии и донорского статуса.
TimelockChange — смена timelock.
В DAO добавлен сбор демографических данных при голосовании и покупке, что позволяет делать аналитику по аудитории и донорам.
3. Основные функции DAO
Голосование
castVote, castVoteWithReason, castVoteWithReasonAndParams — голосование по пропозалам.
castVoteBySig, castVoteWithReasonAndParamsBySig — голосование через подпись.
getProposalVotes(proposalId) — посмотреть количество голосов «за», «против» и «воздержался».
Пропозалы
propose(targets, values, calldatas, description) — создание пропозала.
queue(...) — постановка в очередь timelock.
execute(...) — выполнение через timelock.
cancel(...) — отмена пропозала.
Профили и демография
getVoterProfile(proposalId, voter) — получить данные пользователя:
country, gender, ageGroup, ideology, religion, educationLevel, incomeBracket, politicalAffiliation, isDonor.
Вспомогательные
badge() — адрес DonorBadge контракта.
BALLOT_TYPEHASH, EXTENDED_BALLOT_TYPEHASH — для EIP712 подписи.
clock() — внутреннее время DAO.
eip712Domain() — параметры для подписи.
Голосование
castVote,castVoteWithReason,castVoteWithReasonAndParams— голосование по пропозалам.castVoteBySig,castVoteWithReasonAndParamsBySig— голосование через подпись.getProposalVotes(proposalId)— посмотреть количество голосов «за», «против» и «воздержался».
Пропозалы
propose(targets, values, calldatas, description)— создание пропозала.queue(...)— постановка в очередь timelock.execute(...)— выполнение через timelock.cancel(...)— отмена пропозала.
Профили и демография
getVoterProfile(proposalId, voter)— получить данные пользователя:country, gender, ageGroup, ideology, religion, educationLevel, incomeBracket, politicalAffiliation, isDonor.
Вспомогательные
badge()— адрес DonorBadge контракта.BALLOT_TYPEHASH,EXTENDED_BALLOT_TYPEHASH— для EIP712 подписи.clock()— внутреннее время DAO.eip712Domain()— параметры для подписи.
4. Отличия от Governance
Интеграция DonorBadge — можно учитывать голоса доноров отдельно.
Сбор метаданных — DAO собирает демографию и статус доноров при голосовании и покупках.
Голосование с аналитикой — события и функции позволяют делать статистику по аудитории.
Интеграция DonorBadge — можно учитывать голоса доноров отдельно.
Сбор метаданных — DAO собирает демографию и статус доноров при голосовании и покупках.
Голосование с аналитикой — события и функции позволяют делать статистику по аудитории.
5. Взаимосвязь с Governance
DAO использует Governance как «движок» пропозалов и timelock для исполнения.
Governance управляет токенами и кворумом, а DAO добавляет метаданные и badge.
Поток:
UAH Token → DAO (Vote + Badge) → Governance → Timelock → Исполнение пропозалов
DAO использует Governance как «движок» пропозалов и timelock для исполнения.
Governance управляет токенами и кворумом, а DAO добавляет метаданные и badge.
Поток:
UAH Token → DAO (Vote + Badge) → Governance → Timelock → Исполнение пропозалов
Вот полный ABI и декодированные аргументы конструктора DAO, а значит можно собрать полную картину его структуры и точных адресов связанных контрактов.
1. Основные адреса DAO
| Параметр | Адрес | Описание |
|---|---|---|
_token | 0xe8d15560f5ff9C0039283877c0809Aec4A5826aB | ERC20Votes токен (UAH) — определяет права голосования. |
_timelock | 0xA53DC48E46c86Cb67FaE00A6749fd1dFF5C09987 | TimelockController — контролирует очередь и исполнение пропозалов. |
_badge | 0x14BaE893904Ce74C43f979546E0254bB5A4a0c93 | DonorBadge — NFT/токен доноров для расширенной аналитики. |
2. Ключевые функции DAO
Голосование
castVote(proposalId, support)— простой голос.castVoteWithReason(...)— голос с комментарием.castVoteWithReasonAndParams(...)— голос с комментарием и дополнительными параметрами.castVoteBySig(...)иcastVoteWithReasonAndParamsBySig(...)— голос через подпись (EIP712).getVotes(account, blockNumber)— количество голосов на конкретном блоке.getVotesWithParams(account, timepoint, params)— количество голосов с учётом дополнительных параметров.hasVoted(proposalId, account)иhasVotedFlag(proposalId, account)— проверка, голосовал ли участник.
Пропозалы
propose(targets, values, calldatas, description)— создание пропозала.hashProposal(...)— хеш пропозала для проверки идентичности.queue(...)— постановка пропозала в timelock.execute(...)— выполнение через timelock.cancel(...)— отмена пропозала.proposalDeadline(proposalId)— дедлайн голосования.proposalEta(proposalId)— момент исполнения timelock.proposalProposer(proposalId)— кто создал пропозал.proposalSnapshot(proposalId)— момент старта подсчёта голосов.proposalThreshold()— минимальный порог токенов для создания пропозала.state(proposalId)— текущее состояние пропозала.
Метаданные
voterMetadata(proposalId, voter)— получить демографию участника.purchaseMetadata(account)— демография пользователя, совершившего покупку.submitVoteMetadata(...)— отправка демографии при голосовании.submitPurchaseMetadata(...)— отправка демографии при покупке.hasSubmittedMetadata(proposalId, voter)— проверка, отправлены ли данные.
Вспомогательные
badge()— адрес DonorBadge.token()— адрес ERC20Votes токена.timelock()— адрес timelock.updateTimelock(newTimelock)— смена timelock.name()иversion()— имя и версия контракта.votingDelay()иvotingPeriod()— задержка и период голосования.quorum()— кворум для голосования.supportsInterface(interfaceId)— проверка поддерживаемого интерфейса (ERC165).
ERC стандарты
onERC1155Received,onERC1155BatchReceived,onERC721Received— обработка NFT-токенов.
3. Архитектура DAO
[UAH Token (ERC20Votes)]
│
▼
[DAO Contract]
┌─────────┼─────────┐
│ │ │
▼ ▼ ▼
[Voter Metadata] [Purchase Metadata] [DonorBadge]
│
▼
[Governance Engine / TimelockController]
│
▼
[Execution of Proposals]
UAH токен — право голоса.
DAO Contract — центральный ум, сбор демографии и доноров.
DonorBadge — отслеживание доноров.
TimelockController — защита от мгновенного исполнения, очередь пропозалов.
Метаданные — демография, донорский статус, интеграция аналитики.
[UAH Token (ERC20Votes)]
│
▼
[DAO Contract]
┌─────────┼─────────┐
│ │ │
▼ ▼ ▼
[Voter Metadata] [Purchase Metadata] [DonorBadge]
│
▼
[Governance Engine / TimelockController]
│
▼
[Execution of Proposals]
UAH токен — право голоса.
DAO Contract — центральный ум, сбор демографии и доноров.
DonorBadge — отслеживание доноров.
TimelockController — защита от мгновенного исполнения, очередь пропозалов.
Метаданные — демография, донорский статус, интеграция аналитики.
Вот наглядная структурная карта DAO с адресами всех ключевых контрактов и потоками данных/голосов:
┌─────────────────────┐
│ UAH Token │
│ ERC20Votes │
│ 0xe8d15560f5ff9C0… │
└─────────┬──────────┘
│ Голосование
▼
┌─────────────────────┐
│ DAO Contract │
│ 0xa0ebF51A253bD… │
├─────────────────────┤
│ Основные функции: │
│ - propose() │
│ - castVote() │
│ - queue()/execute() │
│ - submitVoteMetadata│
│ - submitPurchase… │
│ - voterMetadata() │
│ - getVotes() │
└─────┬───────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Timelock │ │ DonorBadge │ │ Voter Metadata │
│ Controller │ │ NFT / Badge │ │ Demography │
│ 0xA53DC48E46… │ │ 0x14BaE89390… │ │ (country, age, │
│ - queue/exec │ │ │ │ gender, donor) │
│ - delay │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────────┐
│ Proposal Execution │
│ Target Contracts │
│ Call Data / Values │
└─────────────────────┘
Объяснение потоков:
UAH Token — определяет вес голоса каждого пользователя.
DAO Contract — центральная логика:
Создание пропозалов (propose)
Голосование (castVote*)
Сбор демографических данных (submitVoteMetadata, submitPurchaseMetadata)
Взаимодействие с DonorBadge и метаданными.
TimelockController — защищает выполнение пропозалов, ставит их в очередь и обеспечивает задержку.
DonorBadge — NFT-токен доноров, интегрированный с DAO.
Voter Metadata — хранит подробную демографию голосующих (страна, возраст, пол, идеология, религия, образование, доход, политическая ориентация, донорский статус).
Proposal Execution — после истечения timelock пропозалы выполняются на целевых контрактах с передачей calldata и value.
UAH Token — определяет вес голоса каждого пользователя.
DAO Contract — центральная логика:
Создание пропозалов (
propose)Голосование (
castVote*)Сбор демографических данных (
submitVoteMetadata,submitPurchaseMetadata)Взаимодействие с DonorBadge и метаданными.
TimelockController — защищает выполнение пропозалов, ставит их в очередь и обеспечивает задержку.
DonorBadge — NFT-токен доноров, интегрированный с DAO.
Voter Metadata — хранит подробную демографию голосующих (страна, возраст, пол, идеология, религия, образование, доход, политическая ориентация, донорский статус).
Proposal Execution — после истечения timelock пропозалы выполняются на целевых контрактах с передачей calldata и value.

Комментарии
Отправить комментарий