WEB3DEV

Cover image for Como interagir com a API de swap da 1inch usando Python
Diogo Jorge
Diogo Jorge

Posted on

Como interagir com a API de swap da 1inch usando Python

A 1inch é uma poderosa agregadora de câmbio descentralizado (DEX), oferecendo aos usuários as melhores taxas de swap (trocas) possíveis, analisando e dividindo negociações através de múltiplas DEXs.

A 1inch oferece uma API de swap — permitindo que os usuários negociem programaticamente. Para acelerar o desenvolvimento, escrevi um wrapper em torno da API em Python. Permitindo preços fáceis e intuitivos e informações de troca. O wrapper tem cobertura API completa e suporta todas as cadeias atualmente suportadas pela 1inch.

Portanto, sem mais delongas - vamos começar instalando e importando o pacote:

pip instalar 1inch.py
Enter fullscreen mode Exit fullscreen mode

Em seguida, em um novo arquivo python no IDE de sua escolha:

from oneinch_py import OneInchSwap
Enter fullscreen mode Exit fullscreen mode

Em seguida, você precisa criar uma instância do pacote:

your_wallet_address = "0xAlgumEndereçoDeETH"
chain = "ethereum" # ou "polygon", "binance" etc.
exchange = OneInchSwap(your_wallet_address, chain)
Enter fullscreen mode Exit fullscreen mode

Agora é só chamar as várias funções:

# Uma verificação rápida para garantir que a API esteja operando conforme o esperado.

exchange.health_check()
# 'OK'

# Endereço do roteador da 1inch que deve ser confiado para gastar fundos 
para a exchange
exchange.get_spender()

# Gera dados para chamar o contrato para permitir que o roteador da 1inch gaste fundos. O símbolo ou endereço do token é obrigatório. Se a variável da opção "quantia" não for fornecida (em ether), será concedido subsídio ilimitado.
exchange.get_approve("USDT")
exchange.get_approve("0xdAC17F958D2ee523a2206206994597C13D831ec7", quantidade=100)

# Obtenha o número de tokens (em Wei) que o roteador pode gastar. Variável "endereço de envio" opcional. Se não for fornecido, o pacote usará o endereço fornecido durante a inicialização do objeto exchange. 
exchange.get_allowance("USDT")
exchange.get_allowance("0xdAC17F958D2ee523a2206206994597C13D831ec7", send_address="0x12345")

# A lista de tokens é armazenada em memory.

exchange.tokens
# {
# '1INCH': {address: '0x111111111117dc0aa78b770fa6a738034120c302',
# 'decimals': 18,
# 'logoURI': 'https://tokens.1inch.exchange/0x111111111117dc0aa78b770fa6a738034120c302.png',
# 'name': 'Token de 1INCH',
# 'symbol': '1INCH'},
# 'ETH': {'address': '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
# 'decimals': 18,
# 'logoURI': 'https://tokens.1inch.exchange/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png',
# 'name': 'Ethereum',
# 'symbol': 'ETH'},
# ......
# }

# Retorna a taxa de câmbio de dois tokens.
# Os tokens podem ser fornecidos como símbolos ou endereços
# Também retorna o "preço" do token mais caro nos tokens mais baratos. Variáveis ​​opcionais podem ser fornecidas como **kwargs.

exchange.get_quote(from_token_symbol='ETH', to_token_symbol='USDT', amount=1)
# (
# {
# "fromToken": {
# "symbol": "ETH",
# "name": "Ethereum",
# "decimals": 18,
# "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
# "logoURI": "https://tokens.1inch.io/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png",
# "tags": ["native"],
# },
# "toToken": {
# "symbol": "USDT",
# "name": "Tether USD",
# "address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
# "decimals": 6,
# "logoURI": "https://tokens.1inch.io/0xdac17f958d2ee523a2206206994597c13d831ec7.png",
# "tags": ["tokens"],
# ...
# Decimal("1076.503093"),
# )

# Cria os dados de troca para dois tokens.
# Tokens podem ser fornecidos como símbolos ou endereços.
# Variáveis ​​opcionais podem ser fornecidas como **kwargs.

exchange.get_swap(from_token_symbol='ETH', to_token_symbol='USDT', value=1, slippage=0,5)
# {
# "fromToken": {
# "symbol": "ETH",
# "name": "Ethereum",
# "decimals": 18,
# "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
# "logoURI": "https://tokens.1inch.io/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png",
# "tags": ["native"],
# },
# "toToken": {
# "symbol": "USDT",
# "name": "Tether USD",
# "address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
# "decimals": 6,
# "logoURI": "https://tokens.1inch.io/0xdac17f958d2ee523a2206206994597c13d831ec7.png",
# "tags": ["tokens"],
#
# ...
#
# ],
# "tx": {
# "from": "0x1d05aD0366ad6dc0a284C5fbda46cd555Fb4da27",
# "to": "0x1111111254fb6c44bac0bed2854e76f90643097d",
#         "data": "0xe449022e00000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000001fed825a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000140000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6cfee7c08",
# "value": "500000000000000000",
# "gas": 178993,
# "gasPrice": "14183370651",
# },
# }
Enter fullscreen mode Exit fullscreen mode

E é basicamente isso! Atualizações futuras incluirão uma função auxiliar para facilitar o envio de transações para sua cadeia de escolha, bem como suporte para a API de ordem-limite. Acompanhe esse espaço!

Se você tiver alguma dúvida, sinta-se à vontade para entrar em contato no Telegram ou através do Github.

Este artigo foi escrito por Richard A. e traduzido por Diogo Jorge. O artigo original pode ser encontrado aqui.

Top comments (0)