-
-
Save poly-rodr/44313920481de58d5a3f6d1f8226bd5e to your computer and use it in GitHub Desktop.
from web3 import Web3 | |
from web3.constants import MAX_INT | |
from web3.middleware import geth_poa_middleware | |
rpc_url = "" # Polygon rpc url | |
priv_key = "" # Polygon account private key (needs some MATIC) | |
pub_key = "" # Polygon account public key corresponding to private key | |
chain_id = 137 | |
erc20_approve = """[{"constant": false,"inputs": [{"name": "_spender","type": "address" },{ "name": "_value", "type": "uint256" }],"name": "approve","outputs": [{ "name": "", "type": "bool" }],"payable": false,"stateMutability": "nonpayable","type": "function"}]""" | |
erc1155_set_approval = """[{"inputs": [{ "internalType": "address", "name": "operator", "type": "address" },{ "internalType": "bool", "name": "approved", "type": "bool" }],"name": "setApprovalForAll","outputs": [],"stateMutability": "nonpayable","type": "function"}]""" | |
usdc_address = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" | |
ctf_address = "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045" | |
web3 = Web3(Web3.HTTPProvider(rpc_url)) | |
web3.middleware_onion.inject(geth_poa_middleware, layer=0) | |
nonce = web3.eth.getTransactionCount(pub_key) | |
usdc = web3.eth.contract(address=usdc_address, abi=erc20_approve) | |
ctf = web3.eth.contract(address=ctf_address, abi=erc1155_set_approval) | |
# CTF Exchange | |
raw_usdc_approve_txn = usdc.functions.approve("0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E", int(MAX_INT, 0) | |
).buildTransaction({"chainId": chain_id, "from": pub_key, "nonce": nonce}) | |
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key) | |
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.rawTransaction) | |
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600) | |
print(usdc_approve_tx_receipt) | |
nonce = web3.eth.getTransactionCount(pub_key) | |
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E", True).buildTransaction({"chainId": chain_id, "from": pub_key, "nonce": nonce}) | |
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key) | |
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.rawTransaction) | |
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600) | |
print(ctf_approval_tx_receipt) | |
nonce = web3.eth.getTransactionCount(pub_key) | |
# Neg Risk CTF Exchange | |
raw_usdc_approve_txn = usdc.functions.approve("0xC5d563A36AE78145C45a50134d48A1215220f80a", int(MAX_INT, 0) | |
).buildTransaction({"chainId": chain_id, "from": pub_key, "nonce": nonce}) | |
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key) | |
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.rawTransaction) | |
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600) | |
print(usdc_approve_tx_receipt) | |
nonce = web3.eth.getTransactionCount(pub_key) | |
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0xC5d563A36AE78145C45a50134d48A1215220f80a", True).buildTransaction({"chainId": chain_id, "from": pub_key, "nonce": nonce}) | |
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key) | |
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.rawTransaction) | |
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600) | |
print(ctf_approval_tx_receipt) | |
nonce = web3.eth.getTransactionCount(pub_key) | |
# Neg Risk Adapter | |
raw_usdc_approve_txn = usdc.functions.approve("0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296", int(MAX_INT, 0) | |
).buildTransaction({"chainId": chain_id, "from": pub_key, "nonce": nonce}) | |
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key) | |
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.rawTransaction) | |
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600) | |
print(usdc_approve_tx_receipt) | |
nonce = web3.eth.getTransactionCount(pub_key) | |
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296", True).buildTransaction({"chainId": chain_id, "from": pub_key, "nonce": nonce}) | |
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key) | |
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.rawTransaction) | |
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600) | |
print(ctf_approval_tx_receipt) |
@poly-rodr Thanks for sharing. I also had the same issues as yoko330 pointed out earlier. The code doesn't work with the most recent web3 version 7.4.0
@poly-rodr Thanks for sharing. I also had the same issues as yoko330 pointed out earlier. The code doesn't work with the most recent web3 version 7.4.0
I am writting the update version of this gist. To point out, the MATIC have updated to be POL now. I'm not sure this transaction needs some old MATIC coin or POL coin.
from web3 import Web3
from web3.constants import MAX_INT
from web3.middleware import ExtraDataToPOAMiddleware
rpc_url = "https://polygon-rpc.com" # Polygon rpc url
priv_key = "..." # Polygon account private key (needs some MATIC)
pub_key = "..." # Polygon account public key corresponding to private key
chain_id = 137
erc20_approve = """[{"constant": false,"inputs": [{"name": "_spender","type": "address" },{ "name": "_value", "type": "uint256" }],"name": "approve","outputs": [{ "name": "", "type": "bool" }],"payable": false,"stateMutability": "nonpayable","type": "function"}]"""
erc1155_set_approval = """[{"inputs": [{ "internalType": "address", "name": "operator", "type": "address" },{ "internalType": "bool", "name": "approved", "type": "bool" }],"name": "setApprovalForAll","outputs": [],"stateMutability": "nonpayable","type": "function"}]"""
usdc_address = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"
ctf_address = "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045"
web3 = Web3(Web3.HTTPProvider(rpc_url))
web3.middleware_onion.inject(ExtraDataToPOAMiddleware, layer=0)
balance = web3.eth.get_balance(pub_key)
print(f"Current MATIC balance: {web3.from_wei(balance, 'ether')} MATIC")
nonce = web3.eth.get_transaction_count(pub_key)
usdc = web3.eth.contract(address=usdc_address, abi=erc20_approve)
ctf = web3.eth.contract(address=ctf_address, abi=erc1155_set_approval)
# CTF Exchange
raw_usdc_approve_txn = usdc.functions.approve("0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E", int(MAX_INT, 0)
).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key)
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.raw_transaction)
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600)
print(usdc_approve_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E", True).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key)
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.raw_transaction)
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600)
print(ctf_approval_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
# Neg Risk CTF Exchange
raw_usdc_approve_txn = usdc.functions.approve("0xC5d563A36AE78145C45a50134d48A1215220f80a", int(MAX_INT, 0)
).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key)
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.raw_transaction)
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600)
print(usdc_approve_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0xC5d563A36AE78145C45a50134d48A1215220f80a", True).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key)
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.raw_transaction)
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600)
print(ctf_approval_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
# Neg Risk Adapter
raw_usdc_approve_txn = usdc.functions.approve("0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296", int(MAX_INT, 0)
).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key)
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.raw_transaction)
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600)
print(usdc_approve_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296", True).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key)
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.raw_transaction)
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600)
print(ctf_approval_tx_receipt)
I've added POL and MATIC to the address, tried using this - it seems to do the txs correctly and all, but my clob is still complaining about allowance...any ideas? am I missing something?
@poly-rodr or more recently active @lucashhan
This script worked for me with web3 version 6.14.0.
Allowance was was updated correctly.
# works with web3===6.14.0
from web3 import Web3
from web3.constants import MAX_INT
from web3.middleware import geth_poa_middleware
rpc_url = "https://polygon-rpc.com" # Polygon rpc url
priv_key = "" # Polygon account private key (needs some MATIC)
pub_key = "" # Polygon account public key corresponding to private key
chain_id = 137
erc20_approve = """[{"constant": false,"inputs": [{"name": "_spender","type": "address" },{ "name": "_value", "type": "uint256" }],"name": "approve","outputs": [{ "name": "", "type": "bool" }],"payable": false,"stateMutability": "nonpayable","type": "function"}]"""
erc1155_set_approval = """[{"inputs": [{ "internalType": "address", "name": "operator", "type": "address" },{ "internalType": "bool", "name": "approved", "type": "bool" }],"name": "setApprovalForAll","outputs": [],"stateMutability": "nonpayable","type": "function"}]"""
usdc_address = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" # MATIC collateral
ctf_address = "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045" # MATIC conditionalTokens
web3 = Web3(Web3.HTTPProvider(rpc_url))
web3.middleware_onion.inject(geth_poa_middleware, layer=0)
nonce = web3.eth.get_transaction_count(pub_key)
usdc = web3.eth.contract(address=usdc_address, abi=erc20_approve)
ctf = web3.eth.contract(address=ctf_address, abi=erc1155_set_approval)
# CTF Exchange
raw_usdc_approve_txn = usdc.functions.approve("0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E", int(MAX_INT, 0)
).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key)
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.rawTransaction)
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600)
print(usdc_approve_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E", True).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key)
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.rawTransaction)
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600)
print(ctf_approval_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
# Neg Risk CTF Exchange
raw_usdc_approve_txn = usdc.functions.approve("0xC5d563A36AE78145C45a50134d48A1215220f80a", int(MAX_INT, 0)
).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key)
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.rawTransaction)
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600)
print(usdc_approve_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0xC5d563A36AE78145C45a50134d48A1215220f80a", True).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key)
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.rawTransaction)
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600)
print(ctf_approval_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
# Neg Risk Adapter
raw_usdc_approve_txn = usdc.functions.approve("0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296", int(MAX_INT, 0)
).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_usdc_approve_tx = web3.eth.account.sign_transaction(raw_usdc_approve_txn, private_key=priv_key)
send_usdc_approve_tx = web3.eth.send_raw_transaction(signed_usdc_approve_tx.rawTransaction)
usdc_approve_tx_receipt = web3.eth.wait_for_transaction_receipt(send_usdc_approve_tx, 600)
print(usdc_approve_tx_receipt)
nonce = web3.eth.get_transaction_count(pub_key)
raw_ctf_approval_txn = ctf.functions.setApprovalForAll("0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296", True).build_transaction({"chainId": chain_id, "from": pub_key, "nonce": nonce})
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=priv_key)
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.rawTransaction)
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600)
print(ctf_approval_tx_receipt)
The pub_key
is the 42-character wallet address derived from the 130-character public key, not the public key itself.
Hi all, when i run this script i get the following response: ValueError: {'code': -32000, 'message': 'INTERNAL_ERROR: insufficient funds'}. I have 15 MATIC on my wallet tho. Do i need more or am I missing something? All help would be appreciated. :)
Hi all, when i run this script i get the following response: ValueError: {'code': -32000, 'message': 'INTERNAL_ERROR: insufficient funds'}. I have 15 MATIC on my wallet tho. Do i need more or am I missing something? All help would be appreciated. :)
I think you need to use POL instead. I was getting the same error until I added POL to my wallet. That being said, I am still getting the "not enough allowance" error, even though I ran the above successfully.
@aebenbach yes thanks i added POL to my wallet and i think this script ran succesfully. But indeed when running the following, i get py_clob_client.exceptions.PolyApiException: PolyApiException[status_code=400, error_message={'error': 'not enough balance / allowance'}] as a response while i have usdc in my polymarket account: chain_id = POLYGON
client = ClobClient(host, key=key, chain_id=chain_id, creds=creds)
order_args = OrderArgs(
price=0.01,
size=1,
side=BUY,
token_id="59658166739979955015642910311638409776513450405422998760953344989158397038866",
)
signed_order = client.create_order(order_args)
resp = client.post_order(signed_order)
print(resp)
print("Done!"). -> if anyone knows how to solve this i would love to hear it :)
@joachim23344
I found the problem on my end to be with the way I was initializing the client, since I am using the Polygon Proxy. So instead initialize like this:
### Initialization of a client using a Polymarket Proxy associated with an Email/Magic account client = ClobClient(host, key=key, chain_id=chain_id, signature_type=1, funder=POLYMARKET_PROXY_ADDRESS)
Also, important detail was to input the address that's provided when going to deposit USDC into the polymarket account in the "funder" argument.
Hope this helps!
Hallo ,I used Metamask Keys to ran file-set_allowances-py. I think it was successfully, now what ?
when I tried to create an API I got:
PolyApiException[status_code=401 error_message={'error': 'Invalid L1 Request headers'}]
I ran using Metamask keys "set_allowences.py" succesfully. but when I tried to create an API a got:
PolyApiException[status_code=401, error_message={'error': 'Invalid L1 Request headers'}]
what I'm missing ?
Regards
I'm using the nodeJs api and I followed what @aebenbach said (ty). So no allowances needed to be set at all.
here's my clob client initialization
const clobClient = new ClobClient(host, Chain.POLYGON, signer, creds, 1, process.env.POLY_WALLET);
Hello,
I would greatly appreciate a more extensive explanation of what needs to be done to set the allowances.
Where can I find the values I need to set rpc_url
, priv_key
and pub_key
, or what are the steps to get them.
Many thanks in advance and the best of luck while trading!
What version of web3 package using in this gist? I installed the 7.4.0 of web3, there are many funcs and methods's names changed.