很高兴为你介绍 Web3,并为你提供一个基于 Python Flask 的 Web3 应用开发指南。


🚀 第一部分:Web3 是什么?为什么说是今后 10 年的主流?

Web3(Web 3.0) 是互联网的下一个阶段,其核心理念是 “去中心化”“用户拥有数据”

为了让你通俗易懂地理解,我们可以用一个**“租房 vs. 买房”**的比喻来对比:

📊 1. 互联网的三个时代对比
维度Web 1.0 (只读)Web 2.0 (交互)Web 3.0 (拥有)
比喻看橱窗租房子买房子
典型应用新浪、搜狐微信、抖音、淘宝DeFi、NFT、DAO
数据归属网站所有平台巨头所有用户个人所有
用户角色读者产消者所有者、治理者
核心特征只读读写读写拥有
🏠 2. 通俗解释
  • Web 2.0 (现状): 你就像一个租客。你在抖音上创作视频,粉丝是你的,但账号是抖音的。如果抖音封了你的号,你什么都带不走。你的数据和影响力都被“房东”(平台)掌握。
  • Web 3.0 (未来): 你就像一个房主。你拥有自己的数字身份(钱包地址),你的资产(NFT、代币)存在你的钱包里。你可以带着你的资产在不同的应用间自由穿梭。平台只是为你提供服务的“物业”,而不是“地主”。
🚀 3. 为什么它是未来 10 年的主流?
  1. 数据确权: 你终于拥有了自己的数据。你的浏览记录、社交关系不再被大公司免费拿去卖广告。
  2. 价值互联网: 以前互联网只能传递信息,现在能直接传递价值(加密货币)。你可以直接给大洋彼岸的陌生人转账,不需要银行中介。
  3. 创作者经济: 艺术家、音乐人可以通过 NFT 直接卖给粉丝,不用被中间商抽成。
  4. DAO (去中心化自治组织): 未来的公司可能没有 CEO,大家通过代码和投票来共同管理资金和决策。

💻 第二部分:基于 Python Flask 的 Web3 应用开发

Python 本身并不是区块链的原生语言(以太坊是 Go,Solidity 是智能合约语言),但 Python 拥有强大的库 web3.py,非常适合用来开发后端服务、数据分析或构建 DApp(去中心化应用)的后端。

下面我将带你开发一个简单的 Flask 应用,用于查询以太坊钱包的余额。

🛠️ 准备工作
  1. 安装依赖:
    你需要安装 flaskweb3 库。

    pip install flask web3 python-dotenv
    
  2. 获取节点访问权限:
    你需要一个以太坊节点来连接区块链。你可以自己搭建节点(很慢),或者使用第三方服务(如 InfuraAlchemy)。注册后,你会得到一个 HTTP API URL。

📁 项目结构
flask-web3-demo/
├── app.py
├── templates/
│   └── index.html
├── .env
└── requirements.txt
🧩 1. 配置文件 (.env)

创建一个 .env 文件来存放你的节点 URL:

INFURA_URL=https://mainnet.infura.io/v3/你的-infura-project-id
🐍 2. 后端代码 (app.py)
from flask import Flask, render_template, request, jsonify
from web3 import Web3
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

app = Flask(__name__)

# 1. 连接 Web3 节点
infura_url = os.getenv('INFURA_URL')
w3 = Web3(Web3.HTTPProvider(infura_url))

# 检查连接
if w3.is_connected():
    print(" 成功连接到以太坊节点")
else:
    print(" 连接失败")

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/get_balance', methods=['POST'])
def get_balance():
    data = request.get_json()
    address = data.get('address')
    
    try:
        # 校验地址格式
        if not w3.is_address(address):
            return jsonify({"error": "无效的以太坊地址"}), 400

        # 获取余额 (单位是 Wei)
        balance_wei = w3.eth.get_balance(address)
        
        # 转换为 ETH (1 ETH = 10^18 Wei)
        balance_eth = w3.from_wei(balance_wei, 'ether')
        
        return jsonify({
            "address": address,
            "balance": str(balance_eth)
        })
    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True)
🌐 3. 前端页面 (templates/index.html)
<!DOCTYPE html>
<html>
<head>
    <title>Flask Web3 余额查询</title>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
    <h1>🔍 Web3 钱包余额查询器</h1>
    <p>输入一个以太坊地址,查询其 ETH 余额。</p>
    
    <input type="text" id="addressInput" placeholder="例如: 0x..." style="width: 300px; padding: 5px;">
    <button onclick="queryBalance()">查询余额</button>

    <div id="result" style="margin-top: 20px; font-weight: bold;"></div>

    <script>
        async function queryBalance() {
            const address = document.getElementById('addressInput').value;
            const resultDiv = document.getElementById('result');
            
            resultDiv.innerHTML = "查询中...";

            try {
                const response = await axios.post('/get_balance', {
                    address: address
                });
                
                if (response.data.error) {
                    resultDiv.innerHTML = `错误: ${response.data.error}`;
                } else {
                    resultDiv.innerHTML = 
                        `地址: ${response.data.address} <br>
                         余额: <span style="color: green">${response.data.balance} ETH</span>`;
                }
            } catch (error) {
                resultDiv.innerHTML = `请求失败: ${error.response?.data?.error || error.message}`;
            }
        }
    </script>
</body>
</html>
▶️ 4. 运行应用
  1. 确保你的 .env 文件配置正确。

  2. 运行 Python 脚本:

    python app.py
    
  3. 打开浏览器访问 http://127.0.0.1:5000

  4. 输入一个以太坊地址(例如:0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B),点击查询,你就能看到该地址的 ETH 余额了。


📝 总结

这个例子展示了如何使用 Flask 作为后端服务器,利用 web3.py 库与以太坊区块链进行交互。

在这个简单的应用中:

  • Flask 处理网页请求和用户界面。
  • web3.py 负责连接区块链节点、获取数据。
  • 前端 (HTML/JS) 负责展示数据。

这只是一个入门示例。在实际的 Web3 开发中,你可能还需要学习如何:

  • 使用 eth-account 库进行本地签名。
  • 与智能合约交互(读取数据、发送交易)。
  • 处理代币转账逻辑。

希望这个解释和示例对你有帮助!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐