Разверните смарт-контракт на Ethereum с помощью Python, Truffle и web3py

Опубликовано: 22 Февраля, 2023

В этой статье обсуждается развертывание смарт-контракта на Ethereum с помощью Python, Truffle и web3py.

Предварительное условие: чтобы написать простой смарт-контракт, развернуть его на личной цепочке блоков Ethereum и вызвать контракт с помощью Python3, установите на ПК следующее программное обеспечение:

1. Python3 v3.5.3 или более поздние версии: установите Python, следуя приведенным здесь инструкциям. Если python уже установлен в системе, проверьте версию с помощью следующей команды в командной строке или Windows Powershell (в Windows) или терминале (в Mac):

python –version

2. NodeJS v8.9.4 или более поздней версии: установите NodeJs, следуя приведенным здесь инструкциям. Если в системе установлен NodeJS, проверьте его версию с помощью следующей команды в командной строке или Windows Powershell (в Windows) или терминале (в Mac): -

node -v

После установки вышеупомянутого языка программирования и среды выполнения в вашей системе мы готовы приступить к развертыванию смарт-контракта.

Подход

Весь процесс делится на 4 основных этапа:

  1. Настройка проекта: это включает в себя установку необходимых фреймворков, таких как Truffle.
  2. Написание сценария смарт-контракта: этот шаг включает в себя написание смарт-контракта на языке программирования Solidity.
  3. Развертывание смарт-контракта в блокчейне: это включает в себя развертывание смарт-контракта в блокчейне Ethereum с использованием Truffle.
  4. Использование Python для вызова развернутого смарт-контракта: это включает в себя вызов смарт-контракта с использованием кода Python и web3.

Давайте подробно обсудим каждый из этих шагов.

Шаг 1: Настройка проекта

1. Первый шаг — создать каталог для проекта. Откройте командную строку или эквивалентное программное обеспечение в системе и выполните следующие команды:

mkdir geeks-eth

mkdir command is used to make directories/folders on your system.

2. Внутри недавно созданной папки geeks-eth установите truffle (глобально). Трюфель — это популярный инструмент для создания смарт-контрактов, среда тестирования, призванная облегчить жизнь разработчикам Ethereum.

cd geeks-eth

npm install g-truffle

3. После успешной установки truffle используйте инструмент командной строки truffle для инициализации пустого проекта смарт-контракта:

truffle init

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

Приведенная выше команда создаст следующую структуру:

  • Contracts/ : Каталог исходного кода контрактов Solidity.
  • миграции/ : Каталог для файлов миграции контрактов.
  • test/ : Каталог для тестовых файлов.
  • truffle.js : файлы конфигурации Truffle.

Шаг 2: Сценарий смарт-контракта

1. Откройте только что созданную и инициализированную папку geeks-eth. В папке найдите папку с именем Contracts/. В этой папке создайте и напишите новый документ Solidity, который можно сделать с помощью IDE. Допустим, мы создаем документ солидности gfg.sol и запускаем в нем скрипты.

Solidity




// Solidity program to print
// message
pragma solidity >= 0.5.0 < 0.9.0;
 
contract gfg{
  function geeks() public pure returns (string memory)
  {
    return "Hey there! I m learning from GeeksForGeeks!";
  }
}

2. После написания кода следующей задачей является компиляция кода Solidity. Здесь трюфель будет использоваться для компиляции контракта из корневой папки проекта. Следовательно, снова откройте командную строку, чтобы выполнить следующие команды:

truffle compile

3. Компиляция занимает несколько секунд. После завершения компиляции появится сообщение типа «Компилировано успешно с использованием:». Он выведет скомпилированный контракт gfg.sol как gfg.json внутри build/contracts -> gfg.json.

4. Поскольку мы скомпилировали контракт, теперь его можно развернуть в нашем работающем блокчейне (локальном).

Шаг 3: Развертывание смарт-контракта в блокчейне

Для развертывания смарт-контракта в блокчейне требуется сценарий миграции и набор трюфелей.

1. Скрипт миграции:

  • Для сценария миграции создадим файл JavaScript с именем 2_deploy_contract.js в папке миграции.
  • Затем напишите сценарий миграции в этом JS-документе, как показано ниже:

Javascript




var gfg = artifacts.require("gfg");
 
module.exports = function(deployer) {
    deployer.deploy(gfg);
};

2. Пакет Truffle содержит собственный блокчейн, который мы можем использовать для тестирования.

  • Откройте CMD (терминал) и запустите:

truffle develop

3. После запуска вышеуказанной команды найдите вывод, похожий на:

4. Получив указанный выше результат, перенесите смарт-контракт с помощью команды migrate:

truffle(develop)> migrate

Команда Migrate вызывает каждую миграцию в migrations/ , развертывая контракты в блокчейне (локально).

5. После запуска команды migrate вы увидите такой вывод:

Объяснение:

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

Шаг 4: Использование Python для вызова развернутого контракта

1. В корневой папке « geeks-eth/» создайте файл python вместе с другими папками. Код с использованием python, чтобы развернутый смарт-контракт можно было вызвать:

Python




# Python program to call the
# smart contract
import json
from web3 import Web3, HTTPProvider
 
# truffle development blockchain address
blockchain_address = "http://127.0.0.1:9545"
 
# Client instance to interact with the blockchain
web3 = Web3(HTTPProvider(blockchain_address))
 
web3.eth.defaultAccount = web3.eth.accounts[0]
 
# Setting the default account (so we don"t need
#to set the "from" for every transaction call)
 
# Path to the compiled contract JSON file
compiled_contract_path = "build/contracts/gfg.json"
 
# Deployed contract address (see `migrate` command output:
# `contract address`)
# Do Not Copy from here, contract address will be different
# for different contracts.
deployed_contract_address = "0x15C667a5b0a3e6600AB50F88bF438180A4233879"
 
# load contract info as JSON
with open(compiled_contract_path) as file:
    contract_json = json.load(file
     
    # fetch contract"s abi - necessary to call its functions
    contract_abi = contract_json["abi"]
 
# Fetching deployed contract reference
contract = web3.eth.contract(
    address = deployed_contract_address, abi = contract_abi)
 
# Calling contract function (this is not persisted
# to the blockchain)
output = contract.functions.geeks().call()
 
print(output)

2. После написания кода Python откройте терминал, чтобы, наконец, вызвать смарт-контракт. Перед этим установите библиотеку python web3 с помощью команды pip.

pip install web3

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

python my_app.py

Как и в смарт-контракте (gfg.sol), мы закодировали сообщение «Привет! Я учусь у GeeksForGeeks!», то же самое отображается в качестве вывода, когда смарт-контракт вызывается с использованием python.