币圈 - 虚拟货币

赵长鹏先生在美国认罪后,虚拟货币的江湖地位就算是稳定了。
虚拟货币一直游离在法律的边缘,中国早就封杀了。而今最大的交易平台老板因 “大量非法货币流通” 在美国认罪,让很多人觉得未来迷茫。
我倒是觉得不用担心了。这个圈子乱到没有点资产都不敢进去,但后面可能会越发趋于平稳。
因为至少在美国看来,“币安” 已经合法了,可以被美联储约束了。而不久的将来,中国一定会开放,中国从不会放过割韭菜的好工具。

两个月前,在国内的网约车上,司机小哥问我懂不懂虚拟货币。我说我不太懂,但理解起来应该比较快,希望他多讲讲。
他说他也不懂,就是前两天拉了一个客人。那位客人很客气,在车里长时间打电话,内容是盗了很多币,在和同伙计划跑路的细节。
小哥说,那位客人很随和,但是在电话里,他一直在嘲笑被盗的人一早起来发现巨额货币丢失后的绝望。
小哥说他不懂,看我戴眼镜,想问问我懂不懂,问我警察会不会去抓捕。
我说也不懂。只听说在币圈玩的,都挺野的。

比特币刚出来的时候,我刚参加工作,那时候听到了挖矿。等再听到巨大消息的时候,比特币已经 2w 美元了,现在已经 6w 了。
后面只听说不能玩,风险大,也就避而远之。
最近实在是有些穷疯了,就想看看币圈到底是什么,哪来的那么多种虚拟币,都还能兑换美金。
能兑换美金又不是法定货币,没有法律保护又能交易和购买实物。
还有很很多多那些 “币安、以太坊、区块链、去中心、web3” 等等名词,我想去弄明白到底咋回事。

下面内容就比较散乱了,主要是资料查询过程中的一些备忘。还是先说几个结论吧,tldr。

  1. 整个技术层面,没感觉到特色。
  2. 一切的基石 “区块链” 是单向链表,最简单的数据结构。里面的各种加密,也都是已经成熟的加密方案。
  3. “去中心化”,就是非常成熟的 p2p。
  4. 在基石之上搭建起来的 “智能合约”,就是 faas 服务。
  5. 从技术层面看,太弱了。所有参与币圈的,都是在豪赌,赌一个新瓶装旧酒能不能讲更多的故事。
  6. 所有的上层建设如币安、NFT 等,都基于最基础的 “区块链”,即相信它的 “不可篡改”。
  7. 然后加了两大护法,分别是基于 “p2p” 的 “去中心化” 和基于 “faas” 的 “智能合约”。这两个护法,是用来增加信心的。
  8. 一切的一切,都在于 信任遵守 “区块链” 链表中保存的数据。这里的信任,是实打实的,就像白纸黑纸一样。但是遵守,一直都是空头支票。
  9. 因为 遵守 的空缺,整个币圈都是在豪赌,赌一个一落千丈的时间点,或者产业被法律认可。
  10. 转机是赵长鹏先生和币安,向美国认罪。遵守 已经有政府背书了(但 “去中心化” 的安全性就名存实亡了)。已经成型的产业大概率不会没落,这里将变成投资机构。但 DAO、web3 是走不下去的。
  11. 建议 USDT,和美元 1:1,可以让资产不贬值。说千道万,就是信不信得过。基于 10,我觉得以后可以简单的信一点。
  12. 整个产业,都在等待法律背书。可现实世界本就有法律、律师、法院了。这是一个矛盾的产业。

区块链

区块链是一种数据结构和算法集合。通过这套结构,可以保障以下特性:

  1. 不可篡改
  2. 高度安全
  3. 透明

区块链就是链表,通过加签增加了修改的复杂度。区块链就是让人相信:你看到的数据一定是真实的。

因为以上特性,可以基于区块链,做一些事情。只要产品的形态能够使用区块链的数据结构和算法来表达,就可以使用区块链技术。

比如,药品跟踪:有问题的药品有可能无法溯源。如果基于区块链系统,就可以做到无法篡改、透明。每一支药,从研发、出厂、销售、使用都可以被记录。

区块链中,对于每一个区块的产生,有一个方案是使用 PoW(工作量证明)。
这个方案需要使用巨大的算力才能够输出一个有效的区块,从而可以保障不可篡改。
投入到 PoW 矿业的大量计算资源和电力,如果用于科学研究、数据分析、医疗研究等其他领域,可能会带来更直接的人类福祉增益。
but,目前需要把这些巨大的资源用来计算一个区块。这个投入和产出的资源配比,的确很不好理解,也只能玩币的人能够下狠心。

比特币

比特币没有其他应用如 NFT 玩的花,比特币是完全遵守 区块链 的技术规则来实现的。

通过 https://bitinfocharts.com/bitcoin/ 可以查看当前比特币的一些信息,如区块链总区块数、大小、生成时间等。

区块

  1. 每个区块,都有一个 nonce(随机数),这个 nonce 可以保障区块被挖出来的时间在 10 分钟左右。通过定期(两周)可能性的调整 nonce 值来保障。
  2. 通过 nonce 计算出一个符合当前区块定义的值,就是说这个区块被挖掘出来了。这就是挖矿。挖矿就是挖每一个区块。
  3. 区块中记录 1000 - 2000 笔交易,其中第一行记录,就是当前挖矿的收益交易。
  4. 每个区块大约 2-4 M 左右,大约每 10 分钟产生一个区块。

交易

  1. 交易中包含交易 ID、input、output。input 就是来源账户,可能有多个账户。output 就是流向账户,可能有多个账户。
  2. input 中包含解锁脚本,用来解锁来源账户在上一个记录中的锁定脚本。output 中包含锁定脚本,用来供下一次交易的时候给 input 解锁脚本使用。
    1. 原理:把解锁脚本和锁定脚本合起来,通过比特币脚本运行器执行,能执行成功,则表示当前来源账号是有效的。即 A 用户可以消费 A 用户自己的钱,不能被 B 用户消费。
  3. 示例:A 持有 5 个比特币并支付给 B 2 个比特币:
    1. input:A
    2. output:A (3) + B (2) ⇒ 实际上:A (2.99) + B (1.99),0.02 是手续费。
  4. 对于上面的示例,实际上还有手续费,这些手续费是给矿工的。即矿工挖出来一个区块后,不仅得到了比特币奖励,还拿到了每一个交易的交易费用。

比特币地址

  1. 私钥生成公钥,公钥生成比特币地址。
    1. 比特币地址是公开的,即别人拿到该地址,就可以往这个地址打币。别人也可以检索区块链中的区块,查到该地址的资金来源和流向。
    2. 1 个用户可以持有 n 个比特币地址用于交易,这样可以保护隐私。也代表需要 n 个公私钥。
    3. 钱包的作用,就是管理公私钥和比特币地址。
    4. 钱包也可以通过 1 个私钥管理 1 个公钥和 n 个比特币地址。这样更方便一些,比较保存 1 个私钥和保存 n 个私钥的复杂度是不一样的。这个技术叫:HD。
    5. 将所有的比特币地址的 UTXO (剩余币) 总和计算出来,就是当前用户持有的币总量。

交易池

比特币网络中一个临时存储的区域,用来保存尚未被包括在区块中的有效交易。

A 向 B 支付币,这笔交易,首先进入交易池。其中记录了详细的且验证有效的交易信息以及费用(交易费,交易发起人可以指定奖励矿工多少费用)。

交易池在哪里:存储在 “全节点” 中。详见下面的【比特币链存储空间】。

交易流程

我 (A) 现在通过钱包向 B 支付了 0.5 比特币:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
当你通过钱包向另一个用户(B)支付比特币时,整个过程涉及几个关键步骤,从创建交易到最终确认在区块链上的记录。以下是支付0.5比特币的技术流程:

1. 创建交易
- 输入信息:钱包首先检查你的比特币地址中有足够的余额可用来发送0.5比特币给B。这通常涉及到选择足够的输入(之前的交易输出),来覆盖发送金额和可能的交易费用。
- 输出信息:在交易中创建两个输出:
- 第一个输出是支付给B的0.5比特币。
- 如果选定的输入超过了0.5比特币加上交易费,第二个输出将是找零金额,返回到你自己的一个地址上。

2. 签名交易
- 你的钱包使用你的私钥对交易进行数字签名。这个签名过程是为了证明你有权使用这些输入,并授权这次交易。

3. 广播交易
- 签名的交易被发送到比特币网络。钱包软件将交易数据广播给网络中的节点(比如全节点)。这些节点接收到交易后,会进行初步验证,比如检查签名是否有效,输入是否未被其他交易双重支付。

4. 交易验证与确认
- 一旦交易被网络节点接受,它会被放入交易池中,并等待矿工将其打包入区块。
- 矿工选择交易池中的交易,并尝试创建新的区块。矿工在创建新区块的过程中需要解决一个数学难题,这个过程称为工作量证明(Proof of Work)。
- 当一个矿工成功解决难题并创建了一个新区块,包含你的交易在内的区块被添加到区块链上。这个区块随后被广播给所有的节点。

5. 确认数增加
- 一旦你的交易被包含在一个区块中,它获得了第一次确认。随着更多区块被添加到这个区块之后,你的交易的确认数会逐渐增加。一般来说,六个确认后,交易被认为是非常安全的。

这个流程确保了比特币交易的安全性和不可逆性。通过网络分布式的节点和矿工的共同工作,比特币网络维护了其透明度和去中心化的特性。

比特币链存储空间

目前 (2024.07.06),比特币链共计 850,932 个区块,每个区块生成时间 11m 10s,每个区块 800.35 KBytes,整个区块链 491.50 GB,第一个区块生成时间是 2009-01-09。

对于普通用户,不可能存储近 500G 的链在本地。但比特币本身又是去中心化的。原理是:

区块链存储有两种方式:

  1. 全节点:存储整个区块链数据,并实时新增。
  2. 轻节点:只保存区块头部的信息。来验证交易数据的正确性。比如手机钱包。
    1. 钱包是公司、个人、开源组织开发的,钱包虽然在手机、电脑上安装,但还是要访问对应的后台服务器。
    2. 后台服务器一般都是全节点存储区块链数据。

全节点

全节点,是软件,可以由大机构和个人或者开源组织发布。

当一个用户安装了全节点之后,就会拉取所有区块链数据并成为同步链中的一部分,包括新增区块、交易池等。

而且,安装了节点软件之后,基于节点发现算法,当前节点会被其他节点感知到。

这样,A 向 B 的交易转账,就会被同步到当前节点的交易池中,并在后期可能会被矿工拉取过去,成为区块计算的一部分。区块只要计算成功,就代表当前 A 向 B 的交易完成了。

以太坊

认识以太坊之前,需要先理解比特币。因为以太坊有很多和比特币相似的概念。但他们是为了不同的场景。

概念

  1. 区块链:和比特币的区块链概念相同。因为它们都是基于区块链自身的那些特性发展起来的,如 “不可篡改”。
  2. 以太币:是以太坊的核心之一。以太币和比特币在概念层级上等价。
  3. 智能合约:是以太坊的另一个核心(总共两个核心基础)。以太坊的区块链上不仅可以记录以太币,还可以记录智能合约。
    1. 区块链中的每一条记录都是交易,交易中可以仅有以太币的交易,还包含一个字段用来存储合约。
    2. 非智能合约的交易,该字段为空。
  4. 虚拟机 (Ethereum Virtual Machine, EVM):用来执行智能合约。
    1. 有一套计费标准。即合约的执行是需要消耗以太币的。
  5. 全局状态:是区块链的抽象层。

以太坊区块链

和比特币基本相同,有些许差异,如区块挖矿的标准不同、同一时间同样两个区块被挖出来后的处理结果不同(比特币:使用其中一个,以太坊:两个都使用,最多 7 层)。

还有就是,存储的数据不同。比特币主要是存储每一笔交易,其中第一个交易项是当前矿工的比特币奖励。以太坊存储的也差不多,不过里面多了一个字段,叫 “智能合约”,即代码。这个代码可以是通过 class 和 func 的形式定义,可以在后期被以太坊专门设计的 EVM 执行。

全局状态

比特币中,需要通过全节点,访问每一个区块才能知道某一个比特币地址的消费记录和余额。在以太坊中,查询数据不再需要遍历所有的区块了,因为有一个抽象层,记录了所有以太坊账号的最终结果,就是全局状态。

全局状态可以理解为是一个非常高效的多叉树,它记录了全量的最终数据,通过它,就可以快速获取某个账号的余额和智能合约。

在每个区块被挖出来后,就会更新这个全局状态。

所以,全局状态和区块链一样,是独立存储的。而且,它和区块链一起,被 全节点 持有。它们都是去中心化的。

实际上,全节点还有一个数据,和比特币一样,就是 “交易池”。所有待录入区块的交易,都会先存储与 “交易池” 中,等待被矿工验证和挖矿成功。

智能合约

智能合约,就是代码。一段通过 class 和 func 组成的图灵完备的 脚本,需要在 EVM 上部署。

它有一个研发生态,可以通过众多后台语言和前端语言进行调用和执行(执行需付费 - 以太币)。

这些代码存储在区块链中,保障不可更改等特性。

举个例子,背景是这样:A 将一个项目给 B 做,约定 B 完成 30%、70%、100% 的时候分别收到 3w、5w、2w 的以太币收款。

  1. A 或者 B 或者 第三方,写智能合约 (写代码),这个合约里面包含一系列的约定函数,如 stageA (…)、stageB (…)、stageC (…),这些函数中需要包含:验收、打款等细节操作。
  2. 创建一条交易,交易中包含 A、B、合约。
  3. 部署合约(需要部署在以太坊平台上)。
  4. 开发前端页面,比如有三个按钮 stage_a、stage_b、stage_c。每个按钮都执行对应的验收逻辑,并最终调用 合约 接口【stageA (xxx)】。
  5. 当 B 完成 30% 后,需要 A 验收并且通过,那么 A 就点击 stage_a 按钮,这个使用 stageA 合约 api 被执行,执行结果是将 A 账户的 3w 以太坊币打到 B 账户。

说明:

可以认为这样的合约没有用,比如 B 完成 30% 了,A 也验收通过了,但就是不去点 stage_a 按钮。这样的话,当前合约形同虚设。

但我们不能说这样的合约不存在,因为在区块链上,这是真实记录的,即 A 和 B 之间一定有这个合约。

但现在 A 就是不付款,这没有办法。即 智能合约 能够提供约定的准确性,但没有办法保障约定一定被执行。这是君子法则。

那智能合约和普通的合同相比,就显得操作流程更加复杂但价值也没有提升?

不。

普通的合同有可能丢失或者认为破坏了,但智能合约可以保障:它就在这里,当时什么样,现在也一定什么样。

还是得依靠【君子法则】。

代币

代币,是完全基于 “智能合约” 建立起来的。通过 faas 平台,来做各种类型的计算,从而实现业务逻辑,如 “币名称、发行币、交易”,就是调用 faas api。

ERC-20(通用代币标准)

USDT(泰达币) 是一个使用 ERC-20 标准的代币示例。它是一种稳定币,通常与美元的价值挂钩,这意味着每一个 USDT 通常值 1 美元。USDT 在加密货币交易中非常流行,因为它提供了一种相对稳定的资产存储方式,使交易者可以在不直接兑换成法币的情况下减少价格波动的风险。

ERC-721(非同质化代币标准)

NFT,常用于数字收藏品和艺术品。

DAO - 组织自治

也是基于智能合约。想不通,怎么就能往这方面硬挤(DAO 是不可能的)。

假设公司决定开发一个新的产品。你可以在 DAO 中启动一个提案,所有员工都可以投票决定是否启动这个新项目。如果多数人同意,智能合约将自动从公司的资金中划拨预算给这个项目。同样地,项目的进展更新和最终的成果也需要报告给 DAO,以便员工可以继续监督和投票决定后续的资金和资源分配。

  • 提高透明度:由于所有的决策和交易都记录在区块链上,员工可以清楚地看到公司的每一笔支出和每一个决策。
  • 增强员工参与感:员工直接参与到公司决策中,可以提高他们的归属感和积极性。
  • 减少管理层:自动执行的智能合约减少了管理层的需要,降低了管理成本。

和 HTTPS 做对比

我们都知道 http 是不安全的,但是我们都相信 https 是安全的。

但 https 其实也不安全,为什么我们还相信它?

为什么不安全:

  1. 通过中间人 MITM,依旧可以解密本已经加密的数据并明文查看。
  2. 有 MITM 的存在,C 和 S 通过 https 传输的数据,依旧会被部分人看到。有两种场景:
    • C 主动信任了 中间人 证书,主动查看数据。如开发人员。
    • C 上当了,信任了黑客的证书。
    • 基于以上两个场景,S 就没有办法信任 https 了,因为 S 给到 C 的数据可以被明文分析了。
      • 方案一:将数据再次加密,使得中间人拿到加密后的数据。这里只能使用对称加密了,对称密钥也可能被从内存中挖取。本质上只是增加了破解的成本。
      • 方案二:进一步做双向加密认证,使得中间人 MITM 失效。进一步的安全处理上会使用该方案。
  3. 所以,对于 https 而言,C 和 S 之间的数据依旧有可能被窃听。如何严格按照安全标准,https 也是不安全的。因为安全本身的定义,就是为了处理窃听风险。

为什么我们还是相信 https 协议:

  1. 我们认为 https 已经能够覆盖大部分安全场景了。
  2. 默认对开发人员和上当信任了黑客证书的人,不在关注了。
    • 开发人员:看就看吧。
    • 上当人员:上当就上当了吧,黑客你就看数据吧,防不了你。

https 的安全,是基于 TLS/SSL 实现的。https 是应用层,使用了 TLS/SSL 这套安全套件。

  1. https 调用 tls api,tls 完全安全验证后对数据加密,在调用 socket api 将数据给到 tcp 进行传输。
  2. tls 完成安全校验的前提是 tcp 安全通道的建立。

区块链 和 https 有很多相似的地方:区块链和 tls 处于同一个层级,而 比特币和以太坊 就如同 https 应用层协议。即 https 使用 tls,以太坊 基于 区块链 技术 。

  1. 区块链用来保障一个很重要的点:不可伪造。它保障了不可伪造,但上层应用基于这个不可伪造的特性,并不能 100% 的完成上层业务。
    • A 通过 区块链 记录了一条向 B 借款 1w 的记录。
      • 借款到期后,A 就是不还。A 和 B 以及所有人都知道 A 向 B 借了钱,但 A 就是不还。
    • 通过区块链做了一个 NFT 数字画 J 并卖给了用户 M,用户 M 具有 J 的唯一权。但用户 N 依旧将数字画 J 印在广告上做产品宣传。
      • 用户 N 就是盗版、侵权了,但法律的不完善可能无法制约这种行为。
  2. 为什么还相信区块链:
    • 我们默认相信 https 是安全的。
    • 我们以君子的视角来看待区块链本身。

所有的一切,都是以君子视角来看待。


币圈一骑红尘,智能合约改变世界,之前得依靠 “君子协议”。显然整个币圈,没有君子。

往后,还是得依靠法律,成为协议的保护神。

那有法律背书后,还要这些干什么呢?现在不就是有法律、律师、法院么。

只能说法律愿意来背书,让这个行业不灭,看看后面能不能有新的价值。