—— 以 xLog 区块链博客为例,谈谈我对 DApp 的思考
引言:从 Web2 到 Web3 的转变#
web2 时代的局限性#
- 中心化风险
Web2 时代,数据存储和管理高度集中,一旦平台遭受攻击或滥用权力,用户权限和权益极易受损。 - 信息孤岛
各平台间数据难以互通,形成信息孤岛,限制了数据价值的充分挖掘与利用,用户体验受限。 - 内容控制权缺失
创作者在 Web2 平台上发布内容,往往丧失对其作品的完全控制权,版权保护和收益分配机制不健全。 - 广告模式侵扰
依赖广告的盈利模式导致用户频繁遭遇无关广告侵扰,影响使用体验,且个人数据被用于精准营销,隐私边界模糊。
Web3 愿景和目标#
- Web3 起源:Web3 源于对 Web2 数据垄断的反思,旨在利用去中心化网络,让用户重获数据主权。
- 智能合约:智能合约自动执行协议,无需第三方,确保交易透明、高效,是 Web3 信任机制的核心。
- 区块链技术:区块链提供不可篡改的数据记录,支撑 Web3 的去中心化应用,保障信息安全与隐私。
- 分布式账本:Web3 强调用户控制个人数据,通过加密数据保护隐私,实现真正的数字赋权。
Web3、智能合约与区块链的核心概念#
有一说一,我注册这个博客,确实是为了体验一下概念爆火了数年的区块链概念(尽管大学区块链课程有让我们体验 DApp 的任务),为了让正在看这篇文章的同志们理解 Web3 的概念,我来简单与 Web2 做个对比。
首先 Web3 产品的形态非常简单,就是在传统的 Web 应用形态上,结合了区块链。
产品形态 | 定义 | 实例 |
---|---|---|
DeFi(去中心化金融) | 基于区块链技术构建的金融服务平台,无需传统金融机构作为中介即可提供贷款、借款、交易等服务。 | Uniswap, Aave, Compound |
NFT(非同质化代币) | 在区块链上表示独一无二数字资产的技术,通常用于艺术品、收藏品等领域。 | CryptoPunks, Bored Ape Yacht Club, Decentraland |
DApp(去中心化应用) | 运行在区块链上的应用程序,具有去中心化、不可篡改等特点,涵盖游戏、社交等多个领域。 | OpenSea(NFT 市场),Steemit(社交媒体) |
还有超级多,比如 GameFi 等 |
说了这么多,我们来从传统开发熟悉的角度出发,对比一下
从注册登录流程上感知差异#
Web2 注册登录#
这个,但凡是学软工信安计科的同学们都不陌生
Web3 注册登录#
- 基础架构流程
后端几乎整个被智能合约代替了。
大概是这样看待的,Web2 后端是对数据库增删改查,但是合约是对区块链增删改查,因为区块链可以看做一个数据库。
但是,在 Web3 中,合约端处理计算的时候,会产生费用,计算量越大,开销越大,这个费用就需要从用户钱包中扣除代币,所以我们一般还是需要用后端进行传统的增删改查业务,减小合约端开销。
挑战(Challenge) 是由服务端(或前端)生成的一段随机的、一次性的字符串,用于请求用户对其进行签名,以证明其拥有某个钱包的控制权。可以把它理解为一个 “临时口令”,只有真正拥有它的人才能正确签名它。通常原理是基于 ECDSA(椭圆曲线数字签名算法),感兴趣的同学可以进一步了解。
再解释一下概念#
- 钱包与代币
在 Web3 中,每个人都至少有一个钱包,用来存放你的资产 —— 通常情况下,大部分资产都是代币(Token),而代币就比如大家熟知的比特币、以太坊等等... 钱包实际上还分为冷钱包和热钱包。冷钱包可以理解为一个 USB 硬件设备,需要物理上的接入才能使用;而热钱包就是一些软件,比如 MetaMask
- 区块链和区块
区块链是一种去中心化的分布式账本技术,可以用于解决信任问题。
中心化:
去中心化:
简单来说就是一个链表,每个节点叫做区块(block),区块包含一组交易记录,任何能上网的人,都能查看这些交易记录,甚至完整复制这些记录做备份 —— 区块链上的数据是透明公开的,几乎无法篡改。
实验课的代码也写了
{
"Header": {
// 父 hash 值,也就是上一个节点的 hash,形成链表
"parentHash": "abasbdasbd",
// 创建时间
"timestamp": "2020-02-30",
// 交易树的根节点的地址
// 交易树包含该区块中所有交易的记录
"transactionRoot": "hash22222",
// 状态树的根节点的地址,
// 状态树包含一些用户产生的信息(交易后余额、🌟合约代码等)
"stateRoot": "hash21312312", // 收据树...., 交易历史(支付方、收款方、手续费等)
"...": "..."
},
"Body": [
"hash111111",
"hash222222", // 这里就是上面提到的交易树的根地址
"hash333333",
"hash444444",
"..."
]
}
可能有的同学就会问了 —— 区块链什么时候添加一个新区块呢? 这个就取决于区块链所采用的协议了,不同的区块链的规则不太一样。比如比特币的链,采用 PoW 机制;而以太坊的链,采用的优势 PoS 机制。区块链大概的结构就是上面这样了,我们再来说说具体的。
- 智能合约
智能合约其实就是一段程序,我们可以把它部署到测试区块链中,形如这样:
// SPDX-License-Identifier信标版本: MIT
pragma solidity ^0.8.0;、
contract SimpleVoting {
// 定义候选人结构体
struct Candidate {
string name;
uint voteCount;
}
// 储存候选人信息
mapping(uint => Candidate) public candidates;
uint public candidatesCount;
// 初始化构造函数,设置候选人
constructor() {
addCandidate("Candidate A");
addCandidate("Candidate B");
}
// 投票函数
function vote(uint _candidateId) public {
// 确保投票给有效的候选人
require(
_candidateId < candidatesCount
&& _candidateId >= 0, "Invalid candidate id"
);
// 更新选票计数
candidates[_candidateId].voteCount++;
}
}
后端提供的接口叫 API,但是智能合约的接口地址是一个二进制 Hash 值,叫做 ABI,形如:0xhash123123
结合上面的区块链数据结构,我们可以得知,部署就是把这个程序的 ABI 放到 Body 中,成为状态树的一个节点。
是不是和 git 中的 blob tree 管理方式很像?都是默克尔树(哈希树)。
- 计算开销
在说明为什么要有计算开销之前,我们先介绍下背景:
在 PoW 或者 PoS 机制下,在一个新区块产生的时候,参与推动产生新区块构建的人(比矿工或者验证者)将会获得一些代币作为奖励(没错,挖矿也就是这么一回事)。这里其实是指 Gas 费,是以太坊的 PoS 最先提出的一种收费机制。有以下几个目的:防止滥用区块链,每次操作都是有代价的,这有效减少了高频攻击。激励矿工,如果你愿意支付更多 Gas,部分 Gas 会被作为矿工的小费,你的交易将会优先被矿工们处理,更快地放入下一个区块(放入区块意味着完成交易),
Web3、智能合约与区块链相对于 Web2 的优势与不足#
技术方面#
首先是性能瓶颈,Web3 和区块链技术相比于 Web2,交易速度慢、处理能力有限,智能合约的执行效率也受制于链上的资源,难以满足大规模需求。
交易所、钱包、注册账户 / 不注册账户、记录密码(私钥、助记词)/ 不记录密码,操作流程复杂,Gas 费用高昂,网络连接不稳定等问题时刻困扰着用户,所以 Web3 概念虽热,但普通用户对其认知度不高,缺乏直观易懂的应用场景,导致技术普及与大众接受度仍有较大提升空间,有点 “脱离群众”。
监管方面#
这个博客是搭建在区块链上的,账户用钱包地址 + 区块链验证,博客内容存放在 IPFS 分布式文件系统中,我体验了几天,深感这种方式的好处,但是弊端也很明显。首当其冲的就是监管问题。
1. 平台无权限治理恶意账号和内容#
所有的公共空间,在保证言论自由的同时,都应该考虑言论的合规性,去中心化社交平台的核心理念是去中心化治理,所以一旦用户可以随意发布恶意内容或者滥用平台,会导致社区环境恶化,我个人认为,应该引入社区治理的模式,比如发布治理代币,高代币账户参与投票机制,让用户决定是否封禁乃至隐藏违规账号(我不确定能否删除,按理说账号在绑定的 IPFS 上发布的内容是可以删除的,但是如果涉及到链上的账号,可能删不掉,那就只能隐藏了)
2. 敏感信息在误传到区块链上将永远无法删除#
首先,我们将,避免直接把敏感信息写入区块链,顶多也就是存个哈希值,实际内容放在 IPFS 里,但是既然要 Web3 走进寻常百姓家,或者万一被恶意上链,那实际上是相当糟糕的,而且就算是 IPFS,也应该上传进对敏感信息加密,只有特定私钥的用户才能读取。
3. 社区区块链的存亡问题对数据的影响#
如果一个社区自己搭建的区块链 “死掉” 了,而上面的内容没有合并进入公有链或其他链,用户将无法通过原有的网络访问这些数据。即使数据仍然存在,也需要通过特殊的手段(如直接访问节点存储设备)来恢复和访问这些数据,但这些分布式数据在哪?备份是个大难题,公有链会好一些,但是小型的私有链,一旦出现这些基础设施问题,还是很考验可靠性的。
4. 法律问题#
刚搞这博客的时候,随手发了几篇发癫文章,反正也没多少人看,看了的话因为匿名也不知道我是谁,权当一个说悄悄话的树洞;仅仅是发癫文章问题不大,但是这么一个平台在法律层面(毕竟黑产都用 BTC 结算嘛,区块链几乎成为了黑色产业的温床),特别是《个人信息保护法》上,对现有体系挑战蛮大的。(这段把我用来写信息安全法律的结课作业拿来了,能用上真是可喜可贺,可喜可贺,为什么这么多课,我要疯掉了啊啊啊啊啊!!!)
就区块链而言,不同类型的区块链(公有链 / 无需许可链 vs. 私有链 / 许可链)在技术架构上的差异,直接决定了其在《个人信息保护法》合规方面的可行性 。许可链由于其参与者可知、可控的特性,为建立治理机制和落实法律责任提供了更多可能性,因此在适应现有法律框架方面具有天然优势 。例如,有的观点甚至提出,公有链的发起人和节点控制者不承担个人信息处理者的法律责任,而非公有链的发起人和有限节点控制者则应承担此责任。
而智能合约作为 “后端”,能够根据预设的规则和条件自动执行、控制或记录合约条款及相关行为 。其运作基于 “如果 - 那么”(if-then)的逻辑 。尽管自动化特性可以显著提高交易效率,但也引发了关于人工监督、错误纠正以及在执行与法律权利或情势变更发生冲突时如何干预的问题。 比如其执行结果与底层区块链数据一样具有不可更改性 。这直接挑战了《个人信息保护法》中个人撤回同意的权利(第十五条)以及在处理行为变得不合法或不必要时调整或停止处理活动的能力。
所以说,问题大了去了!且不论在上个章节提到的,个人信息上链带来的隐私问题担忧,秘钥管理问题带来的数据问题担忧,仅仅是一个不成熟的区块链 + 智能合约,一旦部署,便会自动持续地违反《个人信息保护法》,而且难以纠正。冷静的想一想,数据主体真的是你吗?《个人信息保护法》赋予个人一系列数据主体权利,包括知情权、决定权(第四十四条),查阅权、复制权(第四十五条),更正、补充权(第四十六条),以及至关重要的删除权(第四十七条)。此外,还包括撤回同意权(第十五条)和数据可携带权(第四十五条第三款)。这些权利,特别是更正权和删除权,与区块链的不可篡改性直接冲突。你的信息,真的可以肆无忌惮的,被拆成很多片,永久匿名存放在不知道哪个节点上,你失去了删除权、更正权、可携带权、撤回同意权,这些数据真的能被你所控吗?
因此,个人信息处理者(因为去中心化组织相当难以界定责任主体,我们模糊一下,直接把组织当处理者主体)的义务,必须对整体安全负责,否则区块链等技术,难以真正意义上走进千家万户。是啊,冷静想一想,区块链虽然真的很棒,Web3 真的很棒,但是 “代码即法律” 的观念,与法律体系需要解释和适用法律、提供救济以及适应不可预见情况的需求相冲突。法律框架是动态的,而一旦部署的代码可能是僵化的。涉及个人信息的智能合约执行所产生的争议,仍将受到《个人信息保护法》的规制。智能合约自动化执行规则,虽然可以减少某些类型的人为错误或偏见,但也可能引入新的、系统性的偏见 —— 如果其底层代码或数据输入存在缺陷或歧视性。区块链生态系统催生了新的参与者类型,如矿工 / 验证者、节点运营者、智能合约开发者、交易发起用户等,他们在《个人信息保护法》下的角色和责任尚不明确 ,在明确好一整个体系权利和责任人前,怎能大肆宣扬区块链技术,乃至不可控的推广呢?
毛主席教导我们,不要一口气想解决所有的矛盾,矛盾是无穷的,要抓住事务的主要矛盾,其他的问题就会迎刃而解,我们接下来列举一下,看一看技术究竟带来那些主要矛盾:
《个人信息保护法》条款与核心要求 | 技术特性带来的挑战 | 具体挑战描述 |
---|---|---|
第四十七条 – 删除权; 第四十六条 – 更正权 | 不可篡改性 | 无法直接删除或修改链上已记录的个人信息,难以满足用户删除或更正数据的请求。 |
第七十三条 – “个人信息处理者” 的认定 | 去中心化 | 在公有链或 DAO 中难以确定唯一或共同的、自主决定处理目的和方式的责任主体。 |
第十四条 – 知情同意、明确同意; 第十五条 – 撤回同意权 | 智能合约的自动化、不可逆执行 | 难以确保用户对复杂智能合约处理逻辑的充分知情;用户撤回同意后,难以停止或修改已自动执行的合约。 |
第二十四条 – 自动化决策的规制 | 智能合约的自动化决策特性 | 难以保障自动化决策的透明度、公平性,以及用户获得解释、拒绝仅基于自动化决策的权利。 |
第三十八至四十条 – 个人信息跨境传输规则 | 区块链网络的全球分布式特性 | 难以识别数据出境方和接收方,难以适用安全评估、标准合同等机制;数据在多节点复制导致事实上的持续跨境流动。 |
第六条 – 数据最小化原则 | 区块链的全节点数据复制、永久记录特性 | 链上存储和全网广播可能导致处理超出最小必要范围的个人信息。 |
第五十一条 – 安全保障义务 | 去中心化、密钥管理复杂性 | 虽有加密等技术,但整体安全责任归属不清,链上数据一旦泄露(如密钥失窃)难以控制;开源代码可能存在漏洞。 |
所以,这不仅仅是个技术问题,还涉及到监管、运营等,是个多方面的法律问题。
技术的问题,终究还是需要技术对症下药,运营者的问题,终究还需要运营者做出考量。下面我就列举一下个人拙见,作为本章节的尾声。
策略类别 | 具体策略 | 描述 | 《个人信息保护法》合规效益 | 主要考量 / 局限性 |
---|---|---|---|---|
技术 | 个人数据链下存储 | 将敏感个人信息存储在链外可控数据库,链上仅存哈希或引用。 | 便于实现删除权 / 更正权,降低链上数据暴露风险。 | 可能增加系统复杂性,部分牺牲链上数据直接管理的价值。 |
技术 | 隐私增强技术(PETs)应用 | 如零知识证明、同态加密等,在不暴露原始数据情况下进行验证或计算。 | 提升数据处理过程中的隐私保护水平,可能有助于实现数据最小化。 | 技术成熟度和标准化程度不一,法律认可度待明确,实施成本可能较高。 |
技术 | 稳健的匿名化 / 假名化处理 | 对个人信息进行有效的匿名化处理,或在假名化处理时评估并降低再识别风险。 | 匿名化信息不适用《个人信息保护法》;假名化有助于降低直接暴露风险。 | 实现真正匿名化难度大;假名化数据仍可能被再识别。 |
治理 / 运营 | 采用许可链 / 联盟链 | 参与者身份可知,可建立明确的治理规则和责任分配机制。 | 有助于明确 “个人信息处理者”,落实各项法定义务。 | 可能牺牲部分去中心化特性,适用场景受限。 |
治理 / 运营 | 实施数据保护影响评估(DPIA) | 对高风险的区块链数据处理活动进行事前风险评估和记录。 | 主动识别和缓解法律风险,满足《个人信息保护法》第五十五、五十六条要求。 | 评估过程可能复杂耗时,需要专业知识。 |
治理 / 运营 | 建立清晰的治理框架和用户透明度机制 | 明确数据处理规则、各方权责,清晰告知用户其信息处理情况及权利。 | 增强问责性,保障用户知情权、决定权。 | 治理框架设计和执行依赖参与方共识和配合。 |
法律 / 监管 | 出台针对性的监管指南和标准 | 监管机构发布关于《个人信息保护法》在区块链场景下适用的具体指引、标准合同范本等。 | 提供法律确定性,指导合规实践。 | 指南制定需要时间,可能滞后于技术发展。 |
法律 / 监管 | 推动行业自律和认证机制 | 鼓励行业协会制定行为准则,建立个人信息保护认证体系。 | 补充法律监管,提升行业整体合规水平。 | 自律效力有限,认证机制的权威性和普适性需要建立。 |
结语#
唉,想当年刚出区块链的概念时,我还是一个小毛孩,没想到十多年过去了,我现在在大学机房写博客纸上谈兵高谈阔论,哈哈哈。我就模仿领导讲话作为本文的结语吧:世界是运动的,向前的,由于技术和法律都在快速演进 ,今天提出的影响和挑战并非一成不变。随着技术的成熟和法律解释的深入,新的问题和解决方案将不断涌现。因此,所有利益相关方都必须保持持续的警惕、深入的研究和开放的对话,以适应这一动态变化的领域。相信未来 Web3、智能合约与区块链真的能为新时代的互联网赋能,少一些黑产,多一些用武之地,实现人和社会自由而全面的发展(我想,这玩意既有共产主义的雏形,又有资本主义高级阶段的自由和明码标价,没准真能成为人类未来特色社会形态的基石呢!!)
以上。