跳到主要内容

区块链基础

理解区块链技术是加密量化的基础,本节介绍核心概念和技术原理。

区块链核心概念

分布式账本

传统数据库          区块链
───────── ──────
中心化服务器 → 分布式节点
单点控制 → 共识机制
可篡改 → 不可篡改
私有 → 透明可追溯

区块结构

┌─────────────────────────────────────┐
│ Block N │
├─────────────────────────────────────┤
│ Header: │
│ - Previous Hash (前一区块哈希) │
│ - Timestamp (时间戳) │
│ - Merkle Root (交易摘要) │
│ - Nonce (随机数) │
├─────────────────────────────────────┤
│ Body: │
│ - Transactions (交易列表) │
│ - Smart Contracts (合约代码) │
└─────────────────────────────────────┘

共识机制

机制原理代表特点
PoW算力竞争比特币安全性高、能耗大
PoS权益质押以太坊2.0节能环保、门槛低
DPoS委托权益EOS效率高、中心化倾向

比特币 vs 以太坊

比特币(数字黄金)

  • 模型: UTXO(未花费交易输出)
  • 脚本: 简单脚本,非图灵完备
  • 用途: 价值存储、转账
# UTXO模型示例
inputs = [
{"txid": "abc...", "vout": 0, "value": 1.0}, # 之前收到的1 BTC
]
outputs = [
{"address": " recipient1", "value": 0.5}, # 发送0.5 BTC
{"address": " sender_change", "value": 0.499}, # 找零
]
# 0.001 BTC作为手续费

以太坊(世界计算机)

  • 模型: 账户模型(余额+存储+代码)
  • 智能合约: 图灵完备,支持复杂逻辑
  • Gas机制: 计算资源付费
# 以太坊账户类型
账户 = {
"address": "0x...",
"balance": 10.5, # ETH余额
"nonce": 5, # 交易计数
"code": "0x...", # 合约代码(合约账户)
"storage": {...} # 存储状态
}

密码学基础

哈希函数

  • SHA-256: 比特币使用,输出256位哈希
  • Keccak-256: 以太坊使用
import hashlib

def sha256(data):
return hashlib.sha256(data.encode()).hexdigest()

# 特性:
# 1. 单向性:无法从哈希反推原文
# 2. 确定性:相同输入总是得到相同输出
# 3. 敏感性:微小输入变化导致输出剧变

非对称加密

  • 私钥: 随机生成的256位数字,必须保密
  • 公钥: 由私钥推导,可以公开
  • 地址: 公钥的哈希值,用于接收资产
from eth_account import Account

# 生成新账户
account = Account.create()
private_key = account.key.hex() # 私钥:保密!
address = account.address # 地址:0x...

智能合约基础

Solidity入门

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
uint256 storedData;

function set(uint256 x) public {
storedData = x;
}

function get() public view returns (uint256) {
return storedData;
}
}

常用DeFi合约类型

  • DEX: Uniswap、Curve(自动做市商)
  • 借贷: Aave、Compound(超额抵押借贷)
  • 衍生品: dYdX、GMX(永续合约)
  • 聚合器: 1inch、Paraswap(最优路由)

链上数据获取

RPC调用

from web3 import Web3

# 连接以太坊节点
w3 = Web3(Web3.HTTPProvider('https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY'))

# 获取最新区块
latest_block = w3.eth.get_block('latest')
print(f"区块高度: {latest_block.number}")
print(f"时间戳: {latest_block.timestamp}")
print(f"交易数: {len(latest_block.transactions)}")

# 获取账户余额
balance = w3.eth.get_balance('0x...')
print(f"余额: {w3.from_wei(balance, 'ether')} ETH")

事件日志(Event Logs)

# 监听Transfer事件
filter = w3.eth.filter({
'address': '0xdAC17F958D2ee523a2206206994597C13D831ec7', # USDT合约
'topics': [Web3.keccak(text='Transfer(address,address,uint256)').hex()]
})

logs = filter.get_all_entries()
for log in logs:
print(f"转账: {log}")

延伸阅读