Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
dmitrijv
7 лет назад

Всё, что надо знать о работе сети Ethereum

Тип счетов

Типы счетов  (аккаунтов) можно разделить на две категории:

  • обычный аккаунт, содержащий на балансе определенную сумму;
  • счет-контракт, содержащий исполняемый код контракта.

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

  • совершать переводы эфира (Ether) на другие адреса
  • создавать счета-контракты
  • вызывать методы контрактов

Счет-контракт может использовать функциональность других контрактов.

Транзакция

Термин "транзакция" используется в Ethereum, как обозначение подписанного пакета, хранящего в себе сообщение, отправляемого с EOA аккаунта (Аккаунт с внешним владением) на другой аккаунт в сети.

Транзакция содержит следующую информацию:

  • получателя сообщения;
  • подпись, идентифицирующую отправителя и служащую доказательством намерения отправить сообщение  получателю;
  • VALUE fileld - количество Wei, отправляемого от отправителя к получателю;
  • опциональное поле, содержащее сообщение отправляемое с контрактом;
  • STARTGAS значение, представляющее максимальное кол-во вычислительных действий,.которое допустимо для выполнения транзакции; 
  • GASPRICE  рыночная стоимость единицы использованной мощности. Один unit gas соответствуем выполнению одной атомарной инструкции.

Сообщение

Контракты могут отправлять "сообщения" другим контрактам. Сообщения - виртуальные объекты, которые существуют только в исполняемой среде Ethereum. По сути они являются вызовом исполняемых функций.

Сообщение содержит:

  • отправителя сообщения;
  • получателя сообщения;
  • VALUE fileld - количество Wei, отправляемого от отправителя к получателю;
  • опциональное поле, которое выполняет роль входных данных для другого контракта;
  • STARTGAS значение, которое ограничивает максимальный лимит gasa для выполняемого кода.

В целом, сообщение очень похоже на транзакцию, за исключением того, что оно создается не пользователем, а контрактом. Когда контракт вызывает функцию CALL или DELEGATECALL создается сообщение. Сообщение аналогично запускает код получателя. То есть контракты могут взаимодействовать с другими контрактами, также как и пользователи.

Gas и стоимость транзакции

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

Общая цена транзакции основывается на двух факторах:
gasUsed - количество gasa, потраченное на выполнение транзакции;
gasPrice - коэффициент определяющий стоимость одной единицы топлива (может задаваться для клиента geth: --gasprise value). Пользователь создает и подписывает транзакции, где каждый может обозначить gasPrice, со стоимостью от 0 и более. По умолчанию, gasPrice 0.05e12 Wei. Правда, вероятность, что майнер примет транзцакцию с низким gasPrice крайне мала.
Общая стоимость = gasUsed * gasPrice

Состав и описание блоков

mixhash Хеш размером 256-bit, который вместе с nonce доказывает, что выполнено достаточное количество вычислений текущего блока, т.е. следит за выполнением принципа Proof-of-Work (PoW).
nonce Хеш размером 64-bit, который, как уже было сказано, вместе с mixhash обеспечивает реализацию принципа Proof-of-Work (PoW).
difficulty Скалярное значение, соответствующее уровню сложности, применяемой в течении поиска nonce текущего блока. Difficulty определяет цель майнинга, которая вычисляется из уровня сложности предыдущего блока и the timestamp. Чем выше difficulty, тем  больше вычислений должен произвести майнер, чтобы найти валидный блок. Это значение используется чтобы контролировать время генерации блоков в блокчейне, регулируя частоту генерации блоков на нужном уровне. В частной сети, это значения обычно держат низким, чтобы избежать долгого ожидания во время тестов, т.к. для обнаружение валидного блока требуется выполнение транзакции в блокчейн сеть.
alloc Позволяет определять список преразмещенных аккаунтов с начальным балансом.
coinbase Адрес размером 160-bit, на который будут приходить все ефиры, собранные с успешного майнинга блоков.
timestamp Скалярное значение равное возвращаемому значению функции Unix time() функции во время возникновения блока. Этот механизм поддерживает баланс в системе - в плане временного промежутка между генерацией новых блоков. Небольшой период между генерацией двух последних блоков приводит к увеличению уровня difficulty и тем самым требуется дополнительное вычисление для поиска следующего валидного блока.
parentHash Хеш размером 256-bit, полученный от родительского блока. Эффективно выстраивает цепочку блоков. В случае genesis block (самого первого блока в сети) parentHash равен 0.
extraData опциональное поле, максимальным размеров 32-byte
gasLimit  Максимальный допустимый объем использования мощностей

Смарт-контракты

Как уже было сказано в ethereum существуют два типа аккаунтов:

  • Externally owned account (EOAs): - аккаунт контролируемый приватным ключём. Пользователь, имеющий приватный ключ и ассоциированный EOA аккаунт, способен отправить ether или сообщение c этого аккаунта;
  • Contract: аккаунт имеющий свой собственный код и контролируемый кодом

По умолчанию, исполняемая среда ethereum находится в состоянии покоя, т.е. ничего не происходит, состояние аккаунтов неизменяется. Однако, любой пользователь может инициировать действие, путем отправки транзакции со своего аккаунта (EOA), тем самым спровоцировать изменение состояния среды ethereum. Для совершения транзацкии требуются etherы, если конечный адресом транзакции  явлеется EOA аккаунт. Если конечный адрес транзакции - контракт,  контракт активируется и автоматически запускает собственный код.
Этот код может считывать/записывать в собственное внутренне хранилище полученные сообщения и оправлять сообщения другим контрактам, таким образом активируя выполнение их кода.
Контракт служит для выполнения четырех следующих задач:

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

Взаимодействие контрактов осуществляется с помощью вызова функции"calling" или отправки сообщений "sending messages". "Сообщение" выступает в роли объекта содержащего некоторое количество etherов, данных любого размера, адреса отправителя и получателя. В настоящее время существует несколько языков для написания смарт-контрактов, самый популярный - Solidity

Solidity

Solidity - высокоуровневый язык программирования, ориентированный на написание контрактов для платформы ethereum. Синтаксис доволно похож на JavaScript, но разработан под Ethereum Virtual Machine

Ссылки:
Онлайн компилятор Solidity;
Онлайн IDE для создания контрактов.

Ethereum debugging

Debagging в ethereum не придусмотрен, однако есть два способа вывода подробных логов:
• через параметр verbosity (1-6), где наибольшее значение соответствует максимально подробному логгированию;
• через event emitter (в смарт-контрактах).
Отладку Ethereum JavaScript API, можно произвести с помощью WebStorm с предустановленным Node.js 

Резвертывание собственной сети Erhereum

Как развернуть собственную сеть Ethereum вы можете узнать из мой прошлой статьи:
"Инструкция по развертыванию частной сети Ethereum".

Надеюсь статья оказалась для вас полезной. 

С уважением, @dmitrijv

Ссылка на источник изображения. 

 

0
89.715 GOLOS
На Golos с June 2017
Комментарии (3)
Сортировать по:
Сначала старые