BTC $ 9103.9215283 (4.15 %)
ETH $ 230.185311195 (2.93 %)
XRP $ 0.2393980239 (2.28 %)
BCH $ 335.182011053 (5.07 %)
USDT $ 1.0051502047 (0.65 %)
BSV $ 240.883344919 (3.89 %)
LTC $ 61.9479441288 (2.73 %)
EOS $ 3.7624406424 (4.81 %)
BNB $ 20.928268177 (5.08 %)
XTZ $ 3.1143106378 (5.45 %)

Обновление языка Эфириума Solidity: вопросы видимости функций

19:00 16/12/2018
Обновление языка Эфириума Solidity

Введение

 

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

 

Как и любые другие программы, все решения в системе Ethereum нуждаются в обновлениях. Это особенно важно для Solidity, который до сих пор не достиг версии 1. Последнее обновление изменяет номер версии на 0.5.0. Такой индекс можно считать ключевым, поэтому обратим внимание и рассмотрим обновление подробнее.

 

Общая информация по обновлению

 

Подробности по обновлению можно найти в нескольких источниках. Рассмотрим два из них.

 

Первый ресурс — это страница регистрации изменений Solidity на GitHub. Здесь не указаны подробности и пояснения по каждому изменению, однако список максимально полный, начиная с июля 2015 года, и разбит на следующие категории:

 

  —  ключевые изменения;

  —  обязательные изменения кода;

  —  особенности языка;

  —  особенности компилятора;

  —  исправленные ошибки.

 

Второй ресурс — это страница руководства пользователя Solidity на сайте Read the docs. Здесь подробно описаны наиболее важные изменения, с примерами и кодом. Страница содержит следующие категории:

 

  —  изменения семантики;

  —  изменения семантики и синтаксиса;

  —  требования к ясности;

  —  раздел забвения;

  —  вопросы взаимодействия контрактов.

 

Мы рассмотрим только одно важное изменение.

 

Видимость функций

 

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

 

Рассмотрим контракт с функцией под названием function_name(). Существует четыре типа видимости: external, public, internal and private. Они могут быть применены как к функциям, так и к переменным состояния. Единственный запрет не позволяет присваивать переменной тип external. Здесь и далее мы будем говорить исключительно о видимости функций.

 

Internal

 

Простейший тип видимости функций называется «Internal». Он означает, что лишь другие функции контракта могут обращаться к этой. Кроме того, если contract_1 станет примером для наследования contract_2, то эта функция будет перенесена в ее текущем виде.

Внутренний вызов функции
Внутренний вызов функции

 

Private

 

Функция «Private», обладает такими же свойствами, что «Internal» за одним исключением: она не будет скопирована в наследуемый контракт. Этот тип функций принадлежит исключительно контракту, который ее содержит.

Наследование функций
Наследование функций

 

Public

 

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

Вызов Public функции
Вызов Public функции

 

External

 

Функции «External» доступны для всех контрактов на блокчейне с некоторыми особенностями. Они могут быть вызваны всеми контрактами при помощи одинакового синтаксиса. Это значит, что содержащий контракт не может просто так вызвать функцию по имени. Он обязан использовать синтаксис this.function_name(). Функции «External» похожи на «Public», но некоторые вопросы эффективности обработки данных требуют их использования.

Вызов External функции
Вызов External функции

 

Общие изменения видимости

 

В предыдущих версиях Solidity все функции, созданные без указания видимости, автоматически получали тип «Public». Это изменено обновлением 0.5.0. Четкое указание видимости функции теперь обязательно. Все функции и интерфейсы должны обладать указанной видимостью перед публикацией на блокчейне.

 

Послесловие

 

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

Нашли ошибку? Выделите её и нажмите Ctrl + Enter чтобы сообщить администратору.

Самые актуальные новости о криптовалютах и блокчейне. Прочтите первым!

Зачем мне это?

Загрузка...