# Скрипт для клейма токена Арбитрум с контракта

By [soulllvision](https://paragraph.com/@s1vsn) · 2023-03-21

---

Код написан на Python. Перед ег озапуском нужно выполнить следубщие шаги:

1.  Установите Python на свой компьютер, если он еще не установлен. Вы можете скачать и установить Python с официального сайта: [https://www.python.org/downloads/](https://www.python.org/downloads/)
    
2.  Откройте текстовый редактор, такой как Notepad, Sublime Text или PyCharm.
    
3.  Скопируйте код скрипта и вставьте его в текстовый редактор.
    
4.  Сохраните файл со скриптом с расширением ".py" (например, "script.py") в удобном для вас месте на вашем компьютере.
    
5.  Откройте командную строку в Windows или терминал в macOS/Linux.
    
6.  Перейдите в директорию, где вы сохранили файл со скриптом, с помощью команды "cd" (например, "cd C:\\Users\\Username\\Documents").
    
7.  Запустите скрипт, введя в терминале команду "python script.py" (замените "script.py" на имя вашего файла со скриптом, если оно отличается).
    
8.  Нажмите Enter и дождитесь, пока скрипт выполнится.
    

Если вы используете PyCharm, то запустить скрипт можно просто нажав кнопку "Run" в редакторе.

Ниже предстафлен сам код скрипта.

import os from web3 import Web3 from dotenv import load\_dotenv

load\_dotenv()

подключаемся к сети Arbitrum
============================

w3 = Web3(Web3.HTTPProvider(os.getenv('WEB3\_PROVIDER\_URL')))

адрес контракта
===============

contract\_address = Web3.toChecksumAddress( '0x67a24ce4321ab3af51c2d0a4801c3e111d88c9d9')

аби-интерфейс контракта
=======================

contract\_abi = \[ { "inputs": \[\], "name": "claimTokens", "outputs": \[\], "stateMutability": "nonpayable", "type": "function" }, { "inputs": \[\], "name": "tokenBalance", "outputs": \[ { "internalType": "uint256", "name": "", "type": "uint256" } \], "stateMutability": "view", "type": "function" } \]

создаем экземпляр контракта
===========================

contract = w3.eth.contract(address=contract\_address, abi=contract\_abi)

адрес биржи, на который будут отправлены токены после клейма
============================================================

exchange\_address = Web3.toChecksumAddress( '0x0000000000000000000000000000000000000000')

адрес кошелька, с которого будет производиться клейминг токенов
===============================================================

wallet\_address = Web3.toChecksumAddress(os.getenv('WALLET\_ADDRESS'))

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

wallet\_private\_key = os.getenv('WALLET\_PRIVATE\_KEY')

газ-лимит для транзакции
========================

gas\_limit = 300000

функция для автоматического определения цены за газ
===================================================

def get\_gas\_price(): # получаем текущую цену за газ с помощью API провайдера gas\_price = w3.eth.gas\_price # устанавливаем цену за газ в 1.5 раза выше текущей средней цены return int(gas\_price \* 1.5)

клеймим токены и отправляем их на адрес биржи
=============================================

def claim\_and\_send\_tokens(): # получаем баланс токенов на контракте token\_balance = contract.functions.tokenBalance().call() # если баланс равен 0, то выводим сообщение и завершаем выполнение функции if token\_balance == 0: print('Token balance is 0, nothing to claim.') return # создаем транзакцию для клейма токенов tx = contract.functions.claimTokens().buildTransaction({ 'from': wallet\_address, 'nonce': w3.eth.getTransactionCount(wallet\_address), 'gas': gas\_limit, 'gasPrice': get\_gas\_price() }) # подписываем транзакцию с помощью приватного ключа signed\_tx = w3.eth.account.sign\_transaction(tx, private\_key=wallet\_private\_key) # отправляем транзакцию на сеть tx\_hash =

---

*Originally published on [soulllvision](https://paragraph.com/@s1vsn/zPs9bkERLIkV1FS1rlX4)*
