Как сделать смарт контракт на ethereum
Добавил пользователь Alex Обновлено: 05.10.2024
Ник Сабо впервые описал технологию смарт-контрактов в 1990-х годах. Он определил смарт-контракты как инструмент, который формализует и защищает компьютерные сети путем объединения протоколов с пользовательским интерфейсом. Сабо также обсуждал потенциальное применение смарт-контрактов в различных областях, которые включают в себя общественные отношения договорного характера, такие как кредитные соглашения, обработка платежей и управление авторскими правами.
В мире криптовалют смарт-контракт - это приложение (или программа), работающее на блокчейне. Как правило, он выступает в качестве цифрового соглашения, которое подкрепляется определенным набором правил. Эти правила предопределены компьютерным кодом, который реплицируется и выполняется всеми узлами сети.
По существу, применительно к блокчейну, смарт-контракты позволяют создавать доверительные протоколы. Это означает, что обе стороны могут взять на себя обязательства через блокчейн, без знания или доверия друг к другу. Участники данного процесса могут не беспокоится о правильности выполнения обязательств, поскольку если условия не будут удовлетворены то контракт аннулируется. Помимо этого, использование смарт-контрактов может устранить необходимость в посредниках, значительно снижая операционные расходы.
Хотя протокол биткоина уже много лет поддерживает смарт-контракты, они были популяризованы создателем и соучредителем Ethereum Виталиком Бутериным. При этом каждый блокчейн может представить другой метод реализации смарт-контрактов.
В центре внимания этой статьи смарт-контракты, работающие на виртуальной машине Ethereum (EVM), которая является важнейшей частью блокчейна Ethereum.
Как это работает?
Простыми словами, смарт-контракт работает как детерминированная программа. Она выполняет определённые действия, когда соблюдены заданные условия. Исходя из этого, система смарт-контрактов часто использует "if… then…" выражения. Несмотря на общепринятую терминологию, смарт-контракты не являются ни контрактами в юридическом смысле, ни "умными". Это всего лишь фрагменты кода, запущенного в распределенной системе (в блокчейне).
В сети Ethereum смарт-контракты отвечают за выполнение операций между пользователями (адресами). Любой адрес, не являющийся смарт-контрактом, называется личным аккаунтом (EOA). Таким образом, смарт-контракты управляются программным кодом, а личные аккаунты – пользователями.
По существу, смарт-контракты Ethereum состоят из кода контракта (содержащего условия выполнения) и двух публичных ключей. Первый публичный ключ предоставлен создателем контракта. Другой ключ представляет собой сам контракт, являясь цифровым идентификатором, уникальным для каждого смарт-контракта.
Выполнение любого смарт-контракта происходит при блокчейн-транзакции, и они могут быть активированы при инициации личным аккаунтом (или другим смарт-контрактом). Однако запускается последовательность смарт-контрактов всегда с личного аккаунта (т. е. пользователем).
Основные характеристики
Смарт-контракт Ethereum зачастую имеет следующие характеристики:
Распределенность. Смарт-контракты реплицированы и распределены по всем узлам сети Ethereum. Это одно из главных отличий от других решений, использующих централизованные сервера.
Детерминированность. Смарт-контракты выпоняют действия, для которых они предназначены, по достижении удовлетворённых требований. Кроме того, результат всегда будет одинаковым вне зависимости от того, кто выполняет требования.
Автономность. Смарт-контракты могут автоматизировать все виды задач, работая как самоисполняемая программа. В большинстве случаев, если смарт-контракт не инициирован, он находится "в бездействии" и не выполняет каких-либо действий.
Неизменность. Нельзя изменить процесс работы смарт-контракта после его разработки и активации. Изменения могут быть внесены только в том случае, если разработчики до этого реализовали определенную функцию. Таким образом, мы можем сказать, что смарт-контракты могут обеспечить защиту от взломов для кода посредством доказательства подлинности.
Настраиваемость. Перед реализацией, смарт-контракты могут разрабатываться разными способами. В связи с этим, данная технология подходит для создания многих типов децентрализованных приложений (DApps). Это также связано с тем, что Ethereum является завершенной по Тьюрингу блокчейн-сетью.
Доверительность. Две или более стороны могут взаимодействовать с помощью смарт-контрактов, без знания и доверия друг к другу. В добавок к этому, технология блокчейн обеспечивает точность и учет всех данных.
Прозрачность. Поскольку смарт-контракты основаны на публичном блокчейне, их исходный код доступен для каждого.
Могу ли я изменить или удалить смарт-контракт?
В смарт-контракт Ethereum нельзя добавлять новые функции после активации. Однако, если разработчик включает в код контракта функцию под названием SELFDESTRUCT, в дальнейшем он сможет удалить его и заменить на новый. В свою очередь, если данная функция не была написана в коде, контракт нельзя будет удалить.
Примечательно, что так называемые обновляемые смарт-контракты обеспечивают разработчикам доступ к изменениям кода, тем самым предоставляя большую гибкость по сравнению с неизменными контрактами. Существует множество способов создания подобного вида смарт-контрактов различной степени сложности.
Рассмотрим это на простом примере. Давайте представим, что смарт-контракт делится на несколько небольших контрактов. Некоторые из них нельзя изменить, в то время как другие можно удалить, благодаря вышеупомянутой функции. Это означает, что часть кода (энное количество смарт-контрактов) можно удалить и заменить на другой, в то время как остальные функциональные возможности остаются неизменными.
Преимущества и варианты использования
Поскольку это программируемый код, смарт-контракты легко настраиваются и могут разрабатываться разными способами, предлагая различные виды услуг и решений.
В качестве децентрализованной и самореализующейся программы, смарт-контракты могут обеспечить повышенную прозрачность и снизить эксплуатационные расходы. В зависимости от направления деятельности, они также могут повысить эффективность и снизить бюрократические издержки.
Преимущества смарт-контрактов в особенности проявляются, когда речь идет о денежных переводах или обмене средств между двумя или более сторонами.
Другими словами, смарт-контракты могут быть разработаны для широкого спектра вариантов использования. Некоторые из примеров включают в себя создание токенизированных активов или акций, систем голосования, криптовалютных кошельков, децентрализованных бирж, игр и мобильных приложений. Они также могут быть реализованы совместно, наряду с другими решениями на блокчейне, которые затрагивают такие области как: здравоохранение, благотворительность, цепочки поставок, государственное управление и децентрализованное финансирование (DeFi).
ERC-20
Токены, выпущенные на блокчейне Ethereum соответствуют стандарту, который также известен, как ERC-20. Данный стандарт описывает основные функции всех токенов на основе сети Ethereum. Такой вид цифровых активов часто называют ERC-20 токенами, и они представляют большую часть существующих криптовалют.
Многие компании и стартапы работающие с блокчейном разрабатывают смарт-контракты, чтобы выпустить свои цифровые токены в сети Ethereum. После своего рода эмиссии, большинство таких компаний распределяет свои ERC-20 токены с помощью первоначального предложения монет (ICO). В большинстве случаев, использование смарт-контрактов позволяло осуществлять обмен денежными средствами и распределять токены доверительным и эффективным способом.
Недостатки
Смарт-контракты состоят из компьютерного кода, написанного людьми. Это является причиной многочисленных рисков, поскольку код подвержен уязвимостям и ошибкам. В идеале, разработка должна осуществляться опытными программистами, особенно когда речь идет о конфиденциальной информации или больших суммах денег.
Помимо этого, некоторые утверждают, что централизованные системы могут обеспечить большинство решений и функций, предлагаемых данной технологией. Основное отличие заключается в том, что смарт-контракты выполняются в распределенной одноранговой сети, а не на централизованном сервере. И поскольку смарт-контракты основаны на блокчейне, они как правило неизменны, либо процесс внесения изменений очень сложный.
Следует заметить, что проблема возникла не из-за работы блокчейна Ethereum. Вместо этого, ошибка была вызвана неправильной реализацией смарт-контракта.
К примеру, основным требованием множества договоров и контрактов является идентификация участников возраст которых составляет 18 или более лет. Псевдонимность, обеспечиваемая технологией блокчейн, в сочетании с отсутствием посредников, может выступить помехой для соответствия таким требованиям. Несмотря на то, что существуют потенциальные решения данного вопроса, юридическая составляющая смарт-контрактов является одной из главных проблем, особенно когда речь идет о всемирном масштабе и распределенных сетях.
Критика
Некоторые блокчейн-энтузиасты видят в смарт-контрактах решение, которое может заменить и автоматизировать большую часть существующих коммерческих и бюрократических систем. В то время как это вполне реально сделать, смарт-контракты далеки от того, чтобы их использование в данной сфере стало нормой.
Смарт-контракты безусловно интересная технология. Но в связи с распределенным и детерминированным характером, а также прозрачностью и частичной неизменностью, делает ее менее привлекательной для использования в некоторых ситуациях.
По существу, вся критика опирается на то, что смарт-контракты не являются подходящим решением для множества реальных проблем. И по факту, некоторым организациям проще и лучше использовать обычные альтернативные сервера.
По сравнению со смарт-контрактами, централизованные сервера проще и дешевле в обслуживании, помимо этого, они также могут обеспечить более высокую эффективность с точки зрения скорости работы и взаимодействия с другими сетями (функциональной совместимости).
Заключение
Без сомнений, смарт-контракты оказали большое влияние на мир криптовалют, и безусловно произвели революцию в области блокчейн-технологий. Поскольку конечные пользователи могут не взаимодействовать напрямую со смарт-контрактами, возможно в будущем они послужат основой для широкого спектра приложений, от финансовых услуг до управления цепочками поставок.
Потенциал смарт-контрактов вместе с блокчейном может оказать влияние практически на все сферы деятельности нашего общества. Но только время покажет, смогут ли эти инновационные технологии преодолеть множество барьеров на пути к широкомасштабному внедрению.
Одной из наиболее востребованных функций Ethereum является смарт-контракт. Все больше людей хотят создавать и работать с этими децентрализованными приложениями или dApps. Конечно, создание смарт-контракта – задание не из простых.
Сперва рассмотрим понятие смарт-контракта. Смарт-контракт – это простой компьютерный протокол, кодифицированный для обеспечения согласования контракта на платформе Ethereum.
Если у вас абсолютно нет опыта программирования, при написании смарт-контракта вы можете столкнуться с трудностями. Сначала мы рекомендуем приобрести базовые знания о кодировании – это поможет облегчить вам процесс написания смарт-контракта.
Определение бизнес-идеи
Поскольку смарт-контракт в основном используется для реализации бизнес-процессов, решите, в каком направлении будет работать ваш смарт-контракт. Вам нужно знать и точно определить, что вы хотите от своего смарт-контракта. Вы хотите использовать его в казино? Вы хотите построить его для рынка? Это может быть что угодно и все, но вам нужно иметь очень четкую картину.
После того, как вы определитесь с направлением использования, следующий шаг – это техническая часть. Самый первый шаг для вас изучить Solidity. Виртуальная машина Ethereum (EVM) работает на этом языке программирования. Его структура очень похожа на Javascript и C ++, и как только вы тщательно просмотрели свою документацию, изучили этот язык и поняли, как писать код в Solidity, только тогда вы сможете продолжить работу, чтобы получить доступ к требуемому инструментарию для полной работы вашего смарт-контракта. На просторах интернета есть ряд учебных пособий, который непременно помогут вам в изучении Solidity. Вы также можете получить доступ к официальному руководству Solidity от Ethereum по этой ссылке.
Базовые инструменты
Самое первое, что вам понадобится, это инструмент под названием Truffle. Вы можете получить к нему доступ в Github по этой ссылке. Truffle представляет собой основу разработки для Ethereum, в которой вы будете кодировать свою бизнес-идею, используя язык программирования Solidity. Для написания тестов и их развертывания вам нужно будет использовать Node.js. Теперь для большей эффективности вам понадобится то, что будет управлять вашими учетными записями и токенами, с этой целью был создан клиент Parity, который является быстрым и безопасным клиентом Ethereum. Последний должен иметь инструмент в этом списке Web3.js. Разумеется, вам потребуется что-то, что позволит преодолеть разрыв между вашим ноутбуком и сетью Ethereum. Web3.js делает это только путем создания протокола связи с сетью Ethereum с использованием Javascript API.
Написание смарт-контракта
Сначала напишите применимый автоматизированный модульный тест вашей бизнес-идеи в Javascript или даже в Solidity. Он понадобится вам для проверки работы вашего смарт-контракта.
Когда у вас есть хорошие теоретические и практические знания о том, как написать код в Solidity, и вы создали все остальные инструменты на своем ноутбуке, такие как Truffle, Node.js, Parity и Web3.js, вы можете начать кодировать собственный смарт-контракт. Поскольку вы уже определили бизнес-идею, для которой вы бы хотели создать смарт-контракт, вам понадобятся знания и понимание Solidity, чтобы закодировать свою бизнес-идею, реализовав ее в Truffle, используя язык Solidity.
Тестирование и развертывание
После того, как ваш смарт-контракт будет кодифицирован и готов, проверьте его на автоматическом модульном тесте. Скомпилируйте свой проверенный смарт-контракт в Truffle и разверните его в оригинальной сети Ethereum или в тестовой сети Ropsten. Оба этих варианта потребуют некоторое количество газа для оплаты обработки.
Следуйте этим простым шагам, и хотя это может занять немного больше времени, чем вам бы хотелось, наберитесь терпения и знайте, что конечном итоге вас ждет успех!
В этом уроке мы напишем простой смарт-контракт, развернем его в личном блокчейне Ethereum и вызовем контракт из скрипта Python.
В этом уроке мы напишем простой смарт-контракт, развернем его в личном блокчейне Ethereum и вызовем контракт из скрипта Python.
Что вам нужно установить, прежде чем мы продолжим:
- Python3 v3.5.3 или более поздней версии, у меня были некоторые проблемы с использованием версии 3.8, а затем я переключился на 3.5.3;
- NodeJS v8.9.4 или более поздней версии (для установки трюфель );
Полный код проекта доступен на GitHub
- Настройка проекта
- Написание смарт-контракта
- Развертывание смарт – контракта в блокчейне
- Вызов развернутого контракта
1. Настройка проекта
Во-первых, давайте создадим папку для проекта:
Внутри hello-eth папка, установите трюфель :
Мы будем использовать инструмент truffle CLI для инициализации пустого проекта смарт – контракта:
Приведенная выше команда создаст следующую структуру проекта:
- контракты/ : Каталог для исходного кода контрактов солидности ( .sol файлы).
- миграции/ : Каталог для файлов миграции контрактов.
- test/ : Каталог для тестовых файлов. Это не будет рассмотрено в этом учебнике.
- truffle.js : Файл конфигурации трюфеля.
контракты/ и миграции/ папки уже будут содержать Миграцию контракт и его сценарий развертывания ( 1_initial_migration.js ). Этот контракт используется компанией truffle для отслеживания миграции наших контрактов. Это не будет рассмотрено в этом уроке, так что не беспокойтесь об этом.
2. Написание смарт-контракта
Да, я буду использовать пример Hello World . Создайте файл с именем HelloWorld.sol внутри папки contracts/ и добавьте в него следующее содержимое:
В корневой папке проекта используйте truffle для компиляции контракта:
Он выведет скомпилированный контракт HelloWorld.so as HelloWorld.json внутри build/contracts/ папка.
Теперь у нас есть скомпилированный контракт, и мы готовы развернуть его для нашего запуска в (локальном) блокчейне.
3. Развертывание смарт-контракта в блокчейне
Чтобы развернуть наш смарт-контракт в блокчейне, нам сначала нужно:
- сценарий миграции;
- блокчейн для развертывания контракта;
Для сценария миграции создайте файл с именем 2_deploy_contract.js внутри миграции/ папки и добавьте в нее следующее содержимое:
Набор трюфелей содержит персональный блокчейн, который мы можем использовать для тестирования. Откройте терминал и запустите:
Вы должны увидеть результат, аналогичный следующему:
Теперь мы можем мигрировать наш контракт, который вызывает каждую миграцию в миграции/|/(по порядку), развертывая контракты в блокчейне.
адрес контракта – это адрес в сети Ethereum, на котором размещен этот экземпляр контракта. Сладко! Теперь у нас есть смарт-контракт, развернутый на нашем личном блокчейне Ethereum. Следующий шаг – вызвать его из скрипта Python.
Ethereum на практике часть 2: Как создать улучшенную демократию в 100 строчках кода
Это второй пост из серии статей о том, как создавать смарт-контракты, не имея опыта программирования. Скачайте последнюю версию Ethereum Wallet, прочитайте первую часть, и начнем веселиться!
Мы сделали жетоны (token). Но какой в этом смысл если они ничего нового не делают? Сейчас мы создадим новый контракт, который будет использовать уже созданные нами жетоны. В нашем контракте мы опишем демократическую организацию на блокчейне. Каждый у кого есть жетоны сможет голосовать за предлагаемые решения.
Так что давайте вернемся во вкладку CONTRACTS -> Deploy contract и вставим исходный код DAO (Демократической Автономной Организации) в поле Solidity Source. Выбираем из выпадающего списка контракт Democracy и устанавливаем такие параметры:
Amount = 0. Тут вы можете указать с каким количеством эфира будет стартовать ваша DAO. Но эфир можно добавлять позже, поэтому оставляем ноль. (Примечание переводчика: в последней версии контракта, это поле убрали, что вполне логично).
В поле sharesAddress вставляем адрес контракта, который описывает наши жетоны. Обратите внимание на круглый разноцветный значок. Если он не совпадает в точности с тем значком, который соответствует вашему первому контракту, значит вы что-то напутали.
minutesForDebating: это минимальное время, которое отводится на голосование по одному вопросу. Напишем маленькое число – 10 минут, потому что мы учимся. Но в реальности лучше установить что-то типа 20000 чтобы сэкономить эфир и дать возможность голосовать в течение 2 недель.
Ваш контракт должен выглядеть примерно, как на картинке:
После публикации вы увидите на основной панели как ваш контракт постепенно устанавливается:
Ссылка на новый контракт отобразится во вкладке CONTRACTS. Если его там нет (когда вы устанавливаете чужой контракт) нужно добавить его вручную. Вам нужно добавить адрес контракта и его JSON-интерфейс. JSON-интерфейс это такая строка, которая объясняет кошельку как взаимодействовать с кодом. Имя можете указать любое. Нажимаем Ok.
С правой стороны экрана перечислены те функции, которые производят вычисления и вносят изменения в блокчейн. Поэтому они платные, то есть требуют Эфир. Выберите из выпадающего списка newProposal, чтобы создать новое предложение.
В поле beneficiary укажите адрес человека, которому вы хотели бы перевести деньги из общего фонда. Количество Эфира который вы хотите перевести укажите в поле etherAmount. Это должно быть целое число. А чуть ниже в поле JobDescription можно написать причину, по которой вы хотите совершить этот перевод. Поле transactionByteCode пока что оставляем пустым. Нажмите выполнить и введите свой пароль. Через несколько секунд количество предложений (numProposals) по контракту увеличится на единицу. И само предложение отобразится слева. Предложения нумеруются, начиная с нуля. Поэтому у нашего первого предложения (proposal) будет номер – 0. Если предложений будет много, вы можете посмотреть любое из них, когда введете порядковый номер в поле proposal.
Теперь мы можем сказать, что создали демократическую автономную организацию, которая управляется с помощью блокчейна и использует исключительно цифровые акции-жетоны. Такая организация может иметь очень большое влияние в реальном мире. А теперь обратите внимание на удивительную и важную вещь – эта организация не находится под вашим контролем, хотя вы ее и создали. Контракт без вашего участия, теперь будет выполняться по правилам, которые вы в него заложили. Навечно. Вы не можете подкупить его, не можете исказить. Правила постоянны независимо от того, о какой сумме идет речь 0.01 или 1000000 эфиров.
Неужели может быть что-то лучше этого? На само деле, может. В следующий раз мы рассмотрим, как вы можете использовать transactionBytecode чтобы не просто пересылать эфир, а делать более сложные вещи. И мы изменим код жетонов, для того чтобы наша демократическая организация смогла контролировать их оборот.
Читайте также: