Скрыть объявление
Зарабатывайте общаясь!!!
За привлечённого друга- 25 UNI
Каждый новичок сразу получает на свой счёт - 25 UNI
Получить лайк за своё сообщение - 0.05 UNI
Награда если кто-то ответил в вашей теме - 0.1 UNI

Основной раздел:
А за каждый ответ в теме - 0.5 UNI
Награда за созданную тему - 1 UNI

Раздел Общение:
А за каждый ответ в теме - 0.2 UNI
Награда за созданную тему - 0.5 UNI

Ethereum на практике. Смарт - контракт. (3 части)

Тема в разделе "Разработка", создана пользователем Prometheus, 23 окт 2017.

  1. Prometheus

    Prometheus Пользователь Проверенный Уважаемый

    Сообщения:
    761
    Рейтинг:
    +284 / -1
    Ethereum на практике часть 1: Как создать свою криптовалюту не написав ни единой строчки кода


    Если вы чувствуете себя «средним пользователем», то значит этот текст для вас. За несколько минут мы сделаем несколько интересных вещей в Эфириуме:
    1) Создадим собственную криптовалюту.
    2) Построим свою собственную демократию.
    3) И сделаем личный Центробанк на блокчейне.

    Мы пропустим «Hello World» на этот раз, но не волнуйтесь – все будет хорошо.

    Установка Ethereum Wallet
    Скачайте последнюю версию Ethereum Wallet

    [​IMG]

    Хватит болтать давайте прикоснемся к Эфириуму! Лучший способ начать это установить кошелек Ethereum Wallet. С его помощью вы сможете передавать Эфир и другие валюты на основе Эфириума, создавать и исполнять смарт-контракты.

    Первое, что нужно сделать после установки – это создать личный аккаунт. Все что для этого понадобится – это хороший пароль. Для того чтобы продолжить, нужно купить немного Эфира. Но не волнуйтесь, большая часть контрактов будет стоить не больше цента. Если вы хотите только поэкспериментировать, то рекомендуем переключиться в режим Testnet. Перейти в меню develop > network > testnet а после этого develop > start mining. Через несколько вы получите достаточно тестового Эфира, для того чтобы поэкспериментировать, так что вы можете остановить майнинг, чтобы не нагружать компьютер.

    Кошелек позволяет добывать Эфир только в тестовой сети. Для того чтобы майнить настоящий Эфир, нужен более серьезный инструмент. Раньше это было очень сложным процессом. Но сейчас у нас появились очень удобные инструменты, которые существенно облегчили добычу Эфира.

    [​IMG]

    AlethOne это очень простая программа для добычи с двумя кнопками. Одна кнопка, чтобы начать добычу с помощью вашей видеокарты. Вторая – чтобы отправить награду в кошелек. Загрузите его отсюда https://github.com/ethereum/webthree-umbrella/releases

    Допустим вы хотите создавать смарт-контракты в настоящей сети, но не можете их добывать. Тогда есть несколько вариантов. Попросить Эфир у друзей – пусть отправят вам немного. Или обменяйте биткоины на Эфир. Если вы любите биткоин обратите внимание на проект http://btcrelay.org/ который позволяет менять биткоины на эфир и обратно без участия третьей стороны.

    В последней версии Ethereum Wallet появилась замечательная кнопочка, которая позволяет за пару секунд самостоятельно, без посторонней помощи, поменять биткоины на Эфир по текущему курсу.

    Создаем свою валюту (token)
    В нашем первом контракте, мы создадим жетоны (token). Жетоны в экосистеме Эфириума это ваша личная расчетная единица, которая может выполнять функции: монет, баллов голосования, золотых сертификатов, долговых обязательств, игровых предметов и т.п. Жетоны всех типов обладают похожими свойствами и имеют одинаковые базовые функции — их можно передавать. Это значит, что жетон, который вы создадите автоматически будет совместим с Ethereum Wallet или другими подобными программами.

    Перейдите на страницу контрактов и нажмите кнопку «deploy new contract»

    [​IMG]

    Текст контракта скопируйте отсюда: http://chriseth.github.io/browser-solidity/?gist=21935dc37c5bfbe92e5a

    Вставьте его вместо имеющегося кода в поле ввода SOLIDITY CONTRACT SOURCE CODE. Если все сделали правильно, то с левой стороны появится выпадающий список SELECT CONTRACT TO DEPLOY. Выбираем там MyToken. Появятся дополнительные настройки для создания своих жетонов. В принципе там можно писать все что пожелаете, но в данном уроке мы заполним их так:

    10000 – это количество жетонов которое мы хотим создать (включая «центы»)

    My DAO Shares – это название для наших жетонов (Например как «доллар»)

    % — это символ для валюты (подобно $)

    2 – это количество знаков после запятой для центов

    Все должно получиться как на картинке:

    [​IMG]

    Прокрутите страницу вниз. Там вы увидите количество эфира которое нужно заплатить для того чтобы контракт начал работать в системе. Не меняйте этот параметр. Нажмите кнопку deploy. Напечатайте свой пароль для подтверждения и подождите несколько секунд пока контракт установится.

    [​IMG]

    Вы будете перенаправлены на главную страницу. Войдите в свой аккаунт и (не позже чем через минуту) увидите, что вы владелец 100.00 только что созданных жетонов. Для того чтобы отправить жетоны друзьям войдите на страницу SEND. Потом выберите валюту которую вы хотите отправить – эфир или только что созданные жетоны. Введите адрес друга, количество жетонов и нажмите кнопку отправить.

    [​IMG]

    После отправки друг не увидит ваши жетоны. Потому что его кошелек еще не знает про этот тип валюты. Ему нужно добавить вашу новую валюту вручную. Перейдите на вкладку контракты, и вы увидите там контракт, который мы только что создали. Щелкните по нему, чтобы посмотреть подробности. Это очень простой, контракт, поэтому подробностей практически нет. Просто нажмите на кнопку «COPY ADDRESS» чтобы скопировать адрес контракта. Отправьте этот адрес вашему другу.

    Для того чтобы друг смог видеть жетоны, которые вы придумали, он должен зайти на страницу контрактов и щелкнуть по кнопке “WATCH TOKEN”. Все что осталось сделать, это добавить во всплывающем окне адрес вашего контракта. Вся информация про вашу валюту подтянется автоматически. Можно перенастроить эти параметры под себя (например, поменять название), но все изменения влияют только на то, как новая валюта будет отображаться в данном кошельке. После всего этого данный кошелек тоже сможет видеть новую валюту и получит возможность отправлять ее кому-нибудь еще.

    [​IMG]

    Вот вы и сделали собственную крипто-валюту! Такие жетоны могут быть полезны для взаиморасчетов в местных сообществах, или для учета рабочих часов или для каких-нибудь программ лояльности. Но можно ли использовать жетоны для чего-то еще более болезного? Можно! (ниже)


    Ethereum на практике часть 2:

    Как создать улучшенную демократию в 100 строчках кода. Смарт - контракт



    Мы сделали жетоны (token). Но какой в этом смысл если они ничего нового не делают? Сейчас мы создадим новый контракт, который будет использовать уже созданные нами жетоны. В нашем контракте мы опишем демократическую организацию на блокчейне. Каждый у кого есть жетоны сможет голосовать за предлагаемые решения.

    Так что давайте вернемся во вкладку CONTRACTS -> Deploy contract и вставим исходный код DAO (Демократической Автономной Организации) в поле Solidity Source. Выбираем из выпадающего списка контракт Democracy и устанавливаем такие параметры:

    Amount = 0. Тут вы можете указать с каким количеством эфира будет стартовать ваша DAO. Но эфир можно добавлять позже, поэтому оставляем ноль. (Примечание переводчика: в последней версии контракта, это поле убрали, что вполне логично).

    В поле sharesAddress вставляем адрес контракта, который описывает наши жетоны. Обратите внимание на круглый разноцветный значок. Если он не совпадает в точности с тем значком, который соответствует вашему первому контракту, значит вы что-то напутали.

    В поле minimumSharesForVoting указываем минимальный кворум, который необходим, чтобы вопрос был принят. Единицы измерения – «центы». То есть если вы при создании валюты вводили, все то что я советовал, тогда с учетом двух знаков после запятой число 500 будет означать 5.00 токенов. Всего токенов у нас 100. Значит для принятия решения хватит 5% голосов.

    minutesForDebating: это минимальное время, которое отводится на голосование по одному вопросу. Напишем маленькое число – 10 минут, потому что мы учимся. Но в реальности лучше установить что-то типа 20000 чтобы сэкономить эфир и дать возможность голосовать в течение 2 недель.

    Ваш контракт должен выглядеть примерно, как на картинке:

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


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

    [​IMG]
    Кликните на этот новый контракт, чтобы открыть его страничку. Если на этом контракте нет эфира, нужно немного добавить, чтобы посмотреть, как работает эта необычная демократия. Если контракт уже имеет какие-то фонды, то нажмите кнопку «show contract info».

    Экран разделен на две части. Слева «читать из контракта», справа «писать в контракт». Чтение из блокчейна не производит никаких вычислений, поэтому это бесплатно, т.е. не требует эфира. sharesTokenAddress это адрес вашей валюты. А в поле numProposals написано, что по данному контракту еще нет предложений. Давайте это изменим.

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

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

    Голосовать за предложение очень легко. Выбираем функцию «vote» из выпадающего списка. Введите номер предложения за которое вы хотите проголосовать. И поставьте флажок Yes, если вы хотите поддержать предложение. Или оставьте пустым если вы хотите высказаться против. Нажмите кнопку EXECUTE, чтобы отправить свой голос.

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

    [​IMG]
    Если все прошло хорошо, то вы сможете увидеть результаты голосования через несколько секунд. Параметр «открыт для голосования» (openToVote) выключится, а итог голосования появится в поле proposalPassed. Количества эфира в фонде данного контракта уменьшится, потому что часть его будет отправлена получателю, который был указан в самом начале.

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

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


    Ethereum на практике часть 3: Как построить свой собственный прозрачный банк на блокчейн.


    Это последний из серии трех постов про то как использовать Ethereum Wallet для создания DAO (Демократических Автономных Организаций). В первой части мы рассмотрели как создать жетоны (token). Во второй части мы сделали демократическую организацию, которая управляется с помощью этих жетонов. Теперь мы замкнем кольцо, и сделаем жетоны, которые контролируются организацией!

    Мы собираемся изменить контракт наших жетонов таким образом, чтобы организация сама могла их «печатать». Сохраните адрес вашей текущей DAO в блокноте и постарайтесь запомнить соответствующую ей иконку. Возьмем этот исходный код http://chriseth.github.io/browser-solidity/?gist=1e8ebf35ff1fd48aca46 и сделаем все как обычно: contracts > deploy new contract > solidity source code > pick contract

    Вы можете заполнить поля как пожелаете. Более того, теперь разрешено использовать смайлы для текстовых полей! Обратите внимание появилось новое поле, которого раньше не было — Central Minter т.е. тот, кто имеет право печатать новые жетоны. Вставляем сюда адрес нашей DAO.

    [​IMG]

    Подождем немного, пока контракт установится. После того как получим хотя бы два подтверждения, перейдем в контракт описывающий нашу Организацию. На счету появился миллион новых монет! А в списке контрактов появился новый контракт — DAO dollar (admin page).

    Выбираем функцию mintToken в выпадающем списке. Указываем какой-нибудь свой адрес, и количество монет, которые мы хотим создать «из воздуха». Нажимаем execute, но не нажимаем отправить (send)! Вы заметите, что высветилось предупреждение о том, что перевод не может быть выполнен. Только ваша Демократическая Организация имеет право печатать новые монеты, а вы пытаетесь делать это собственноручно. Нужно обратиться к Организации, но код вызова будет точно такой же, поэтому просто скопируем его.

    Скопируйте исполнимый код из поля data в блокнот. И еще нам понадобится адрес вашего последнего Mint-контракта.

    [​IMG]

    Теперь возвращаемся в контракт вашей Демократической Организации и создадим новое предложение с такими полями:

    Beneficiary – адрес вашей новой валюты.

    etherAmount – оставляем пустым

    jobDescription – маленькое примечание о том, что мы создаем новые монеты

    transactionBytecode – вставляем тот байт-код, который мы скопировали в блокнот из поля data перед этим.

    [​IMG]

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

    Но это наверное создает дыру в безопасности: как можно голосовать за действие исходный код которого еще не указан? Что помешает выполнить другой код вместо того который был указан вначале? Именно поэтому мы сохраняем хэш байт-кода. Промотайте немного «read from contract» и вы увидите функцию проверки предложения, где каждый желающий может подставить се параметры и проверить совпадают ли они с теми за которые было голосование. Это также гарантирует, что предложение не будет выполнено, если хэш байт-кода не совпадет в точности с тем который был веден перед началом голосования.

    [​IMG]

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

    [​IMG]Почему отправка идет с нулевого адреса (0x0000…)? Потому что противоположная операция, отправка на нулевой адрес, это эффективный способ «сжигать» деньги. И что еще более важно — потому что так было описано в исходном коде контракта. Если пожелаете, то можете изменить этот параметр.

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

    Возможности использования этой Демократической Автономной Организации:
    1) Создание стабильной универсальной криптографической валюты. Управляя количеством монет в обращении участники Организации получают возможность создать актив, стоимость которого не меняется слишком резко.

    2) Выдача сертификатов, подтверждающих право на активы: монеты могут соответствовать реальным предметам или внешним деньгам, которыми владеет Организация. Когда имущество приобретается или продается Центробанк может пропорционально увеличивать количество монет в обороте или сжигать их, чтобы удерживать адекватный курс.

    3) Цифровые активы. Организация может владеть Эфиром или другими, основанными на эфире, криптовалютами.
     
  2. Herro

    Herro Пользователь Проверенный Уважаемый

    Сообщения:
    460
    Рейтинг:
    +107 / -1
    Очень полезно и подробно расписал :) Спасибо

    Очень интересно было почитать :)

    Давай тему еще про создание всяких форков :)
     

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)