Ethereum solidity smart contract

Ethereum solidity smart contract

The Solidity Contract-Oriented Programming Language

You can talk to us on Gitter and Matrix, tweet at us on Twitter or create a new topic in the Solidity forum. Questions, feedback, and suggestions are welcome!

Solidity is a statically typed, contract-oriented, high-level language for implementing smart contracts on the Ethereum platform.

For a good overview and starting point, please check out the official Solidity Language Portal.

Table of Contents

Solidity is a statically-typed curly-braces programming language designed for developing smart contracts that run on the Ethereum Virtual Machine. Smart contracts are programs that are executed inside a peer-to-peer network where nobody has special authority over the execution, and thus they allow to implement tokens of value, ownership, voting, and other kinds of logic.

When deploying contracts, you should use the latest released version of Solidity. This is because breaking changes, as well as new features and bug fixes are introduced regularly. We currently use a 0.x version number to indicate this fast pace of change.

Build and Install

Instructions about how to build and install the Solidity compiler can be found in the Solidity documentation.

A «Hello World» program in Solidity is of even less use than in other languages, but still:

To get started with Solidity, you can use Remix, which is a browser-based IDE. Here are some example contracts:

The Solidity documentation is hosted at Read the docs.

Solidity is still under development. Contributions are always welcome! Please follow the Developers Guide if you want to help.

You can find our current feature and bug priorities for forthcoming releases in the projects section.

Some third-party code has its own licensing terms.

The security policy may be found here.

About

Solidity, the Smart Contract Programming Language

Источник

Ethereum смарт-контракт на Solidity: Окружение и деплой

Nov 10, 2017 · 5 min read

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

Исходный код конртакта немного отличается от кода в прошлой статье. Компилятор ругался на отсутсвие модификаторов public и constant у методов. constant разберем позже, когда будем разбирать выполнение контракта.

Компиляция

Прежде чем сделать это, исходный код контракта надо скомпилировать в язык понятный EVM( Ethereum Virtule Machine). Раз Ethereum это мировой компьютер, то EVM это его OC, если угодно.

Не буду долго разбирать варианты как скомпилировать исходный Solidity, остановлюсь на самом доступном — Remix Solidity IDE.

Если п р исмотреться к вкладке Compile, то можно увидеть что включена авто-компиляция кода. Результат можно посмотреть если нажать на Details. Пока что, мне как и вам, не понятно что это все значит и как с этим работать, но мы обязательно разберемся.

Локальный блокчейн

Блокчейн это распределенная среда хранения информации. Каждый участник сети есть приложение, которое работает по протоколу этой сети и все участники хранят у себя цепочку блоков, с которой работает это приложение. Задача всей сети “договориться” о том, что из себя представляет эта цепочка на данный момент, какие транзакции правильные и должны войти в последний блок цепочки.

Есть разные реализации Ethereum протокола. Я возьму реализацию на языке Go — geth , как наиболее распространеный вариант. Выберите и скачайте реализацию для вашей платформы с оф сайта https://geth.ethereum.org/downloads/.

Для поднятия локального блокчейна нам понядобятся:

  • храбрость и отвага — хороши в любом начинании
  • отдельная директория — будет хранить все данные нашего единственного узла
  • Genesis файл — описывает самый первый блок нашего блокчейна
  • идентификатор сети
  • выключить обнаружение узлов — что бы к нам случайно никто не подключился

Странно, но по документации с оф сайта Ethereum мне не удалось поднять локальную сеть, лучше заглянуть на вики гитхаба проекта geth.

Читайте также:  Доминация биткоина что это значит

Одельная директория

Сдесь и далее буду пользоваться консолью и все команды будут выполняться в нашей новой папке:

Genesis файл

Это обыкновенный json файл который описывает наш первый блок в цепочке. Создаем genesis файл $ touch CustomGenesis.json и добавляем туда следующее содержимое:

Инициируем первый блок

для этого запускаем команду init и указываем наш genesis файл и директорию:

Если все в порядке, то вы увидете INFO сообщения и в директории появятся дополнительные папки geth и keystore .

Отлично, у нас теперь есть блокчейн с единственным блоком. Начинаем им пользоваться.

Запуск сети из одного узла

Так как у нас будет много параметров для запуска узла сети, советую создать скрипт $ touch run.sh && chmod u+x run.sh или алиас следующего содержания, замените путь к папке на ваш:

После чего у вас откроется Geth JavaScript консоль.

Аккаунт и баланс

В сети Ethereum, в отличие от Bitcoin, главной сущностью является аккаунт. У аккаунта есть адрес и баланс, на котором хранятся эфиры. В нашей сети есть один аккаунт, но он не наш. Давайте создадим себе аккаунт, добавим туда эфиров сколько душа пожелает и перезапустим нашу сеть с блоком, который будет учитывать наш аккаунт.

В открытой geth консоли запускаем команду и получаем идентификатор аккаунта:

Берем этот аккант и прописываем его в наш genesis файл в поле alloc. Должно получиться :

После чего удаляем наш старый блокчейн rm -rf geth/ и заново запускам инициализацию блокчейна из genesis файла $ geth — datadir

/testnet init CustomGenesis.json . Поднимаем ноду запустив наш скрипт run.sh и можем проверить баланс нашего аккаунта:

В genesis файле баланс указывается в wei, минимальная единица сети Ethereum, это 1/10¹⁸ от ether. Поэтому там было столько нулей, в эфирах это всего 20 ether монет. Не густо, но нам этого хватит.

Нам нужно иметь не пустой баланс, потому что любое вычисление в сети будет нам стоить монет; деплой конракта в сеть, обращение к контракту, вычисление контрактом какого то значения, хранение состояния — на все это тратится так называемый gas (топливо), которое имеет свою цену. На момент написания статьи это 20 gwei. Позже мы разберем что это и откуда берется, а пока просто держите в голове что все не бесплатно.

Подключаем IDE к локальной сети

Отлично. Теперь у нас есть среда для запуска нашего контракта. Давайте подключим наш Remix ide к сети и отправим туда контракт.

При запуске нашего узла мы указали ряд параметров —rpc* которые как раз нужны для внешнего взаимодействия с узлом. Для подключения мы указали порт 65520 и открыли web3 api.

Идем в открытый в браузере Remix, выбираем вкладку Run, в поле Environment выбираем Web3 Provider. Далее вводим адрес нашего локального узла http://127.0.0.1:65520 и если все прошло нормально, в поле Account вы должные видеть свой единственный аккаунт с балансом.

Деплоим контракт

Остался последний шаг отделяющий нас от запуска нашего контракта.

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

Идем обратно в Remix и во вкладке Run нажимаем Create, в консоле ide вы можете видеть creation of browser/SimpleContract.sol:SimpleContract pending… и справа 1 pending transactions . Это говорит о том что транзакция с нашим контрактом попала в сеть, но еще не добавлена в blockchain. Для ее добавления надо майнить блок.

Возвращаемся в geth консоль, делаем miner.start() , дожидаемся когда он сообщит что нашел новый блок и можно его останавливать miner.stop() . Сложность майнинга маленькая, поэтому блок найдется быстро и вам на аккант добавится несколько монет. Так же в Remix вы увидите что контракт принят и появится его интерфейс во вкладке Run

Всё, контракт в сети. У него есть свой contract account с адресом и балансом. Можете поиграться с вашим смарт-контрактом вызывая set и get методы. Помните, каждый вызов контракта это транзакция от вашего аккаунта к аккаунту контракта. Поэтому ваш акк должен быть разлочен и запущен майнинг, что бы транзакция выполнилась. Удачных экспериментов.

Читайте также:  Инвестиции с доходом каждый месяц

Далее: Разбираемся что такое “выполнение смарт-контракта в сети blockchain”, что происходит под капотом.

Источник

Язык Solidity для Ethereum: в чем его специфика и как его учить

Когда мы вспоминаем Ethereum, вероятно, на ум приходит его мощная система смарт-контрактов, которая как раз и использует Solidity как основной инструмент разработки.

Для тех, кто не знает, умные контракты — это, что-то типа программ, которые существуют в блокчейне Ethereum. Они выполняют различные задачи, например, отправка или получение токенов Ether или других ERC-20 .

Как и все компьютерные программы, контракты Ethereum написаны на языке программирования. Язык для блокчейна Эфириум называется Solidity. Но также есть и другие языки, совместимые со смарт-контрактами Ethereum.

Мы рассмотрим основы Solidity и расскажем, где найти ресурсы для более глубокого знакомства с языком смарт-контрактов.

Solidity как язык программирования

Большинство профессиональных программистов сегодня используют один или несколько популярных современных языков программирования. Это C (си) (и C ++, C # и т. д.), Python, Java (и JavaScript), Perl или другие. Solidity был разработан так, чтобы ему могли легко учиться программисты, которые уже знакомы с одним или несколькими современными языками.

Если вы владеете только чем-то вроде Visual Basic, то при освоении Solidity могут возникнуть трудности. Но если вы знакомы с Python или C, язык смарт-контрактов Ethereum покажется относительно знакомым.

Solidity не изобретает ничего нового: также содержит переменные, функции, классы, арифметические операции и прочее. Solidity работает с «контрактом», который создается из этих конструкций.

Наиболее всего синтаксис похож на JavaScript.

Попробовать язык можно прямо из браузера, например на remix.ethereum.org, который представляет собой онлайн редактор с возможностью отладки и запуска вашего кода. Также вы можете использовать реализацию протокола на других языках например Go https://geth.ethereum.org/ .

Вот несколько рандомных примеров кода:

Solidity трудно учить?

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

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

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

Вот некоторые образовательные ресурсы:

Для тех, у кого есть базовый опыт программирования, интересный Crypto Zombies. Это бесплатный сайт, где дается короткая задача по написанию кода. Криптозомби тематически крутится вокруг создания игры с использованием Solidity, поэтому круг задач будет соответствующий. Прохождение первой главы занимает около 1,5-2 часов. Пока курс не завершен. Разработчики заявили, что новые уроки будут выходить каждые несколько недель. И результатом должна стать полная игра, сделанная на Solidity. С этим ресурсом вы не станете лид-разработчиком, но Crypto Zombies действительно дает отличное введение во многие основные концепции программирования смарт-контрактов и синтаксиса Solidity.

  • Для более продвинутого уровня рекомендуем ресурс Block Geeks с бесплатным письменным курсом . Эту статью оценил Дмитрий Бутерин, отец Виталика .
  • Дальше переходит к платным. Те же Block Geeks предлагают видео-курсы по единому плану: 7 дней бесплатно, затем $29 в месяц или $299 в год.
  • BitDegree создает образование на блокчейне и учит блокчейну. Сайт предлагает онлайн-курсы, по завершении ученик получат онлайн-степень, которая зарегистрирована в блокчейне Ethereum. Пока BitDegree в ранней стадии, курсы стоят по $9, некоторые бесплатно. Видимо, затем будет рост цены. По смарт-контрактам на Solidity цена также 9 долларов вместо $189.99. Курсы доступны и для мобильного. В токенах BDG еще дополнительная скидка 20%.
  • На udemy.com предлагается большой курс по Solidity за $200, но часто скидки до 90 долларов.
  • Самые серьезные курсы от B9LAB.com, с соответствующей стоимостью. Академия предлагает обучение на 9 недель с сертификацией.
  • Русскоязычные ресурсы мы исследовали недостаточно, но то, что встречалось из бесплатных вариантов, больше охватывало теорию блокчейна без практики и не сильно отличалось от наших статей в разделе «База знаний» =)
  • Реальные разработчики могут поделиться с начинающими своими знаниями: на ресурсах https://dev.to/t/ethereum и в ветке на Реддит, имиджбордах или в чатах разработчиков в ТГ.
Читайте также:  Тинькофф инвестиции как заработать 25000

Стоит ли учиться Solidity?

Если вы думаете об изучении Solidity для работы, вы можете подумать о том, какие другие навыки вам понадобятся. Вакансии требуют, обычно, знать один из дополнительных языков NodeJS, GoLang или Phyton, которые будут для вас базой. Изучать связанные с блокчейном навыки может быть очень ценным, потому что конкуренция пока низкая, серьезных экспертов не хватает.

Дальше вопрос веры в Ethereum и будущее блокчейна. Нужно понимать, что если вы освоите работу со смарт-контрактами на одной платформе, другие для вас будут гораздо проще и как специалист вы будете очень ценны, так как кадров с опытом сейчас найти очень сложно, а это отличная прибавка к вашей зарплате. Тем более, что платформ со смарт-контрактми уже очень много ( EOS , ETC , NEO и т.д), так что без работы вы точно не останетесь.

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

Основы Solidity и разработки смарт-контрактов

Переведем начало курса от Block Geeks, общие моменты про Solidity, а примеры кода, этапы написания и тестирование вы можете посмотреть в оригинале.

Сам язык Solidity — это инструмент, который мы используется для создания кода машинного уровня, чтобы он мог выполняться на EVM. Это язык с компилятором, который берет наш высокоуровневый читаемый код и разбивает его на простые инструкции, типа «перейти к инструкции в точке памяти xxxxx» и прочее.

Данный язык является одним из нескольких языков, которые могут быть скомпилированы в байт-код EVM. Другой язык, который делает то же самое, называется Serpent, только он основан на Pyton.

Solidity свободно типизированный язык с синтаксисом, очень похожим на ECMAScript (Javascript). Есть несколько ключевых моментов — работаем по модели stack-and-memory с 32-байтным размером инструкции. EVM дает:

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

EVM требует полного детерминизма в рамках смарт-контрактов.

Детерминизм является причиной того, что вы не увидите функцию «random()» в языке Solidity. Когда блок «ethereum» «майнится», развертывается смарт-контракт и вызываются функции внутри этого блока. И новое состояние меняет пространство хранилища или транзакции, так что смарт-контракт фактически выполняется в майнинг-ноде.

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

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

Также в разработке смарт-контракта нужно учитывать, что любое изменение состояние или вычисления (вообще любые действия, кроме просто чтения блокчейна) оплачиваются в газе. Стоимость газа исчисляется по объему работы. Про эту систему мы писали отдельно (с ценами за действия). Отсюда важно то, что смарт-контракт должен быть оптимизирован, чтобы не тратить много эфира.

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

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

В остальном, сам код использует традиционные типы данных, операторы и команды.

Дальше примеры кода и тестирование можно посмотреть в The Ultimate Ethereum Coding Guide (ссылка не спонсирована).

Также на русском языке есть серия статей на Хабре , листайте к первой части в серии «Погружение в разработку на Ethereum».

Источник

Оцените статью