Создайте токен Ethereum с помощью контрактов с открытым кодом (open-zeppelin)

1656652575 sozdajte token ethereum s pomoshhyu kontraktov s otkrytym kodom open zeppelin

от Дэнни

hLS-y6VnzymEtlA4KLHiQYz9AOBbfGytmdAE

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

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

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

Требования:

  • Github
  • терминал
  • NodeJS
  • НПМ
  • Метамаска (для начального создания аккаунта)

Ладно, начнем кодировать! Первое, что мы хотим сделать, это скачать truffleглобально. Вы можете посетить их репо на truffle, и вот такой фрагмент для установки:

npm install -g truffle

*Примечание: убедитесь, что у вас последняя версия truffle, если вы установили ее раньше

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

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

Итак, у нас есть два варианта. Или вы можете клонировать репо, которое я сотворил, следуя этому:

git clone -b initial_step https://git@github.com/danieljoonlee/ethereum_token_tutorial.git

Или вы можете сделать это в своем терминале в новом каталоге:

truffle init

Если вы придерживались второго варианта выполнения truffle init. Каталог должен выглядеть так:

etherem_token_tutorial|___contracts| |_____ConvertLib.sol| |_____MetaCoin.sol| |_____Migrations.sol|___migrations| |_____1_initial_migrations.js| |_____2_deploy_contracts.js|___test| |_____TestMetacoin.sol| |_____metacoin.js|___truffle.js

Удалите ConvertLib.sol , MetaCoin.sol , TestMetacoin.sol , metacoin.js.

Теперь ваш каталог должен выглядеть так:

etherem_token_tutorial|___contracts| |_____Migrations.sol|___migrations| |_____1_initial_migrations.js| |_____2_deploy_contracts.js|___test|___truffle.js

Прекрасно. Сейчас мы двигаемся. Truffle помогает нам заключать разумные контракты и развертывать их. Но мы удалили наши файлы смарт-контрактов, кроме помощника по миграции. Не беспокойтесь, здесь на помощь приходит Open-Zeppelin.

Open-Zeppelin это репо с открытым исходным кодом, где вы можете найти смарт-контракты с лучшими практиками, хорошим тестовым покрытием и, скорее всего, проверенные*.

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

Вот ссылка, если вас интересуют атаки на смарт-контракт: Ссылки

Для нас использовать любой Open-Zeppelin контрактов, нам нужно установить его в наш репозиторий:

npm init -ynpm install -E zeppelin-solidity

Мы инициализировали package.json с помощью npm init-y. Мы также установили пакет для использования контрактов Open-Zeppelin.

Ладно, мы напишем Solidity. Раньше я упоминал в статье, что это не будет много кода, и я не шутил!

Создайте новый файл в contracts папку. В моем случае я назвал это TestToken.sol

Теперь ваш каталог должен выглядеть так:

etherem_token_tutorial|___contracts| |_____Migrations.sol| |_____TestToken.sol***(this one is new)|___migrations| |_____1_initial_migrations.js| |_____2_deploy_contracts.js|___test|___truffle.js

в TestToken.sol нам нужен такой код:

// TestToken.solpragma solidity ^0.4.18;
import "zeppelin-solidity/contracts/token/ERC20/MintableToken.sol";
contract TestToken is MintableToken {    string public constant name = "Test Token";    string public constant symbol = "TT";    uint8 public constant decimals = 18;}

Давайте разберем это, поскольку это достаточно много, хотя это всего несколько строк кода.

pragma solidity ^0.4.18;

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

import "zeppelin-solidity/contracts/token/ERC20/MintableToken.sol";

В приведенном выше фрагменте кода Open-Zeppelin так полезен. Если вы знаете, как работает наследование, наш контракт наследует MintableToken. Если вы не знаете, как работает наследование, MintableToken имеет множество функций, сохраненных в inMintableToken.sol. Мы можем использовать эти функции для создания нашего токена. Если вы посетите этот MintableToken, вы заметите массу функций и еще большее наследование. Это может быть немного кроличья нора, но для этой демонстрационной цели я хочу, чтобы мы выпустили токен в тестовую сеть.

Для нас Mintable позволяет создавать сколько угодно токенов, поэтому мы не будем начинать с первоначального предложения. В следующей статье мы создадим службу nodejs, которая будет создавать новые маркеры и обрабатывать другие стандартные функции ERC-20.

Следующий фрагмент кода:

contract TestToken is MintableToken {    string public constant name = "Test Token";    string public constant symbol = "TT";    uint8 public constant decimals = 18;}

Здесь мы можем настроить токены. В моем случае я назвал свой Test Token с символом TT и десятичными знаками 18. Но почему 18 десятичных знаков?

Десятичное число 18 достаточно стандартно в сообществе. Итак, если у нас есть один тестовый маркер, он потенциально может выглядеть так: 1,1111111111111111111.

Щенок. Это все кодирование Solidity, которое нам нужно сделать для этого токена. Мы унаследовали все основные функции стандартизированного токена ERC 20 от Open-Zeppelin. После этого нам нужно установить наши константы для имени, символа и десятичных дробей.

Прежде чем мы забудем, мы должны создать аккаунт Metamask и получить его финансирование с помощью testnet ethereum.

Ищите MetaMask расширение для Chrome или перейдите по этой ссылке

Ku4UgJTh5NkieV0u5N0bz7DwguV7tm3haPCG
Расширение Metamask для Google Chrome

После установки MetaMask вы должны увидеть ряд шагов. Вы можете прочесть подобные условия использования. В конце концов вы добьетесь:

qL7f7xIaYPd47FVOeJSrOwjVY7UFkPtZSxiU
Экран пароля метамаски

Введите пароль и подтвердите его. Нажав кнопку «Создать», вы увидите другой экран.

xGDUdHZfmrKiwkWN4326tleb57BEnR7K3ZHf
Секрет метамаски

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

Также больше важно это изменить свой тест с Mainnet Test Net на Ropsten Test net. Он находится в левом верхнем углу вкладки MetaMask. Вот нисходящий список:

AIRKEnmtyT5LBg9skSuZgB-hCP1hTApLujWL
Список Testnet

Причина, по которой мы используем тестовую сеть Ropsten, в том, что это ближайшая тестовая сеть/реализация основной сети Ethereum.

Далее вам нужно будет скопировать свой адрес в буфер обмена с ... меню такое:

BPKJes6P8mD8Eeq5d2R6hzh8CA7k6ELYUI6u
Экран аккаунта Metamask

Вы должны иметь адрес, похожий на этот, скопированный в буфер обмена:

address: 0x8EeF4Fe428F8E56d2202170A0bEf62AAc93989dE

Это адрес, с которого мы собираемся разворачивать наш маркерный контракт. Одно, что вам нужно знать о развертывании контрактов, это то, что они стоят Ethereum, вернее Gas. Нам нужно будет добавить немного тестовой сети Ethereum в наши учетные записи.

Теперь, когда у вас есть свой адрес, перейдите по этой ссылке на кран Ropsten:

Кран Ethernet
Редактировать описаниекран.ropsten.be

Скопируйте и вставьте свой адрес, и вскоре у вас будет 1 Ethereum в своем кошельке MetaMask для вашего адреса.

qzFb76GBmq7umMUjZNksh2Nvxq5m00TuUzkv
Аккаунт с 1 эфиром

Еще одна вещь, прежде чем мы начнем кодировать наш процесс развертывания! Мы будем использовать бесплатный API под названием Infura.io:

Infura – масштабируемая блокчейн-инфраструктура
Безопасный, надежный и масштабируемый доступ к API Ethereum и шлюзам IPFS.infura.io

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

Test Ethereum Network (Ropsten)https://ropsten.infura.io/API_KEY

Скопируйте API_KEY.

Почти там! Теперь давайте начнем работать над нашим развертыванием. Давайте вернемся к нашему коду.

Прежде всего, давайте поговорим о безопасности. Создайте новый файл в своем корневом каталоге под названием .env. Ваша файловая структура должна выглядеть так:

etherem_token_tutorial|___contracts| |_____Migrations.sol| |_____TestToken.sol|___migrations| |_____1_initial_migrations.js| |_____2_deploy_contracts.js|___test|___truffle.js|___.env**(new file)

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

//.env fileINFURA_API_KEY=API_KEYMNENOMIC=MNEOMIC_FROM_METAMASK

Сначала добавьте API_KEY, который вы скопировали в файл.

Помните Mneomic (начальные слова) по инициализации расширения Metamask chrome? Это нам сейчас пригодится для развертывания контрактов. Если вы скачали или записали свою мнеомику, теперь запишите их в свой .env файл MNENOMIC=SOME KEY PHRASE YOU DONT WANT THE PUBLIC TO KNOW.

ВАЖНО***

Мы добавили a .env файл!!! Нам нужно добавить a .gitignore файл сейчас, чтобы избежать добавления .env в общедоступном хранилище, если вы когда-нибудь решите сделать код общедоступным!

Создать .gitignore файл в том же каталоге, что и ваш .env. Теперь это должно выглядеть так:

etherem_token_tutorial|___contracts| |_____Migrations.sol| |_____TestToken.sol|___migrations| |_____1_initial_migrations.js| |_____2_deploy_contracts.js|___test|___truffle.js|___.env|___.gitignore**(newfile)

Внутри вашего .gitignore файл:

// .gitignorenode_modules/build/.env

Мы хотим игнорировать node_modules/ потому что когда мы делаем npm install он загрузит пакеты из нашего package.json. Мы хотим игнорировать buildпоскольку позже, когда мы запустим сценарий, он автоматически создаст этот каталог для нас. Мы тоже хотим игнорировать .env поскольку он содержит приватную информацию, которую мы не хотим обнародовать.

Прекрасно! В нашем терминале нам нужно добавить еще два модуля.

npm install --save dotenv truffle-hdwallet-provider

Поскольку мы вводим приватную информацию, нам нужен способ доступа к этим переменным. .envи dotenv пакет поможет нам.

Второй пакет, truffle-hdwallet-provider, является поставщиком с поддержкой кошелька. Без этого нам нужно было бы загрузить все блоки или использовать легкий кошелек для новых транзакций в сети Ethereum. С поставщиком кошелька и API Infura. Мы можем разворачивать мгновенно, также минуя болезненные процессы.

Над в truffle.js в нашем корневом каталоге нужно изменить некоторые конфигурации.

// truffle.jsrequire('dotenv').config();const HDWalletProvider = require("truffle-hdwallet-provider");
module.exports = {  networks: {    development: {      host: "localhost",      port: 7545,      gas: 6500000,      network_id: "5777"    },    ropsten: {        provider: new HDWalletProvider(process.env.MNENOMIC, " + process.env.INFURA_API_KEY),        network_id: 3,        gas: 4500000    },  }};

Первая строчка указывает, что мы хотим использовать .env переменные в этом репо. Как правило, в большинстве программ это требуется только один раз в исходном файле конфигурации.

Большинство из них шаблонны. Основная глава, на которой мы хотим сосредоточиться, это сеть ropsten.

ropsten: {        provider: new HDWalletProvider(process.env.MNENOMIC, " + process.env.INFURA_API_KEY),        network_id: 3,        gas: 4500000    },

Провайдером является наша сеть. В нашем случае мы хотим развернуть наш маркер в Ropsten сети. Использование HDWalletProvider мы передаем два аргумента, process.env.MNENOMIC, " + process.env.INFURA_API_KEY. Мы получаем доступ к нашим .env переменные путем ссылки process.env.VARIABLE_NAME_IN_ENV.

Мы установили network_id: 3 потому что это представляет Ропстена. 1 является основной сетью Ethereum и 2 это старая тестовая сеть.

Наконец, мы установили gas: 4500000, поэтому нам сначала нужен был Ethereum. Мы используем gas/ethereum всякий раз, когда нам нужно что-то изменить/добавить в сети Ethereum.

Ладно, до последнего шага перед развертыванием!

В нашем migrations/2_deploy_contract.jsнам нужно внести некоторые изменения в наш контракт.

// 2_deploy_contract.js
const TestToken = artifacts.require("./TestToken.sol");
module.exports = function(deployer) {  deployer.deploy(TestToken);};

Если вы назвали свой файл контракта токена иначе. Вам нужно заменить TestToken.sol в файл, который вы назвали.

truffle compile

Это должно создать новую папку в вашем каталоге:

etherem_token_tutorial|___build| |_____contracts|    |_____BasicToken.json|    |_____ERC20.json|    |_____ERC20Basic.json|    |_____Migrations.json|    |_____MintableToken.json|    |_____Ownable.json|    |_____SafeMath.json|    |_____StandardToken.json|    |_____TestToken.json|___contracts| |_____Migrations.sol| |_____TestToken.sol|___migrations| |_____1_initial_migrations.js| |_____2_deploy_contracts.js|___test|___truffle.js|___.env|___.gitignore**(newfile)

В нашей папке сборника есть куча контрактов, которые мы унаследовали от библиотеки Open-Zeppelin. Если вы хотите узнать больше о стандартах ERC-20, я бы посмотрел вики. Если будет достаточно людей, которые спрашивают это, я смогу сделать еще одну публикацию в блоге об этом. Пока вот ссылка на вики.

Вот и настал момент истины. Теперь нам нужно развернуть контракты в сети Ropsten. Введите следующую строчку в свой терминал:

truffle migrate --network ropsten

Вы должны получить серию строк в вашем терминале, например:

Using network 'ropsten'.
Running migration: 1_initial_migration.js  Deploying Migrations...  ... 0x7494ee96ad7db4a560b6f3169e0666c3938f9f54208f7972ab902feb049a7f68  Migrations: 0x254466c5b09f141ce1f93689db6257b92133f51aSaving successful migration to network...  ... 0xd6bc06b3bce3d15dee4b733e5d4b09f0adb8f93f75ad980bad078484641d36e5Saving artifacts...Running migration: 2_deploy_contracts.js  Deploying TestToken...  ... 0x7e5c1b37f1e509aea59cd297417efe93eb49fdab2c72fa5c37dd2c63a3ba67b7  TestToken: 0x02ec6cbd89d3a435f8805e60e2703ef6d3147f96Saving successful migration to network...  ... 0x2fd6d699295d371ffd24aed815a13c5a44e01b62ca7dc6c9c24e2014b088a34eSaving artifacts...

Это займет некоторое время. После полного развертывания скопируйте последний txid. В моем случае:

0x2fd6d699295d371ffd24aed815a13c5a44e01b62ca7dc6c9c24e2014b088a34e

Здесь будет адрес вашего контракта-токена. Вот ссылка на мой txid:

Трансакция Ropsten 0x2fd6d699295d371ffd24aed815a13c5a44e01b62ca7dc6c9c24e2014b088a34e
Подробная информация о транзакции Ropsten (ETH) для 0x2fd6d699295d371ffd24aed815a13c5a44e01b62ca7dc6c9c24e2014b088a34eropsten.etherscan.io

Имеющий адрес самого договора:

Счета Ропстена, адрес и контракты
Ethereum BlockChain Explorer, API и аналитическая платформаropsten.etherscan.io

Вы можете получить завершенное хранилище github здесь.

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

Если вы найдете какие-либо ошибки или описки, сообщите мне! Также я всегда ищу увлекательные проекты в блокчейн-пространстве.

Если вы нашли это полезным и хотите купить мне пива:

BTC: 3Kxz6zPweuiaVG28W78pX9DoEZVkLhH4nT

BCH: qqwusc2peyvlh3wgl0tpt3ll4ug9zujfvy9586tgd4

ETH: 0x96Ee87e22D899BDc27EAD4fE3FCA8e9F39176B4C

LTC: MDhqUBtGgVZrDG7TYzzyK2a2b99sHyHaQQ

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

Ваш адрес email не будет опубликован.