Как создать свою криптовалюту на ethereum
Перейти к содержимому

Как создать свою криптовалюту на ethereum

  • автор:

Как создать свой ERC-20 токен

Запуск сети Ethereum в 2015 году вызвал большой резонанс в сообществе разработчиков и в дальнейшем породил множество токенов в сети.

Изначально не было никаких шаблонов или руководств по разработке токенов. В результате появилось множество токенов, сильно отличающихся друг от друга. Чтобы упорядочить это разнообразие, сообщество придумало стандарт ERC-20, чтобы сделать все токены более или менее однородными.

ERC расшифровывается как Ethereum Request for Comment, а 20 — это номер идентификатора. ERC-20 был разработан для улучшения сети ETH.

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

Помимо вышеперечисленного, ERC-20 определяет токены как активы на основе блокчейна, которые можно отправлять/получать и которые имеют ценность. Токены во многом похожи на BTC и LTC. Однако наиболее существенное отличие заключается в том, что токены ERC-20 работают не в своей собственной сети блокчейнов, а в сети блокчейна Ethereum и используют газ в качестве платы за транзакцию.

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

Излишне говорить, что было довольно сложно добавлять новые токены в любое приложение.

Сегодня кошельки и биржи используют стандарт ERC-20 для интеграции различных стандартизированных токенов на свои платформы, а также для облегчения обмена между токенами ERC-20 и другими токенами.

Создание собственного ERC-20 токена

Теперь, когда мы знаем, что такое токены ERC-20, давайте приступим к тому, чтобы создать свой собственный токен.

Мы развернем наш смарт-контракт в тестовой сети Ropsten. Для начала вам понадобится браузерное расширение Metamask для создания ETH кошелька и немного тестового ETH, который вы можете получить, зайдя на Ropsten.

Вам нужно будет выбрать Ropsten Test Network в своем кошельке Metamask, скопировать и вставить адрес кошелька в текстовое поле, а затем нажать «Отправить мне тестовый эфир».

Далее идем в IDE Ethereum Remix и создаем новый файл Solidity, например — token.sol , после чего вставляем следующий код в новый скрипт Solidity:

Замените символ и имя на свое:

62 symbol=»VPT»;

63 name = » Vasya Pupkin Token»;

Теперь установите десятичное число (значение, на которое можно разделить токены, можно использовать десятичные единицы от 0 до 8) и установите общую стоимость предложения по своему усмотрению:

64 decimals = 2;

65 _totalSupply = 100000;

Измените YOUR_METAMASK_WALLET_ADDRESS на адрес собственного кошелька (тот же кошелек, который вы указали для получения тестовой валюты):

66 balances [YOUR_METAMASK_WALLET_ADDRESS] = _totalSupply;

67 emit Transfer(address(0), YOUR_METAMASK_WALLET_ADDRESS, _totalSupply);

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

Например, значение десятичного знака в этом контракте равно 2, и нам нужно общее количество токенов 1000, поэтому нам нужно установить переменную total_supply на 100000.

Как принять участие в ICO на базе Ethereum. Инструкция для новичка

Хайп вокруг ICO растёт и ширится, всё новые и новые проекты объявляют о сборе инвестиций этим способом.

Плюсов для команд много, но и для участников ICO, то есть инвесторов, их достаточно. Во-первых, это потенциал роста стоимости токенов. Особенно, если вы участвуете в pre-ICO, когда токены продаются за полцены или даже дешевле. Представьте, если бы вы купили акции Apple, Google или Microsoft на десяток долларов в момент их выхода на биржу, да ещё со скидкой 50%?

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

Всё это очень хорошо и привлекательно, но как же принять участие в ICO человеку, который до 2017 года слышать-то слышал, но не имел никакого практического опыта с криптовалютами? Давайте разберёмся.

Немного о терминах и названиях

Сначала напомним, что значат все эти непонятные слова.

ICO («ай-си-оу»), сокращение от Initial Coin Offering (первичное предложение монет), это калька с сокращения Initial Public Offering (первичное предложение акций) – события, когда частная компания становится публичной и выпускает акции на бирже. ICO – это сбор каким-либо проектом, компанией или командой средств на разработку или развитие проекта. Причём средства привлекаются в криптовалюте, чтобы избежать долгой и дорогостоящей процедуры государственного регулирования. В этом есть свои плюсы и минусы, но здесь мы не будем обсуждать эти вопросы.

Токен – это «вторичная» криптовалюта, внутренняя валюта проекта. Близкий аналог – купон в магазине или подарочный сертификат. Только в мире криптовалют токены обычно тоже торгуются на бирже. Подарочный сертификат магазина вы обычно не можете обменять обратно на деньги, а вот токен – как раз можете.

Ethereum («эфириум») – это распределенный виртуальный компьютер, на базе которой большинство проектов проводят свои ICO. Ethereum имеет свою внутреннюю криптовалюту – Ether («эфир»). В Эфириуме можно создать смарт-контракт (по сути аналог договора, все пункты которого строго запрограммированы), запустить его в этой распределенной виртуальной машине и после этого уже никто, включая разработчиков, не смогут изменить его условия.

Wallet, «кошелек» для криптовалюты – это длинная строка символов, что-то типа идентификатора, аналога e-mail адреса если угодно. Туда можно отправить платёж в криптовалюте, и этот платёж сохранится на этом адресе. Человек может создать любое количество таких кошельков.

Итак, мы решили купить токенов в ICO какого-то проекта. Разберёмся, что для этого нужно сделать.

Шаг 1. Создать кошелёк Ethereum

Большинство ICO проводятся на системе Ethereum и принимают Ether в качестве оплаты за свои токены. Поэтому нас интересует именно кошелёк Ethereum, причём с поддержкой протокола ERC-20.

По нашему мнению, лучшие сервисы для создания кошельков – это:

  • Ethereum Mist Wallet
  • Ethereum’s online wallet
  • MyEtherWallet

Придумайте хороший пароль, напечатайте его в строке ввода, запомните или запишите его и нажмите ‘Create New Wallet’. Сразу сделаем оговорку, что MyEtherWallet не хранит никакие пароли, коды и адреса, так что сохранность всех паролей лежит целиком на пользователе. Сайт напоминает об этом на каждом шагу.

Здесь вам предлагается сохранить Keystore File. Это файл цифровой подписи к вашему кошельку. Нажмите ‘Download Keystore File’ и сохраните файл куда-нибудь в очень надёжное место, на компьютер, на флешку и обязательно сделайте резервную копию. Файл нужно и не потерять, и не дать ему «утечь» к злоумышленникам, например, в случае заражения компьютера вирусом. Помните, это ваши деньги.

Переходим к следующему шагу.

Здесь мы видим свой «секретный ключ», Private Key. Это строка символов. Запишите её или напечатайте, чтобы была бумажная копия. Ещё раз напомним, если секретный ключ потерян, восстановить его технически невозможно, в этом вся суть криптовалюты.

Поздравляем, кошелёк создан! Теперь нужно в него войти, «залогиниться». На следующем экране MyEtherWallet предложит открыть кошелёк с помощью только что созданного ключа.

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

Другой вариант – использовать файл ключа, который вы сохранили на своём компьютере, ввести придуманный вами на первом шаге пароль и тогда уже нажать ‘Unlock’.

После успешного ввода ключа, вы видите содержимое своего кошелька и можете производить операции.

Шаг 2: купить эфир

Теперь, чтобы было чем заплатить за токены выходящего на ICO проекта, нам потребуется криптовалюта Ethereum, «эфир». Он продаётся на криптовалютных биржах. Есть множество бирж, например, Coinbase, Kraken, Bitfinex, Bittrex. Некоторые из них позволяют обменивать на криптовалюту «обычные» (фиатные) деньги, то есть рубли, доллары, евро. Другие работают только с криптовалютой, например, позволяют купить эфир за биткойн. На биржах можно найти самый выгодный курс обмена, но при этом работать с биржами не просто. Вы должны прислать фотографию паспорта и пройти процедуру верификации.

К счастью, есть другой, более простой способ купить Эфир за рубли – это воспользоваться одним из обменников. Мы рекомендуем зайти на сайт bestchange.ru и выбрать лучший курс.
Указываем способ оплаты (например, карта Тинькофф) и валюту, которую мы ходим купить (Ethereum).

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

Шаг 3: заплатить эфиром за токен

Зайдите на сайт заинтересовавшего вас проекта. Для примера возьмем игровой проект Lordmancer2. Команда обещает, что после ICO этими токенами можно будет расплачиваться за игровые вещи и персонажей, а также выводить токены из игры наружу и обменивать на криптовалюту. То есть зарабатывать, играя. Думаю, стоимость этих токенов хорошо вырастет.

На сайтах ICO обычно много информации о проекте, в том числе описание бизнес-модели («whitepaper»), команда, менторы и блок, который отражает ход сбора средств.

Например, здесь указано общее количество собранного проектом «эфира», количество инвесторов, и обменный курс эфира на токены проекта.

Чтобы купить токены, нужно согласиться с формальными условиями и нажать ‘CONTRIBUTE’.

Появится окно, содержащее всю необходимую информацию: адрес кошелька, куда нужно отправить эфир, минимальный объём покупки и рекомендуемый «газ» (об этом чуть позже).
Самое важное здесь – адрес кошелька. Это такой же кошелёк, как у вас. Его адрес – это длинная строка символов. Скопируйте её в буфер обмена (клавиши ctrl-c/cmd-c).

Теперь откройте MyEtherWallet и нажмите там ‘Send Ether & Tokens‘.

Вставьте адрес кошелька ICO (кнопки ctrl-v/cmd-v), введите количество эфира, которое решили отправлять, и количество «газа».

Что это за газ? Каждая транзакция в сети Ethereum требует некоторого количества «топлива», чтобы сеть её исполнила. Это аналог банковской комиссии, только её размер устанавливается отправителем денег добровольно. Если установить слишком низкое количество «газа», транзакция может либо не исполниться вовсе, либо идти очень долго. В случае с ICO это не очень хорошо, потому что многие ICO собирают деньги очень быстро, и вы со своей транзакцией можете просто не успеть к раздаче. В кошельке MyEtherWallet, желаемое количество «газа» задаётся в верхнем правом блоке.

Рекомендуем установить значение между 4 и 10 Gwei. Это экономичный, но хорошо работающий вариант.

Наконец, нажмите ‘Generate Transaction’ и затем ‘Send Transaction’.

Вот и всё! Ваш эфир отправился в ICO, а взамен вам отправлены токены. Поскольку они по своей сути «вторичная» криптовалюта поверх Ethereum, их можно сохранить прямо в вашем MyEtherWallet.

Нажмите на ‘View Wallet Info’ и откройте кошелёк, как раньше. Справа увидите блок ‘Token Balances’.

Нажмите ‘Add Custom Token’.

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

Ну вот и всё! Вы купили токены проекта, который вам понравился, теперь они в полной безопасности лежат в вашем кошельке. Вы поддержали, надеемся, классный проект и отличную команду, да к тому же дали себе шанс хорошо заработать! Увидимся на следующем ICO!

Своя криптовалюта на ethereum

Общая рыночная капитализация глобального рынка криптовалют за последний год выросла с $6 млрд (в январе 2016 года) до $28 млрд (на текущий момент). С начала 2017 года рынок криптовалют вырос примерно в полтора раза. На биржах торгуются уже больше сотни разных криптовалют. Крупные организации объединяются в консорциумы, чтобы выпускать свою валюту. Даже государства делают свои национальные криптовалюты. Технологии блокчейна дошли до такого уровня, что уже почти любой может запустить свою криптовалюту, чем мы в этой статье и займемся. Легче всего создать свои монеты на смарт контрактах на базе ethereum.

Зайдя на крупнейшую в настоящий момент биржу криптовалют, вверху списка можно найти к примеру следующие валюты: GNT (Golem), REP (Augur).

Хотя они и находятся в одном списке с Bitcoin (первая и самая известная криптовалюта) и Ethereum (вторая по популярности и капитализации валюта) — они не являются самостоятельными криптовалютами в классическом их понимании. Они являются крипто-токенами (tokens или assets) на базе блокчейна ethereum.

Список подобных токенов можно найти например здесь, там же можно найти статистику по ним.

Нужны подобные токены обычно для следующего: какая-то компания хочет выпустить продукт, в котором нужна некая внутренняя валюта. Также эта компания хочет провести ICO (Initial Coin Offering), т.е. собрать денег на проект путём предварительной продажи токенов инвесторам. Так и появляются эти токены. Преимущества здесь прямо истекают из преимуществ блокчейна и смарт контрактов: прозрачность, защищенность и распределенность.

Например, посмотрим на одну из первых таких компаний Golem. Суть её заключается в следующем: когда нам понадобятся вычислительные мощности, мы можем идти не на Amazon (Azure, Google. ), а арендовать компьютер у другого участника сети, расплатившись с ним GNT токенами. Соответственно, также можно сдать свой компьютер в аренду и получить некоторое количество GNT. Дальше эти токены можно либо тратить внутри сети, либо продать на бирже. Некоторые токены могут приносить дивиденды, либо давать права голоса на проводимых выборах о каких-либо вопросах связанных с продуктом компании (такое реализуется на смарт контрактах).

Golem, выпустив 1,000,000,000 токенов, смогли привлечь 820,000 ETH, что по текущему курсы составляет примерно $32,800,000, но во времена их ICO курс был раза в 3 хуже.

Сейчас я вам расскажу, как сделать свою подобную криптовалюту (tokens) на базе Ethereum.

В настоящий момент стандартом считается ERC20, описанный здесь.

Интерфейс обычно выглядит примерно так:

/* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20

А реализация примерно так:

contract StandardToken is ERC20 < string public constant name = "Token Name"; string public constant symbol = "TKN"; uint8 public constant decimals = 18; mapping (address =>mapping (address => uint)) allowed; mapping (address => uint) balances; function transferFrom(address _from, address _to, uint _value) < var _allowance = allowed[_from][msg.sender]; // Check is not needed because safeSub(_allowance, _value) will already throw if this condition is not met // if (_value >_allowance) throw; balances[_to] +=_value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); > function approve(address _spender, uint _value) < allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); >function allowance(address _owner, address _spender) constant returns (uint remaining) < return allowed[_owner][_spender]; >function transfer(address _to, uint _value) < balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); >function balanceOf(address _owner) constant returns (uint balance) < return balances[_owner]; >>

Это текущее количество выпущенных монет:

uint public totalSupply;

Узнаём баланс по адресу:

function balanceOf(address who) constant returns (uint);

Переводим свои токены кому-то другому:

function transfer(address to, uint value);

Узнаём сколько монет нам разрешено потратить с чужого аккаунта. Управление этими разрешениями осуществляется функцией approve, описанной ниже:

function allowance(address owner, address spender) constant returns (uint);

Переводим чужие, но доступные нам токены кому-то другому:

function transferFrom(address from, address to, uint value);

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

function approve(address spender, uint value);

События о том, что кто-то перевел токены и о том, что кто-то разрешил пользоваться своими токенами:

event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value);

Полное имя токена:

string public constant name = "Token Name";

Краткое имя токена:

string public constant symbol = "TKN";

Количество десятичных разрядов. В ETH их 18, но можно поставить другое число

uint8 public constant decimals = 18; 

Словарь адрес -> количество токенов:

mapping (address => uint) balances;

Словарь доступных для распоряжения кому-то другому токенов:

mapping (address => mapping (address => uint)) allowed;

Вот, в принципе и все. Но в данном виде смарт контракт бесполезен, т.к. сейчас не предусматривает создание токенов и их количество всегда будет равно нулю.

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

function StandardToken()

Не помешало бы и добавить функцию, которая позволит покупать токены. Для простоты будем чеканить токены по курсу 1 к 1, т.е. за 1 ETH будем начислять 1 наш токен.
Выглядеть она может например так:

function mint() payable external

Осталось это опубликовать в блокчейн. После этого можно будет пересылать эти токены на другие аккаунты.

Полезные ссылки по теме:

Создаём собственный блокчейн на Ethereum

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

Инструкция включает в себя следующее:

  • Создание приватного блокчейна Ethereum с помощью geth.
  • Создание кошелька MetaMask для работы с приватным блокчейном.
  • Перевод средств между несколькими аккаунтами.
  • Создание, развёртывание и вызов смарт-контракта в приватном блокчейне с помощью remix.
  • Создание обозревателя блоков Ethereum поверх приватного блокчейна.

Установка Geth

Go Ethereum (или geth) это одна из трёх изначальных реализаций протокола Ethereum (наряду с C++ и Python). Она написана на Go, полностью открыта и лицензирована под GNU LGPL v3. Go Ethereum можно скачать или как отдельный клиент, работающий практически в любой ОС, или как библиотеку для встраивания в проекты Go, Android или iOS.

Для установки geth под Mac OS X мы использовали homebrew. Homebrew устанавливает всё необходимое, о чём не позаботилась Apple. Эта статья предполагает, что homebrew у вас уже установлен. Если нет, следуйте этой инструкции. После установки homebrew следующие команды установят geth.

brew tap ethereum/ethereum
brew install ethereum

Установить geth на Ubuntu довольно просто, достаточно запустить следующие команды apt-get.

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

Для Windows соответствующий инсталлятор лежит здесь. В случае каких-либо сложностей обращайтесь к инструкции.

Создание аккаунта майнера

Сначала нужно создать аккаунт для майнинга Ethereum. Так мы сгенерируем пару приватного и публичного ключей с паролем для защиты. Не потеряйте свой пароль, иначе никогда не сможете восстановить ключи. По умолчанию, ключи хранятся внутри: /keystore. Всё, что сохраняет geth, хранится внутри datadir (кроме PoW Ethash DAG). Расположение директории по умолчанию зависит от ОС. Всегда лучше изменить стандартные настройки и задать свой собственный путь для приватного блокчейна.

  • Mac: ~/Library/Ethereum
  • Linux: ~/.ethereum
  • Windows: %APPDATA%\Ethereum

Следующая команда показывает, как создать аккаунт с произвольным путём для директории данных. Эта команда выдаст ваш адрес Ethereum.

geth account new —datadir

geth account new —datadir /path/to/data/dir

Создание первичного блока (genesis block)

Блокчейны Ethereum отличаются друг от друга первичными блоками. Каждый блокчейн начинается с такого блока, а всё остальное строится поверх него, где каждый следующий блок ссылается на предыдущий. В публичном блокчейне Ethereum первичный блок был создан 20 июля 2015 года. Для нашей собственной цепочки нужно создать собственный первичный блок. Инициализация приватного блокчейна с заданным первичным блоком осуществляется следующей командой:

geth -datadir /path/to/data/dir init /path/to/genesis.json

  • datadir: директория для баз данных и хранилища ключей.
  • init: начальная загрузка и инициализация нового первичного блока — с соответствующим файлом json.
< "config": < "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 >, "difficulty": "0x400", "gasLimit": "0x2100000", "alloc": < "7a69b359e86893efa3d9732e4c65ced51567edd0": < "balance": "0x1337000000000000000000" >> >
  • chainid: обеспечивает способ совершения транзакций в Ethereum без использования ETC (Ethereum Classic) или тестовой сети Morden. EIP 155 предусматривает следующие значения chainid для разных сетей: основная сеть Ethereum (1), основная сеть Morden / Expanse (2), Ropsten (3), Rinkeby (4), основная сеть Rootstock(30), тестовая сеть Rootstock (31), Kovan (42), основная сеть Ethereum Classic (61), тестовая сеть Ethereum Classic (62), приватные цепочки geth (1337 по умолчанию). В нашем примере мы указали идентификатор 15, который не используется ни одной из существующих цепей.
  • homesteadBlock: значение 0 указывает на использование релиза Ethereum Homestead. Это второй из основных релизов Ethereum — а недавно, 16 октября 2017 года, Ethereum форкнулся на релиз Byzantium.
  • eip155Block: значение 0 указывает, что этот блок поддерживает EIP (Ethereum improvement proposal, предложение об улучшении Ethereum) номер 155. Предложения EIP описывают стандарты для платформы Ethereum, в том числе ключевые спецификации протокола, клиентские API и стандарты контрактов.
  • eip158Block: значение 0 указывает, что этот блок поддерживает EIP 158.
  • difficulty: значение соответствует уровню сложности, которое применяется для поиска случайного значения nonce к этому блоку. В этой статье подробно объясняется, как рассчитывается уровень сложности в Ethereum.
  • gasLimit: газ — это внутренняя единица оплаты для проведения транзакции или контракта в Ethereum. Каждая инструкция, которая отправляется в виртуальную машину Ethereum Virtual Machine (EVM) для обработки транзакции или смарт-контракта стоит определённое количество газа. Если транзакция не получает нужного количества газа, то она не пройдёт. При совершении каждой транзакции в Ethereum вы указываете лимит газа — максимальное количество, которое могут использовать все сопутствующие операции для этой транзакции. Параметр gasLimit в блоке определяет общий лимит всех транзакций в блоке.
  • alloc: параметр для предварительного распределения Эфира из первичного блока на один или несколько аккаунтов. В вышеприведённом примере первичного блока весь Эфир поступает на аккаунт, созданный с самого начала.

Начинаем майнинг

Всё готово! Теперь можно начать майнинг через geth с помощью следующей команды. Здесь параметр networkid выделяет эту сеть Ethereum среди других. Все майнеры, желающие подключиться к этой сети, должны использовать тот же идентификатор networkid с тем же первичным блоком.

geth —mine —rpc —networkid —datadir

geth —mine —rpc —networkid 1999 —datadir /path/to/data/dir

  • networkid: сетевой идентификатор этой сети Ethereum. Выбираете любое значение. Например, Olympic (0), Frontier (1), Morden (2), Ropsten (3).
  • mine: включает майнинг.
  • rpc: включает сервер HTTP-RPC. Приложения кошельков могут подключаться по http к этому узлу майнинга.
  • rpcaddr: указывает интерфейс для прослушивания на сервере HTTP-RPC (по умолчанию: “localhost”)
  • rpcport: указывает порт для прослушивания на сервере HTTP-RPC (по умолчанию: 8545)
  • rpcapi: указывает API, доступные по интерфейсу HTTP-RPC (по умолчанию: “eth,net,web3”)
  • rpccorsdomain: активирует CORS, указывая разделённый запятыми список сторонних доменов, с которых можно принимать запросы (cross-origin). Полезная опция при использовании для размещения смарт-контрактов браузерных редакторов Solidity (Remix) или браузерных кошельков. Например, такой параметр позволит принимать CORS с любого домена.

Подключаем консоль Geth

Можно или начать майнинг как console , или запустить console отдельно — и подключить её к узлу майнинга командой attach. Сейчас покажу, как это делается, и проверьте, что вы указали параметры в том же порядке.

geth —datadir /path/to/data/dir attach ipc:/path/to/data/dir /geth.ipc

Консоль подключается к узлу майнинга по IPC. IPC (межпрорцессное взаимодействие) работает на локальном компьютере. В этом случае geth создаёт конвейер Geth (который представлен файлом /geth.ipc) в файловой системе локального компьютера — а консоль подключается к этому узлу по IPC.

Просмотр всех аккаунтов

Как только вы подключились к консоли geth, можно попробовать запустить следующую команду для отображения всех доступных аккаунтов.
> eth.accounts
[«0x7a69b359e86893efa3d9732e4c65ced51567edd0»]

Просмотр баланса аккаунта

Следующая команда позволяет просмотреть баланс заданного аккаунта из консоли geth.

Подключение кошелька MetaMask Ethereum

MetaMask — это кошелёк Ethereum, работающий как расширение Chrome. Он внедряет Ethereum Web3 API в каждый контекст JavaScript на сайте, так что все эти приложения способны получать информацию из блокчейна. MetaMask также позволяет создавать собственные идентификаторы (identities) и управлять ими, так что когда приложение хочет совершить транзакцию и записать данные в блокчейн, у пользователя есть безопасный интерфейс для просмотра транзакции, прежде чем одобрить или отклонить её.

Для подключения MetaMask к приватному блокчейну Ethereum нужно выбрать правильные имя хоста и порт. Web3 API — это программные интерфейсы JavaScript для Ethereum, реализованные в web3.js. Чтобы JavaScript-приложение обменивалось данными с узлом Ethereum, MetaMask использует библиотеку web3.js с удобным интерфейсом для методов rpc. Она обменивается с локальным узлом вызовами rpc. Библиотека web3.js работает с любым узлом Ethereum, у которого есть слой rpc. Вы могли заметить выше, что при запуске узла майнинга можно передать параметр rpcapi и указать, какие интерфейсы мы хотим использовать на этом узле. По умолчанию, если ничего не указать, будут использоваться интерфейсы eth,net,web3 .

Передача Эфира

MetaMask создаст аккаунт Ethereum — секретный ключ и адрес Ethereum. Дальше разберёмся, как передавать Эфир с первого аккаунта, созданного в самом начале, на аккаунт MetaMask из консоли geth. Для передачи средств аккаунта нужно использовать для подписи секретный ключ этого аккаунта. Чтобы его использовать, нужно его сначала разблокировать, как показано ниже.

personal — это управляющие программные интерфейсы в geth. Кроме personal, geth также предоставляет следующие управляющие API: admin, debug, miner и txpool. Как только мы разблокировали аккаунт, мы можем определить в консоли три переменные: для sender, receiver и amount, то есть получателя, отправителя и количества передаваемых средств. Значение sender — это адрес Ethereum, который мы создали в начале этой статьи, а значение receiver — адрес Ethereum, созданный в MetaMask.

> var sender = «0x7a69b359e86893efa3d9732e4c65ced51567edd0»;
> var receiver = «0xA9f28458eE1170F285440990c196c1592D3a73f5»
> var amount = web3.toWei(1, «ether»)

Следующая команда осуществит передачу средств — она ссылается на переменные, которые мы определили выше.

Просмотр баланса аккаунта в MetaMask

Когда мы завершили передачу средств, следуя вышеуказанным шагам, можно просмотреть баланс аккаунта двумя способами. Первый способ — напрямую из плагина MetaMask, как показано ниже.

Другой способ — через консоль geth, с помощью следующей команды.

Редактор Remix для Solidity

Solidity — самый популярный язык программирования для написания смарт-контрактов Ethereum. Remix — это IDE для Solidity со встроенным отладчиком и средой тестирования. Онлайновый редактор remix можно найти здесь. Remix подключается к любой сети Ethereum. Для подключения к нашему локальному блокчейну убедитесь, что вы запустили узел майнинга следующей командой, как показано ниже. О параметре —rpccorsdomain «*» мы уже говорили. Вместо звёздочки (максимальная открытость) в качестве значения этого параметра можно указать “https://remix.ethereum.org”.

geth —mine —rpc —rpccorsdomain «*» —networkid —datadir

Для подключения remix к нашей закрытой сети нужно изменить Environment на Web3 Provider, это делается на вкладке Run. При этом изменении remix попросит указать Web3 Provider Endpoint — установите значение http://localhost:8545 . Пока вы явно не изменили порт, по умолчанию узел для майнинга стартует на порту 8545.

Создание смарт-контракта

Теперь всё готово для написания самого первого смарт-контракта, который мы запустим в сети Ethereum. Скопируйте следующий код и вставьте его в онлайновый редактор remix. Это очень простой смарт-контракт — я даже не хочу объяснять его построчно. В следующей статье подробно рассмотрим язык программирования Solidity.

pragma solidity ^0.4.11; contract Hello < // a string variable string public greeting; // the function with the same name as the class is a constructor function Hello(string _greeting) < greeting = _greeting; >// change the greeting message function setGreeting(string _greeting) < greeting = _greeting; >// get the greeting message function greet() constant returns (string _greeting) < _greeting = greeting; >>

Если вы не меняли настройки по умолчанию в remix, то они установлены на автоматическую компиляцию. Если нет, то надо скомпилировать код.

После компиляции при нажатии кнопки Details вы увидите расчётное количество газа, необходимое для создания этого смарт-контракта.

Внедрение смарт-контракта

Теперь можем внедрить смарт-контракт в наш приватный блокчейн. На вкладке Run убедитесь, что у вас выбран правильный аккаунт Ethereum и правильный лимит газа. Значения gas price и value можно указать нулевыми.

Здесь транзакция Ethereum, подписанная с выбранного выше аккаунта для создания смарт-контракта в блокчейне. Для подписи сначала нужно разблокировать аккаунт через консоль geth.

Теперь можете нажать кнопку Create, чтобы создать смарт-контракт. У нас в нём конструктор, принимающий строковый параметр, вот почему remix показывает поле ввода вместе с кнопкой Create. Сюда можно ввести какое-нибудь значение (в кавычках, например, “Hi”) — или просто оставить пустым. В консоли geth при создании смарт-контракта появится следующее сообщение. Также обратите внимание, что если не установлен корректный gas limit, то такая команда приведёт к ошибке.

INFO [10-19|07:31:08] Submitted contract creation fullhash=0xf5511bb9d088672ac0d3896b8590b9a3e25484300f02deecdd739c3a549ed33a contract=0x42b7E903Fb42e191a7D623cbb4b7b4330D329d78

Вызов смарт-контракта

После создания смарт-контракта интерфейс remix немного изменится — как показано ниже, на вкладке Run.

Здесь можно установить некое значение для метода setGreeting — и нажать на него для вызова смарт-контракта. Опять же следует убедиться, что аккаунт разблокирован, потому что при вызове смарт-контракта мы использует транзакции Ethereum и требуется подпись инициатора. Проделав операцию с setGreeting, можно вызвать и другие методы.

Ethereum Block Explorer

Возможно, вы знакомы с сервисом etherscan для сканирования публичного блокчейна Ethereum. Но его нельзя направить на наш локальный блокчейн. Хотя Ethereum Block Explorer даже близко не сравнится по функциональности с etherscan, он вполне подходит для изучения того, что происходит в нашем локальном блокчейне.

Для установки программы сначала возьмём исходники со следующего репозитория.

git clone https://github.com/carsenk/explorer

Затем запустим команду установки из директории Ethereum Block Explorer.

По окончании установки запустите Ethereum Block Explorer следующей командой — и получите доступ к веб-консоли через http://localhost:8000 .

Перед подключением Ethereum Block Explorer к локальному блокчейну убедитесь, что запустили узел майнинга следующей командой с параметром —rpccorsdomain «*» — его значение мы обсуждали ранее.

geth —mine —rpc —rpccorsdomain «*» —networkid —datadir

Обновление: Обсуждение этой статьи на Hacker News см. здесь. Не стесняйтесь присоединяться.

Резюме

В этой статье мы обсудили, как создать приватный блокчейн Ethereum с помощью geth. Затем настроили кошелёк MetaMask для работы с этим блокчейном и и перевели средства на аккаунт Ethereum, созданный в MetaMask. Для создания, внедрения и вызова смарт-контракта использовалась онлайновая IDE remix. Наконец, мы установили Ethereum Block Explorer для изучения приватного блокчейна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *