BTC/USD 67157.07 1.34%
ETH/USD 3123.26 3.22%
LTC/USD 84.45 1.59%
BRENT/USD 73.55 0.86%
GOLD/USD 0.00 0.00%
RUB/USD 90.99 0.07%
Tokyo
Moscow
New-York
269

Интерфейсы доступа к смарт контрактам

0
Автор материала: DenisSh_bit

Введение

Смарт контракты сети эфириума являются децентрализованными блокчейн приложениями, обладающими всеми соответствующими преимуществами перед обычными сайтами с централизованной клиент серверной архитектурой. Но таким утверждением мы сравниваем серверный бакграунд с полноценной клиент-серверной связкой, что не совсем корректно. Ведь сайт, это архитектура, в которой на стороне клиента в его браузере выполняется клиентский код, в том числе и написанный на java script, а на стороне сервера при этом выполняется фоновый процесс написанный, например, на PHP. При этом клиентский код, загруженный на компьютер пользователя всегда легко читается, а серверный никому никогда не доступен. Это не прозрачная архитектура, в которой пользователи должны полагаться на владельца и его “честность”.

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

Итак, если только что написанное вам кажется не совсем понятным, то далее мы разберём все эти термины, понятия и пути взаимодействия в общей архитектуре подробнее.

Основы смарт контрактов эфириума

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

Блокчейн – формат хранения данных, при котором данные организуются в блоки, а блоки связываются последовательно, что исключает подмену исторических данных. Но для понимания работы децентрализованных приложений смотрите на блокчейн не как на базу данных, а как на хранилище приложений с данными. О способе хранения и функционирования таких приложений позаботились разработчики сети эфириума. Для вас это просто место, в котором хранятся программы и куда они записывают информацию о своей работе.

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

Децентрализованное приложение – программа, которая хранится и работает в виде многих копий сети интернет (или локальной сети, но если говорить об эфириуме, то в интернете). Работает такая программа на базе блокчейна, в котором хранится и в который сохраняет все изменения согласно своей работе. Результат работы программы синхронизируется между всеми копиями блокчейнов, что позволяет каждой копии программы работать со своим, но вместе с тем всегда с актуальным набором данных.

Нода (EVM) – копия программного комплекса эфириума, которая запускает блокчейн и обеспечивает к нему доступ, позволяя функционировать контрактам внутри него, позволяя вызывать эти контракты, изменять состояние блокчейна и синхронизировать блокчейн с остальными копиями.

Смарт контракт – по сути, определение было дано выше, когда мы говорили про децентрализованные приложения. Относятся они к сети эфириума, пишутся на solidity, хранятся в неактивном состоянии, исполняясь по вызову из вне, хранятся в блокчейне и его же и меняют, добавляя в него новые транзакции с данными. Каждый контракт оперирует своим полем с данными и не имеет доступа к данным других контрактов. Всё взаимодействие осуществляется через предоставленный функциональный интерфейс.

Стандартные механизмы общения

Любой смарт контракт может менять свои данные только внутри своих методов. Т.е. область памяти смарт контракта не доступна для других смарт контрактов или для аккаунтов пользователей. Например, если кто-то хочет перевести токен другому участнику сети, то он должен вызвать соответствующий метод токена, который изменит в реестре валюты этого самого токена две записи – того, кто переводит и того, кому переводят, на суму перевода. Соответственно, в токене должен быть такой метод, иначе переводы денег будут недоступны.

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

Инструменты

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

Кошельки с блокчейном – mist или официальный ethereum wallet предоставляют возможность следить за любыми контрактами из своего интерфейса. Достаточно установить такой кошелёк и поднять рабочий блокчейн (или тестовый, смотря с каким контрактом, в каком блокчейне вы будете работать). Далее вы добавляете нужный вам смарт контракт и и получаете возможность вызова его методов аналогичным вышеописанному способом.

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

Такой способ доступа приемлем для простых контрактов при условии, что целевой аудиторией будут продвинутые пользователи, которые знают, что такое криптовалюта эфириума, которые могут скачать к себе на компьютер кошелёк и синхронизировать блокчейн. Часто такой подход используется в рамках ICO, при поверхностном подходе к компании или как одна из возможностей наравне с доступом из специально разработанной панели инструментов на сайте. Согласитесь, что рядовой пользователь в такие дебри не полезет. В лучшем случае он воспользуется онлайн кошельком, в котором будет подобная возможность. И понятно, что если функциональность смарт контракта обширная, то правила работы в таких клиентах не описываются. Работать в данном случае с системой смарт контрактов будет затруднительно, если вообще возможно.

Плагин Metamask для Google Chrome – аналогичный по уровню сервиса и комфорта, но простой для установки способ добраться до смарт контракта и запустить на выполнение функцию на выбор. Работает только под указанный браузер. Связывает его с серверами разработчиков плагина, что убирает необходимость установки полной локальной ноды с синхронизацией всего блокчейна. А далее входите в свой аккаунт в блокчейне (несмотря на то, что он сторонний), подключаете смарт контракт и вызываете его функции описанным выше способом.

Интерфейсы доступа к смарт контрактам

WEB приложения, подключённые к блокчейну – если вы уважаете пользователей и если вы хотите добиться ответной лояльности, то не стоит никого заставлять работать со стандартным доступом к смарт контрактам посредством вызовов функций. Для этого нужно написать специальный графический интерфейс с доступом к вашему децентрализованному приложению из браузера. Пользователь при таком подходе оперирует понятными ему кнопками, списками и полями, отправляя информацию в таком виде, в котором вы ему разрешаете. Всю работу по организации взаимодействия между web страницей и нодой с блокченом берёт на себя специальный инструмент web3.js, предоставляемый разработчиками платформы ethereum. При этом на стороне пользователя код js остаётся прозрачным для изучения специалистами, web3.js работает по заведомо достоверным алгоритмам, и распространяется с открытым кодом, ваше блокчен приложение также доступно для ознакомления всем желающим. Как видите. Принцип децентрализации, прозрачности кода и достоверности исполнения кода сохраняется. Примерами подобных приложений будут любые онлайн кошельки или панели управление инвесторов в ICO компаниях.

Разработка клиентских web интерфейсов

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

Что касается архитектуры решения, то типичный сайт со смарт контрактом под капотом работает по следующему принципу:

  1. В Html коде страницы подключается библиотека web3.js (например с локального по отношению к сайту сервера) <script src="/path_to/web3.js"></script>
  2. Далее в js коде страницы делается подключение к ноде с блокчейном (например, к локально установленной на том же сервере хостера, что и сайт). Примерно, это будет вот так:

$ node> var Web3 = require('web3');> var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

 

  1. Теперь вы связываетесь с нужным вам контрактом, используя его адрес и интерфейс функциональности

var contract = web3.eth.contract(abi).at("0xf11398265f766b8941549c865d948ae0ac734561");

  1. И далее вы вызываете его методы.

contract.getBasicData("name", function(error, data) { console.log(data);});

Сложности в данном вопросе будут с установкой ноды на сервер с сайтом. На обычный шаред хостинг хостер не даст вам залить такую объёмную базу данных. Придётся оплачивать выделенный сервер, который будет существенно дороже. С другой стороны, можно попробовать использовать чужие ноды с открытым RPC доступом, но это не совсем правильное решение в плане безопасности, поскольку вы будете зависеть от этой ноды, от её доступности, от правильности её работы.

Заключение

Теперь у вас есть общее представление об полнофункциональных децентрализованных приложениях на базе сети эфириума. Оно пригодится вам и при заказе смарт контрактов и при желании научиться их разрабатывать, поскольку простое создание фоновой части в виде смарт контракта не будет полноценным решением и не подойдёт для использования широкой аудиторией. 

Автор материала:
Тема криптовалют и блокчейн-проектов интересует еще со студенчества. Развиваюсь в направлении майнинг-технологий, есть опыт по сборке ферм, а также по добыче криптовалюты. Занимаюсь тестированием новых сервисов, пулов, бирж, кошельков -всего, что связано с криптовалютой и блокчейном. Интересен механизм работы, а особенно направление смарт-контрактов Эфириума. Являюсь разработчиком приложений на базе блокчейна EVM. Свои наблюдения и выводы и описываю в блоге.