惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Tor Project blog
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Latest news
Latest news
L
LINUX DO - 热门话题
罗磊的独立博客
T
Tenable Blog
The Hacker News
The Hacker News
美团技术团队
N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
博客园 - 司徒正美
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
云风的 BLOG
云风的 BLOG
S
Secure Thoughts
Cloudbric
Cloudbric
S
Security @ Cisco Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
U
Unit 42
雷峰网
雷峰网
C
CXSECURITY Database RSS Feed - CXSecurity.com
Webroot Blog
Webroot Blog
爱范儿
爱范儿
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
P
Palo Alto Networks Blog
Google Online Security Blog
Google Online Security Blog
The Last Watchdog
The Last Watchdog
博客园 - 聂微东
Help Net Security
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
F
Full Disclosure
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Security Affairs
Project Zero
Project Zero

smallyu的博客

为什么买的加密货币一定要去中心化 RISC-V 虚拟机无法代替 EVM 虚拟机 Polkadot 的 Existential Deposit 机制错在哪里 利息,套利,交易策略,金融市场 LayerZero 从来不挑战比特币的地位 默认参数引起的以太坊节点运行错误 硬件钱包与资产安全 预测市场比币圈更赌场 为什么去中心化的跨链桥不可能实现 我对于 AI 时代的答案 不要投资任何隐私币 区块链技术世界的三大真理 以太坊 AA 钱包的致命问题是什么 基于 AI 语义执行的 MCP 区块链的设计 一个集成 Geth 和 CometBFT 的兼容层 我的加密货币定投策略(二) DeFi 基础: 理解 AMM 定价机制 Go 语言 GMP 调度器的原理是什么 Web3 项目分析计划 对 Psyche Network 项目的分析 continuation 教程: 理解 CPS 如何开发一个比特币符文(Runes)协议 比特币脚本开发教程 我从王垠的计算机科学视频班学到了什么 区块链技术面试题(2025年版) Rust 语言容易让新手困惑的一个“过度优化” Solana 智能合约开发教程 (1) 尝试开发一个最小 EVM 虚拟机 基于 ZK 的链上身份系统设计 一个 Web3 打赏系统的设计 鼓吹 Cursor 的人技术能力都差 关于 Code Review 的礼节 假如启动一个新的以太坊 PoS 网络 发行加密货币的最好方式 所有 BFT 共识的区块链都是中心化的 对 2025 年区块链行业的预测 Restaking 项目的经济难题 为什么不要做以太坊的二次开发 为什么不要做智能合约开发和 DeFi 开发 我的加密货币定投策略(一) PoS 类型的区块链如何处理分叉 Ethereum Casper 为什么需要 EIP-7251 区块链中的 PBFT 不需要第二次投票 开发者的思维方式 发币的核心要点 炒币投资的小 tips 为什么说 PoW 比 PoS 更加去中心化 牛市对普通人来说意味着什么 如何健康地远程工作 为什么比特币不用概率加密函数 程序员的 “服从权威” 心理 区块链技术面试题 如何区分公有链和联盟链 对 Layer 2 项目创业想法的回复 对区块链共识机制的理解 Pebbling Game 鹅卵石游戏 PDP 文件证明的局限性 不要小瞧 ChatGPT 为什么炒币不是一个好主意 一种在区块链上生成随机数的机制 为什么以太坊的私钥计算不可逆 关于以太坊的私钥碰撞 “猜均值的2/3” dApp 游戏设计 Proof of Storage/Space/Replication 的区别 Proofs of Retrievability 文件证明的含义 对 S-PDP 文件证明的示例和解释 我的加密货币交易机器人 对区块链行业的见闻 随机确认块的共识机制 VRF + BFT 共识引起交易失败的问题 为什么要重视编程思想 对 Web 3.0 的理解 GitBook 好用吗? 一种区块链节点存储扩容的方式 一种基于“自我中心主义”的共识机制 链表常见算法题及解析 基于 Multi-Linked List 的区块链设想 理解哈希函数与序列化 联盟链比公有链差在哪儿 在 Dijkstra 算法中保存路径 为什么数字货币使用区块链是政治问题 区块链:下一代数字身份认证体系的基石 网页技术能实现 3D 建模吗? 给区块链一个定义 从 Erlang 开始了解 Actor 模型 一种侧边导航栏的交互方式 Rust 的 ownership 是什么? Haskell 中的 Monad 是什么? 浅析 Libra 背后的区块链技术 对区块链的理性认识 Rust 基础语法概述 基于 Java 的爬虫框架 WebCollector Kotlin:简化版的 Scala JavaScript 有关联数组吗? 主流编程语言的异常处理机制 Go 语言基本语法 Scala 语法基础 用 Scala 改写 Java 浅度实践 Python 获取海贼王更新信息 HTML5 音乐可视化
如何看懂任意区块链项目的技术架构
2024-10-15 · via smallyu的博客

如何看懂任意区块链项目的技术架构

2024-10-15

基本结构

最基本的区块链,就是一条区块链本身,包含有通过共识出块的能力,可能有很多节点,也可能只有一个节点,每个节点都提供接收交易的 RPC 接口:

因为以太坊的诞生,区块链的交易不仅仅是交易,还具有了智能合约的能力:

总会有一个外部的程序来和智能合约交互,也就是发起交易:

从这里开始需要明确两种行为:

  1. 凡是和区块链有交互的,可能是提交交易或者查询交易,都算是链上交互
  2. 和区块链没有任何交互的,属于链下行为

向智能合约发起交互一定属于链上交互,同样的,无论发起交易的外部程序,是用什么语言写的,可能是 Javascript 或者 Golang,都叫做智能合约的 SDK:

除了以太坊的 EVM 合约,还有可能是其他虚拟机(SVM、WASM)的合约,或者 Cosmos 直接操作状态数据库的方式(Native合约),可以统一理解为链上智能合约:

只要是链上合约,都会需要链下程序来发起交易,才能够实现某些功能。

而当智能合约有了具体的逻辑,很可能会触发一些事件,这些事件往往由链下节点来监听和处理:

这个链下节点起什么名字都可以,用什么语言写都可以,总之会获取到合约中的事件,一般监听事件的方式有两种:

  1. 主动查,不断请求节点的接口,看有没有新的事件
  2. 被动接受,比如 websocket 建立的长链接

当合约里触发某个事件后,链下节点监听到事件,会根据事件进入不同代码分支,后面进行多么复杂的操作都可以。

链下节点可能有多个,也可能有多种角色,但是不重要,重要的是,他们都是在和链上的事件进行交互:

一般链下节点之间不会擅自进行通信,而是紧跟区块链的块内容,因为链下节点也需要保持状态的一致,区块链场景下,链本身已经是非常好的能提供状态一致的手段了:

所以,这个时候你就知道,其实对于区块链项目来说,链下节点和链上节点之间,只有两种动作:

  1. 通过交易向区块链发送数据
  2. 通过监听事件来从区块链查询事件

Cosmos 有一个能支持 EVM 合约的项目,还提供了 evm_hook 的接口,当 EVM 合约触发事件的时候会主动调用接口函数。这种 hook 函数本质上也是合约事件的被动监听,无非是从合约事件到链下节点调用的方式,从 RPC 请求变成了函数的直接调用。唯一增加的复杂度是 EVM 合约触发了 Cosmos 模块的函数,把两种合约的实现方式串起来了:

复杂架构也不会改变的是,链下节点和链上节点之前的交互,只有两种动作。

如果再复杂一点的话,会往什么方向复杂呢,链下节点开始向链上提交交易了:

也许在监听到事件后提交了一笔交易,交易触发了另一个事件,监听到另一个事件后进行了更多的操作。但是总之,链下节点和链上节点之前的交互,仍然只有两种动作。

填充业务逻辑

有了基本的技术手段,再往上填充业务逻辑,就容易理解了。

面对很长的业务逻辑,总是能分清楚哪些部分是链上交互、哪些部分是链下行为,核心区别在于数据状态存在哪里,是区块链上,还是链下节点:

  1. 如果是通过交易发送到链上,业务的复杂程度就取决于合约的逻辑。
  2. 如果是链下节点监听到事件后的行为,那就取决于链下代码的复杂程度。

如果复杂度超出了上述两种情况,就只能是链下节点之间脱离区块链进行了擅自的通信,并且还产生了不一致的状态,这样的链下节点可以认为已经在区块链项目之外了。