3分钟Solidity: 0.2 web3的技术架构

86 阅读3分钟

欢迎订阅专栏3分钟Solidity--智能合约--Web3区块链技术必学

web3的技术架构主要是指DApp(decentmmmralized application 去中心化应用)技术架构。有以下基本技术概念

  • 去中心化:没有集中式的数据库和服务器
  • 区块链:以太坊等区块链作为分布式状态机,由网络中的匿名节点共同维护
  • 智能合约:区块链上运行的程序,定义了后端逻辑,开源且无法更改
  • EVM: 以太坊虚拟机,执行智能合约的环境。

区块链

区块链是个统称,比特币BTC以太坊ethereumSolana都是不同的区块链。智能合约是运行在以太坊上的,通过solidity来编写程序。

以太坊区块链(ethereum blockchain)被认为是世界计算器

  • 一个可全局访问的状态机,
  • 对等节点网络维护,
  • 状态的更改受共识规则的约束,
  • 只要写入了数据,就会被记录,
  • 数据不能更新回去。

智能合约

智能合约是以太坊上运行的程序,由高级编程语言编写,如Solidity或者Vyper(早期的合约语言)。

前端与区块链交互

  • 节点交互:通过设置节点或者第三方节点服务(Infura, Alchemy, Quicknode)与区块链交互
  • JSON-RPC: 前端与区块链交互的统一协议
  • 身份验证:通过MetaMask进行用户身份验证,签署交易。

每个以太坊客户端都实现了JSON-RPC规范,确保了当前应用程序想要跟区块链交互时,有一组统一的方法。

JSON-RPC是一种无状态,轻量级的远程过程(RPC)调用协议,定义了多个数据结构及其处理规则。它与传输方式无关,可以通过多种方式传输,比如HTTP,套接字等,JSON(RFC 4627)作为一种数据格式。

身份验证和鉴权通过借助MetaMask实现。

去中心化存储

如果直接将数据存储在区块链上,更新数据都需要收费,费用会非常高,通过使用去中心化的链下IPFS/Swarm等分布式文件系统,用于存储和访问数据,解决区块链存储昂贵的问题。

一般将图片,视频等非金融属性的资源放置在链下分布式存储中,账户余额等关键信息还有会存储在链上。

数据读取

The Graph 是一种链下索引解决方案,可以更轻松地查询以以太坊区块链上的数据。

前端工程师可以直接调用,不需要直接读取链上数据,这比传统的REST API更具有吸引力。

DApp架构

区块链,去中心化存储,身份验证和链下索引,形成了完整的DApp架构。

架构图如下:

graph TB
    %% 用户层
    subgraph UserLayer [用户界面层 - Front-end]
        UI[Web应用<br/>React/Vue/Angular]
        Wallet[钱包连接<br/>MetaMask/WalletConnect]
        SDK[Web3 SDK<br/>Web3.js/Ethers.js]
        
        UI --> Wallet
        UI --> SDK
    end
    
    %% 中间件层
    subgraph MiddlewareLayer [中间件/连接层]
        Provider[节点服务提供商<br/>Infura/Alchemy]
        Signer[交易签名<br/>通过钱包]
        
        SDK --> Provider
        SDK --> Signer
    end
    
    %% 区块链层
    subgraph BlockchainLayer [区块链网络层]
        Node[区块链节点<br/>EVM/Geth/Erigon]
        
        subgraph ContractLayer [智能合约层]
            Logic[业务逻辑合约]
            Data[数据合约]
            Access[权限管理合约]
            Proxy[代理合约<br/>可升级]
            
            Logic --> Data
            Logic --> Access
            Proxy -.-> Logic
        end
    end
    
    %% 去中心化存储
    subgraph StorageLayer [去中心化存储层]
        IPFS[IPFS<br/>文件/NFT元数据]
        Arweave[Arweave<br/>永久存储]
        Filecoin[Filecoin<br/>去中心化存储]
    end
    
    %% 链下服务
    subgraph OffChainLayer [链下服务层 - 可选]
        EventListener[事件监听服务]
        Indexer[索引服务<br/>The Graph]
        Oracle[预言机<br/>Chainlink/Band]
        API[API服务器<br/>缓存/聚合数据]
        
        Indexer --> API
    end
    
    %% 数据流
    Signer --> Node
    Provider --> Node
    Node --> ContractLayer
    
    ContractLayer -.-> IPFS
    ContractLayer -.-> Oracle
    
    EventListener -.-> Node
    Oracle -.-> EventListener
    
    %% 样式
    classDef userLayer fill:#e1f5fe,stroke:#01579b
    classDef middleware fill:#f3e5f5,stroke:#4a148c
    classDef blockchain fill:#e8f5e8,stroke:#1b5e20
    classDef storage fill:#fff3e0,stroke:#e65100
    classDef offchain fill:#fce4ec,stroke:#880e4f
    
    class UI,Wallet,SDK userLayer
    class Provider,Signer middleware
    class Node,ContractLayer blockchain
    class IPFS,Arweave,Filecoin storage
    class EventListener,Indexer,Oracle,API offchain

组件交互图

sequenceDiagram
    participant User as 用户
    participant UI as 前端应用
    participant Wallet as 钱包
    participant Node as 区块链节点
    participant Contract as 智能合约
    participant Storage as IPFS/存储
    participant Oracle as 预言机
    participant Indexer as The Graph

    %% 读取数据流程
    User->>UI: 访问DApp
    UI->>Wallet: 连接钱包
    Wallet-->>UI: 返回账户地址
    UI->>Node: 查询链上数据
    Node-->>UI: 返回数据
    
    alt 通过索引器查询
        UI->>Indexer: 复杂查询请求
        Indexer->>Node: 监听并索引数据
        Indexer-->>UI: 返回索引结果
    end
    
    %% 写入数据流程
    User->>UI: 执行交易操作
    UI->>Contract: 调用合约方法
    Contract->>Oracle: 请求链下数据
    Oracle-->>Contract: 返回数据
    Contract->>Storage: 存储元数据
    Storage-->>Contract: 返回CID
    
    Contract-->>Node: 交易上链
    Node-->>Wallet: 弹出确认
    Wallet-->>User: 确认交易
    User->>Wallet: 签名交易
    Wallet->>Node: 广播交易
    Node-->>UI: 返回交易哈希
    Note over Node,UI: 异步等待确认
      

L2扩展方案

L2 Scaling:通过侧链操作,降低成本并提高效率,然后将结果提交到主链上(L1)。

在L2上交易吞吐量增大,手续费降低。

常见的L2有OP网络(Optimistic Rollups), Poligon, ZK Rollups, Arbitrum等。