Non-Fungible Tokens (NFTs) have revolutionized the digital economy, enabling creators to monetize their work and collectors to own unique digital assets. In this blog post, we'll explore how to build a simple NFT marketplace using Python, leveraging blockchain technology and the Ethereum network.
What Is an NFT Marketplace?
An NFT marketplace is a platform where users can mint, buy, sell, and trade NFTs. It typically includes features such as:
- Minting NFTs: Creating unique tokens on the blockchain.
- Listing NFTs: Displaying NFTs for sale or auction.
- Buying and Selling NFTs: Enabling peer-to-peer transactions.
Tools and Libraries
To create our Python-based NFT marketplace, we'll use the following tools:
- web3.py: A Python library for interacting with the Ethereum blockchain.
- Flask: A lightweight web framework for building the frontend and backend.
- Solidity: For writing the smart contract that governs the NFT.
- MetaMask: A browser wallet to interact with the blockchain.
- Infura or Alchemy: For connecting to the Ethereum network.
Smart Contract for NFTs
NFTs are created using the ERC-721 standard on Ethereum. Below is a sample Solidity contract:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; contract NFTMarketplace is ERC721URIStorage { uint256 public tokenCounter; constructor() ERC721("MyNFT", "MNFT") { tokenCounter = 0; } function mintNFT(string memory tokenURI) public returns (uint256) { uint256 newTokenId = tokenCounter; _safeMint(msg.sender, newTokenId); _setTokenURI(newTokenId, tokenURI); tokenCounter++; return newTokenId; } } |
Python Backend
Step 1: Connect to Ethereum
1 2 3 4 5 6 7 8 9 10 11 | from web3 import Web3 # Connect to Ethereum network infura_url = "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID" web3 = Web3(Web3.HTTPProvider(infura_url)) # Check connection if web3.isConnected(): print("Connected to Ethereum network") else: print("Connection failed") |
Step 2: Interact with the Smart Contract
Get the contract's address and ABI:
1 2 3 4 5 6 7 | contract_address = "0xYourContractAddress" abi = [ # Include the ABI of the contract ] # Load the contract contract = web3.eth.contract(address=contract_address, abi=abi) |
Step 3: Mint an NFT
1 2 3 4 5 6 7 8 9 10 11 12 | def mint_nft(user_address, token_uri): transaction = contract.functions.mintNFT(token_uri).buildTransaction({ 'from': user_address, 'nonce': web3.eth.getTransactionCount(user_address), 'gas': 3000000, 'gasPrice': web3.toWei('20', 'gwei') }) signed_txn = web3.eth.account.signTransaction(transaction, private_key="YOUR_PRIVATE_KEY") tx_hash = web3.eth.sendRawTransaction(signed_txn.rawTransaction) print(f"Transaction sent: {tx_hash.hex()}") receipt = web3.eth.waitForTransactionReceipt(tx_hash) print("Transaction mined:", receipt) |
Flask Frontend
Create a Flask app to interact with the blockchain:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/mint', methods=['POST']) def mint(): data = request.json user_address = data['address'] token_uri = data['token_uri'] try: mint_nft(user_address, token_uri) return jsonify({'message': 'NFT minted successfully!'}), 200 except Exception as e: return jsonify({'error': str(e)}), 500 if __name__ == "__main__": app.run(debug=True) |
No comments:
Post a Comment