Don’t Test, Verify. | 哪个故事真正符合你对形式化验证的想象?

AI可验证思维:从链式推理到凭证化审计的工程实践 大语言模型的‘思维过程’本质上是概率化文本生成,而非逻辑推演。当Chain-of-Thought(CoT)和Tree-of-Thought(ToT)被广泛用于提升可解释性时,其内在幻觉风险反而加剧了信任危机——模型能生成教科书级推理链,却可能全程虚构依据。实现真正可信AI的关键,在于将‘展示推理’升级为‘接受审计’:通过外部工具调用、逻辑形式化验证、因果干预测试等手段,为每一步输出绑定可追溯、可证伪的证据锚点。这一范式迁移已在医疗诊断、金融风控、法律合规等高危场景落地,核心挑战在于平衡验证强度与系统效率。本 阅读详情

从诞生至今,形式化验证(Formal Verification)方法一直与“小众、冷门”等字眼挂钩。有人说形式化验证方法是一种“军用级别”的防黑客手段,更是为这项技术增添了一丝神秘感。

究竟什么是形式化验证方法?

维基百科对形式化验证的解释是这样的:

在计算机硬件(特别是集成电路)和软件系统的设计过程中,形式化验证的含义是根据某个或某些形式化规范或属性,使用数学的方法证明其正确性或非正确性。

神秘感大抵来源于定义中的两个严谨而且抽象的关键词——“形式化规范”和“数学方法证明”。事实上,揭开这层神秘的面纱,你会发现形式化验证的许多有趣之处。

下面这篇文章想要讨论的问题是:在现阶段,以下哪个故事能够真正满足你对形式化验证的想象?形式化验证真的可以作为一种技术在区块链领域流行起来吗?如果可以,怎样才能做到?

(PS:上文中提到的“形式化规范”的概念,在下文中也会讲到。)

要回答上面这些问题,我们可以先思考另一个更简单的问题:
> 现阶段,人们使用形式化方法来做什么?
这个问题的答案无非有两种:
> 1、 规避错误
> 2、 对抗攻击

| 规避错误

规避错误其实就是避免损失。

我们首先来探讨一下,哪些领域对程序错误是零容忍的?在哪些领域,程序错误带来的损失难以估量?

实际上,形式化方法是从硬件设计开始普及的。一个著名的例子是:当年Intel的Pentium CPU浮点运算单元出错(FDIV Bug),数以万计的CPU不得不回收和替换,给Intel造成了巨大损失(475M $)[1]。

从那之后,Intel开始在其芯片设计中广泛采用形式化方法。

计算机硬件巨头如IBM,AMD, NVIDIA 和 CADENCE[2]等等也都是形式化方法的使用者…

要说起吃一堑才能长一智,其实各行各业都有试错者,在工业界也是如此。举个例子:1996年,欧洲航天局首次发射的阿丽亚娜5型(Ariane 5)火箭,由于惯性导航系统发送的错误指令(浮点数转换为整数造成溢出),导致火箭在发射仅仅37秒后便偏离了预定轨道,最终坠毁。欧洲航天局的巨额研发经费(8B $)[3]付之一炬。

在那之后不久,EADS公司开发阿丽亚娜火箭的任务调度模型就开始使用形式化方法。

美国国家宇航局NASA和英国国防部在90年代相继发布设计标准[4],形式化方法的使用位列其中。我国的玉兔号月球车控制系统和我国第一个自主研发的空间飞行器嵌入式实时操作系统SpaceOS[5],也都是通过形式化方法验证其正确性。

历史的发展告诉我们,金钱才是推动社会发展的第一动力!程序错误带来的巨额损失,任谁也只能叹一声伤不起。

如果说上面两个故事听起来都过分沉重了,我们不妨看一下下面这张图:
在这里插入图片描述
上图显示了全球范围内用形式化方法开发的地铁项目分布情况[6]。

可以看出,由巴黎地铁信号系统开始,在北美、欧洲、亚洲的主要国家,以及南美洲的部分国家的地铁系统开发中,形式化方法已经被广泛使用了。这或许是我们几乎从未听过由于地铁系统故障而造成重大损失和灾难的原因。

还是那句话,金钱是第一生产力。

既然形式化方法在保障日常出行方面做出的贡献已经得到广泛的认可,那么,在依托区块链技术而发展起来的数字资产领域,通过形式化验证技术来保障智能合约安全性、进而保障财产安全性的理念就显得合理甚至紧迫了。

具体需要怎么做?这里简单介绍一下。

首先需要引入一个“形式化规范”的概念了。

形式化规范 (formal specification) 是指通过数学语言对系统的预期行为 (例如将数量 S 的 token 从账户 A转移到账户 B) 和性质 (例如转账不会造成账户 B 额度的溢出) 进行严格和全面的定义。形式化规范往往定义了系统的正确性和安全性。

给定一个系统的形式化规范,我们即可以从规范出发开始迭代设计和实现出这个系统。在迭代的每一步中,我们可以通过精化(refinement)、集成 (synthesis)、形式化证明在内的一系列方法在数学上严格的保证迭代产生的系统和迭代前的规范或者系统保持一致。

除了从形式化规范出发设计和实现一个系统,我们也可以使用包括符号执行 (symbolic execution)、模型检测 (model check) 和形式化证明 (formal proving) 在内的一系列方法验证已有的设计和实现与该规范保持一致。

听起来很高大上,对不对?

举个例子来说,对于一段智能合约程序,我们可以从它所有可能的输入 (例如函数参数的组合) 和初始状态 (例如状态变量初始值的组合) 出发,根据每条语句的语义,逐句推导出程序的所有可能的结束状态 (例如合约执行结束后的状态变量的值和产生的 event log),并检查合约的所有输入、初始状态、结束状态的组合是否都和形式化规范保持一致。这有点类似于柯南破案那样,一步步地推演。只不过,这里所有的定义都是通过严格的数学语言描述,推导和检查也是严格的数学推导和证明。根据待验证的系统及其形式化规范的复杂程度,推导和证明即可以手工构造,也可能可以由机器自动产生。

在实践中,推导和证明无法进行下去往往意味着设计和实现中存在不符合规范的 bug。通过分析推导和证明卡壳的位置和原因,可以定位出 bug 在设计和实现中的具体位置和成因。这样的方法,让数字资产领域中中严格意义上的规避错误、避免损失成为可能。

| 对抗攻击

对抗攻击其实是另一种意义上的避免损失。

故事从美国军方的一次电子攻击说起。2015年夏天,一起黑客奉命对美国军方Little Bird无人直升机发动电子攻击,并掌握无人机控制权的事件中,黑客最初的攻击十分顺利,如入无人之境。然而,当美国国防部重新开发了该无人机的核心控制程序后,黑客们使用了当今世界上所有的攻击手段,都未能攻破新部署的系统[7]。
在这里插入图片描述
到底是什么技术给予了Little Bird超强的防御能力,从而使它阻挡了所有的攻击?答案就是:形式化验证方法。

形式化验证方法通过严格的数学证明保证程序行为与预期一致,但形式化验证程序的正确性非常消耗人力,所以,与程序测试等通用技术不同的是,形式化验证方法常常只被应用于安全攸关领域,如无人机、航天器、操作系统等的程序正确性验证。

这里不得不提的是2016 年发现的一个非常严重的 linux 操作系统内核漏洞Dirty Cow (CVE-2016-5195)[8],攻击者可以通过这个漏洞获得系统最高权限,从而使系统全部处于可被利用的状态之下。

在操作系统领域,一些人身先士卒,尝试用形式化方法避免安全攸关领域中的系统漏洞和黑客攻击。耶鲁大学邵中老师团队通过模块分层验证法(modular layered verification methods)成功研发了安全性和可靠性极高的计算机操作系统CertiKOS[9]; 中科大软件安全实验室冯新宇老师团队也提出了一个针对抢占式多任务操作系统内核的形式化验证框架,并成功的应用在对嵌入式操作系统 uC/OS-II (该操作系统被广泛应用于航空电子产品中)的验证中[10]。

| 安全攸关的区块链领域

区块链领域亦然,一方面,小错误也会导致大损失;另一方面,巨大的经济利益也会吸引大量的攻击者。

以太坊黑客攻击第一大案The DAO中,攻击者窃取了当时价值5500万美元的以太币,并且导致了以太坊的硬分叉[11];这之后,与以太坊智能合约相关的攻击一直在继续——比如,2017年11月,以太坊Parity钱包由于被黑客攻击,导致用户损失了价值约为1.5亿美元的数字资产[11]。

据安比实验室统计,仅2018年上半年,就已经有大约11亿美元的数字资产被盗,与区块链系统相关的漏洞(如以太坊中的智能合约漏洞)以及围绕数字资产的生态系统安全问题(如多个中心化交易所被盗)更是层出不穷。

目前区块链系统中的相关漏洞,以及数字资产生态系统的安全问题,归根结底是相关程序设计与实现的问题。在形式化方法以前,这类问题多是通过程序测试来发现的。

形式化验证进入区块链领域的初期,以太坊社区的Yoichi Hirai对以太坊(Ethereum)的智能合约虚拟机EVM做了完整的形式化建模。此外,来自UIUC大学的团队也对EVM进行了形式化的建模和验证[12]。EVM是以太坊智能合约的底层核心,关系到以太坊安全,涉及到数字资产保护等重大议题,引起了社区的广泛关注。

此外,MakerDAO项目方发布了第一个经过形式化验证的去中心化应用程序(DApp)[13]。MakerDAO 是一个基于以太坊的智能合约平台,该平台提供了稳定币(stablecoin),抵押贷款(collateral loans),以及去中心化社区治理功能。为了保证所部署的智能合约的安全性,MakerDAO团队对抵押贷款(CDP)核心引擎合约代码通过K-Framewok进行了验证,因此而表明其智能合约程序能够完全抵抗黑客攻击。

安比实验室也在以太坊智能合约形式化验证方面做了大量的工作,提出了一个智能合约形式化验证框架,并在该框架内证明了一些常见的Token合约,比如ERC20,ERC721等(其中包含转账、Token总量等通用性功能)。这些被数学证明过的智能合约可以直接使用,不再需要担心安全问题。这些合约源代码和证明过程已经以开源[14]的方式贡献给社区。

Github社区地址:

https://github.com/sec-bit/tokenlibs-with-proofs

| 结论

大多数人认为形式化验证方法高深莫测,究其原因,形式化验证方法不是一种通用技术,而是需要和领域结合来发挥价值的一种特定技术。在区块链领域,形式化方法究竟是一种nice to have还是一种must have,也是与项目特点密不可分的。

随着区块链技术与项目应用的探索不断深入,项目方对于规避错误、对抗黑客攻击和避免财产损失的需求已经越来越强。

当互联网世界中的绝大部分活动都完成上链,当社会中的绝大部分群体都需要区块链的绝对安全来保护自己的财产安全的时候,形式化验证方法作为区块链技术的must have才会迎来大爆发。

**

写在最后| 关于Verification与Testing的纠葛,你了解多少?

**

最后来谈一下形式化验证(Formal Verification)与程序测试(Testing)之间的关系。

“程序测试能证明错误的存在,但不能证明错误不存在”。Edsger Dijkstra(1972年图灵奖获得者、形式化方法核心思想的提出者)如此评述。

在实践中,尤其是在代码足够复杂的场景中,形式化验证(Verification)与程序测试方法(Testing) 的验证效果有如云泥之别。

举个例子来说:2009年,澳大利亚的科学家使用形式化方法对工业级操作系统seL4微内核进行了完整功能性验证[15],验证方式同时以形式化验证和程序测试两种方式分别展开,验证的结果是:形式化方法共发现460多个Bug,而程序测试只发现了16个Bug。

更有趣的是,在以高验证成本著称的形式化验证领域,完全验证seL4微内核只需要600万美元的验证成本,而以测试的方式通过CC EAL6级认证的成本竟高达8700万美元[15]。

由此可见,通过形式化验证可以更经济的为seL4微内核提供更强的安全性保证。

当然,有人说,程序测试是在“真实”环境里进行的,形式化验证只是数学层面,在“真实”环境中的测试是形式化验证无法取代的。从这个角度来说,形式化验证与程序测试如何做到共生互补?让这项技术在区块链领域真正流行起来,可能就是链圈同仁们接下来要共同探索的方向了。

参考文献

【1】History of Formal Verification at Intel

https://dac.com/blog/post/history-formal-verification-intel

【2】王健:说说形式化验证(Formal Verification)吧

http://chainb.com/?P=Cont&id=1957

【3】Modeling and Validation of a Software Architecture for the Ariane-5 Launcher

https://link.springer.com/chapter/10.1007/11768869_6

【4】Tenth NASA Formal Methods Symposium https://shemesh.larc.nasa.gov/NFM2018/

【5】玉兔使用的国产SpaceOS操作系统未来有望衍生出民用版本

http://blog.sina.com.cn/s/blog_ae55841d0101hemg.html

【6】Cimatti, A., Corvino, R., Lazzaro, A., Narasamdya, I., Rizzo, T., Roveri, M., Sanseviero, A. and Tchaltsev, A., 2012, July. Formal verification and validation of ERTMS industrial railway train spacing system. In International Conference on Computer Aided Verification (pp. 378-393). Springer, Berlin, Heidelberg.

【7】COMPUTER SCIENTISTS CLOSE IN ON PERFECT, HACK-PROOF CODE https://www.wired.com/2016/09/computer-scientists-close-perfect-hack-proof-code/

【8】利用Dirty Cow实现docker逃逸

https://www.anquanke.com/post/id/84866

【9】CertiKOS: Yale develops world’s first hacker-resistant operating system

https://www.ibtimes.co.uk/certikos-yale-develops-worlds-first-hacker-resistant-operating-system-1591712

【10】Fengwei Xu, Ming Fu, Xinyu Feng, Xiaoran Zhang, Hui Zhang and Zhaohui Li. A Practical Verification Framework for Preemptive OS Kernels. Proc. 28th International Conference on Computer Aided Verification (CAV’16)

【11】从技术角度剖析针对THE DAO的攻击手法

https://www.8btc.com/article/93713

【12】kframework/evm-semantics

https://github.com/kframework/evm-semantics

【13】风投巨头 A16Z 投资稳定币项目 MakerDAO

https://www.jinse.com/bitcoin/246582.html

【14】构造形式化证明,解决智能合约安全问题——你的合约亟待证明

https://mp.weixin.qq.com/s/xUNKT8v9ikEYFnuMWzvXdg

【15】Gerwin Klein, Kevin Elphinstone, Gernot Heiser, June Andronick, David Cock, Philip Derrin, Dhammika Elkaduwe, Kai Engelhardt, Rafal Kolanski, Michael Norrish, Thomas Sewell, Harvey Tuch, and Simon Winwood. 2009. seL4: formal verification of an OS kernel. In Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles (SOSP '09).

Formal verification (FV) 处理复杂度 形式验证 第10章 复杂性问题是FV固有的挑战,因为FV引擎必须解决的基本问题是NP完全问题。在本章探讨了一些处理复杂性的技术,并使FV工具能够在运行时或内存消耗出现初始问题的情况下取得成功。 阅读详情

相关推荐

formal Verification 形式验证 形式验证的最大障碍:误报(false positives)的危险 第9章

本章探讨了导致FV误报的各种类型的问题:运行某种类型的FV流的情况,在项目的某个时候,当验证在逻辑上存在不合理之处时,设计被标记为“已验证”。

打工人的学习记录! 3802

Formal Verification Introduction

形式验证是通过数学方法验证计算机硬件和软件系统设计正确性的技术。它包含等价性检查、模型检查和定理证明三类方法,能穷尽所有可能的输入条件,克服仿真验证耗时长、不完整的缺点。形式验证在IC设计中用于验证RTL与门级网表的一致性,相比仿真能更早发现设计错误,缩短验证周期。虽然模型检查受电路规模限制,定理证明需要人工干预,但形式验证与仿真验证互为补充,共同确保设计正确性。该技术无需测试向量,能全面覆盖系统级到门级的验证,显著提升验证效率。

元直的博客 9411

别再只跑仿真了!聊聊Formal验证(形式验证)在芯片设计中的那些“高光时刻”

本文深入探讨了Formal验证(形式验证)在芯片设计中的关键作用,特别是在仲裁器、有限状态机等模块中的高效验证策略。通过对比仿真验证,形式验证展现了其穷尽性验证和早期介入的独特优势,帮助缩短验证周期并提升覆盖率。文章还介绍了形式验证在AI加速器和汽车电子等前沿领域的创新应用,为芯片设计验证提供了高效解决方案。

weixin_28736355的博客 295

【信息科学与工程学】【管理科学】第三十篇 公司治理及公司工作内容08 信息安全与IT类

确定功能单位、系统边界、影响类型。2.

weixin_49199313的博客 453

Formal Verification (一) 形式验证的分类、发展、适用场景

定义 Formal Verification:利用数学分析的方法,通过算法引擎建立模型,对待测设计的状态空间进行遍历的验证。 分类 相比于动态仿真Simulation Veficiation,形式验证属于Static Verification,不需要手动灌入激励;通过数学分析的方式,对待测设计进行检查; 形式验证分为两大分支:Equivalence Checking 等价检查 和 Property Checking 属性检查 形式验证初次被EDA工具采用,可以追溯到90年代,被应用于RTL code和ga

Holden_Liu的博客 2万+

Formal Verification 和Functional Verification的区别

Formal Verification和Functional Verification是ASIC验证的两种互补方法。Formal Verification使用数学方法来证明设计符合规格,而Functional Verification则使用仿真来测试设计,以针对各种场景。Formal verification更加严格,可以发现Functional verification可能错过的错误,但它也可能...

ilearn的博客 1002

formal verification

静态形式验证工具有很多,主要用于模型检查和等价性检查两个方面。S家 vc formal验证平台主要用于模型检查(只有两个应用嵌入了等价性检查功能),S家formality主要用于等价性检查。本文基于S家 vc formal用户手册整理静态形式验证在DFV中的应用。Note:受软硬件的限制,目前还是推荐在使用formal。soc级的设计规模和复杂度有可能导致验证难以收敛。

saberhp的博客 3167

Formal Verification (三) abstraction strategy、reduce complexity for convergence

“空间爆炸”大大增加了formal工具处理的复杂度,在有限的资源内,难以达到收敛。所以采用一些abstraction的手段,是十分有效且必要的。 正确的abstraction处理,使用abstrct model代替real model,不会影响目标结果,同时加速证明。abstraction不等同于简单的reduction,如下示例: RTL中,当timer大于1000时,触发timeout。需要运行1000个cycle才会触发。 Reduction将阈值设置为5,缩减到5个cycle触发。因为原RTL中还

Holden_Liu的博客 5750

51c大模型~合集110

为了解决这一问题,在稠密化过程中,我们对容易引起退化和梯度集中的具有极端延展率的高斯面片进行了筛选,并对其增殖过程进行了限制,从而在不牺牲性能的情况下有效稳定了训练过程,保障了优化过程的顺利进行。大规模场景的重建往往还意味着显著的训练开销,要重建 1.97 平方千米的区域会产生接近两千万的高斯点,这意味着 4.6G 的存储以及 31.5G 的显存开销,以及超过三小时的训练时长。站在 AI 研究者的角度,得到了《苦涩的教训》,意味着在总结教训的过程中明确了什么是「更好」的。第二类则瞄准了相对复杂的问题。

whaosoft~aiotの开发板商城 2536

基于贾子理论与THL-5真理硬度标准的概率拟合大模型结构性破产必然性研究

摘要 本研究基于贾子理论与THL-5真理硬度标准,对概率拟合大模型的结构性破产必然性进行了深入分析。当前以Transformer架构和自回归令牌概率预测为核心的概率拟合大模型,通过海量数据统计关联分析生成内容,而非基于公理体系的因果逻辑推演。研究发现,该技术路径的边际效益正快速衰减:算力、数据和模型规模呈指数级扩张,但实际性能提升有限,投入产出比严重失衡。 通过全球头部企业财报和行业实测数据,本文从技术逻辑、成本结构和商业变现等维度证明:概率拟合大模型存在成本指数增长与营收线性增长的不可逆矛盾,企业净现金流

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 1145

形式验证(Formal Verification)会越来越有用

新的应用推动了对复杂芯片的需求,在这些应用中,复杂的交互和安全风险很难用其他的仿真工具验证。随着芯片被用于很多关键的应用,芯片内部的交互数量也在增加,形式验证在芯片研发流程中的角色也越来越多。低功耗设计已经存在了很长时间,之前主要是被移动端芯片采用。现在,我们看到AI/ML加速器中非常关注能效。因此,现在对于每个人来说,无论他们在做什么,低功耗设计都是一个大问题,可以使用形式验证解决其中的一些问题...

ilearn的博客 1433

芯片验证 | Formal验证技术总结

个人认为,形式化验证是基于严格的数学算法和模型,根据设计功能提取电路规则的属性描述,并穷举系统运行过程中电路所能达到的所有状态,自动进行数学分析和证明。验证过程如下:以上的形式化验证过程就像做一道数学证明题,用数学方法证明该命题是否成立,而这个证明过程是验证工具完成的,工程师不需要关心。目前,业界主流的形式化验证工具主要有Cadence的 JasperGold 和 Synposys 的 VC-Formal。规模较小:设计模块太大对应验证复杂度较高,导致验证时间过长。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 6853

Formal Verification (五) coverage、sign-off flow

formal和simulation一样,也是基于coverage-driven的验证方式;分为branch,statement,expression,toggle;这部分概念和simulation类似,如下图:用于衡量cover item(CI) (CI可以简单理解为RTL code)在验证过程中是否被覆盖到;:工具追踪并覆盖了该CI:在有限的时间内,未追踪覆盖该CI:在给定的约束条件下,无法覆盖该CI(可能存在over-constraint的问题:在任何条件下,都无法覆盖该CI。

Holden_Liu的博客 6766

Formal Verification (二) FPV、APPs

通过上一篇对Formal Verification有了基本的认识;本篇将通过一个简单的例子,感受一下Formal的“魅力”;Formal Tool目前主流的有Synopsys的VC Formal,Cadence的Jaspergold,Mentor的Questa FV以及🔗OneSpin的Verify;本篇使用VC Formal演示,其他工具思路类似。 Assertion 具体assertion的语法不再介绍,可以参考《SystemVerilog Assertions and Functional Cover

Holden_Liu的博客 1万+

关于软件形式化验证

软件开发中一般使用“测试”来找bug,这种方法只能找到bug,不能证明程序没有bug。形式化验证是用逻辑来验证程序的可靠性,就是把一段程序用逻辑的方法证明一遍,证明它能得到预期的结果,没有bug。一般这类研究主要应用于昂贵的航天器材的操作系统、危险的医疗设备的程序之中。因为航天器材、医疗设备牵扯到人的生命,如果操作系统出现错误,那么很危险,又不能用测试一遍一遍的测,所以用形式化验证来做。比如美国航...

果乐果香 1万+

qa 芯片测试_[转]芯片设计中验证Verification,确认Validation以及测试Test的区别

对于刚进入芯片设计领域的童鞋,经常被这三个概念迷惑,很难区分,我曾经也是,因此,在这里把我理解的异同点在这里写一下,不一定准确,希望对某些童鞋有用。验证(Verification),确认(Validation),测试(Test)的最终目的是一样的,都是减少设计中的缺陷,保证设计的质量,可以算是QA的环节(不过貌似现在QA几乎就是指测试了),不同点的是,他们是在不同的层次,由不同的人进行的工作。验证...

weixin_39879665的博客 4052

【芯片验证的“数学证明”:形式验证(Formal)为何不可或缺?】

在芯片复杂度不断挑战物理极限的今天,形式验证代表了验证方法学的重要进化:从“基于测试”到“基于证明”的转变。与通过大量测试用例进行仿真的传统方法不同,形式验证通过数学建模和逻辑推理,穷举所有可能的状态来验证设计的正确性。智能的验证策略是在不同阶段采用最适合的方法:形式验证用于模块级关键属性验证,仿真用于系统级集成验证,硬件加速用于软件协同验证。未来验证方法学将是形式验证与仿真验证的深度融合:形式验证解决“最后一公里”的边界条件,仿真验证保证系统级功能正确性。而形式验证则是数学证明,从逻辑上确保万无一失。

lu_pete的博客 1157
上一篇: 类Fomo3D游戏漏洞与修复机制全解析
下一篇: BCH硬分叉背后: “重放攻击”下的用户自救指南
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值