Zhuang's Diary

言之有物,持之以恒

《数字货币与数字金融》读书心得II。

我国法定数字货币展望

在传统分布式数据库技术基础上,引入最新的分布式账本技术,形成央行数字货币的“双账本”功能结构:

一是交易账本:采用传统的(分布式)数据库技术,利用现有金融核心系统成熟经验,满足当前交易性能要求。

二是结果账本:用于记录最终交易结果,可采用最新的分布式账本技术,中央银行和各运营机构共同参与,各节点维护相同的账本数据,通过共识机制,保证各节点账本数据的全局一致性,并且难以篡改。通过异步方式提交结果账本,从而不影响交易账本的处理时效。结果账本数据一经写入,便具有高可靠、高安全、高可信等特点,并可为社会提供基于可信数据的确权服务,从而充分发挥分布式账本技术的优势。

2016年,中国央行的数字货币原型系统就采用了“双账本”技术路线,随着分布式账本技术的不断优化,性能不断提升,交易账本向结果账本异步写入交易结果,其延时会逐渐缩短。有理由相信:同步写入之日,就是分布式账本取代传统分布式数据库之时。

数字资产各种属性深度融合,益于创新

数字资产:股票是股东权益的证券化,债券是债券的证券化,电子黄金是黄金的证券化,抵押贷款证券(MBS)是银行信贷的证券化,证券的意义在于为资产创造了流动性,但有了资产数字化,传统证券的含义可能就会有新的变化。

真正意义的数字资产应该是原生的、包含全信息的、以数字形式展现和流转的资产。数字化后的订货合同、物流单据、发票、保理合同等资产,才是真正的数字资产。数字资产模糊了证券属性。

资产数字化的关键是如何为实体经济赋能

程序 = 算法 + 结构,获得图灵奖的Pascal之父——Nicklaus Wirth提出的著名公式

金融科技 = 算法 + 数据。

数字资产产生、流通、确权都依靠全新的价值交换技术,可采用基于真随机数的加密技术,也可以采用基于区块链技术、DAG技术或者公证人机制的分布式账本技术,在未来甚至可采用量子叠加态和量子计算实现的量子技术。

可以说区块链承载了太多的理想,获得了资本和产业的热捧。溢美之词,掩盖了该技术在比特币、以太坊之外少有重大应用的尴尬。技术人员应该沉静下来,认真分析并探索改进区块链系统交互,如何解决区块链上的数据隐私问题,如何将智能合约与现行法规相结合,如何设计适合区块链的治理机制和标准,等等。

我国是互联网大国,也是数据大国。但是就数据质量来说,却不是这样。怎样在数量优势上提升质量,把数据资源转化为价值资产,从而产生信用并为实体经济服务,最终促进社会经济发展,无疑是我国金融科技领域的难题和挑战。而这恰恰是资产数字化的关键所在。

区块链作为一项可信技术,由多方认可,多方背书,是新一代金融基础设施的技术雏形,可以为现有金融机构未能触及的底层实体“加持”信用,增进相互协作,降低交易成本,有可能创造一个全新局面。

资产自金融,普惠共享

自金融的典型特征:1)用户自主掌控数字身份;2)用户自主掌控数字资产;3)用户之间点对点交易,可以独立于第三方中介机构。

如何才能让中小企业获得平等的信息话语权和自主融资的能力?一个行之有效的解决方案是利用DLT与分布式文件系统技术,将底层资产的全量原生信息同步上链,利用公私钥技术实现权利人持有并转移资产,通过核心企业的信息服务商接入,持续有效地披露底层真实贸易背景,从而形成数字资产。数字资产赋予传统资产高度自主流动性,极大地提高了供应链金融业务的效率和真实性,为投资人建立了一个动态、完整、真实、可信的信息披露机制,从根本上解决了中小企业底层资产多层级流转的信息穿透问题,荣中小企业获得对等话语权,无须用以来核心企业信用,独立开展融资活动,同时金融机构可以不依赖核心企业,直接通过可信的DLT账本,获取融资所需的中小企业底层资产信息。让传统金融中的弱势群体不再弱势,不再融资难、融资贵,金融将变得更加贴近实体,更加普惠共享,同时在现代科技的支持下,其安全性与监管的便利性,同传统金融资产相比,已不可同日而已,可以灵活地补充现有金融服务的空白地带。

资产数字化将催生金融的零售革命

数字金融的发展将模糊场内与场外之间的边界。某种意义上,目前导致市场出现场内、场外分层的主因之一,是(技术)可信程度不到位。传统技术无法很好解决金融交易的信任问题,因此许多交易需要在有组织的场内市场开展(当然也有规模经济的因素),国家认可的法理保障解决了可信问题。随着区块链、物联网等现代数字金融科技的发展,技术可信成为法律增信的补充手段。通过可信技术的赋能,原来分处“两张皮”的数据与价值,真正聚合成为物理与逻辑一体的数字资产。数字是价值,价值是数字,数字的流转就是价值的流转。任何资产均可利用可信技术开展数字化,流转盘活起来,而不完全依赖法律增信,此时,什么是场内,什么是场外,也就不再泾渭分明。

数字金融或将重构金融运行方式、服务模式乃至整个生态体系。在科技驱动下,它不用依赖传统的金融中介作用,即可让资产在保留原生全量信息的条件下流通起来。原先在场外大规模“沉寂”的非标准化资产,如仓单、知识产权、合同等各类资产,将焕发全新的金融“生命力”,低成本、高效率流转起来,经济前景和意义不可估量。

再做一步思考,数字资产化将催生金融的零售革命,就像互联网的出现催生了阿里巴巴等零售巨头一样,零售金融市场的觉醒将会带来更具深远影响的金融变革。

数字货币将超越美元,升级换代

数字资产互换数字货币!在数字资产的世界里,数字法币的缺失是问题的根本。对此,私人部门和公共部门均在发力。

从比特币缺乏基础资产支撑,到各类稳定代币的探索,或基于法币抵押,或基于算法,再到监管部门的介入,基于法币抵押的稳定代币因对法币的价值锚定得到增信,再到近期 JPM Coin、Facebook Libra的出现,虚拟货币价值不稳定和不合规的问题有望得到解决。因此,加密货币不再一定就是虚拟货币。

加密货币已经有可能成为真正意义上的货币,它不一定是数字M0,也有可能是比银行存款货币更高层次的货币:Mn。与数字M0相比,M1、M2……Mn等高层次货币的数字化或更具有想想空间。

中央银行一向被认为不适合承担数字货币供给的角色。主要担忧当数字货币向C端发行流通时,中央银行可能面临极大的服务压力和成本。比如,加拿大央行Jasper项目、新加坡金管局Ubin项目、欧洲中央银行和日本中央银行Stella项目等,正在试验加密货币技术,但还停留在B端应用场景。

按照IMF经济学家的观点,支付宝和微信支付本质上就是央行数字货币。支付宝和微信支付是100%备付准备金存缴,Libra白皮书提到100%资产储备,前者是将所有资金存缴中央银行,后者将资金交由第三方托管。事实上,100%准备金存缴之后,如何激励商业机构的行为,既要马儿跑,又要马儿不吃草,这有可能是一个新的命题。

技术上,100%准备经存缴意味着数字货币的发行、流通、收回、销毁等全生命周期均要依附于传统账户体系,这增大了中央银行中心系统的压力和复杂性,而且,难以实现“账户松耦合”的要求,自金融创新不容易展开,跨境支付的想象空间亦大打折扣。相比较,央行加密货币(Central Bank Crypto-Currencie,CBCC)可以让客户真正自主管理自己的货币,而不是托付给第三方,赋予客户自主掌控的能力,也可以超越Swift,开辟跨境支付的全新战场。

英格兰银行行长Carney认为类似Libra的数字货币将是全球储备货币的更好选择。数字货币不仅仅是法币的数字化,就像数字资产不仅仅是资产数字化那么简单,未来的数字货币需要修补现有货币体系的弊端,超越美元,升级换代。

重新审视传统监管范式

传统上以牌照管理为关键、以金融机构为抓手、以开立在金融机构的账户为核心的监管范式,需要重新审视。

一是机构准入的牌照管理,应转变为用户转入的权限管理。在自金融模式下,中介机构不再是抓手,用户才是关键。用户入场须经过相关认证机构的身份认证和核验,业务过程须与身份认证隔离,并采用密码学原语与方案来实现交易身份以及内容隐私保护,管理部门则有权开展穿透式监管。在此基础上,各国监管部门根据客户的数字身份归集本国居民,划定数字司法辖区,对本国居民设置各类业务参与权限。本国居民与非本国居民的金融业务和资金往来,由各国监管部门按照各自的资本账户开放和跨国金融监管政策进行规制。以Facebook受监管的金融子公司Calibra为例,其首个产品就是Libra数字钱包,Facebook通过Calibra钱包将社交用户的身份信息与Libra用户的区块链地址进行连接,钱包代替了持牌金融机构成为自金融环境下被监管的主体,这样可以按照司法辖区的具体要求落实监管策略,兼顾了用户隐私保护与监管合规的要求。

二是业务核准,应增加智能合约审核。智能合约在上链之前必须经过相关部门的验证,判断程序是否能按照监管部门的政策预期运行,必要时,监管部门可阻止不合规的智能合约上链或者关闭本国居民执行该智能合约,同时还可建立允许代码暂停或终止执行的监管干预机制。此外,智能合约的参数设置也是一种监管手段,监管部门亦可通过调整或干预智能合约参数,来管控自金融业务规模和风险。

https://github.com/PaddlePaddle/PaddleOCR

简介

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。

特性

  • 超轻量级中文OCR模型,总模型仅8.6M
    • 单模型支持中英文数字组合识别、竖排文本识别、长文本识别
    • 检测模型DB(4.1M)+识别模型CRNN(4.5M)
  • 实用通用中文OCR模型
  • 多种预测推理部署方案,包括服务部署和端侧部署
  • 多种文本检测训练算法,EAST、DB
  • 多种文本识别训练算法,Rosetta、CRNN、STAR-Net、RARE
  • 可运行于Linux、Windows、MacOS等多种系统

快速体验

中文OCR模型列表

https://github.com/PaddlePaddle/PaddleOCR/blob/develop/README_cn.md

快速安装

经测试PaddleOCR可在glibc 2.23上运行,您也可以测试其他glibc版本或安装glic 2.23
PaddleOCR 工作环境

  • PaddlePaddle 1.7+
  • python3
  • glibc 2.23
  • cuDNN 7.6+ (GPU)

建议使用我们提供的docker运行PaddleOCR,有关docker使用请参考链接

如您希望使用 mac 或 windows直接运行预测代码,可以从第2步开始执行。

  1. (建议)准备docker环境。第一次使用这个镜像,会自动下载该镜像,请耐心等待。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 切换到工作目录下
cd /home/Projects
# 首次运行需创建一个docker容器,再次运行时不需要运行当前命令
# 创建一个名字为ppocr的docker容器,并将当前目录映射到容器的/paddle目录下

如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker
sudo docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev /bin/bash

如果您的机器安装的是CUDA9,请运行以下命令创建容器
sudo nvidia-docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev /bin/bash

如果您的机器安装的是CUDA10,请运行以下命令创建容器
sudo nvidia-docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda10.0-cudnn7-dev /bin/bash

您也可以访问[DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/)获取与您机器适配的镜像。

# ctrl+P+Q可退出docker,重新进入docker使用如下命令
sudo docker container exec -it ppocr /bin/bash

注意:如果docker pull过慢,可以按照如下步骤手动下载后加载docker,以cuda9 docker为例,使用cuda10 docker只需要将cuda9改为cuda10即可。

1
2
3
4
5
6
7
8
9
10
# 下载CUDA9 docker的压缩文件,并解压
wget https://paddleocr.bj.bcebos.com/docker/docker_pdocr_cuda9.tar.gz
# 为减少下载时间,上传的docker image是压缩过的,需要解压使用
tar zxf docker_pdocr_cuda9.tar.gz
# 创建image
docker load < docker_pdocr_cuda9.tar
# 完成上述步骤后通过docker images检查是否加载了下载的镜像
docker images
# 执行docker images后如果有下面的输出,即可按照按照 步骤1 创建docker环境。
hub.baidubce.com/paddlepaddle/paddle latest-gpu-cuda9.0-cudnn7-dev f56310dcc829
  1. 安装PaddlePaddle Fluid v1.7
1
2
3
4
5
6
7
8
9
10
11
12
13
pip3 install --upgrade pip

如果您的机器安装的是CUDA9,请运行以下命令安装
python3 -m pip install paddlepaddle-gpu==1.7.2.post97 -i https://pypi.tuna.tsinghua.edu.cn/simple

如果您的机器安装的是CUDA10,请运行以下命令安装
python3 -m pip install paddlepaddle-gpu==1.7.2.post107 -i https://pypi.tuna.tsinghua.edu.cn/simple

如果您的机器是CPU,请运行以下命令安装

python3 -m pip install paddlepaddle==1.7.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

更多的版本需求,请参照[安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。
  1. 克隆PaddleOCR repo代码
1
2
3
4
5
6
7
【推荐】git clone https://github.com/PaddlePaddle/PaddleOCR

如果因为网络问题无法pull成功,也可选择使用码云上的托管:

git clone https://gitee.com/paddlepaddle/PaddleOCR

注:码云托管代码可能无法实时同步本github项目更新,存在3~5天延时,请优先使用推荐方式。
  1. 安装第三方库
1
2
cd PaddleOCR
pip3 install -r requirments.txt

中文OCR模型快速使用

以超轻量级模型为例:

1
2
3
4
5
6
mkdir inference && cd inference
# 下载超轻量级中文OCR模型的检测模型并解压
wget https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db_infer.tar && tar xf ch_det_mv3_db_infer.tar
# 下载超轻量级中文OCR模型的识别模型并解压
wget https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_infer.tar && tar xf ch_rec_mv3_crnn_infer.tar
cd ..

解压完毕后应有如下文件结构:

1
2
3
4
5
6
7
8
|-inference
|-ch_rec_mv3_crnn
|- model
|- params
|-ch_det_mv3_db
|- model
|- params
...

单张图像或者图像集合预测

以下代码实现了文本检测、识别串联推理,在执行预测时,需要通过参数image_dir指定单张图像或者图像集合的路径、参数det_model_dir指定检测inference模型的路径和参数rec_model_dir指定识别inference模型的路径。可视化识别结果默认保存到 ./inference_results 文件夹里面。

1
2
3
4
5
6
7
8
# 预测image_dir指定的单张图像
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_mv3_db/" --rec_model_dir="./inference/ch_rec_mv3_crnn/"

# 预测image_dir指定的图像集合
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/" --det_model_dir="./inference/ch_det_mv3_db/" --rec_model_dir="./inference/ch_rec_mv3_crnn/"

# 如果想使用CPU进行预测,需设置use_gpu参数为False
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_mv3_db/" --rec_model_dir="./inference/ch_rec_mv3_crnn/" --use_gpu=False
  • 通用中文OCR模型

请按照上述步骤下载相应的模型,并且更新相关的参数,示例如下:

1
2
# 预测image_dir指定的单张图像
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_r50_vd_db/" --rec_model_dir="./inference/ch_rec_r34_vd_crnn/"
  • 支持空格的通用中文OCR模型

请按照上述步骤下载相应的模型,并且更新相关的参数,示例如下:

*注意:请将代码更新到最新版本,并添加参数 --use_space_char=True *

1
2
# 预测image_dir指定的单张图像
python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_12.jpg" --det_model_dir="./inference/ch_det_r50_vd_db/" --rec_model_dir="./inference/ch_rec_r34_vd_crnn_enhance/" --use_space_char=True

更多的文本检测、识别串联推理使用方式请参考文档教程中基于Python预测引擎推理

此外,文档教程中也提供了中文OCR模型的其他预测部署方式:

Run the command:

1
sudo apt-get install build-essential

Chances are you will need things like gcc to actually do the building so you might as well install those as well. The build-essential package will install other tools used along with make.

zksync 与其他 layer2 方案相比较,优缺点如何? ==> https://mp.weixin.qq.com/s/drgDM5mCZsBQdTIfszO97g

先说结论如下图:

在区块链 layer1 (以太坊) 中,所有的计算过程和数据存储都在主链进行(交易数据存在区块中,全节点执行所有计算过程);但 layer2 不同,我们可以根据 layer2 如何解决这两个扩展相关的瓶颈问题(计算 & 数据存储)来对他们分类,正如上图的二阶矩阵所示。

Plasma

Plasma 由 Vitalik Buterin 和 Joseph Poon 在 2017 年共同提出;Plasma 作为被寄予厚望的理论思想,可以说是开启了以太坊扩展研究的先驱。将其放在矩阵右下角。

从本质来说,Plasma 的思想相对直观。为了获得更好的扩展性,Plasma 将计算和数据存储都迁移到 layer 2 进行;由 layer 2 的执行者周期性地向主链递交 Merkle 根形式的 “状态承诺” 。如果执行者递交无效的状态,用户可以向主链上的智能合约提供错误性证明(fraud proof);一旦确认执行者出现欺诈行为,则智能合约会罚没他的保证金。

虽然这个想法简单优雅,但细节实现起来却是困难重重。最大的问题就出在数据可用性(data availability)。虽然说可以通过错误性证明,使得提供无效承诺的执行者在主链上遭到惩罚,但用户如果想要提供错误性证明,首先得取得构造出错误承诺的错误数据。这时候问题就来了,如果 plasma 的执行者拒绝在主链上公开数据,那用户能怎么办?这可能会导致主网上记载的 layer2 状态被推进到错误的状态,且无法对执行者追责。

针对这个问题, Plasma 衍生出一些相应的方案,如延长资产从 layer 2 退出的时间,当出现作恶行为,就能够允许大量资产从 Plasma 链退出。但经过这些年的摸索,可行的方案还没有真正实现;这也促使二阶矩阵其他象限的方案的出现。

zkRollup

zkRollup 通过一种间接的方式解决了数据可用性问题,将所有 layer2 上的交易数据,作为参数发送到主链上的某个智能合约内。这意味任何人都能通过观察区块链上的 “calldata(数据调用)” 来获得 layer2 的所有数据,但这同时让 zkRollup 能带来的可扩展性优势仅限于计算这一个维度上了。

zkRollup 则是靠着在主链完成零知识证明,保证无效的状态绝不会发生。因为所有计算都被 “汇总” 到证明里,所以无需信任或是检查执行者。

zkRollup 对数据存储方面也带来了一定程度上的扩展性提升。举例来说,zkRollups 可以发送压缩过的数据给智能合约,而且全节点不需要将 calldata 存储在活跃状态里面,减轻了全节点的使用负担。在 zkRollup 链上无需包含签名数据,因为零知识证明就足以证明交易的有效性。

zkRollup 部署难度较高,安全性要求较高,所以现有的 zkRollup 技术只专注于应用在某几个特定项目,如 Loopring 的去中心化 layer2 交易所。

zkRollup 的零知识证明模型:

  1. 状态树(State Merkle Tree)

Ha 是 account tree 的高度。Hb 是 balance tree 的高度.

  1. 金额打包

金额和费用使用的是科学计数法: sign * mantissa * (radix ^ exponent),其中的 mantissa 和 exponent 被封装在 zkSync 之中。

Optimistic Rollup

Optimistic Rollup 保留 calldata,可以在主链获得所有 layer2 的数据。同时 Optimistic Rollup 采用错误性证明(跟 Plasma 方案一样),对提交无效状态的执行者进行惩罚。

相比于 Plasma 和 zkRollup, Optimistic Rollup 做了一些权衡,所以带来的扩展性提升幅度最小。Optimistic Rollup 不依赖于什么过于前沿的技术或悬而未决的问题,实际推广中 Optimistic Rollup 更好落地。有多个团队(比如 “Optimism Group” )都已接近将 Optimistic Rollup 架构部署到主网上。

Validium

Validium 选择将 layer2 的交易数据放在链下,因而比 rollup 架构有着更高的扩展性。验证计算方面,Validium 采用零知识证明。如先前在讨论 zkRollup 时提到的,这样做会导致 Validium 在目前的应用部署,只能局限于特定目的(普适性低),比如 StarkEx 就是面向去中心化交易所的方案。

但这些权衡使得 Validium 在某些方面优于 Plasma 。在主网进行零知识证明验证能避免执行者提供无效状态,也能降低执行者不公开数据造成的后果。举例来说,想要勾结执行者,让状态错误地转变为 “把他人的钱转到自己账户” 是不可能办到的;因此 Validium 不需要在协议中设计 “大量资金退出” 激励博弈,也不需要延长资金从 layer2 退出的时间。

正如其他研究者指出的,零知识证明并不是解决数据可用性问题的灵丹,比如(恶意)执行者修改自己所控制的账户的状态是没有问题的,然后积压关于这些交易的数据,这会导致某些用户想退出资金时,无法提供 Merkle proof 。

=======================另一组比较方法=======================

为了简化问题,我们的评估将从以下四个方面着手,分别是:

  1. 安全性(Security)
  2. 性能(Performance)/经济性(economics)
  3. 易用性(Usability)
  4. 其他

希望我们的综合比较可以帮助开发者评估不同的扩容解决方案,并采用最适合其需求的解决方案。

除了这些问题之外,我们还汇总了一张对照表(译者注:这张表是本文的重点),可作为与解决方案提供商对话的起点。我们尽了最大努力保持对比的中立和客观,但是在表格里简洁地表达不同方法的细微差别仍然是一项艰巨的任务。我们希望更多的上下文能弥补这一问题。

非常感谢 Georgios Konstantopoulos(Layer 2独立研究员),John Adler,Ben Jones,JD Kanani,Patrick McCorry,Justin Drake(以太坊基金会)和Brecht Devos(Loopring 路印),感谢他们对该表的审查和更正。

注:
0 某些研究完全不认为侧链应被归入 L2 范畴,可见:https://twitter.com/gakonst/status/1146793685545304064
1 要看相关升级机制的实现,不过一般来说都可以
2 有非常复杂的限制
3 为保证与 EVM 的可组合性,吞吐量的上限是 300 TPS
4 这个参数实际上是可调的,但大部分研究员都觉得 1 到 2 周时间比较安全
5 要看相关的实现。zkSync 是不需要的,但 Loopring 需要
7 理论上来说,可以通过流动性提供商缓解这个问题,但是会让整个方案的资金利用效率性变差