Реализация делегирования голосов в мобильном DAO-приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация делегирования голосов в мобильном DAO-приложении
Средний
~2-3 дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация делегирования голосов в мобильном DAO-приложении

Делегирование — механизм ERC20Votes (OpenZeppelin), позволяющий держателю токенов передать голосующую силу другому адресу без передачи самих токенов. Пока пользователь не вызвал delegate(), его токены не учитываются в голосованиях Governor — даже если на счету 10 000 UNI.

Это частый источник путаницы: пользователь купил токены, но не может голосовать. Первый экран DAO-приложения должен решать именно эту проблему.

Проверка статуса делегирования

// iOS — проверка, делегированы ли голоса
func getDelegationStatus(holder: EthereumAddress) async throws -> DelegationStatus {
    let delegatee = try await governanceToken.delegates(account: holder)
    let votingPower = try await governanceToken.getVotes(account: holder)

    if delegatee == .zero {
        return .notDelegated
    } else if delegatee == holder {
        return .selfDelegated(votes: votingPower)
    } else {
        return .delegatedTo(address: delegatee, votes: votingPower)
    }
}

При .notDelegated — показывать баннер «Вы ещё не активировали право голоса». Кнопка «Делегировать» — прямо в баннере.

Flow делегирования

Два варианта: делегировать себе или другому адресу.

Делегирование себе — самый частый случай. Функция delegate(holder) — одна транзакция. После подтверждения пользователь видит свой голосующий вес.

Делегирование другому — выбор адреса (ввод вручную, ENS или из контактов). Показывай ENS-имя если доступно: vitalik.eth понятнее 0xd8dA....

// Android — вызов delegate через web3j
suspend fun delegateVotes(delegatee: String): String {
    val function = Function(
        "delegate",
        listOf(Address(delegatee)),
        emptyList()
    )
    val encodedFunction = FunctionEncoder.encode(function)
    val txHash = web3j.ethSendRawTransaction(
        buildSignedTx(to = tokenContractAddress, data = encodedFunction)
    ).send().transactionHash
    return txHash
}

После делегирования — обновить значок голосующей силы на главном экране DAO.

Отзыв делегирования

delegate(holder) с адресом самого пользователя — переделегирует на себя. Отдельной функции «снять делегирование» нет: нельзя полностью убрать делегата без указания нового. Объясни это в UI: кнопка «Делегировать себе» вместо «Отозвать».

Экран делегатов

Для DAO с публичным списком делегатов (Compound, Uniswap, ENS) — показывай список с голосующей силой, числом делегаторов, историей голосований. Данные через Tally API или собственный субграф The Graph.

Сроки: 2–3 дня: проверка статуса, делегирование на себя/другого, ENS-резолвинг, обновление UI голосующей силы.