Spaces:
Build error
Build error
| import streamlit as st | |
| from web3 import Web3 | |
| import json | |
| import os | |
| os.environ["STREAMLIT_TELEMETRY_ENABLED"] = "0" | |
| # Streamlit UI | |
| st.title("Smart Contract Deployer") | |
| st.write("Deploy a smart contract using your Ethereum wallet.") | |
| wallet_address = st.text_input("Enter your wallet address:") | |
| private_key = st.text_input("Enter your private key:", type="password") | |
| infura_url = st.text_input("Enter your Infura URL:") | |
| #ABI for IPFSStorage | |
| import json | |
| contract_abi = json.loads(""" | |
| [ | |
| { | |
| "anonymous": false, | |
| "inputs": [ | |
| { | |
| "indexed": false, | |
| "internalType": "string", | |
| "name": "ipfsHash", | |
| "type": "string" | |
| } | |
| ], | |
| "name": "Store", | |
| "type": "event" | |
| }, | |
| { | |
| "inputs": [], | |
| "name": "getHashes", | |
| "outputs": [ | |
| { | |
| "internalType": "string[]", | |
| "name": "", | |
| "type": "string[]" | |
| } | |
| ], | |
| "stateMutability": "view", | |
| "type": "function" | |
| }, | |
| { | |
| "inputs": [ | |
| { | |
| "internalType": "string", | |
| "name": "ipfsHash", | |
| "type": "string" | |
| } | |
| ], | |
| "name": "storeHash", | |
| "outputs": [], | |
| "stateMutability": "nonpayable", | |
| "type": "function" | |
| } | |
| ] | |
| """) | |
| contract_bytecode = "0x608060405234801561001057600080fd5b50610655806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634245d48e1461003b57806371dc61cb14610059575b600080fd5b610043610075565b604051610050919061040b565b60405180910390f35b610073600480360381019061006e91906102cf565b61014e565b005b60606000805480602002602001604051908101604052809291908181526020016000905b828210156101455783829060005260206000200180546100b89061054d565b80601f01602080910402602001604051908101604052809291908181526020018280546100e49061054d565b80156101315780601f1061010657610100808354040283529160200191610131565b820191906000526020600020905b81548152906001019060200180831161011457829003601f168201915b505050505081526020019060010190610099565b50505050905090565b6000819080600181540180825580915050600190039060005260206000200160009091909190915090805190602001906101899291906101c4565b507f4f9c5253c28d756a479eda13b65899a3ad16e0b50d4100ef22348b747b709216816040516101b9919061042d565b60405180910390a150565b8280546101d09061054d565b90600052602060002090601f0160209004810192826101f25760008555610239565b82601f1061020b57805160ff1916838001178555610239565b82800160010185558215610239579182015b8281111561023857825182559160200191906001019061021d565b5b509050610246919061024a565b5090565b5b8082111561026357600081600090555060010161024b565b5090565b600061027a61027584610474565b61044f565b90508281526020810184848401111561029257600080fd5b61029d84828561050b565b509392505050565b600082601f8301126102b657600080fd5b81356102c6848260208601610267565b91505092915050565b6000602082840312156102e157600080fd5b600082013567ffffffffffffffff8111156102fb57600080fd5b610307848285016102a5565b91505092915050565b600061031c8383610399565b905092915050565b600061032f826104b5565b61033981856104d8565b93508360208202850161034b856104a5565b8060005b8581101561038757848403895281516103688582610310565b9450610373836104cb565b925060208a0199505060018101905061034f565b50829750879550505050505092915050565b60006103a4826104c0565b6103ae81856104e9565b93506103be81856020860161051a565b6103c78161060e565b840191505092915050565b60006103dd826104c0565b6103e781856104fa565b93506103f781856020860161051a565b6104008161060e565b840191505092915050565b600060208201905081810360008301526104258184610324565b905092915050565b6000602082019050818103600083015261044781846103d2565b905092915050565b600061045961046a565b9050610465828261057f565b919050565b6000604051905090565b600067ffffffffffffffff82111561048f5761048e6105df565b5b6104988261060e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b82818337600083830152505050565b60005b8381101561053857808201518184015260208101905061051d565b83811115610547576000848401525b50505050565b6000600282049050600182168061056557607f821691505b60208210811415610579576105786105b0565b5b50919050565b6105888261060e565b810181811067ffffffffffffffff821117156105a7576105a66105df565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f830116905091905056fea264697066735822122048abd857324db30c9ef1d5b905b229d966a49e007230d72ee76cf68a7716abbe64736f6c63430008020033" | |
| # Deploy contract when button is clicked | |
| if st.button("Deploy Contract"): | |
| if not all([wallet_address, private_key, infura_url]): | |
| st.warning("Please fill in all fields.") | |
| else: | |
| try: | |
| w3 = Web3(Web3.HTTPProvider(infura_url)) | |
| if not w3.is_connected(): | |
| st.error("Could not connect to Ethereum network. Check your Infura URL.") | |
| else: | |
| st.success("Connected to Sepolia!") | |
| contract = w3.eth.contract(abi=contract_abi, bytecode=contract_bytecode) | |
| nonce = w3.eth.get_transaction_count(wallet_address) | |
| # Build transaction | |
| tx = contract.constructor().build_transaction({ | |
| 'chainId': 11155111, # Sepolia chain ID | |
| 'from': wallet_address, | |
| 'nonce': nonce, | |
| 'gas': 3000000, | |
| 'gasPrice': w3.to_wei('10', 'gwei') | |
| }) | |
| # Sign and send transaction | |
| signed_tx = w3.eth.account.sign_transaction(tx, private_key) | |
| tx_hash = w3.eth.send_raw_transaction(signed_tx.raw_transaction) | |
| st.write("Deploying contract... Transaction hash:", tx_hash.hex()) | |
| # Wait for receipt | |
| tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash) | |
| st.success(f"✅ Contract deployed successfully at: `{tx_receipt.contractAddress}`") | |
| except Exception as e: | |
| st.error(f"Error deploying contract: {e}") | |