Практическое применение Python в разработке блокчейнов и написании смарт-контрактов
Практическое применение Python в разработке блокчейнов и написании смарт-контрактов

Технология блокчейн постепенно становится в центре внимания всех сфер жизни.,Python — гибкий и мощный язык программирования,Он широко используется при разработке блокчейна и написании смарт-контракта. В этой статье рассказывается, как использовать Python для разработки блокчейнов и написания смарт-контрактов.,И предоставьте примеры кода, чтобы помочь читателям лучше понять эти концепции.

Основы разработки блокчейна

Блокчейн — это технология децентрализованных баз данных.,Целостность и безопасность данных совместно поддерживаются узлами распределенной сети. Python предоставляет множество библиотек и инструментов.,Делает разработку блокчейна проще и эффективнее。Наиболее часто используемые из них:bitcoinиethereumПодожди в библиотеке。

Во-первых, давайте посмотрим на простой пример кода Python для создания простого блокчейна:

Язык кода:python
кодКоличество запусков:0
копировать
import hashlib
import json
from time import time

class Blockchain:
    def __init__(self):
        self.chain = []
        self.current_transactions = []

        # Создать блок генезиса
        self.new_block(previous_hash='1', proof=100)

    def new_block(self, proof, previous_hash=None):
        block = {
            'index': len(self.chain) + 1,
            'timestamp': time(),
            'transactions': self.current_transactions,
            'proof': proof,
            'previous_hash': previous_hash or self.hash(self.chain[-1]),
        }

        # Сбросить текущий список транзакций
        self.current_transactions = []
        self.chain.append(block)
        return block

    def new_transaction(self, sender, recipient, amount):
        self.current_transactions.append({
            'sender': sender,
            'recipient': recipient,
            'amount': amount,
        })
        return self.last_block['index'] + 1

    @staticmethod
    def hash(block):
        # Вычислить хеш SHA-256 блока
        block_string = json.dumps(block, sort_keys=True).encode()
        return hashlib.sha256(block_string).hexdigest()

    @property
    def last_block(self):
        # Возвращает последний блок в цепочке
        return self.chain[-1]

# Создать экземпляр блокчейна
blockchain = Blockchain()

# Добавить транзакцию
blockchain.new_transaction('Alice', 'Bob', 1)

# Добыча новых блоков
blockchain.new_block(proof=12345)

В приведенном выше коде,Мы определяем простой класс блокчейнаBlockchain,Включая такие функции, как создание блоков, добавление транзакций и проверка блоков. Это всего лишь простой пример,Реальные блокчейны могут содержать гораздо больше функций и сложностей.

Написание смарт-контракта

Смарт-контракты — это автоматизированные контракты на блокчейне, которые содержат некоторые заранее определенные правила и условия. При выполнении этих условий контракт автоматически исполняется. Если взять в качестве примера Ethereum, смарт-контракты обычно пишутся с использованием языка Solidity, но мы также можем использовать Python для написания смарт-контрактов и использовать некоторые инструменты для их компиляции в исполняемый код для виртуальной машины Ethereum (EVM).

Ниже приведен простой пример смарт-контракта Python для создания простого контракта токена:

Язык кода:python
кодКоличество запусков:0
копировать
class TokenContract:
    def __init__(self):
        self.balances = {}

    def transfer(self, sender, recipient, amount):
        if self.balances.get(sender, 0) >= amount:
            self.balances[sender] -= amount
            self.balances[recipient] = self.balances.get(recipient, 0) + amount
            return True
        else:
            return False

# Создание экземпляра контракта токена
token_contract = TokenContract()

# Инициализируйте некоторые остатки на счетах
token_contract.balances = {'Alice': 100, 'Bob': 50}

# Совершить операцию перевода
token_contract.transfer('Alice', 'Bob', 30)

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

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

Смарт-контракты могут не только выполняться независимо, но также могут взаимодействовать с блокчейном и записывать статус и результаты выполнения через блокчейн. Ethereum — одна из самых известных блокчейн-платформ, поддерживающая смарт-контракты. Она предоставляет язык Solidity для написания смарт-контрактов и может взаимодействовать с узлами Ethereum через Python.

Вот простой пример Python,Продемонстрируйте, как использоватьweb3.pyБиблиотека для взаимодействия с блокчейном Ethereum,И разверните простой смарт-контракт:

Язык кода:python
кодКоличество запусков:0
копировать
from web3 import Web3, HTTPProvider
from solcx import compile_source

# Подключиться к узлу Ethereum
w3 = Web3(HTTPProvider('http://localhost:8545'))

# Исходный код смарт-контракта Solidity
contract_source_code = '''
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}
'''

# Скомпилировать смарт-контракт
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:SimpleStorage']

# Развертывание смарт-контрактов
SimpleStorage = w3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = SimpleStorage.constructor().transact()
tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)

# Получить адрес смарт-контракта
contract_address = tx_receipt.contractAddress

# Создание экземпляра смарт-контракта
simple_storage = w3.eth.contract(address=contract_address, abi=contract_interface['abi'])

# Вызов метода смарт-контракта
simple_storage.functions.set(42).transact()
stored_data = simple_storage.functions.get().call()
print("Stored data in smart contract:", stored_data)

В приведенном выше коде,мы используемweb3.pyБиблиотека для подключения к локально работающему узлу Ethereum.,и использоватьsolcxСборник библиотекиSolidityсмарт-контракт。Затем,нас Развернули простое хранилищесмарт-контрактSimpleStorage,и назвал егоsetиgetметод храненияи Получить данные。наконец,Распечатываем данные, полученные из смарт-контракта.

Написание смарт-контрактаи развертывание

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

Во-первых, давайте посмотрим на простой пример смарт-контракта для создания простого контракта токена:

Язык кода:solidity
копировать
// SimpleToken.sol
pragma solidity ^0.8.0;

contract SimpleToken {
    mapping(address => uint256) public balances;

    constructor(uint256 initialSupply) {
        balances[msg.sender] = initialSupply;
    }

    function transfer(address to, uint256 amount) public {
        require(balances[msg.sender] >= amount, "Insufficient balance");
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }
}

В коде Solidity выше,нас Определяет простой контракт токенаSimpleToken,который содержитbalancesкартографирование,Используется для хранения баланса токенов каждого адреса. Конструктор контракта инициализирует баланс создателя контракта.,и предоставилtransferфункция,Используется для передачи токенов на другие адреса.

Далее мы скомпилируем и развернем этот смарт-контракт. Мы можем использовать такие инструменты, как Remix и Truffle, или использовать различные тестовые или основные сети в сети Ethereum.

Язык кода:bash
копировать
$ solc --bin --abi SimpleToken.sol

Затем,мы используем Вывод байт-кода контракта компиляторомиABIинтерфейс для развертывания контракта。мы можем использоватьweb3.pyили другие клиентские библиотеки Ethereum для выполнения этой задачи.。

Язык кода:python
кодКоличество запусков:0
копировать
from web3 import Web3
from solcx import compile_source

# Подключиться к узлу Ethereum
w3 = Web3(Web3.HTTPProvider('http://localhost:8545'))

# Исходный код смарт-контракта Solidity
contract_source_code = '''
pragma solidity ^0.8.0;

contract SimpleToken {
    mapping(address => uint256) public balances;

    constructor(uint256 initialSupply) {
        balances[msg.sender] = initialSupply;
    }

    function transfer(address to, uint256 amount) public {
        require(balances[msg.sender] >= amount, "Insufficient balance");
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }
}
'''

# Скомпилировать смарт-контракт
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:SimpleToken']

# Развертывание смарт-контрактов
SimpleToken = w3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = SimpleToken.constructor(1000000).transact()
tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)

# Получить адрес смарт-контракта
contract_address = tx_receipt.contractAddress

Вот и всеPythonкодиспользовалweb3.pyБиблиотека для подключения к локально работающему узлу Ethereum.,И скомпилировали смарт-контракт Solidity. Затем,Мы развернули простой контракт токенаSimpleToken,И инициализировал баланс токена создателя до 1 000 000. наконец,Мы распечатали развернутый адрес смарт-контракта.

На этом простом примере мы узнали о процессе написания и развертывания смарт-контрактов, а также о том, как использовать Python для взаимодействия с Ethereum. Функциональность и сложность смарт-контрактов можно расширять и модифицировать в соответствии с потребностями проекта, что делает их мощным инструментом для создания разнообразных децентрализованных приложений.

Написание тестов смарт-контрактов с использованием Python

После написания смарт-контракта важным шагом является написание тестов для проверки функциональности и корректности контракта. Python предоставляет множество сред тестирования, таких как PyTest и unittest, которые можно использовать для написания тестов смарт-контрактов. В этом примере мы будем использовать платформу PyTest для написания и запуска тестов смарт-контрактов.

первый,Давайте напишем простой тестовый пример для проверки нашего ранее развернутогоSimpleTokenсмарт-контракт:

Язык кода:python
кодКоличество запусков:0
копировать
# test_simple_token.py

import pytest
from web3 import Web3
from solcx import compile_source

# Подключиться к узлу Ethereum
w3 = Web3(Web3.HTTPProvider('http://localhost:8545'))

# Исходный код смарт-контракта Solidity
contract_source_code = '''
pragma solidity ^0.8.0;

contract SimpleToken {
    mapping(address => uint256) public balances;

    constructor(uint256 initialSupply) {
        balances[msg.sender] = initialSupply;
    }

    function transfer(address to, uint256 amount) public {
        require(balances[msg.sender] >= amount, "Insufficient balance");
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }
}
'''

# Скомпилировать смарт-контракт
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:SimpleToken']

# Развертывание смарт-контрактов
@pytest.fixture(scope='module')
def simple_token_contract():
    SimpleToken = w3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
    tx_hash = SimpleToken.constructor(1000000).transact()
    tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)
    return SimpleToken(address=tx_receipt.contractAddress)

# Тестовая передаточная функция
def test_transfer(simple_token_contract):
    # Начальный баланс 1 000 000
    assert simple_token_contract.functions.balances(Web3.eth.defaultAccount).call() == 1000000
    
    # Сделать перевод
    simple_token_contract.functions.transfer(Web3.toChecksumAddress('0x1234567890123456789012345678901234567890'), 1000).transact({'from': Web3.eth.defaultAccount})
    
    # Проверка баланса после перевода
    assert simple_token_contract.functions.balances(Web3.eth.defaultAccount).call() == 999000
    assert simple_token_contract.functions.balances(Web3.toChecksumAddress('0x1234567890123456789012345678901234567890')).call() == 1000

В приведенном выше тестовом примере,Мы написали простой тест, используя фреймворк PyTest.,проверитьSimpleTokenсмарт-контрактпередаточная функция。наспервый Развернутосмарт-контракт,И проверил изменения баланса счета до и после теста.

Чтобы запустить этот тест, мы можем выполнить следующую команду в командной строке:

Язык кода:bash
копировать
$ pytest test_simple_token.py

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

Подвести итог

В этой статье рассказывается об использовании Python для разработки блокчейна и описания. смарт-контрактапроцесс,Для демонстрации этих концепций предоставляются примеры кода. первый,Мы изучили основы блокчейна,Включает в себя, как работает блокчейн и почему это важная технология. затем,Мы научились писать простой блокчейн с помощью Python,И демонстрирует процесс создания блоков, добавления транзакций и проверки блоков. Затем,Мы представили концепцию смарт-контрактов,И как писать смарт-контракты на языке Solidity. затем,Мы демонстрируем, как взаимодействовать с блокчейном Ethereum с помощью Python.,и развернуть простой смарт-контракт. наконец,Мы обсудили, как писать тесты смарт-контрактов с использованием платформы PyTest.,Для проверки функциональности и корректности смарт-контрактов.

Узнайте из этой статьи,Читатели могут узнать, как использовать Python для разработки блокчейна и создания смарт-контракта.,И понять важность и сценарии применения технологии блокчейн и смарт-контрактов. Я надеюсь, что эта статья поможет читателям лучше понять и применить технологию блокчейна.,побуждая их к дальнейшему изучению и применению знаний в этой области.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose