clockchain changes #3
			
				
			
		
		
		
	|  | @ -1,7 +1,12 @@ | ||||||
| from web3 import Web3 | from web3 import Web3 | ||||||
| import time | import time | ||||||
| from web3.exceptions import TimeExhausted,TransactionNotFound | from web3.exceptions import TimeExhausted,TransactionNotFound | ||||||
|  | from .models import FailedTransactions | ||||||
|  | from django.contrib.auth import get_user_model | ||||||
|  | User = get_user_model() | ||||||
| PRIVATE_KEY = "2c7c09807b78128e00a2ed308c122a0ecc45847ffe0195eca4b4d2463fb11549" | PRIVATE_KEY = "2c7c09807b78128e00a2ed308c122a0ecc45847ffe0195eca4b4d2463fb11549" | ||||||
|  | # PRIVATE_KEY = "6f06e1108b833b1918067042e13e60eda262705b80385a02d0330ce0db31d3ad" | ||||||
|  | 
 | ||||||
| # test network | # test network | ||||||
| 
 | 
 | ||||||
| # RPC = 'https://rpc-amoy.polygon.technology/' | # RPC = 'https://rpc-amoy.polygon.technology/' | ||||||
|  | @ -10,8 +15,8 @@ PRIVATE_KEY = "2c7c09807b78128e00a2ed308c122a0ecc45847ffe0195eca4b4d2463fb11549" | ||||||
| # ABI = '[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "project", "type": "string" }, { "indexed": false, "internalType": "string", "name": "data", "type": "string" } ], "name": "conversion", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "pubkey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "deleteConversion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pubKey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" }, { "internalType": "string", "name": "_data", "type": "string" } ], "name": "UploadConversionData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "getConversion", "outputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "mydata", "type": "string" }, { "internalType": "bool", "name": "Write", "type": "bool" } ], "internalType": "struct scriptConversionDataBase.privateData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "userId", "type": "uint256" } ], "name": "getProjectId", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" } ]' | # ABI = '[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "project", "type": "string" }, { "indexed": false, "internalType": "string", "name": "data", "type": "string" } ], "name": "conversion", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "pubkey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "deleteConversion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pubKey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" }, { "internalType": "string", "name": "_data", "type": "string" } ], "name": "UploadConversionData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "getConversion", "outputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "mydata", "type": "string" }, { "internalType": "bool", "name": "Write", "type": "bool" } ], "internalType": "struct scriptConversionDataBase.privateData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "userId", "type": "uint256" } ], "name": "getProjectId", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" } ]' | ||||||
| 
 | 
 | ||||||
| # # mainnet | # # mainnet | ||||||
| # RPC = 'https://polygon-rpc.com' | RPC = 'https://polygon-rpc.com' | ||||||
| RPC = "https://polygon-mainnet.infura.io/v3/017957497a0d4e9c80750c18a431ac1e" | # RPC = "https://polygon-mainnet.infura.io/v3/017957497a0d4e9c80750c18a431ac1e" | ||||||
| CONTRACT_ADDRESS = '0x552453F2C4e8ED860a6AEC7D6Bde143CF86E396a' | CONTRACT_ADDRESS = '0x552453F2C4e8ED860a6AEC7D6Bde143CF86E396a' | ||||||
| CHAIN_ID = 137 | CHAIN_ID = 137 | ||||||
| ABI = '[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "project", "type": "string" }, { "indexed": false, "internalType": "string", "name": "data", "type": "string" } ], "name": "conversion", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "pubkey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "deleteConversion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pubKey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" }, { "internalType": "string", "name": "_data", "type": "string" } ], "name": "UploadConversionData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "getConversion", "outputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "mydata", "type": "string" }, { "internalType": "bool", "name": "Write", "type": "bool" } ], "internalType": "struct scriptConversionDataBase.privateData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "userId", "type": "uint256" } ], "name": "getProjectId", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" } ]' | ABI = '[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "project", "type": "string" }, { "indexed": false, "internalType": "string", "name": "data", "type": "string" } ], "name": "conversion", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "pubkey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "deleteConversion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pubKey", "type": "address" }, { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" }, { "internalType": "string", "name": "_data", "type": "string" } ], "name": "UploadConversionData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "user_id", "type": "uint256" }, { "internalType": "string", "name": "project", "type": "string" } ], "name": "getConversion", "outputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "mydata", "type": "string" }, { "internalType": "bool", "name": "Write", "type": "bool" } ], "internalType": "struct scriptConversionDataBase.privateData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "userId", "type": "uint256" } ], "name": "getProjectId", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" } ]' | ||||||
|  | @ -24,69 +29,114 @@ contractInst = web3.eth.contract(address=CAddress, abi=abi) | ||||||
| def UploadConversionData(privatekey,pubkey, user_id,project,data):  | def UploadConversionData(privatekey,pubkey, user_id,project,data):  | ||||||
|     try: |     try: | ||||||
|         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address |         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address | ||||||
|         def send_transaction( gas_price): |         nonce = web3.eth.get_transaction_count(acc1,'pending')  # Get nonce including pending transactions | ||||||
|             nonce = web3.eth.get_transaction_count(acc1,'pending')  # Get nonce including pending transactions |         uploadData = contractInst.functions.UploadConversionData(pubkey, user_id, project, data).build_transaction({ | ||||||
|             uploadData = contractInst.functions.UploadConversionData(pubkey, user_id, project, data).build_transaction({ |             'gasPrice': web3.eth.gas_price,  | ||||||
|                 'gasPrice': gas_price,  |             'chainId': CHAIN_ID,  | ||||||
|                 'chainId': CHAIN_ID,  |             'from': acc1,  | ||||||
|                 'from': acc1,  |             'nonce': nonce | ||||||
|                 'nonce': nonce |         }) | ||||||
|             }) |         signed_transaction = web3.eth.account.sign_transaction(uploadData, private_key=PRIVATE_KEY) | ||||||
|             signed_transaction = web3.eth.account.sign_transaction(uploadData, private_key=PRIVATE_KEY) |         transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction) | ||||||
|             transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction) |         print("Transaction hash:", transaction_hash.hex()) | ||||||
|             print("Transaction hash:", transaction_hash.hex()) |         transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash, timeout=120) | ||||||
|             return transaction_hash |         transaction_fee = transaction_receipt.effectiveGasPrice * transaction_receipt.gasUsed | ||||||
|         try: |         tx_id = transaction_hash.hex() | ||||||
|             acc1 = web3.eth.account.from_key(PRIVATE_KEY).address |         # Check if the transaction was successful | ||||||
|             initial_gas_price = web3.eth.gas_price |         if transaction_receipt.status == 1: | ||||||
| 
 |             print("Transaction successful!") | ||||||
|             max_retries = 4 |  | ||||||
|             retries = 0 |  | ||||||
| 
 |  | ||||||
|             transaction_hash = None |  | ||||||
|             try: |  | ||||||
|                 transaction_hash = send_transaction(initial_gas_price) |  | ||||||
|             except ValueError as e: |  | ||||||
|                 # If the error is due to "replacement transaction underpriced", handle it |  | ||||||
|                 if "replacement transaction underpriced" in str(e): |  | ||||||
|                     print("Initial transaction attempt failed due to 'replacement transaction underpriced'. Retrying with higher gas price.") |  | ||||||
|                     retries += 1 |  | ||||||
|                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) |  | ||||||
|                     transaction_hash = send_transaction(new_gas_price) |  | ||||||
|                 elif "max fee per gas less than block base fee" in str(e): |  | ||||||
|                     print("Initial transaction attempt failed due to 'max fee per gas less than block base fee'. Retrying with higher gas price.") |  | ||||||
|                     retries += 1 |  | ||||||
|                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) |  | ||||||
|                     transaction_hash = send_transaction(new_gas_price) |  | ||||||
|                 else: |  | ||||||
|                     raise |  | ||||||
| 
 |  | ||||||
|             while retries < max_retries and transaction_hash: |  | ||||||
|                 try: |  | ||||||
|                     transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash, timeout=120) |  | ||||||
|                     print("Transaction confirmed:") |  | ||||||
|                     break |  | ||||||
|                 except TimeExhausted: |  | ||||||
|                     retries += 1 |  | ||||||
|                     print(f"Transaction not confirmed in {120 * retries} seconds, retrying... ({retries}/{max_retries})") |  | ||||||
|                     # Increase the gas price by 10% for each retry |  | ||||||
|                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) |  | ||||||
|                     transaction_hash = send_transaction(new_gas_price) |  | ||||||
|             else: |  | ||||||
|                 if retries == max_retries: |  | ||||||
|                     print("Failed to confirm the transaction after multiple attempts.") |  | ||||||
|                     raise TimeoutError("Failed to confirm the transaction after multiple attempts.") |  | ||||||
| 
 |  | ||||||
|             transaction_fee = transaction_receipt.effectiveGasPrice * transaction_receipt.gasUsed |  | ||||||
|             tx_id = transaction_hash.hex() |  | ||||||
|             return tx_id, str(transaction_fee) |             return tx_id, str(transaction_fee) | ||||||
| 
 |         else: | ||||||
|         except Exception as e: |             print("Transaction failed!") | ||||||
|             print(f"An error occurred: {e}") |             obj,_ = FailedTransactions.objects.get_or_create(service_id=project,service_name="Conversion") | ||||||
|             raise |             creator = User.objects.get(id=user_id) | ||||||
|  |             obj.creator = creator | ||||||
|  |             obj.transaction_type = "UploadConversionData" | ||||||
|  |             obj.transaction_hash = "" | ||||||
|  |             obj.transaction_status = "failed" | ||||||
|  |             obj.transaction_error = "Transaction failed" | ||||||
|  |             obj.transaction_data = str(data) | ||||||
|  |             obj.save() | ||||||
|  |             return False, "Transaction failed" | ||||||
|     except Exception as e: |     except Exception as e: | ||||||
|         print({"error":str(e)}) |         print({"error":str(e)}) | ||||||
|         return e |         obj,_ = FailedTransactions.objects.get_or_create(service_id=project,service_name="Conversion") | ||||||
|  |         creator = User.objects.get(id=user_id) | ||||||
|  |         obj.creator = creator | ||||||
|  |         obj.transaction_type = "UploadConversionData" | ||||||
|  |         obj.transaction_hash = "" | ||||||
|  |         obj.transaction_status = "failed" | ||||||
|  |         obj.transaction_error = str(e) | ||||||
|  |         obj.transaction_data = str(data) | ||||||
|  |         obj.save() | ||||||
|  |         return False, str(e) | ||||||
|  | 
 | ||||||
|  | # def UploadConversionData(privatekey,pubkey, user_id,project,data):  | ||||||
|  | #     try: | ||||||
|  | #         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address | ||||||
|  | #         def send_transaction( gas_price): | ||||||
|  | #             nonce = web3.eth.get_transaction_count(acc1,'pending')  # Get nonce including pending transactions | ||||||
|  | #             uploadData = contractInst.functions.UploadConversionData(pubkey, user_id, project, data).build_transaction({ | ||||||
|  | #                 'gasPrice': gas_price,  | ||||||
|  | #                 'chainId': CHAIN_ID,  | ||||||
|  | #                 'from': acc1,  | ||||||
|  | #                 'nonce': nonce | ||||||
|  | #             }) | ||||||
|  | #             signed_transaction = web3.eth.account.sign_transaction(uploadData, private_key=PRIVATE_KEY) | ||||||
|  | #             transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction) | ||||||
|  | #             print("Transaction hash:", transaction_hash.hex()) | ||||||
|  | #             return transaction_hash | ||||||
|  | #         try: | ||||||
|  | #             acc1 = web3.eth.account.from_key(PRIVATE_KEY).address | ||||||
|  | #             initial_gas_price = web3.eth.gas_price | ||||||
|  | 
 | ||||||
|  | #             max_retries = 4 | ||||||
|  | #             retries = 0 | ||||||
|  | 
 | ||||||
|  | #             transaction_hash = None | ||||||
|  | #             try: | ||||||
|  | #                 transaction_hash = send_transaction(initial_gas_price) | ||||||
|  | #             except ValueError as e: | ||||||
|  | #                 # If the error is due to "replacement transaction underpriced", handle it | ||||||
|  | #                 if "replacement transaction underpriced" in str(e): | ||||||
|  | #                     print("Initial transaction attempt failed due to 'replacement transaction underpriced'. Retrying with higher gas price.") | ||||||
|  | #                     retries += 1 | ||||||
|  | #                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) | ||||||
|  | #                     transaction_hash = send_transaction(new_gas_price) | ||||||
|  | #                 elif "max fee per gas less than block base fee" in str(e): | ||||||
|  | #                     print("Initial transaction attempt failed due to 'max fee per gas less than block base fee'. Retrying with higher gas price.") | ||||||
|  | #                     retries += 1 | ||||||
|  | #                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) | ||||||
|  | #                     transaction_hash = send_transaction(new_gas_price) | ||||||
|  | #                 else: | ||||||
|  | #                     raise | ||||||
|  | 
 | ||||||
|  | #             while retries < max_retries and transaction_hash: | ||||||
|  | #                 try: | ||||||
|  | #                     transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash, timeout=120) | ||||||
|  | #                     print("Transaction confirmed:") | ||||||
|  | #                     break | ||||||
|  | #                 except TimeExhausted: | ||||||
|  | #                     retries += 1 | ||||||
|  | #                     print(f"Transaction not confirmed in {120 * retries} seconds, retrying... ({retries}/{max_retries})") | ||||||
|  | #                     # Increase the gas price by 10% for each retry | ||||||
|  | #                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) | ||||||
|  | #                     transaction_hash = send_transaction(new_gas_price) | ||||||
|  | #             else: | ||||||
|  | #                 if retries == max_retries: | ||||||
|  | #                     print("Failed to confirm the transaction after multiple attempts.") | ||||||
|  | #                     raise TimeoutError("Failed to confirm the transaction after multiple attempts.") | ||||||
|  | 
 | ||||||
|  | #             transaction_fee = transaction_receipt.effectiveGasPrice * transaction_receipt.gasUsed | ||||||
|  | #             tx_id = transaction_hash.hex() | ||||||
|  | #             return tx_id, str(transaction_fee) | ||||||
|  | 
 | ||||||
|  | #         except Exception as e: | ||||||
|  | #             print(f"An error occurred: {e}") | ||||||
|  | #             raise | ||||||
|  | #     except Exception as e: | ||||||
|  | #         print({"error":str(e)}) | ||||||
|  | #         return e | ||||||
| 
 | 
 | ||||||
| def getConversion(private_key,user_id,project): | def getConversion(private_key,user_id,project): | ||||||
|     ACCOUNT = web3.eth.account.from_key(private_key).address |     ACCOUNT = web3.eth.account.from_key(private_key).address | ||||||
|  |  | ||||||
|  | @ -1,7 +1,14 @@ | ||||||
| from web3 import Web3 | from web3 import Web3 | ||||||
| import time | import time | ||||||
| from web3.exceptions import TimeExhausted,TransactionNotFound | from web3.exceptions import TimeExhausted,TransactionNotFound | ||||||
|  | from .models import FailedTransactions | ||||||
|  | from django.contrib.auth import get_user_model | ||||||
|  | User = get_user_model() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| PRIVATE_KEY = "a632f28406579d96879cfc49d55411bb1424dbbae60bf4dd93ad0710b63d6b80" | PRIVATE_KEY = "a632f28406579d96879cfc49d55411bb1424dbbae60bf4dd93ad0710b63d6b80" | ||||||
|  | # PRIVATE_KEY = "6f06e1108b833b1918067042e13e60eda262705b80385a02d0330ce0db31d3ad" | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| # RPC = 'https://rpc-amoy.polygon.technology/' | # RPC = 'https://rpc-amoy.polygon.technology/' | ||||||
| # CONTRACT_ADDRESS = '0xbE91e2294D12fa78Ce64657fD9Ee137cE3e99881' | # CONTRACT_ADDRESS = '0xbE91e2294D12fa78Ce64657fD9Ee137cE3e99881' | ||||||
|  | @ -20,67 +27,113 @@ CAddress =CONTRACT_ADDRESS | ||||||
| abi = ABI | abi = ABI | ||||||
| contractInst = web3.eth.contract(address=CAddress, abi=abi) | contractInst = web3.eth.contract(address=CAddress, abi=abi) | ||||||
| 
 | 
 | ||||||
|  | # def UploadScriptAuditData(privatekey,pubkey,user_id,project,data):  | ||||||
|  | #     try: | ||||||
|  | #         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address | ||||||
|  | #         def send_transaction( gas_price): | ||||||
|  | #             nonce = web3.eth.get_transaction_count(acc1,'pending')  # Get nonce including pending transactions | ||||||
|  | #             uploadData = contractInst.functions.UploadScriptAuditData(pubkey, user_id, project, data).build_transaction({ | ||||||
|  | #                 'gasPrice': gas_price,  | ||||||
|  | #                 'chainId': CHAIN_ID,  | ||||||
|  | #                 'from': acc1,  | ||||||
|  | #                 'nonce': nonce | ||||||
|  | #             }) | ||||||
|  | #             signed_transaction = web3.eth.account.sign_transaction(uploadData, private_key=PRIVATE_KEY) | ||||||
|  | #             transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction) | ||||||
|  | #             print("Transaction hash:", transaction_hash.hex()) | ||||||
|  | #             return transaction_hash | ||||||
|  | #         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address | ||||||
|  | #         initial_gas_price = web3.eth.gas_price | ||||||
|  | 
 | ||||||
|  | #         max_retries = 4 | ||||||
|  | #         retries = 0 | ||||||
|  | 
 | ||||||
|  | #         transaction_hash = None | ||||||
|  | #         try: | ||||||
|  | #             transaction_hash = send_transaction(initial_gas_price) | ||||||
|  | #         except ValueError as e: | ||||||
|  | #             # If the error is due to "replacement transaction underpriced", handle it | ||||||
|  | #             if "replacement transaction underpriced" in str(e): | ||||||
|  | #                 print("Initial transaction attempt failed due to 'replacement transaction underpriced'. Retrying with higher gas price.") | ||||||
|  | #                 retries += 1 | ||||||
|  | #                 new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) | ||||||
|  | #                 transaction_hash = send_transaction(new_gas_price) | ||||||
|  | #             elif "max fee per gas less than block base fee" in str(e): | ||||||
|  | #                     print("Initial transaction attempt failed due to 'max fee per gas less than block base fee'. Retrying with higher gas price.") | ||||||
|  | #                     retries += 1 | ||||||
|  | #                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) | ||||||
|  | #                     transaction_hash = send_transaction(new_gas_price) | ||||||
|  | #             else: | ||||||
|  | #                 raise | ||||||
|  | 
 | ||||||
|  | #         while retries < max_retries and transaction_hash: | ||||||
|  | #             try: | ||||||
|  | #                 transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash, timeout=120) | ||||||
|  | #                 print("Transaction confirmed:") | ||||||
|  | #                 break | ||||||
|  | #             except TimeExhausted: | ||||||
|  | #                 retries += 1 | ||||||
|  | #                 print(f"Transaction not confirmed in {120 * retries} seconds, retrying... ({retries}/{max_retries})") | ||||||
|  | #                 # Increase the gas price by 10% for each retry | ||||||
|  | #                 new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) | ||||||
|  | #                 transaction_hash = send_transaction(new_gas_price) | ||||||
|  | #         else: | ||||||
|  | #             if retries == max_retries: | ||||||
|  | #                 print("Failed to confirm the transaction after multiple attempts.") | ||||||
|  | #                 raise TimeoutError("Failed to confirm the transaction after multiple attempts.") | ||||||
|  | 
 | ||||||
|  | #         transaction_fee = transaction_receipt.effectiveGasPrice * transaction_receipt.gasUsed | ||||||
|  | #         tx_id = transaction_hash.hex() | ||||||
|  | #         return tx_id, str(transaction_fee) | ||||||
|  | #     except Exception as e: | ||||||
|  | #         print({"error":str(e)}) | ||||||
|  | #         return e | ||||||
|  | 
 | ||||||
| def UploadScriptAuditData(privatekey,pubkey,user_id,project,data):  | def UploadScriptAuditData(privatekey,pubkey,user_id,project,data):  | ||||||
|  |     user = User.objects.get(id=user_id) | ||||||
|     try: |     try: | ||||||
|         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address |         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address | ||||||
|         def send_transaction( gas_price): |         nonce = web3.eth.get_transaction_count(acc1,'pending')  # Get nonce including pending transactions | ||||||
|             nonce = web3.eth.get_transaction_count(acc1,'pending')  # Get nonce including pending transactions |         uploadData = contractInst.functions.UploadScriptAuditData(pubkey, user_id, project, data).build_transaction({ | ||||||
|             uploadData = contractInst.functions.UploadScriptAuditData(pubkey, user_id, project, data).build_transaction({ |             'gasPrice': web3.eth.gas_price,  | ||||||
|                 'gasPrice': gas_price,  |             'chainId': CHAIN_ID,  | ||||||
|                 'chainId': CHAIN_ID,  |             'from': acc1,  | ||||||
|                 'from': acc1,  |             'nonce': nonce | ||||||
|                 'nonce': nonce |         }) | ||||||
|             }) |         signed_transaction = web3.eth.account.sign_transaction(uploadData, private_key=PRIVATE_KEY) | ||||||
|             signed_transaction = web3.eth.account.sign_transaction(uploadData, private_key=PRIVATE_KEY) |         transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction) | ||||||
|             transaction_hash = web3.eth.send_raw_transaction(signed_transaction.rawTransaction) |         print("Transaction hash:", transaction_hash.hex()) | ||||||
|             print("Transaction hash:", transaction_hash.hex()) |         transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash, timeout=120) | ||||||
|             return transaction_hash |  | ||||||
|         acc1 = web3.eth.account.from_key(PRIVATE_KEY).address |  | ||||||
|         initial_gas_price = web3.eth.gas_price |  | ||||||
| 
 |  | ||||||
|         max_retries = 4 |  | ||||||
|         retries = 0 |  | ||||||
| 
 |  | ||||||
|         transaction_hash = None |  | ||||||
|         try: |  | ||||||
|             transaction_hash = send_transaction(initial_gas_price) |  | ||||||
|         except ValueError as e: |  | ||||||
|             # If the error is due to "replacement transaction underpriced", handle it |  | ||||||
|             if "replacement transaction underpriced" in str(e): |  | ||||||
|                 print("Initial transaction attempt failed due to 'replacement transaction underpriced'. Retrying with higher gas price.") |  | ||||||
|                 retries += 1 |  | ||||||
|                 new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) |  | ||||||
|                 transaction_hash = send_transaction(new_gas_price) |  | ||||||
|             elif "max fee per gas less than block base fee" in str(e): |  | ||||||
|                     print("Initial transaction attempt failed due to 'max fee per gas less than block base fee'. Retrying with higher gas price.") |  | ||||||
|                     retries += 1 |  | ||||||
|                     new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) |  | ||||||
|                     transaction_hash = send_transaction(new_gas_price) |  | ||||||
|             else: |  | ||||||
|                 raise |  | ||||||
| 
 |  | ||||||
|         while retries < max_retries and transaction_hash: |  | ||||||
|             try: |  | ||||||
|                 transaction_receipt = web3.eth.wait_for_transaction_receipt(transaction_hash, timeout=120) |  | ||||||
|                 print("Transaction confirmed:") |  | ||||||
|                 break |  | ||||||
|             except TimeExhausted: |  | ||||||
|                 retries += 1 |  | ||||||
|                 print(f"Transaction not confirmed in {120 * retries} seconds, retrying... ({retries}/{max_retries})") |  | ||||||
|                 # Increase the gas price by 10% for each retry |  | ||||||
|                 new_gas_price = int(web3.eth.gas_price * (1 + 0.1 * retries)) |  | ||||||
|                 transaction_hash = send_transaction(new_gas_price) |  | ||||||
|         else: |  | ||||||
|             if retries == max_retries: |  | ||||||
|                 print("Failed to confirm the transaction after multiple attempts.") |  | ||||||
|                 raise TimeoutError("Failed to confirm the transaction after multiple attempts.") |  | ||||||
| 
 |  | ||||||
|         transaction_fee = transaction_receipt.effectiveGasPrice * transaction_receipt.gasUsed |         transaction_fee = transaction_receipt.effectiveGasPrice * transaction_receipt.gasUsed | ||||||
|         tx_id = transaction_hash.hex() |         tx_id = transaction_hash.hex() | ||||||
|         return tx_id, str(transaction_fee) |         # Check if the transaction was successful | ||||||
|  |         if transaction_receipt.status == 1: | ||||||
|  |             print("Transaction successful!") | ||||||
|  |             return tx_id, str(transaction_fee) | ||||||
|  |         else: | ||||||
|  |             print("Transaction failed!") | ||||||
|  |             obj,_ = FailedTransactions.objects.get_or_create(service_id=project,service_name="ScriptAudit") | ||||||
|  |             creator = User.objects.get(id=user_id) | ||||||
|  |             obj.creator = creator | ||||||
|  |             obj.transaction_type = "UploadScriptAuditData" | ||||||
|  |             obj.transaction_hash = "" | ||||||
|  |             obj.transaction_status = "failed" | ||||||
|  |             obj.transaction_error = "Transaction failed" | ||||||
|  |             obj.transaction_data = str(data) | ||||||
|  |             obj.save() | ||||||
|  |             return False, "Transaction failed" | ||||||
|     except Exception as e: |     except Exception as e: | ||||||
|         print({"error":str(e)}) |         print({"error":str(e)}) | ||||||
|         return e |         obj,_ = FailedTransactions.objects.get_or_create(service_id=project,service_name="ScriptAudit") | ||||||
|  |         creator = User.objects.get(id=user_id) | ||||||
|  |         obj.creator = creator | ||||||
|  |         obj.transaction_type = "UploadScriptAuditData" | ||||||
|  |         obj.transaction_hash = "" | ||||||
|  |         obj.transaction_status = "failed" | ||||||
|  |         obj.transaction_error = "Transaction failed" | ||||||
|  |         obj.transaction_data = str(data) | ||||||
|  |         obj.save() | ||||||
|  |         return False, str(e) | ||||||
|      |      | ||||||
| def getScriptAudit(private_key,user_id,project): | def getScriptAudit(private_key,user_id,project): | ||||||
|     ACCOUNT = web3.eth.account.from_key(private_key).address |     ACCOUNT = web3.eth.account.from_key(private_key).address | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue