Новости экономики и финансов. Курсы валют, ситуация на биржах, акции, котировки, аналитика: 💫 💫 💫 💫 💫 💫 читайте на сайте

Разработка на Блокчейне Ethereum

Смарт контракты Ethereum: пишем простой контракт для ICO

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

Для экономии времени я написал контракт заранее. Давайте разберем его по шагам.

Смартконтракт является программой написанной на языке программирования. В нашем случае на языке Solidity. Для разработки простых контрактов я использую онлайн редактор и компилятор Remix.

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

Сразу после идет строка, которая указывает, какую версию компиллятора следует использовать. Если этой строки не будет, то смартконтракт не скомпилируется.

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

Прежде всего следует понимать, что после загрузки смартконтракта в виртуальную машину Ethereum вы будете взаимодействовать с ним на общих основаниях, как и все остальные пользователи. Логично, что мы, как команда проекта, хотели бы находиться в привилегированных условиях, которые должны как минимум выражаться в том, что контракт должен сформировать именно на командные токены и конечно же отдал именно нам собранный эфир. Для этого контракт должен знать своего владельца и именно за это отвечает контракт «owned».

Контракт «owned» содержит лишь одно публичное поле «owner», значение которого инициализируется в конструкторе значением поля «sender» глобальной структуры «msg», таким образом, изначально владельцем контракта становится тот, кто осуществил его деплой.

Логично предусмотреть возможность смены владельца на случай, если наш private key будет скомпрометирован, для этого предусмотрена функция «changeOwner», которая получает в качестве параметра адрес нового владельца. Следует обратить на модификатор «onlyOwner», который определен внутри этого же смартконтракта. Модификаторы представляют собой очень удобную конструкцию, позволяющую сгруппировать и присвоить название условиям вызова функций смартконтракта. Модификатор «onlyOwner» проверяет, что вызов функции осуществляется с адреса, который сохранен в поле «owner».

Контракт «owned» полностью работоспособен и предельно прост, однако несет в себе одну скрытую угрозу, ведь при вызове функции «changeOwner» мы можем по ошибке указать несуществующий адрес, а значит, потеряем контроль над контрактом. Чтобы исправить этот недостаток, достаточно ввести еще поле, назовем его «candidate», а при вызове функции «changeOwner» будем сохранять новое значение сначала в «candidate», а перемещать его в «owner» будем, как только кандидат подтвердит свое вступление в права, вызвав со своего адресу функцию «confirmOwner».

Следующий в иерархии контракт — «Crowdsale», отвечает непосредственно за сбор средств и выдачу токенов и наследует рассмотренный ранее контракт «owned».

Особое внимание следует обратить на следующие элементы контракта:

  • Публичное поле «totalSupply», которое должно содержать общее количество токенов, выпущенных смартконтрактом;
  • Публичная карта «balanceOf», которое содержит информацию о балансах всех держателей токенов;
  • Событие Transfer, которое должно испускаться смартконтрактом при каждой операции перемещения токенов между держателями токенов.

Все эти три элемента объединяет одно, они являются обязательной частью стандарта ERC20, который необходимо соблюдать, чтобы информация о наших токенах корректно отображалась в кошельках пользователей и etherscan.io.

Конструктор смартконтракта «Crowdsale» предельно прост. Прежде всего инициализируется значение поля «totalSupply». Наш контракт выпускает 21 миллион токенов, из которых 20 миллионов сразу будут перемещены на баланс смартконтракта. Будем считать, что токены с адреса смартконтракта как раз и доступны для продажи. Оставшиеся токены, в нашем случае 1 миллион, будут записаны на адрес владельца контракта. Ну и в конце конструктора испускается событие «Transfer», которое помещается в блокчейн и информирует пользователей контракта о том, что с баланса контракта на баланс владельца контракта переведено соответствующее количество токенов. Именно испускание этого события позволит etherscan.io корректно отобразить держателей токенов и их балансы.

Ну и самая главная функция смартконтракта «Crowdsale», так называемая fallback функция, которая вызывается каждый раз, когда эфир поступает на адрес нашего смартконтракта. В самом начале осуществляется проверка, что на балансе смартконтракта есть хоть какое-то количество токенов для продажи. Далее устанавливаем фиксированную цену токенов — 5000 штук за 1 эфир. Затем вычисляем, сколько токенов необходимо отправить отправителю эфира. Количество переданных в транзакции средств записано в поле «value» глобальной структуры «msg» и указано оно в «wei», поэтому при определении количества токенов осуществляем перевод «wei» в «ether».

Затем осуществляется проверка того, что на балансе смартконтракта есть достаточное количество токенов для продажи. Если запрошено больше токенов, чем есть у смартконтракта, то будем переводить все оставшиеся токены. Определяем стоимость в «wei» оставшихся токенов и возвращаем отправителю излишне переведенный эфир. Убеждаемся, что количество покупаемых токенов ненулевое, после чего записываем это количество токенов на баланс покупателя и списываем их с баланса смартконтракта. В конце не забываем испустить событие Transfer.

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

Прежде всего определим 4 публичных поля, которые сейчас практически не используются никакими кошельками, но для порядка все же определим их. Здесь укажем полное и сокращенное наименование токена, а также количество дробных знаков. В нашем случае токен является неделимым, т. к. значение поля «decimals» установлено равным 0.

И наконец, единственной функцией смартконтракта «EasyToken», ради которой мы создавали этот контракт, является «transfer», которая также является частью стандарта ERC20 и позволит кошелькам пользователей осуществлять передачу токенов друг другу, переводить их на биржу и выводить их с нее. Реализация функции крайне проста, проверяется достаточность количества токенов на балансе отправителя, после чего баланс отправителя уменьшается, а баланс получателя увеличивается на запрошенное количество токенов. В конце испускается событие «Transfer». Теперь наш токен является операбельным и осталось сделать самое главное — предоставить владельцу контракта возможность вывести собранные эфиры. Это мы сделаем в контракте «EasyCrowdsale».

Функция «withdraw» имеет модификатор «onlyOwner», т. е. может быть вызвана только владельцем смартконтракта. Единственное, что она делает — переводит весь баланс смартконтракта на адрес владельца смартконтракта.

Несмотря на то, что рассмотренный нами смартконтракт является полностью функционально законченным и работоспособным, использовать его в реальном проекте я бы не рекомендовал. Чрезмерное упрощение логики контракта привело к тому, что такой контракт не обеспечивает защиту интересов инвесторов в должной мере, а именно, не устанавливает срок проведения crowdsale, не устанавливает минимальной границы сбора, не возвращает средства инвесторам в случае недостижения минимальной границы, а также содержит ряд известных уязвимостей на уровне компилятора языка Solidity, например, подвержен так называемой short address attack.

Многие из этих недостатков устранены в смартконтракте нашего проекта PROVER. Контракт PROOF загружен в Ethereum по этому адресу вместе с исходным кодом, с которым можно познакомиться. Можно даже проверить, как работает контракт, отправив на него реальный эфир, у нас как раз сейчас идет Pre-ICO:). На самом деле, мы будем рады, если вы присоединитесь к presale нашего проекта PROVER, который продлится до конца сентября. PROVER — это уникальная технология подтверждения подлинности видеоматериалов на базе блокчейн и видеоаналитики.

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

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

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

Смарт-контракты в блокчейне и как ими пользоваться

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

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

Нарушение конфиденциальности

Stellar. Возможно, это самая старая платформа смарт-контрактов, но ее скорость и безопасность, возможно, лучше, чем у Ethereum. Она может похвастаться более простым в использовании интерфейсом. Однако платформа не подходит для разработки сложных контрактов, поскольку в основном предназначена для выполнения более простых смарт-контрактов. Ошибки в смарт-контрактах

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

Кто создал смарт-контракты?

Будущее смарт-контрактов.

Необратимый характер

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

Блокчейн Bitcoin использует неполный по Тьюрингу язык программирования Script. Bitcoin поддерживает простые смарт-контракты с мультиподписью (для выполнения действия нужны цифровые подписи нескольких участников), удержанием средств на установленное время и так далее.

Что такое смарт-контракты, где можно их применять и при чем тут блокчейн

Блокчейн Bitcoin использует неполный по Тьюрингу язык программирования Script.

Клиринг (читать далее...)

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

Цепочки поставок

Для правообладателей и создателей контента актуальна проблема роялти — платы за использование интеллектуальной собственности. Здесь смарт-контракты можно использовать для прозрачного распределения средств. Проблемы смарт-контрактов

Смарт-контракты на блокчейне
Чтобы система была безопасной, максимальная сумма средств в автомате не должна превышать затраты на взлом.
  • измерительные приборы вроде термометра или датчика освещенности;
  • конкретные участники сети, которые оказывают услуги блокчейн-системе;
  • децентрализованные системы с собственными механизмами консенсуса, построенные поверх основного реестра.

Юридическая сила

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

Оракулы

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

Смарт контракты Ethereum: пишем простой контракт для ICO

Если я запущу цикл для распределения дивидендов, у меня закончится газ, прежде чем я доберусь до 500-го акционера.

Как не остаться без газа в Ethereum, или как научиться писать масштабируемые смарт-контракты

Веселые были времена.

Линейные алгоритмы (читать далее...)
Если вы используете дерево для хранения данных, то у вас практически нет ограничений в размере структуры для операций поиска и записи, а также ограничения в тысячу миллионов элементов для операций множественной записи. Тем не менее, вы никогда не сделаете больше, чем несколько сотен операций записи в одном вызове.

Деревья

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

Каковы же эти пределы?
Включив математический расчет, вы обнаружите, что один блок может иметь около 50 000 операций чтения, 500 операций записи или комбинацию их двух.
Если мы рассмотрим затраты газа в размере 200 для операции чтения и 20000 для операции записи, а также предел газа на блок в размере 10 миллионов газа, то мы сможем сделать определенные умозаключения об алгоритмах, применяемых в блоке.

Какой алгоритм использовать?

Они сложны для написания и тестирования.

Массивы

Это означает, что если ваш алгоритм записи в структуру данных равен O(log2 N), то ваш смарт-контракт будет масштабироваться.

Итак, если только что написанное вам кажется не совсем понятным, то далее мы разберем все эти термины, понятия и пути взаимодействия в общей архитектуре подробнее.

Интерфейсы доступа к смарт контрактам

.

Введение (читать далее...)
$ node > var Web3 = require(‘web3’); > var web3 = new Web3(new Web3.providers.HttpProvider(«http://localhost:8545»));

Инструменты

Нода ( EVM) – копия программного комплекса эфириума, которая запускает блокчейн и обеспечивает к нему доступ, позволяя функционировать контрактам внутри него, позволяя вызывать эти контракты, изменять состояние блокчейна и синхронизировать блокчейн с остальными копиями. Основы смарт контрактов эфириума

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

Стандартные механизмы общения

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

Заключение

Что касается архитектуры решения, то типичный сайт со смарт контрактом под капотом работает по следующему принципу:

§ В рабочем блокчейне эфириума находится полный набор данных и программ, который загружается в каждую копию блокчейна, которая работает в сети.
Таким образом, любые обращения к смарт контрактам сводятся к вызову соответствующих методов, которые были в него заложены при разработке. О способах вызова этих методов и поговорим далее.

Related posts

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

*