Разверните смарт-контракт на Ethereum с помощью Python, Truffle и web3py
В этой статье обсуждается развертывание смарт-контракта на 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 основных этапа:
- Настройка проекта: это включает в себя установку необходимых фреймворков, таких как Truffle.
- Написание сценария смарт-контракта: этот шаг включает в себя написание смарт-контракта на языке программирования Solidity.
- Развертывание смарт-контракта в блокчейне: это включает в себя развертывание смарт-контракта в блокчейне Ethereum с использованием Truffle.
- Использование 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 # 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.