Как сделать смарт контракт на 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. Настройка проекта
  2. Написание смарт-контракта
  3. Развертывание смарт – контракта в блокчейне
  4. Вызов развернутого контракта

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. Развертывание смарт-контракта в блокчейне

Чтобы развернуть наш смарт-контракт в блокчейне, нам сначала нужно:

  1. сценарий миграции;
  2. блокчейн для развертывания контракта;

Для сценария миграции создайте файл с именем 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 недель.

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

Ethereum на практике

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

эфириум на практике

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

Ethereum custom contract

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

Democracy

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

Ethereum предложение

Execute contract

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

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

Читайте также: