How to Use the 1inch Transaction Gateway API with Python and Request
In this tutorial, we will guide you through the process of using the 1inch Transaction Gateway API with Python and the requests library. The Transaction Gateway API allows you to broadcast public and private transactions on the Ethereum network using raw transaction data.
Before we begin, ensure you have Python installed on your system. If you don't have the requests library installed, you can install it using pip by running the following command:
Bash
12
pip install requests
Now, let's get started with step-by-step instructions!
Step 1: Import the requests Library
First, we need to import the requests library, which allows us to make HTTP requests to the 1inch Transaction Gateway API.
Python
12
import requests
Step 2: Define the API Base URL
Next, we'll define the base URL for the 1inch Transaction Gateway API. We'll use this URL to construct our API requests.
Python
123
base_url = "https://api.1inch.com/tx-gateway/v1.1/1"
headers = { "Authorization": "Bearer [YOUR_API_KEY]", "accept": "application/json" }
Step 3: Broadcast Public Transaction
To broadcast a public transaction, we'll use the /broadcast endpoint. We'll provide the raw transaction data as the request body.
Python
123456789101112
def broadcast_public_transaction(raw_transaction):
endpoint = "/broadcast"
data = {
"rawTransaction": raw_transaction
}
response = requests.post(base_url + endpoint, headers=headers, json=data)
if response.status_code == 200:
return response.json()["transactionHash"]
else:
print(f"Failed to broadcast public transaction. Status code: {response.status_code}")
return None
Step 4: Broadcast Private Transaction
To broadcast a private transaction, we'll use the /flashbots endpoint. Again, we'll provide the raw transaction data as the request body.
Python
123456789101112
def broadcast_private_transaction(raw_transaction):
endpoint = "/flashbots"
data = {
"rawTransaction": raw_transaction
}
response = requests.post(base_url + endpoint, headers=headers, json=data)
if response.status_code == 200:
return response.json()["transactionHash"]
else:
print(f"Failed to broadcast private transaction. Status code: {response.status_code}")
return None
Step 5: Broadcast a Raw Transaction via RPC
If you prefer to broadcast a raw transaction via RPC, we'll use the /rpc endpoint. Similar to the previous steps, we'll provide the JSON-RPC request as the request body.
Python
12345678910
def broadcast_raw_transaction_via_rpc(json_rpc_request):
endpoint = "/rpc"
data = json_rpc_request
response = requests.post(base_url + endpoint, headers=headers, json=data)
if response.status_code == 200:
return response.json()["result"]
else:
print(f"Failed to broadcast transaction via RPC. Status code: {response.status_code}")
return None
Step 6: Putting It All Together
Now, let's put everything together and use the functions to broadcast transactions on the Ethereum network.
Python
1234567891011121314151617181920212223
if __name__ == "__main__":
# Replace with the raw transaction data you want to broadcast
raw_transaction_data = "0xf86..."
# Step 3: Broadcast public transaction
transaction_hash_public = broadcast_public_transaction(raw_transaction_data)
print("Transaction Hash (Public):", transaction_hash_public)
# Step 4: Broadcast private transaction
transaction_hash_private = broadcast_private_transaction(raw_transaction_data)
print("Transaction Hash (Private):", transaction_hash_private)
# Step 5: Broadcast transaction via RPC
# Replace with the JSON-RPC request you want to use
json_rpc_request_data = {
"jsonrpc": "2.0",
"id": "string",
"method": "eth_sendRawTransaction",
"params": [raw_transaction_data]
}
transaction_hash_rpc = broadcast_raw_transaction_via_rpc(json_rpc_request_data)
print("Transaction Hash (RPC):", transaction_hash_rpc)
That's it! You have successfully used the 1inch Transaction Gateway API with Python and the requests library to broadcast public and private transactions, as well as transactions via RPC on the Ethereum network. Happy coding!
Full Script
Here you can find the full script with consideration of the default RPS limit
Python
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
import requests
import time
base_url = "https://api.1inch.com/tx-gateway/v1.1/1"
headers = { "Authorization": "Bearer [YOUR_API_KEY]", "accept": "application/json" }
def broadcast_public_transaction(raw_transaction):
endpoint = "/broadcast"
data = {
"rawTransaction": raw_transaction
}
response = requests.post(base_url + endpoint, headers=headers, json=data)
if response.status_code == 200:
return response.json()["transactionHash"]
else:
print(f"Failed to broadcast public transaction. Status code: {response.status_code}")
return None
def broadcast_private_transaction(raw_transaction):
endpoint = "/flashbots"
data = {
"rawTransaction": raw_transaction
}
response = requests.post(base_url + endpoint, headers=headers, json=data)
if response.status_code == 200:
return response.json()["transactionHash"]
else:
print(f"Failed to broadcast private transaction. Status code: {response.status_code}")
return None
def broadcast_raw_transaction_via_rpc(json_rpc_request):
endpoint = "/rpc"
data = json_rpc_request
response = requests.post(base_url + endpoint, headers=headers, json=data)
if response.status_code == 200:
print(response.json())
return response.json()["result"]
else:
print(f"Failed to broadcast transaction via RPC. Status code: {response.status_code}")
return None
if __name__ == "__main__":
# Replace with the raw transaction data you want to broadcast
raw_transaction_data = "0xf86..."
# Step 3: Broadcast public transaction
transaction_hash_public = broadcast_public_transaction(raw_transaction_data)
print("Transaction Hash (Public):", transaction_hash_public)
# sleep one second because of RPS limit
time.sleep(1)
# Step 4: Broadcast private transaction
transaction_hash_private = broadcast_private_transaction(raw_transaction_data)
print("Transaction Hash (Private):", transaction_hash_private)
# sleep one second because of RPS limit
time.sleep(1)
# Step 5: Broadcast transaction via RPC
# Replace with the JSON-RPC request you want to use
json_rpc_request_data = {
"jsonrpc": "2.0",
"id": "string",
"method": "eth_sendRawTransaction",
"params": [raw_transaction_data]
}
transaction_hash_rpc = broadcast_raw_transaction_via_rpc(json_rpc_request_data)
print("Transaction Hash (RPC):", transaction_hash_rpc)