Python 區塊鏈與Web3開發指南

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png

區塊鏈基礎概念

區塊鏈核心特性

python

復制

下載

class Block:def __init__(self, index, timestamp, data, previous_hash):self.index = indexself.timestamp = timestampself.data = dataself.previous_hash = previous_hashself.hash = self.calculate_hash()def calculate_hash(self):import hashlibsha = hashlib.sha256()sha.update(f"{self.index}{self.timestamp}{self.data}{self.previous_hash}".encode('utf-8'))return sha.hexdigest()# 創建創世區塊
genesis_block = Block(0, "2023-01-01", "Genesis Block", "0")
print(f"創世區塊哈希: {genesis_block.hash}")

https://www.researchgate.net/publication/336707000/figure/fig1/AS:817393838129153@1572173939816/The-structure-of-a-blockchain-The-blockchain-is-a-linked-list-containing-blocks-of-data.png

Web3.py 入門

連接以太坊網絡

python

復制

下載

from web3 import Web3# 連接Infura節點
infura_url = "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"
w3 = Web3(Web3.HTTPProvider(infura_url))# 檢查連接
print(f"是否已連接: {w3.isConnected()}")
print(f"最新區塊號: {w3.eth.block_number}")# 獲取賬戶余額
address = "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"  # 示例地址
balance = w3.eth.get_balance(address)
print(f"余額: {w3.fromWei(balance, 'ether')} ETH")

智能合約交互

python

復制

下載

# 合約ABI示例
contract_abi = '''
[{"inputs": [],"name": "get","outputs": [{"name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"name": "x","type": "uint256"}],"name": "set","outputs": [],"stateMutability": "nonpayable","type": "function"}
]
'''# 合約地址
contract_address = "0x1234567890123456789012345678901234567890"# 創建合約實例
contract = w3.eth.contract(address=contract_address, abi=contract_abi)# 調用只讀函數
current_value = contract.functions.get().call()
print(f"當前值: {current_value}")# 發送交易(需要賬戶和私鑰)
'''
account = "0xYourAccountAddress"
private_key = "YourPrivateKey"
nonce = w3.eth.get_transaction_count(account)
tx = contract.functions.set(42).buildTransaction({'chainId': 1,'gas': 200000,'gasPrice': w3.toWei('50', 'gwei'),'nonce': nonce
})
signed_tx = w3.eth.account.sign_transaction(tx, private_key)
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
print(f"交易哈希: {tx_hash.hex()}")
'''

智能合約開發

Solidity基礎合約

solidity

復制

下載

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract SimpleStorage {uint256 private value;event ValueChanged(uint256 newValue);function get() public view returns (uint256) {return value;}function set(uint256 newValue) public {value = newValue;emit ValueChanged(newValue);}
}

使用Brownie部署合約

python

復制

下載

from brownie import accounts, SimpleStoragedef deploy_simple_storage():# 加載賬戶account = accounts[0]# 部署合約simple_storage = SimpleStorage.deploy({"from": account})# 初始值initial_value = simple_storage.get()print(f"初始值: {initial_value}")# 更新值transaction = simple_storage.set(42, {"from": account})transaction.wait(1)  # 等待1個區塊確認# 新值updated_value = simple_storage.get()print(f"更新后的值: {updated_value}")return simple_storagedef main():deploy_simple_storage()

https://ethereum.org/static/8ea7775026b7fac7b16188a50a60f70d/302a4/developers.png

NFT開發實戰

ERC721合約示例

solidity

復制

下載

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";contract MyNFT is ERC721 {using Counters for Counters.Counter;Counters.Counter private _tokenIds;constructor() ERC721("MyNFT", "MNFT") {}function mintNFT(address recipient, string memory tokenURI)publicreturns (uint256){_tokenIds.increment();uint256 newItemId = _tokenIds.current();_mint(recipient, newItemId);_setTokenURI(newItemId, tokenURI);return newItemId;}
}

使用Python鑄造NFT

python

復制

下載

from brownie import accounts, network, config, MyNFT
from scripts.helpful_scripts import get_account
from pathlib import Path
import requests
import jsondef deploy_and_mint():account = get_account()my_nft = MyNFT.deploy({"from": account})# 上傳元數據到IPFStoken_uri = upload_to_ipfs("nft_metadata.json")# 鑄造NFTtx = my_nft.mintNFT(account, token_uri, {"from": account})tx.wait(1)print(f"NFT鑄造成功!查看地址: {my_nft.address}")def upload_to_ipfs(filepath):with Path(filepath).open("rb") as fp:file_binary = fp.read()ipfs_url = "http://127.0.0.1:5001"endpoint = "/api/v0/add"response = requests.post(ipfs_url + endpoint, files={"file": file_binary})ipfs_hash = response.json()["Hash"]return f"ipfs://{ipfs_hash}"def main():deploy_and_mint()

https://miro.medium.com/max/1400/1*8NgGYtqkYOwesVQdI3VQYw.png

DeFi應用開發

代幣合約(ERC20)

solidity

復制

下載

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract MyToken is ERC20 {constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {_mint(msg.sender, initialSupply);}
}

查詢代幣余額

python

復制

下載

from web3 import Web3# 連接節點
w3 = Web3(Web3.HTTPProvider("https://mainnet.infura.io/v3/YOUR_PROJECT_ID"))# ERC20 ABI片段
erc20_abi = '''
[{"constant": true,"inputs": [{"name": "_owner", "type": "address"}],"name": "balanceOf","outputs": [{"name": "balance", "type": "uint256"}],"type": "function"}
]
'''# 代幣合約地址
token_address = "0x6B175474E89094C44Da98b954EedeAC495271d0F"  # DAI合約
user_address = "0xYourWalletAddress"# 創建合約實例
contract = w3.eth.contract(address=token_address, abi=erc20_abi)# 查詢余額
balance = contract.functions.balanceOf(user_address).call()
print(f"代幣余額: {balance / 10**18}")  # 假設代幣有18位小數

區塊鏈數據分析

分析交易數據

python

復制

下載

import pandas as pd
from web3 import Web3w3 = Web3(Web3.HTTPProvider("https://mainnet.infura.io/v3/YOUR_PROJECT_ID"))def get_block_data(block_number):block = w3.eth.get_block(block_number, full_transactions=True)return {"block_number": block.number,"timestamp": block.timestamp,"miner": block.miner,"gas_used": block.gasUsed,"gas_limit": block.gasLimit,"transaction_count": len(block.transactions)}# 獲取最近10個區塊數據
blocks_data = [get_block_data(w3.eth.block_number - i) for i in range(10)]
df = pd.DataFrame(blocks_data)# 數據分析
print(df.describe())
print("\nGas使用率:")
df['gas_usage'] = df['gas_used'] / df['gas_limit']
print(df[['block_number', 'gas_usage']])

可視化交易趨勢

python

復制

下載

import matplotlib.pyplot as plt# 準備數據
df['datetime'] = pd.to_datetime(df['timestamp'], unit='s')# 創建圖表
plt.figure(figsize=(12, 6))
plt.plot(df['datetime'], df['gas_usage'], marker='o')
plt.title('區塊Gas使用率趨勢')
plt.xlabel('時間')
plt.ylabel('Gas使用率')
plt.grid(True)
plt.savefig('gas_usage_trend.png')
plt.show()

https://www.researchgate.net/publication/338442131/figure/fig1/AS:842381179748352@1577724938245/Blockchain-data-analysis-process.png

安全最佳實踐

智能合約安全檢測

python

復制

下載

from slither import Slither
from slither.detectors import all_detectorsdef analyze_contract(contract_path):# 加載合約slither = Slither(contract_path)# 運行所有檢測器detectors = [getattr(all_detectors, d) for d in all_detectors.__all__]print(f"分析合約: {contract_path}")print("=" * 50)for detector in detectors:detector = detector(slither)detector_results = detector.detect()if detector_results:print(f"\n{detector.ARGUMENT}:")for result in detector_results:print(f"- {result['description']}")print(f"  位置: {result['source_mapping']}")# 分析合約
analyze_contract("SimpleStorage.sol")

常見漏洞防護

  1. 重入攻擊防護:

solidity

復制

下載

// 使用OpenZeppelin的ReentrancyGuard
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";contract SecureContract is ReentrancyGuard {function safeWithdraw() public nonReentrant {// 提款邏輯}
}
  1. 整數溢出防護:

solidity

復制

下載

// 使用SafeMath(0.8.0+版本已內置)
import "@openzeppelin/contracts/utils/math/SafeMath.sol";contract SafeMathExample {using SafeMath for uint256;function safeAdd(uint256 a, uint256 b) public pure returns (uint256) {return a.add(b);}
}

Web3開發工具鏈

工具名稱用途適用場景
Web3.py以太坊交互庫后端服務、腳本
Brownie開發框架合約測試、部署
Hardhat開發環境專業合約開發
Ganache本地測試鏈開發測試
Infura/Alchemy節點服務生產環境連接
OpenZeppelin合約庫安全合約開發
IPFS去中心化存儲NFT元數據存儲

去中心化應用(DApp)架構

text

復制

下載

dapp_project/
├── client/              # 前端代碼
│   ├── public/          # 靜態文件
│   └── src/             # React/Vue代碼
├── contracts/           # 智能合約
│   ├── contracts/       # Solidity代碼
│   ├── tests/           # 合約測試
│   └── scripts/         # 部署腳本
├── backend/             # 后端服務(可選)
│   ├── api/             # API路由
│   └── services/        # 業務邏輯
└── docs/                # 項目文檔

前端集成示例

javascript

復制

下載

import { ethers } from "ethers";
import ABI from "./contractABI.json";async function connectWallet() {if (window.ethereum) {try {// 請求賬戶訪問const accounts = await window.ethereum.request({ method: "eth_requestAccounts" });const provider = new ethers.providers.Web3Provider(window.ethereum);const signer = provider.getSigner();// 合約實例const contractAddress = "0x123...";const contract = new ethers.Contract(contractAddress, ABI, signer);// 調用合約const value = await contract.get();console.log("當前值:", value.toString());} catch (error) {console.error("用戶拒絕訪問:", error);}} else {alert("請安裝MetaMask!");}
}

結語與學習路徑

https://ethereum.org/static/4d030a6f9c1e4a919e775cf12a8dd192/302a4/learn.png

通過這八篇系列教程,你已經掌握了:

  1. 區塊鏈基礎原理與Python實現

  2. Web3.py與以太坊交互

  3. 智能合約開發與部署

  4. NFT與DeFi應用開發

  5. 區塊鏈數據分析

  6. 安全最佳實踐

  7. 完整DApp架構

下一步學習建議

  1. 深入協議層

    • 學習以太坊EVM原理

    • 研究零知識證明(ZKP)技術

    • 探索Layer2解決方案

  2. 參與生態

    • 貢獻開源Web3項目

    • 參加黑客松活動

    • 加入DAO組織

  3. 專業領域

    • DeFi協議開發

    • NFT平臺架構

    • 區塊鏈安全審計

  4. 擴展知識

    • IPFS與去中心化存儲

    • Oracles與鏈外數據

    • 跨鏈技術

區塊鏈技術正在重塑互聯網未來,Python作為Web3開發的重要工具,將持續發揮關鍵作用。保持學習,你將成為這一變革的引領者!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84837.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84837.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84837.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

工業智能體調參閉環:從物料感知到智慧工藝的落地路徑

用戶定義目標:智能工藝的起點不是機器,而是人 在智能制造系統中,工藝調優的第一步并非直接依賴AI或自動化設備,而是始于用戶的明確輸入。用戶需要在系統中定義產品的工藝要求,包括目標尺寸與規格(如長寬高…

【Linux學習筆記】進程間通信之共享內存

【Linux學習筆記】進程間通信之共享內存 🔥個人主頁:大白的編程日記 🔥專欄:Linux學習筆記 文章目錄 【Linux學習筆記】進程間通信之共享內存前言一. system V共享內存1.1 共享內存數據結構1.2 共享內存函數1.3 共享內存實現通信…

郭碧婷闖入女團賽道 與劉忻張予曦蔡詩蕓組成ROLLING SISTERS

近日,郭碧婷與劉忻、張予曦、蔡詩蕓組成的女團ROLLING SISTERS正式官宣,并發布《Rolling Life》《Alpha》兩首單曲! 此次幾位姐姐的組合讓大家眼前一亮,尤其是郭碧婷造型顛覆以往。銀灰色挑染短發搭配棱角分明的黑色煙熏妝&#x…

2025再升級:醫療數智立體化體系V2.0架構簡介

在醫療數智立體化體系第一版基礎上,融入量子物理的第一性原理計算、人工智能(AI)、高性能云計算(HPC)和標準化機器人自動化整合成“醫療數智立體化體系2.0”,代表了醫療研發未來的重要發展方向。這個體系的核心在于深度融合物理世界規律、智能計算與自動化執行,為醫療AI…

Day40 訓練和測試的規范寫法

目錄 一、彩色和灰度圖片測試和訓練的規范寫法:封裝在函數中 單通道圖片的規范寫法 彩色圖片的規范寫法 二、展平操作:除第一個維度batchsize外全部展平 圖像任務中的張量形狀 NLP任務中的張量形狀 1. Flatten操作 2. view/reshape操作 總結 三…

Linux 文件 I/O 與標準 I/O 緩沖機制詳解

一、什么是標準 I/O?(FILE* 接口) 標準 I/O 是 C 標準庫為我們提供的一套高級文件操作接口,核心基于結構體 FILE,常見函數如: fopen() / fclose() fread() / fwrite() fprintf() / fscanf() fflush() /…

C++的前世今生-C++11

C98(ISO/IEC 14882:1998) C98 是 C 的第一個標準化版本(ISO/IEC 14882:1998),它正式確立了 C 的核心語言特性和標準庫。以下是 C98 的主要特性總結: 一、核心語言特性** 模板(Templates&…

詞編碼模型怎么進行訓練的,輸出輸入是什么,標簽是什么

詞編碼模型怎么進行訓練的,輸出輸入是什么,標簽是什么 詞編碼模型的訓練本質是通過數據驅動的方式,將離散的文本符號映射為連續的語義向量。 一、訓練機制:從符號到向量的映射邏輯 1. 核心目標 將單詞/子詞(Token)映射為低維向量,使語義相關的詞在向量空間中距離更近…

【Linux指南】文件管理高級操作(復制、移動、查找)

引言 在Linux系統管理中,文件的復制、移動與查找是比基礎操作更進階的核心技能,它們構成了高效管理文件系統的"三駕馬車"。當我們需要備份重要數據、重構目錄結構或在龐大的文件系統中定位目標文件時,cp、mv、find等命令將成為最得…

【棧】-----【小C的記事本】

小C的記事本 題目描述 小C最近學會了 Java 小程序的開發,他很開心,于是想做一個簡單的記事本程序練練手。 他希望他的記事本包含以下功能: append(str):向記事本插入字符串 str(英文字符)。delete(k)&am…

技能系統詳解(2)——特效表現

特效會有個EffectManager用于統一管理所有特效,技能特效只是各類特效中的一種 EffectManager需要提供特效的創建,返回被封裝為EffectHandle 每類特效都有各種不同的配置參數,這些配置參數會傳遞給EffectManager用于生成EffectHandler 為支…

12.OpenCV—基礎入門

01讀取圖像 02創建空白圖像 03保存圖像 04更改圖像亮度 05更改圖像對比度 06灰度直方圖均衡 07彩色直方圖均衡 08五種濾波方式 09形態學操作 10仿射變換 11角度縮放仿射變換 12透視變換 13坐標映射 14模板匹配 15多模板匹配 16查找輪廓線 17輪廓線匹配 17繪制…

【Python】Python之什么是生成器?什么是迭代器?

目錄 專欄導讀前言什么是迭代器(Iterator)?迭代器的定義迭代器協議可迭代對象 vs 迭代器自定義迭代器迭代器的優勢 什么是生成器(Generator)?生成器的定義生成器函數生成器表達式復雜的生成器示例生成器的狀…

Python中實現簡單爬蟲并處理數據

在當今數據驅動的時代,能夠從互聯網上高效地抓取信息變得越來越重要。Python因其簡潔易學的特性,成為了編寫網絡爬蟲的首選語言之一。接下來,我將介紹如何使用Python來實現一個基礎的網絡爬蟲,并對收集到的數據進行初步處理。 首先…

免費wordpress主題網

免費WordPress主題網 WP模板牛 WP模板牛是一個提供免費WordPress主題的網站,用戶可以在這里找到大量高質量的模板,適用于各種網站類型。該網站致力于為用戶提供簡單、高效的建站體驗。 官網鏈接: https://wpniu.com 建站哥模板 建站哥模板…

為什么需要MyBatis-Plus條件構造器?

目錄 前言 一、傳統SQL編寫的痛點 二、條件構造器的核心優勢 1. 防SQL注入(安全性) 2. 面向對象編程(可讀性) 3. 動態條件構建(靈活性) 4. 數據庫無關性(可移植性) 三、典型應…

【從零學習JVM|第九篇】常見的垃圾回收算法和垃圾回收器

前言: 我們知道在堆內存中,會有自動的垃圾回收功能,那今天這篇文章將會向你介紹,這個功能實現的方式,還有實現的對象,接下來就由我來給你們詳細介紹垃圾回收的算法和實現算法的回收器。 目錄 前言&#…

品牌竄貨治理解決方案

在渠道網絡的暗潮中,竄貨猶如隱秘的漩渦,某知名白酒品牌曾因區域竄貨導致終端價格體系崩潰,半年內損失超3億元。竄貨行為不僅破壞市場秩序,更會引發信任危機。隨著電商平臺的多元化與分銷層級的復雜化,品牌方亟需構建一…

車載電子電器架構 --- 法律和標準對電子電氣架構的影響

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

一種通用跨平臺實現SEH的解決方案

一. 前言 眾所周知,在軟件的代碼中,處理軟件本身的邏輯只要大約1/3的代碼,另外2/3的代碼實際上是在處理各種各樣的異常情況。 這些異常情況一方面是因為不同用戶之間不同的硬件軟件環境要處理。另一方面是程序中可能出現的bug。比較典型的情…