Я знаю, что Truffle стал стандартом для работы со смарт-контрактами, но фундаментальная и прозрачная практика во всем - вот что делает все более понятным.

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

Я надеюсь тебе это понравится.

Итак, приступим.

Настройка среды

  1. Любой текстовый редактор (возможно, Vim, ха-ха)
  2. NodeJS (последняя версия) - https://nodejs.org/en/
  3. Ганаш для моделирования блокчейна в один клик! - https://truffleframework.com/ganache
  4. Желание учиться

Шаг 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 для взаимодействия со смарт-контрактом.

Надеюсь, вы нашли эту информацию полезной. Если да, пожалуйста, оцените статью аплодисментами. :)

Также прочтите

Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик