TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.48K subscribers
Post #829 930
Контроль доступа и голосование за предложения

Интересную реализацию задумки голосования встретил в конкурсном протоколе Axelar. Опишу кратко.

В общем, там пользователи могут создавать предложения для последующего голосования за него. Если оно набирает необходимый минимум, то можно перенести в очередь на выполнение.

В обычном подходе делают как-то так: создается предложение, из которого хешируются предлагаемое действие и аргументы. Затем пользователи могут голосовать за него в нужной функции. Там предложение достается из памяти контракта, проверяется и в итоге засчитывают голос пользователя.

В Axelar голосование происходит в модификаторе!

P.S. Я сделаю более упрощенное описание процедуры для понимания ее сути.

Итак, мы создали предложение, из него сформировался уникальный хэш через keccak256 и сохранился где-то в контракте.

Далее авторизованным пользователям можно вызывать функцию, типа как:

function execute(
address target,
bytes calldata callData,
uint256 nativeValue
) external payable onlySigners {
...
}

Обратите внимание на модификатор onlySigners, там и происходит все действие!

modifier onlySigners() {
if (!signers.isSigner[msg.sender]) revert NotSigner();

bytes32 topic = keccak256(
msg.data);
Voting storage voting = votingPerTopic[signerEpoch][topic];

if (voting.hasVoted[msg.sender]) revert AlreadyVoted();

voting.hasVoted[msg.sender] = true;

uint256 voteCount = voting.voteCount + 1;

if (voteCount < signers.threshold) {
voting.voteCount = voteCount;
return;
}

voting.voteCount = 0;

uint256 count = signers.accounts.length;

for (uint256 i; i < count; ++i) {
voting.hasVoted[signers.accounts[i]] = false;
}

emit MultisigOperationExecuted(topic);

_;
}

Другими словами, в модификаторе мы проверяем авторизацию пользователя, через аргументы в функции execute мы передаем данные по предложению в msg.data, который позже вытаскивается из памяти контракта.

Далее фиксируется голос пользователя. Если проходного минимума не хватает, то идет return и до выполнения самой функции execute дело не доходит!

Если же голоса набраны, то модификатор делает свое дело и execute срабатывает!

По моему, сделано прикольно! Такого я еще ни разу не видел.

#modifier
  • 👍 10
  • ❤ 1
More from @solidityset
  1. Oct 2, 2026Вторая сложность — как доказать, что установилось именно опубликованное. В первом варианте…
  2. Oct 2, 2026Задача с полуоткрытым кодом На днях, в процессе создания одного приложения, столкнулся с и…
  3. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  4. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  5. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  6. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →