blog details
author


blog detail

Для разработки смарт-контрактов Web3.0 тестирование или UAT является одним из наиболее важных процессов, прежде чем смарт-контракт появится в реальной сети Blockchain. Таким образом, я собираюсь изучить, как разработать скрипт с использованием Python и Ganache и создать смарт-контракт, тестирующий локальную среду.

Ингредиенты для создания смарт-контрактов Web3, развернутых на локальном визуальном блокчейне Ethereum с использованием Ganache и Python

Python3, Ganache, Solcx, Solidity, Web3, Json, ОС, dotenv

Повестка дня

Смарт-контракт Web3 — установите Solcx и Jsonify ваш файл Solidity

Во-первых, для скрипта требуется язык для реализации смарт-контрактов на блокчейн-платформах, таких как самый известный Ethereum. Что касается языка, я использую Solidity и поделюсь более подробной информацией в следующей статье.

Что касается Solidity, мы можем использовать Solcx для компиляции набора данных смарт-контракта в среде разработки Python. Оболочка Python и инструмент управления версиями для компилятора Solc Solidity.

Если вам нужен файл Solidity easy2digital.sol для этой стать. и, подпишитесь на нашу рассылку , оставив сообщение «Web3.0 + 1 Solidity и Ganache» . Мы вышлем вам как можно скорее.

Шаг 1. Установите Solcx, откройте и скомпилируйте файл Solidity в скрипте Python.

Возьмем, к примеру, Mac. Вот установка Solcx в терминале выглядит следующим образом:

pip install py-solc-x

Затем нам нужно импортировать Solcx и требуемый метод в скрипт Python.

From solcx import compile_standardWith open(“./your solidity file name.sol”, “r”) as file:Single_contract_file = file.read()

Наконец, нам нужно использовать метод compile_standard для компиляции информации файла sol в переменную.

compiled_sol = compile_standard({“language”: “Solidity”,“sources”: {“your file name.sol”: {“content„: ;single_contract_file}},“settings„: {“outputSelection”: {“*”: {“*”: [“abi”, “metadata”, “evm.bytecode”, “evm.sourceMap”]}}},},solc_version=“0.8.7”,)

Шаг 2. Jsonify скомпилированный файл

Чтобы было удобнее извлекать данные файла и взаимодействовать с сетью блокчейна и транзакциями, мы можем преобразовать скомпилированные данные в формат json. Вот код следующим образом:

with open(“compiled_solCode.json”, “w”) as file:json.dump(compiled_sol, file)
blog detail

Смарт-контракт Web3 — байт-код и ABI

Информация ABI и байт-кода имеют решающее значение для взаимодействия с сетью блокчейна Ethereum и управления компьютерной связью.

Байт-код

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

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

# Get BytecodeBytecode = compiled_sol[‘contracts’][‘easy2digital.sol’][‘SingleContract’][“evm”][“bytecode”][“object”]

АБИ

ABI — это бинарный интерфейс приложения. Он определяет методы и переменные, доступные в смарт-контракте и которые мы можем использовать для взаимодействия с этим смарт-контрактом. Поскольку смарт-контракты преобразуются в байт-код до того, как они будут развернуты в блокчейне, нам нужен способ узнать, какие операции и взаимодействия мы можем с ними инициировать.

Затем нам нужен стандартизированный способ выражения этих интерфейсов, чтобы любой язык программирования можно было использовать для взаимодействия со смарт-контрактами.

Ваше приложение может взаимодействовать со смарт-контрактом, используя любой язык кодирования, если у вас есть ABI для этого смарт-контракта и библиотека, которая поможет вам общаться с любым узлом, чтобы дать вам точку входа в сеть Ethereum.

Вот код для генерации значения ABI в easy2digital.sol следующим образом:

# Get ABIgetABI = compiled_sol[‘contracts’][‘SimpleStorage.sol’][‘SimpleStorage’][‘abi’]

Установите модуль Web3 и подключитесь к Ganache

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

В терминале мы вводим эту команду следующим образом:

pip install web3<. /pre>

В скрипте Python также введите модуль, используя код.

from web3 import Web3

Ганаш

Затем для разработки среды тестирования смарт-контрактов Web3 нам нужен визуальный блокчейн Ethereum, а не подключение к реальному через Metamask. Итак, здесь нам понадобится программа под названием Ganache.

Ganache помогает разработчикам Web3, поскольку предоставляет вам личную цепочку блоков Ethereum, которую вы можете использовать для запуска тестов, выполнения команд и проверки состояния, одновременно контролируя работу цепочки.

blog detail

Способ установки очень прост. После этого вы можете быстро открыть Ethereum и открыть визуальную панель управления сетью ETH. На панели инструментов есть несколько элементов, которые необходимо использовать в скрипте Python. Вот список предметов следующим образом:

  • URL-адрес HTTP
  • Идентификатор цепочки
  • Адрес визуального криптокошелька
  • Закрытый ключ кошелька

Что касается идентификатора цепочки, в Ganache иногда могут быть ошибки, и ваш уникальный идентификатор может не работать. Если этот случай произойдет с вами, попробуйте идентификатор цепочки 1337.

Далее приведены коды для использования модуля Web3 для подключения к Ganache.

w3 = Web3(Web3.HTTPProvider(“your ganache HTTP URL”))gasPrice = w3.eth.gas_pricechain_id = “your ganache chain id”my_address = “select a key and copy and paste the address here”

Скрыть закрытый ключ криптовалютного кошелька

Фактически, Ganache имитирует среду, соединяющую ваш Web3 с реальным блокчейном Ethereum. Возьмем, к примеру, Metamask: адрес равен реальному адресу кошелька, а закрытый ключ — это реальный закрытый ключ кошелька. Тем не менее, вы н. е хотите раскрывать свой закрытый ключ на сервере, потому что это рискованно потерять все ваши средства.

Итак, в DApp или Web3 нам нужно скрыть закрытый ключ в скрипте Python. Здесь мы бы использовали . env and gitignore.

blog detail

Прежде всего, нам нужно создать файл .env и поместить его в ту же папку, что и скрипт Python.

export PRIVATE_KEY=“0x + your private key”

Во-вторых, пожалуйста, добавьте файл .gitinore в ту же папку.

И последнее, но не менее важное: мы можем импортировать os, dotenv и использовать метод getenv() для вызова переменной в файле env.

import osfrom dotenv import load_dotenv
private_key = os.getenv(“PRIVATE_KEY”)

Создайте смарт-контракт на блокчейне Ethereum

Как упоминалось ранее, мы использовали Solidity для написания логики смарт-контракта. Таким образом, вопрос заключается в том, как развернуть эту логику на блокчейне. Модуль Web3 предоставляет contract() и помогает нам завершить процедуру.

singleContractA = w3.eth.contract(abi=getABI, bytecode=Bytecode)

Если вы хотите сгенерировать идентификатор количества транзакций, мы можем использовать getTransactionCount()

nonceA = w3.eth.getTransactionCount(my_address)

Активировать функции транзакции — построить, подписать, отправить и подтвердить транзакцию

Основная ценность Web3.0 — децентрализованная обработка транзакций и платежей. Отныне, пока ваш бизнес и клиенты готовы иметь дело с использованием криптовалюты, вам обоим не нужно проходить через традиционную банковскую систему. Это подразумевает и значит очень многое!

Таким образом, одной из ключевых частей взаимодействия с блокчейном является построение. потока транзакций. Независимо от того, какие виды бизнеса или операции вы обычно делаете, в основном есть четыре основных шага, а именно:

# Build a transactiontransactionA = singleContractA.constructor().buildTransaction({“gasPrice”: gasPrice, “chainId”: int(chain_id), “from”: my_address, “nonce”: nonceA})# Sign a transactionsignedTransaction = w3.eth.account.sign_transaction(transactionA, private_key=private_key)# Send a transactiontransactionHash = w3.eth.send_raw_transaction(signedTransaction.rawTransaction)

# Wait for the pending and confirmed transaction response

transactionReceipt = w3.eth.wait_for_transaction_receipt(transactionHash)

Добавьте конкретную ценность и обновите контракт

Кроме того, вы также можете обновить существующую транзакцию и добавить определенное значение.

singleContractB = w3.eth.contract(address=transactionReceipt.contractAddress, abi=getABI)
blog detail
print(“Updating the contract.....”)contractTransaction = singleContractB.functions.store(75).buildTransaction({“gasPrice”: gasPrice, “chainId”: int(chain_id), “from”: my_address, “nonce”: nonceA + 1})signedcontractTransaction = w3.eth.account.sign_transaction(contractTransaction, private_key=private_key)# Send the transactionprint(“Deploying the contract.....”)sendcontractTransaction = w3.eth.send_raw_transaction(signedcontractTransaction.rawTransaction)# Wait for the pending and confirmed transaction responseprint(“Deployed!!!”)transactionReceipt = w3.eth.wait_for_transaction_receipt(sendcontractTransaction)print(singleContractB.functions.retrieve().call())

Полный Python-скрипт смарт-контракта Web3, подключающийся к Ganache

Если вас интересует учебник 1 по Web3.0 — подключение смарт-контрактов Web3 к Ganache с использованием Python для разработки . и тестирования DApp, пожалуйста , подпишитесь на нашу рассылку , добавив сообщение «Учебник Web3.0 1» . Мы отправим вам сценарий немедленно на ваш почтовый ящик.

Я надеюсь, вам понравится читать учебник 1 по Web3.0 — подключение смарт-контрактов Web3 к Ganache с использованием Python для разработки и тестирования DApp. Если вы это сделали, пожалуйста, поддержите нас, выполнив одно из перечисленных ниже действий, потому что это всегда помогает нашему каналу.

  • Поддержите и пожертвуйте мой канал через PayPal ( paypal.me/Easy2digital )
  • Подпишитесь на мой канал и включите колокольчик уведомлений канала Easy2Digital Youtube .
  • Подписывайтесь и лайкайте мою страницу Страница Easy2Digital в Facebook
  • Поделитесь статьей в своей социальной сети с хэштегом #easy2digital
  • Вы подписываетесь на нашу еженедельную рассылку, чтобы получать последние статьи, видео и коды скидок Easy2Digital.
  • Подпишитесь на наше ежемесячное членство через Patreon, чтобы пользоваться эксклюзивными преимуществами ( www.patreon.com/louisludigital )
Поделиться этим постом

Пока нет комментариев...

shape shape

Подпишитесь на нашу рассылку!

Получайте эксклюзивные обновления и предложения в автомобильном стиле