Статьи

Создание DApps с помощью Ethereum: правила приложения и настройка блокчейна

Это первая часть серии по созданию децентрализованных приложений с использованием блокчейна Ethereum .

Мы собираемся построить 3 вещи:

  1. пользовательский токен
  2. DAO, который использует токены в качестве голосов
  3. прототип веб-интерфейса для взаимодействия со смарт-контрактами

Следуя инструкциям этого курса, вы сможете создать свой собственный токен Ethereum с сопровождающими DAO и приложением или без них.

Что мы будем строить

Проект, который мы строим, называется «Бесконечная история» (TNS). Полный проект можно найти на storydao.bitfalls.com . Его полный код находится на GitHub .

Neverending Story — это веб-приложение с полями ввода (текст и изображение), где пользователи, у которых установлена MetaMask, могут отправлять абзацы текста или изображения в зависимости от определенных условий. (Изображение появляется только один раз каждые 50 абзацев и может быть только URL.)

Полная история отображается рядом с полями ввода. Чем больше записей в истории, тем дороже будет отправить запись. Отправка заявки — это действие, доступное каждому, кто платит взнос, входит в белый список и имеет хотя бы один токен TNS.

Типы действий:

  1. Отправить заявку : требует, чтобы отправитель имел как минимум 1 токен TNS и был в белом списке (см. Ниже). Стоит 0.0001 ether * number of entries in current chapter (см. Раздел «Главы» ниже). Это может быть изображение только один раз на 50 текстовых записей и может быть только URL. В противном случае это текст. Нет кода, только простой текст. В любом случае ограничение размера текстового поля составляет 256 символов.
  2. Передать право собственности [только для владельца] : можно передать право собственности на новый адрес.
  3. Уменьшить плату [только для владельца] : владелец может сделать так, чтобы плата за подачу заявок (см. Раздел «Сборы» ниже) была ниже, без запроса голоса.
  4. Купить токены TNS : отправьте эфир в DAO, чтобы автоматически вернуть обратно пропорциональное количество токенов TNS. Если в DAO недостаточно токенов TNS, вы должны получить их вместо обмена.
  5. Проверка баланса токенов : действие только для чтения, которое проверяет, сколько токенов TNS имеется в DAO.
  6. Белый список : эта функция вызывается автоматически при отправке эфира на адрес DAO. Он отмечает отправителя в массиве белых списков для дальнейшего использования, чтобы люди, приобретающие большое количество TNS, не могли просто распространить их по различным учетным записям.
  7. End Chapter : запускает процесс завершения главы для распределения эфирных дивидендов и сброса вступительного взноса.
  8. Вывод : вызывается, когда заинтересованные стороны хотят отозвать свои дивиденды.
  9. Отзыв владельца [Только владелец] : владелец звонил, чтобы снять комиссионный доход.

Заинтересованные стороны (обладатели токенов TNS) смогут голосовать по предложениям, и любое предложение, получившее больше голосов «ДА», чем «НЕТ», будет одобрено. Количество голосов не имеет значения; соотношение имеет значение. Предложения должны быть открыты для голосования в течение определенного периода времени, в зависимости от типа предложения.

Типы предложений:

  1. Удалить запись : при подтверждении голосованием целевая запись удаляется. Время голосования: 48 часов .
  2. Запись об аварийном удалении [Только владелец] : может быть активирован только владельцем. При подтверждении голосованием целевая запись удаляется. Время голосования: 12 часов .
  3. Аварийное удаление изображения [Только владелец] : применяется только к записям изображения. Может быть вызвано только владельцем. При подтверждении голосованием целевая запись удаляется. Время голосования: 4 часа .

Позже мы можем добавить другие типы предложений, используя тот же метод.

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

Важно: токены пользователя блокируются во время голосования. Это препятствует тому, чтобы держатель TNS кита подавлял каждое активное голосование. Избиратели должны будут распределить свое право голоса по голосам, которые им важны.

Главы

После 1000 записей или трех недель времени, конец главы может быть вызван любым пользователем. Затем DAO будет распространять собранный эфир всем держателям TNS пропорционально их балансу. Держатель не должен быть в белом списке в DAO, чтобы получить дивидендный эфир. Они должны иметь только токены TNS в момент распространения.

Распределение является механизмом извлечения: владельцы должны вызвать функцию изъятия DAO, чтобы получить их эфир. Он не будет вызываться автоматически. Окно вывода составляет 72 часа. 50% невостребованного эфира достается владельцу, а 50% идет в дивиденды следующей главы.

сборы

1% от каждого предоставленного вступительного взноса идет на текущий владелец. Остальное помещается в пул и распределяется среди всех владельцев TNS после окончания каждой главы пропорционально их владениям TNS.

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

Чтобы попасть в белый список, пользователь должен отправить 0,01 эфира в DAO. Все будущие покупки токенов по гораздо более низкой цене. Плата за вход в эфир 0,01 есть, чтобы предотвратить атаки Сибил . Если пользователь отправляет больше 0,01 при первом запуске, 0,01 идет в белый список, а остатки будут использоваться для расчета, сколько TNS получит пользователь. Все токены будут отправлены обратно пользователю за один раз.

Короче говоря, думайте об этом проекте как о приключенческом приключении «краудсорсинг» с участием толпы и цензурой в сообществе. История-ДАО.

Самозагрузка: PoA Private Blockchain

Мы сделаем две процедуры начальной загрузки: эта будет сосредоточена на локальном запуске нашего реального реального блокчейна Ethereum. Он будет использовать Proof of Authority в качестве консенсусного механизма и функционировать так же, как и любой настоящий тестнет Ethereum.

  • Скачайте и установите Virtualbox .
  • Скачайте и установите Vagrant . Если вы не уверены, что такое виртуальные машины, посмотрите этот пост .
  • Загрузите Geth отсюда . Обязательно прокрутите вниз и загрузите «Geth & Tools», а не только «Geth». Если вы используете MacOS, вы также можете использовать Homebrew и установить его с помощью brew install ethereum .
  • Туман можно скачать здесь . Обязательно загрузите «Mist», а не «Ethereum Wallet». Mist — это браузер Ethereum, который может открывать различные DApps. Ethereum Wallet — то же самое, но заблокирован в режиме кошелька, поэтому вы не можете открывать другие приложения с ним. Это сделано для того, чтобы не технические пользователи могли посещать вредоносные DApps.

Если вам интересно, узнайте больше о Мисте и Гете здесь .

Нам нужны VirtualBox и Vagrant, потому что мы будем использовать этот подход для запуска двух виртуальных машин, на которых будут работать наши узлы, имитируя два компьютера с узлом Ethereum.

Далее следуйте инструкциям из этого поста, чтобы настроить приватную цепочку блоков PoA.

Вы получите два работающих узла. Каждый будет майнить по своему адресу. Запишите эти адреса. Мои были:

  • Узел 1: 0x4b61dc81fe382068e459444e8beed1aab9940e3b
  • 0x97e01610f1c4f4367c326ed1e9c41896b4378458 : 0x97e01610f1c4f4367c326ed1e9c41896b4378458

Самозагрузка: Ganache CLI

Второй тип начальной загрузки, к которому мы можем обратиться, и это особенно полезно для тестирования наших контрактов, — это Ganache CLI, ранее известный как Testrpc.

Ganache — это симуляция блокчейна на основе JavaScript, работающая локально. Он запускает блокчейн с нуля каждый раз, когда мы запускаем тесты или перезапускаем наше приложение. Это помогает нам быстро тестировать крайние случаи, но не подходит для долгосрочного тестирования долгосрочных контрактов.

Сначала установите Ganache с помощью npm install -g ganache-cli .

Затем просто запустите ganache-cli и все будет готово. Вы должны увидеть вывод, похожий на этот:

 $ ganache-cli Ganache CLI v6.1.0 (ganache-core: 2.1.0) (node:40584) ExperimentalWarning: The fs.promises API is experimental Available Accounts ================== (0) 0xa0b7139a36ecda5ffda66b9cf97cb9de36e63f2f (1) 0x1f5546797a0ff7efe42ecafaeebd5c932f1a0143 (2) 0x0eacbad38a642db2204574ad01b2b51c82ff7080 (3) 0x77f40a8add69b0e0806c0c506208e5783b89076d (4) 0x1ea41547984ecb949c2b2df311bffe0fdeae4632 (5) 0xa1ad154fd5fd11ebe5410c992e5e97b461c516a2 (6) 0x34da52fd90c015a41bcc383ba3d804f7cebbc84e (7) 0xddd5232788c1f1192d6ac5e82e74ca80945e119e (8) 0x7ebc838124a676eac57f9b6275cd29b1a1c63d4d (9) 0x6feed7913319ffb1b01f767960dd843ea7f96181 Private Keys ================== (0) 62727ad35a288eb34f268cffb1ce620ef3ee80910138aed0e81f24d912fd8a49 (1) a6c76b382c655dcc66dd92428e3e0a0f14b7458162ad8e5cbbbcc64d3362d28c (2) eef05f81fd995329c80d8875d5cb62b81f8f28c39951665b4b15688dc48b4c47 (3) 5ae06fc34da5d47a64a814ee088f7c6f0d1cae3c63d7ad2d6b71b8128bce1764 (4) 8cc43f28054f90243dea496263bd9a45f33db44ea3956ab8d0e8704e15d0787e (5) dcf37436237105ea2f5b1be608b6aa1fe6fb7ca80b8b23ce01ff96930a2a3045 (6) f896b6f0ee11ea272c1567ec1950f7ff610df79193cbb7b668ae0ea11f6ec825 (7) 877b5868dca9a2f5c7d9546647171c9825f1b02922442f18dd4e90d108b9e54d (8) 7f1f3515d71d348a78ae85a755e02df49be4e0b374447b822abe5a6481fe0c58 (9) 20d50b28c8b051406edc6aa61becc3443e430d7d68925a108958f8abecd55ed3 HD Wallet ================== Mnemonic: soda tower talk dynamic swim tattoo edit cook pair bid glance beauty Base HD Path: m/44'/60'/0'/0/{account_index} Listening on localhost:8545 

Здесь Ganache запускает приватный блокчейн практически без времени майнинга и без узлов. Он выполняет транзакции, как только они приходят. Он также генерирует 10 адресов, предварительно загруженных большим количеством виртуального эфира, и выделяет их закрытые ключи, чтобы вы могли импортировать их в различные инструменты, такие как MetaMask , MyEtherWallet или ранее загруженный Mist.

Мы будем использовать комбинацию этого метода и метода выше, в зависимости от наших потребностей, поэтому убедитесь, что вы настроили оба.

Примечание: предпочтительно и альтернативно используйте инструмент пользовательского интерфейса Ganache, чтобы иметь визуальный интерфейс для управления блокчейном Ganache.

Вывод

Используйте это руководство, чтобы подключиться к частной цепочке блоков (любой версии) с помощью таких инструментов, как MetaMask , MyEtherWallet или ранее загруженный Mist. При запуске обе опции начальной загрузки localhost:8545 по умолчанию на localhost:8545 , поэтому процесс подключения к ним идентичен.

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