ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Substrate思维:从区块链框架到底层结构设计的通用逻辑

Substrate思维:从区块链框架到底层结构设计的通用逻辑 1. 从“substrate”这个词说起它到底是什么为什么值得单独聊第一次看到“substrate”这个词很多人会愣一下。它在不同圈子里指向完全不同的东西做区块链的人第一反应是 Parity 那套区块链框架做材料的人想到的是“基底、衬底”做生物实验的人想到的是培养基做印刷电路的人想到的是基板。这个词本身的意思是“底层、基底、承载层”——也就是别的东西赖以生长、附着、运行的那一层东西。我这次要聊的是把“substrate”当作一个通用概念来拆解任何一个系统都有一个承载它的底层结构而这个底层结构的设计质量直接决定了上层能走多远。这个视角听起来有点抽象但它其实非常实用。你写代码有代码的 substrate做内容有内容的 substrate搭团队有团队的 substrate甚至做一顿饭也有它的 substrate食材处理的基础层。为什么值得单独拿出来讲因为绝大多数人在做事的时候注意力都在“上层”——功能、效果、呈现、结果而忽略了底下那层。结果就是上层反复返工底层从来没稳过。我自己踩过太多这种坑一个项目功能改了七八版最后发现是底层的数据结构一开始就没设计对一篇内容改了又改最后发现是选题的“基底”就没选好怎么改都别扭。这篇文章适合谁看如果你是那种“做事总在返工、总觉得哪里不对但说不清”的人这篇是写给你的。如果你是对区块链 substrate 框架感兴趣的技术人我也会在中间用一整节讲清楚它的核心设计思路但我会把它当作“substrate 思维”的一个典型案例来拆而不是写成一份干巴巴的文档。全文我会围绕四个层面展开substrate 的通用设计逻辑、区块链 substrate 框架的深度拆解、substrate 思维在非技术场景的迁移、以及实操中最容易踩的坑。先把核心关键词摆出来substrate、底层结构、基底设计、框架思维、可扩展性、模块化、承载层。这几个词会贯穿全文你读的时候可以留意它们是怎么互相咬合的。2. substrate 的通用设计逻辑为什么底层决定上层天花板2.1 一个生活类比地基、地基、还是地基盖房子这件事最能说明问题。你看到的是一栋漂亮的楼——外墙、窗户、装修、家具这些都是“上层”。但决定这栋楼能盖多高、能扛几级地震、能不能加建、能不能改用途的全是地基也就是 substrate。我有个朋友做装修他跟我讲过一个真实案例有户人家买了套二手房想把阳台改成书房结果一查阳台的承重结构根本撑不住最后只能放弃。问题不在设计不在预算在于底层结构不支持上层需求。这就是 substrate 思维的核心上层的可能性是被底层锁死的。放到软件里也一样。一个系统的数据结构、接口协议、模块边界就是它的 substrate。你后面加多少功能、做多少优化都要在这个基底上跳舞。基底设计得好加功能是“搭积木”基底设计得差加功能是“拆承重墙”。2.2 substrate 的三个核心属性我把 substrate 的通用属性归纳成三条这三条你在任何领域都能套用第一承载性。substrate 的第一职责是“托住”上层。它不需要好看不需要花哨但它必须稳。数据库的 schema 是承载操作系统的内核是承载一篇文章的论点结构也是承载。承载性差的表现就是上层稍微一压就塌。第二可扩展性。好的 substrate 不是为当前需求定制的而是为“未来的变化”留了口子。这里有个关键判断你是为已知需求设计还是为未知需求设计前者叫“够用”后者叫“可扩展”。substrate 思维要求你至少往后者靠一点因为上层的需求几乎一定会变。第三解耦性。substrate 和上层之间应该有清晰的边界。边界清晰上层换掉不影响底层底层升级不破坏上层。这就是为什么模块化设计这么重要——模块化本质上是在给 substrate 划边界。这三条属性不是孤立的。承载性要求稳可扩展性要求活解耦性要求清。稳、活、清三者之间有张力太稳就不活太活就不稳太清可能过度设计。substrate 设计的难点就是在这三者之间找平衡。2.3 为什么大多数人忽略 substrate因为 substrate 是“看不见”的。它不产生直接可见的成果它的价值体现在“没有出问题”上。这就像空气——有它的时候你感觉不到没它的时候你立刻知道。人的注意力天然倾向于可见的、即时的、有反馈的东西。写一个功能跑起来有反馈设计一个底层结构跑起来没反馈只有三个月后加功能时才知道当初设计得好不好。这种延迟反馈是 substrate 被忽略的根本原因。我自己的经验是越是急着出成果的项目越容易在 substrate 上偷懒然后在后期付出十倍代价。这不是道德问题是认知问题——你得先意识到 substrate 的存在才可能去认真对待它。3. 区块链 substrate 框架深度拆解一个 substrate 思维的教科书案例3.1 它解决的是什么问题聊到 substrate技术圈最直接的联想就是 Parity 开发的区块链框架。我先说清楚它解决的核心问题在 substrate 出现之前做一条区块链的成本极高。你要实现共识、网络、存储、交易池、治理、升级机制……这些全是底层全是 substrate 层面的工作。大部分团队做完这些已经没精力做业务逻辑了。substrate 的思路是把这些底层全部抽象好、模块化好让开发者只写“业务逻辑”那一层。用它的原话说你只需要关注“状态转换函数”——也就是“什么输入导致什么状态变化”。剩下的共识、网络、存储框架帮你搞定。这就是典型的 substrate 思维把稳定的、通用的部分沉到底层把变化的、业务的部分浮到上层。这个思路本身不新鲜操作系统就是这么干的但 substrate 把它用在了区块链这个原本“每条链都要从零造轮子”的领域价值就出来了。3.2 核心架构Runtime、Pallet 与 FRAMEsubstrate 的架构里最核心的三个概念是 Runtime、Pallet 和 FRAME。我一个个拆。Runtime是链的“状态转换逻辑”所在你可以把它理解成链的“大脑”。它定义了什么交易是合法的、状态怎么变、区块怎么生成。关键点在于substrate 的 Runtime 是编译成 Wasm 的这意味着它可以链上升级——不用硬分叉不用停机直接通过治理把新版本的 Runtime 部署上去。这是 substrate 最被称道的特性之一。Pallet是功能模块。一个 Pallet 就是一组相关的状态和逻辑比如“资产”“治理”“质押”“身份”。substrate 自带了一堆官方 Pallet你也可以自己写。Pallet 之间通过清晰的接口交互这就是前面说的“解耦性”在区块链里的体现。FRAME是 substrate 提供的开发框架全称是 Framework for Runtime Aggregation of Modularized Entities。名字很长本质就是一套让你写 Pallet 更省事的工具集和约定。它提供了宏、存储抽象、事件系统、错误处理等让你写业务逻辑时不用重复造轮子。我用一个表格把这三者的关系理清楚概念角色类比关键特性Runtime状态转换逻辑大脑可链上升级编译为 WasmPallet功能模块器官模块化可插拔接口清晰FRAME开发框架工具箱提供宏、存储、事件等抽象3.3 为什么这个设计值得学substrate 框架最值得学的不是它的具体实现而是它的设计取舍。第一个取舍把“可升级性”放在第一位。传统区块链升级要硬分叉社区分裂、节点不同步、用户体验差。substrate 直接把 Runtime 做成可替换的 Wasm升级变成一次治理投票。这个取舍的代价是Runtime 必须编译成 Wasm性能有损耗开发复杂度上升。但它换来了“链可以进化”这个能力。第二个取舍模块化优先于性能。Pallet 之间的解耦让开发变简单但模块间调用有开销。substrate 选择接受这个开销换取开发效率和可维护性。这个取舍在早期项目里几乎总是对的——先活下来再谈优化。第三个取舍约定优于配置。FRAME 提供了大量默认约定你按它的方式来就能少写很多代码。代价是灵活性受限你得接受它的“世界观”。这个取舍适合大多数团队因为大多数团队不需要从零定义一切。这三个取舍背后是同一个逻辑substrate 的设计者清楚地知道他们的用户是“想快速做出一条能跑的链”的团队而不是“想从零控制一切”的团队。定位清晰取舍就清晰。3.4 一个最小可跑的 substrate 链长什么样我说点实操的。一条最小的 substrate 链核心就是几件事定义 Runtime把需要的 Pallet 组合进去。配置每个 Pallet 的参数比如出块时间、手续费规则。编译成 Wasm启动节点。用 FRAME 的话Runtime 的组装大概长这样伪代码示意// 构造 Runtime construct_runtime!( pub enum Runtime where Block Block, NodeBlock opaque::Block, UncheckedExtrinsic UncheckedExtrinsic { System: frame_system, Timestamp: pallet_timestamp, Balances: pallet_balances, Sudo: pallet_sudo, // 你自己的 Pallet MyPallet: my_pallet, } );这段代码的意思是把 System、Timestamp、Balances、Sudo 和自定义的 MyPallet 组合成一条链的 Runtime。每个 Pallet 负责一块功能System 是必须的其他按需加。提示新手最容易犯的错是“一上来就加一堆 Pallet”。我的建议是先用最小组合跑通确认节点能出块、能转账再逐个加功能。每加一个 Pallet都要重新编译、重启、验证别攒着一起加出了问题很难定位。4. substrate 思维迁移非技术场景怎么用这套逻辑4.1 内容创作的 substrate选题结构我做内容这些年最大的体会是一篇文章的成败七成在选题和结构三成在文笔。选题和结构就是内容的 substrate。什么叫选题结构就是你这篇文章要解决的核心问题、你的核心论点、论点之间的支撑关系。这些定好了写起来是“填充”这些没定好写起来是“挣扎”。我见过太多人写东西是这样的先想一个标题然后边写边想“接下来写什么”。这就是没有 substrate 的写法。写到一半发现逻辑不通回头大改改完又发现开头和结尾对不上。时间全耗在返工上。有 substrate 的写法是先花时间把“这篇文章要让读者带走什么”想清楚把核心论点列出来把每个论点需要的支撑材料标出来。这个过程可能占整个写作时间的三成但它让后面七成的时间变得顺畅。4.2 团队协作的 substrate接口与约定带团队也是一样。一个团队能不能高效协作不取决于成员多聪明取决于协作的 substrate 清不清晰。什么是团队的 substrate就是谁负责什么、交付标准是什么、信息怎么同步、决策怎么拍板。这些是底层。底层不清成员再强也会互相消耗。我经历过一个项目五个人个个能力都不差但进度一塌糊涂。后来复盘发现问题出在“接口”上A 以为 B 会处理数据清洗B 以为 A 会处理结果谁都没做等到集成时才发现。这不是能力问题是 substrate 问题——职责边界没划清。后来我们做了一件事把每个环节的“输入”和“输出”写清楚谁给谁交付什么、什么格式、什么时间。就这么一个动作效率立刻上来了。这就是给团队补 substrate。4.3 个人成长的 substrate习惯系统再往小了说个人成长也有 substrate。你的 substrate 就是你的习惯系统。很多人想提升自己第一反应是“我要学 XX”“我要做 XX”这是上层。但如果你每天的时间被碎片化切割、睡眠不足、注意力涣散那你的 substrate 就是烂的上层再怎么努力也长不出东西。我自己的做法是先不管具体学什么先把 substrate 修好——固定作息、固定一段不被打扰的时间、把手机放远。这些事看起来跟“成长”没直接关系但它们是承载成长的那层结构。substrate 稳了学什么都快substrate 不稳学什么都半途而废。5. 实操中最容易踩的坑与排查技巧5.1 过度设计substrate 不是越厚越好substrate 思维有个反面过度设计。有些人一听说底层重要就开始疯狂加抽象层、加预留接口、加“以后可能用到”的模块。结果 substrate 厚得像城墙上层根本动不了。我踩过这个坑。早年做一个内部工具我想着“以后可能要支持多租户”于是底层加了一堆权限和隔离逻辑。结果这个工具就我们三个人用那些逻辑从来没启用过反而让每次改功能都要绕一大圈。判断标准很简单如果一个抽象层在当前需求下没有被用到且未来用到的概率低于五成就不要加。substrate 的价值在于“承载当前 适度预留”不在于“预测一切”。5.2 边界模糊substrate 和上层搅在一起第二个坑是边界不清。底层逻辑和业务逻辑混在一起改一个功能要动底层改底层又怕影响功能。这种代码我维护过痛苦程度极高。排查方法问自己“这个改动是改‘规则’还是改‘规则的应用’”改规则动 substrate改应用动上层。如果一次改动两者都动了说明边界有问题该重构了。5.3 常见问题速查表现象可能原因排查方向处理建议加功能越来越慢substrate 承载性不足检查底层结构是否支持新需求评估重构成本必要时重做底层改一处坏多处边界模糊耦合严重梳理模块依赖关系划清接口逐步解耦底层改不动过度设计抽象层太多统计各抽象层实际使用率砍掉未使用的抽象层升级后上层崩溃接口不兼容检查版本变更记录引入兼容层或灰度升级团队协作内耗职责边界不清复盘交付环节的输入输出明确接口和交付标准5.4 我自己的三条实操心得第一条substrate 要“够用就好留一点余量”。完全不为未来设计会很快撞墙为未来设计太多会拖垮当下。我的经验是留 20% 到 30% 的余量这个比例在大多数场景下比较舒服。第二条substrate 的改动要趁早。底层结构越早定、越早改成本越低。等到上层堆了几十层功能再回头改底层基本等于重做。所以项目早期宁可多花时间在底层上。第三条substrate 要能被验证。底层结构好不好不能靠感觉要有验证手段。代码有测试团队有复盘内容有数据反馈。没有验证的 substrate就是自嗨。6. 关于 substrate我最后想说的几句实在话substrate 这个词说到底就是一个提醒别只盯着上面那层往下看看是什么在托着它。我做过的项目里凡是后期顺的几乎都是早期在底层上没偷懒的凡是后期反复返工的几乎都能追溯到某个底层决策的草率。这不是玄学是结构决定行为——底层怎么设计上层就只能怎么长。如果你现在手上有个项目不管是代码、内容还是团队我建议你花半小时做一件事把它的 substrate 画出来。哪些是承载层哪些是上层边界在哪哪些地方在硬撑。画完你大概率会发现一两个早就该处理但一直没处理的问题。至于区块链的 substrate 框架它是个很好的学习样本因为它把“底层抽象、模块化、可升级”这套逻辑做到了极致。但你不一定非要用它你只需要理解它的思路把稳定的沉下去把变化的浮上来中间用清晰的接口隔开。这个思路放到哪个领域都好使。最后分享一个小技巧判断一个系统的 substrate 好不好就看它“加一个新东西”有多难。加得轻松说明 substrate 设计得好加得痛苦说明 substrate 该修了。这个判断标准比任何理论都直接。
返回列表