Я знаю, что Truffle стал стандартом для работы со смарт-контрактами, но фундаментальная и прозрачная практика во всем - вот что делает все более понятным.
В этом руководстве мы напишем простой смарт-контракт в Solidity и будем обращаться к нему напрямую через Web3. Конечно, это будет дольше, чем метод трюфеля, но он того стоит.
Я надеюсь тебе это понравится.
Итак, приступим.
Настройка среды
- Любой текстовый редактор (возможно, Vim, ха-ха)
- NodeJS (последняя версия) - https://nodejs.org/en/
- Ганаш для моделирования блокчейна в один клик! - https://truffleframework.com/ganache
- Желание учиться
Шаг 1. Написание смарт-контракта
Поскольку это руководство не посвящено надежности как таковой, мы просто напишем базовый смарт-контракт.
Откройте текстовый редактор и создайте новый файл с именем Add.sol
.
pragma solidity ^0.4.18; contract Add { uint num1; uint num2; uint num3; function Sum (uint _num1, uint _num2) public { num3 = _num1 + _num2; } function getSum() public view returns (uint){ return num3; } }
Эта программа берет два числа, складывает их и возвращает сумму.
Шаг 2. Запустите Ganache
Убедитесь, что сервер RPC - http://127.0.0.1:7545.
Шаг 3: Добавьте пакет Web3 и Solc с помощью NPM
Откройте свой терминал и установите пакеты Web3 и Solc с помощью команды -
$ npm install web3 solc --save
⚠️ Убедитесь, что вы добавили эти модули в ту же папку, что и ваш смарт-контракт.
Шаг 4. Использование консоли NodeJS для взаимодействия с контрактом
Чтобы войти в консоль NodeJS, напишите node
в терминале.
Вы должны увидеть что-то вроде этого -
Шаг 4.1: Загрузите библиотеку Web3 в консоль.
> Web3 = require ('web3')
Шаг 4.2: Создайте поставщика HTTP (должен быть таким же, как Ganache)
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"))
Эта команда гарантирует, что мы подключились к Ganache.
В результате будет получен длинный результат.
Шаг 4.3: Загрузите все 10 адресов Ganache с помощью Web3
Поскольку мы подключились к нашему локальному блокчейну Ganache через порт 7545, давайте проверим, правильно ли загружены адреса.
> web3.eth.accounts
Шаг 4.4: Загрузка в компилятор Solidity (Solc)
> solc = require ('solc')
Шаг 4.5: Загрузите Add.sol
исходный код с помощью встроенного модуля узла (FS)
> sourceCode = fs.readFileSync('Add.sol').toString()
Шаг 4.6: Скомпилируйте код с помощью Solc
> compiledCode = solc.compile(sourceCode)
Это сгенерирует много вещей, но важны только следующие три:
- Байт-код
- Метаданные
- Код операции
- Интерфейс
Каждый из них связан с фундаментальной концепцией виртуальной машины Ethereum (EVM). Https://ethereum.github.io/yellowpaper/paper.pdf
Шаг 4.7: Определение ABI смарт-контракта
> contractABI = JSON.parse(compiledCode.contracts[':Add'].interface)
Двоичный интерфейс приложения (ABI) необходим для доступа к байт-коду контракта. Он содержит список всех функций и аргументов в формате JSON. Это то, что мы будем использовать для доступа к нашему контракту.
> addContract = web3.eth.contract(contractABI)
В результате будет получен длинный результат.
Шаг 4.8: Определите байт-код
> byteCode = compiledCode.contracts[':Add'].bytecode
Шаг 4.9: Разверните контракт на Ganache
> addDeployed = addContract.new({data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
Используя первую учетную запись Ganache с 4700000 wei gas, мы развернем байт-код.
⚠️ Имейте в виду, что запись чего-либо в блокчейн потребует некоторой платы. На этом этапе мы записываем смарт-контракт в блокчейн.
Это даст нам хэш транзакции, и вы сможете просмотреть эту транзакцию в Ganache на вкладке «Транзакции».
Шаг 4.10: Создайте экземпляр для использования контракта
> app = addContract.at(addDeployed.address)
addDeployed.address
- это адрес в блокчейне, где размещен контракт.
Шаг 4.11: Давайте сложим 4 и 8, используя наш контракт.
> app.Sum(4, 8, {from: web3.eth.accounts[0]})
Поскольку эта Sum
функция записывает в блокчейн, мы должны заплатить немного газа, который оплачивается первой учетной записью в Ganache, поскольку мы использовали accounts[0]
.
Вызов контракта отображается в Ganache.
Чтобы получить сумму, вызовем функцию getSum
.
Поскольку JavaScript не может читать uint256
, мы преобразуем результат toString()
.
Поскольку функция getSum
ничего не записывает в блокчейн, она не приведет ни к какой транзакции.
Вот как мы используем консоль JavaScript для взаимодействия со смарт-контрактом.
Надеюсь, вы нашли эту информацию полезной. Если да, пожалуйста, оцените статью аплодисментами. :)
Также прочтите
- Лучшие боты для криптовалюты
- Лучший биткойн-аппаратный кошелек
- Лучшее крипто-налоговое программное обеспечение
- Лучшие криптографические торговые платформы
- Лучший кошелек для Uniswap
- Лучшие платформы криптографического кредитования
- Обзор Bitsgap - бот для криптовалюты, который делает легкие деньги
- Quadency Review - робот для торговли криптовалютой, созданный для профессионалов
- Обзор 3commas | Отличный крипто-торговый бот
- 3Commas против Cryptohopper
- Путеводитель идиотов по Маржинальной торговле на Bitmex
- Полное руководство по Crypto Swing Trading
- Расширенное руководство по маржинальной торговле Bitmex
- Лучшие криптографические API для разработчиков
- Гайд Криптоарбитраж: Как заработать новичку
- Лучшие провайдеры Биткойн-узлов
- Лучший инструмент для построения графиков криптовалюты
Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик