Ethereum на практике часть 2: Как создать улучшенную демократию в 100 строчках кода


Это второй пост из серии статей о том, как создавать смарт-контракты, не имея опыта программирования. Скачайте последнюю версию Ethereum Wallet, прочитайте первую часть, и начнем веселиться!

Мы сделали жетоны (token). Но какой в этом смысл если они ничего нового не делают? Сейчас мы создадим новый контракт, который будет использовать уже созданные нами жетоны. В нашем контракте мы опишем демократическую организацию на блокчейне. Каждый у кого есть жетоны сможет голосовать за предлагаемые решения.
Так что давайте вернемся во вкладку CONTRACTS -> Deploy contract и вставим исходный код DAO (Демократической Автономной Организации) в поле Solidity Source. Выбираем из выпадающего списка контракт Democracy и устанавливаем такие параметры:
Amount = 0. Тут вы можете указать с каким количеством эфира будет стартовать ваша DAO. Но эфир можно добавлять позже, поэтому оставляем ноль. (Примечание переводчика: в последней версии контракта, это поле убрали, что вполне логично)
В поле sharesAddress вставляем адрес контракта, который описывает наши жетоны. Обратите внимание на круглый разноцветный значок. Если он не совпадает в точности с тем значком, который соответствует вашему первому контракту, значит вы что-то напутали.
В поле minimumSharesForVoting указываем минимальный кворум, который необходим, чтобы вопрос был принят. Единицы измерения – «центы». То есть если вы при создании валюты вводили, все то что я советовал, тогда с учетом двух знаков после запятой число 500 будет означать 5.00 токенов. Всего токенов у нас 100. Значит для принятия решения хватит 5% голосов.
minutesForDebating: это минимальное время, которое отводится на голосование по одному вопросу. Напишем маленькое число – 10 минут, потому что мы учимся. Но в реальности лучше установить что-то типа 20000 чтобы сэкономить эфир и дать возможность голосовать в течение 2 недель.
Ваш контракт должен выглядеть примерно, как на картинке:


После публикации вы увидите на основной панели как ваш контракт постепенно устанавливается:


Ссылка на новый контракт отобразится во вкладке CONTRACTS. Если его там нет (когда вы устанавливаете чужой контракт) нужно добавить его вручную. Вам нужно добавить адрес контракта и его JSON-интерфейс. JSON-интерфейс это такая строка, которая объясняет кошельку как взаимодействовать с кодом. Имя можете указать любое. Нажимаем Ok.


Кликните на этот новый контракт, чтобы открыть его страничку. Если на этом контракте нет эфира, нужно немного добавить, чтобы посмотреть, как работает эта необычная демократия. Если контракт уже имеет какие-то фонды, то нажмите кнопку «show contract info».
Экран разделен на две части. Слева «читать из контракта», справа «писать в контракт». Чтение из блокчейна не производит никаких вычислений, поэтому это бесплатно, т.е. не требует эфира. sharesTokenAddress это адрес вашей валюты. А в поле numProposals написано, что по данному контракту еще нет предложений. Давайте это изменим.
С правой стороны экрана перечислены те функции, которые производят вычисления и вносят изменения в блокчейн. Поэтому они платные, то есть требуют Эфир. Выберите из выпадающего списка newProposal, чтобы создать новое предложение.


В поле beneficiary укажите адрес человека, которому вы хотели бы перевести деньги из общего фонда. Количество Эфира который вы хотите перевести укажите в поле etherAmount. Это должно быть целое число. А чуть ниже в поле JobDescription можно написать причину, по которой вы хотите совершить этот перевод. Поле transactionByteCode пока что оставляем пустым. Нажмите выполнить и введите свой пароль. Через несколько секунд количество предложений (numProposals) по контракту увеличится на единицу. И само предложение отобразится слева. Предложения нумеруются, начиная с нуля. Поэтому у нашего первого предложения (proposal) будет номер – 0. Если предложений будет много, вы можете посмотреть любое из них, когда введете порядковый номер в поле proposal.
Голосовать за предложение очень легко. Выбираем функцию «vote» из выпадающего списка. Введите номер предложения за которое вы хотите проголосовать. И поставьте флажок Yes, если вы хотите поддержать предложение. Или оставьте пустым если вы хотите высказаться против. Нажмите кнопку EXECUTE, чтобы отправить свой голос.


Когда минимальное количество голосов набрано, можно выполнить контракт (executeProposal). Если в предложении мы просто собирались отправить эфир, то поле transactionBytecode снова оставляем пустым. После того как вы нажали кнопку EXECUTE, не торопитесь вводить пароль. Обратите внимание на поле «estimated fee consumption». Если там красными буквами выводится предупреждение, это значит, что функция не будет выполнена, но плата за попытку выполнения все равно будет взята. Такое может происходить по разным причинам. Но в контексте нашего контракта, скорее всего речь идет о попытке выполнить предложение до того, как срок сбора подписей закончился. Из соображений безопасности любая попытка выполнить некорректный контракт пресекается, но комиссия за попытку выполнения все равно взымается.


Если все прошло хорошо, то вы сможете увидеть результаты голосования через несколько секунд. Параметр «открыт для голосования» (openToVote) выключится, а итог голосования появится в поле proposalPassed. Количества эфира в фонде данного контракта уменьшится, потому что часть его будет отправлена получателю, который был указан в самом начале.
Теперь мы можем сказать, что создали демократическую автономную организацию, которая управляется с помощью блокчейна и использует исключительно цифровые акции-жетоны. Такая организация может иметь очень большое влияние в реальном мире. А теперь обратите внимание на удивительную и важную вещь – эта организация не находится под вашим контролем, хотя вы ее и создали. Контракт без вашего участия, теперь будет выполняться по правилам, которые вы в него заложили. Навечно. Вы не можете подкупить его, не можете исказить. Правила постоянны независимо от того, о какой сумме идет речь 0.01 или 1000000 эфиров.
Неужели может быть что-то лучше этого? На само деле, может. В следующий раз мы рассмотрим, как вы можете использовать transactionBytecode чтобы не просто пересылать эфир, а делать более сложные вещи. И мы изменим код жетонов, для того чтобы наша демократическая организация смогла контролировать их оборот

4 декабря 2015


Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s