Взаимодействие с Moonbeam с помощью Truffle
Вступление
В этом руководстве рассматривается процесс размещения смарт-контракта на основе Solidity на ноде Moonbeam с использованием Truffle, широко используемого инструмента разработки смарт-контрактов на Ethereum. Учитывая особенности совместимости Moonbeam с Ethereum, Truffle можно использовать напрямую с нодой Moonbeam.
Примечание:
Это руководство было создано с использованием версии v3 Moonbase Alpha. Платформа Moonbeam и компоненты Frontier на которые она опирается для совместимости с Ethereum на основе субстратов все еще находятся в очень активной разработке. Примеры в этом руководстве предполагают, что у Вас есть среда на основе Ubuntu 18.04 и ее необходимо, соответствующим образом, адаптировать для MacOS или Windows.
Для этого руководства Вам понадобится нода Moonbeam, работающая в режиме — dev.Это можно сделать, выполнив шаги, подробно описанные здесь, или используя плагин Moonbeam Truffle, который мы будем использовать в примерах этого руководства.
Проверка предварительных условий
Во-первых, нам нужно установить Node.js (мы будем использовать v15.x) и менеджер пакетов npm. Вы можете сделать это, запустив в своем терминале:
curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -sudo apt install -y nodejs
Мы можем убедиться, что все установлено правильно, запросив версию для каждого пакета:
node -vnpm -v
Кроме того, Вы можете установить Truffle глобально, запустив:
npm install -g truffle
На дату публикации этого руководства использовались версии 15.2.1, 7.0.8 и 5.1.52 соответственно.
Примечание:
Для следующих примеров Вам не нужно устанавливать Truffle глобально так как он включен как зависимость от Moonbeam Truffle box . Если хотите, Вы можете запустить npx truffle npx truffle или ./node_modules/.bin/truffle вместо truffle.
Начало работы с Truffle
Чтобы облегчить процесс знакомства с Truffle, мы выпустили Moonbeam Truffle Box. Это обеспечивает стандартную настройку для ускорения процесса размещения контрактов на Moonbeam. Чтобы узнать больше о Moonbeam Truffle box, Vы можете перейти по этой ссылке.
Чтобы загрузить Moonbeam Truffle box, следуйте этим инструкциям. Оказавшись внутри директории, давайте взглянем на файл truffle-config.js (для целей этого руководства некоторая информация была удалена):
const HDWalletProvider = require('@truffle/hdwallet-provider');
// Standalone Development Node Private Key
const privateKeyDev =
'99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342';
//...
module.exports = {
networks: {
dev: {
provider: () => {
...
return new HDWalletProvider(privateKeyDev, 'http://localhost:9933/')
},
network_id: 1281,
},
//...
},
plugins: ['moonbeam-truffle-plugin']
};
Обратите внимание, что мы используем HD-Wallet-Provider от Truffle в качестве иерархического детерминированного кошелька. Кроме того, мы определили сеть разработчиков, которая указывает на URL-адрес поставщика ноды, и в нее включен закрытый ключ учетной записи разработчика, в которой хранятся все средства в ноде.
Запуск автономной TestNet
Чтобы настроить ноду Moonbeam, Вы можете следовать этому руководству. В общей сложности процесс занимает около 40 минут, и Вам необходимо установить Substrate и все его зависимости. Плагин Moonbeam Truffle позволяет гораздо быстрее начать работу с нодой, и единственное требование — установить Docker (на момент написания использовалась версия Docker 19.03.6).
Чтобы запустить ноду Moonbeam в Вашей локальной среде, нам нужно сначала загрузить соответствующий образ Docker:
truffle run moonbeam install
После загрузки мы можем приступить к запуску ноды с помощью следующей команды:
truffle run moonbeam start
Вы увидите сообщение о том, что нода запущена, а затем обе доступные конечные ноды.
Когда Вы закончите использовать свой автономный узел Moonbeam, можете запустить следующие строки, чтобы остановить его и удалить образ Docker, если это так:
truffle run moonbeam stop && \
truffle run moonbeam remove
Файл контракта
Также в комплект поставки Truffle Box входит контракт с токеном ERC-20:
pragma solidity ^0.7.5;
// Import OpenZeppelin Contract
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
// This ERC-20 contract mints the specified amount of tokens to the contract creator.
contract MyToken is ERC20 {
constructor(uint256 initialSupply) ERC20("MyToken", "MYTOK")
{
_mint(msg.sender, initialSupply);
}
}
Это простой контракт ERC-20, основанный на контракте OpenZepplin ERC-20. Он создает MyToken с символом MYTOK и стандартными 18 десятичными знаками. Кроме того, он назначает созданную начальную поставку токенов создателю контракта.
Если мы посмотрим на скрипт миграции контракта Truffle в migrations/2_deploy_contracts.js
, он содержит следующее:
var MyToken = artifacts.require('MyToken');
module.exports = function (deployer) {
deployer.deploy(MyToken, '8000000000000000000000000');
};
«8000000000000000000000000» — это количество токенов, которые первоначально будут произведены(mint) с контрактом, т. Е. 8 миллионов с 18 знаками после запятой.
Размещение контракта на Moonbeam с использованием Truffle
Прежде чем мы сможем развернуть наши контракты, мы должны их скомпилировать. (Мы говорим «контракты», потому что обычные размещения Truffle включают контракт Migrations.sol.) Вы можете сделать это с помощью следующей команды:
truffle compile
В случае успеха Вы должны увидеть следующий результат:
Теперь мы готовы разместить скомпилированные контракты. Сделать это можно с помощью следующей команды:
truffle migrate --network dev
В случае успеха Вы увидите действия по размещению, включая адрес развернутого контракта:
После того, как Вы выполните руководство по MetaMask и руководство по Remix, Вы сможете взять развернутый адрес контракта, который возвращается и загрузить его в MetaMask или Remix.
Обратная связь
Это простой пример, но он дает контекст того, как Вы можете начать работать с Moonbeam и опробовать его функции совместимости с Ethereum. Нам интересно узнать о Вашем опыте выполнения шагов, описанных в этом руководстве, или о Вашем опыте использования других инструментов на основе Ethereum с Moonbeam. Присоединяйтесь к нам в Discord Moonbeam. Мы будем рады услышать Ваши отзывы о Moonbeam и ответить на любые Ваши вопросы.
Подготовлено при участии GameOver#9212, Lyn.