Zhuang's Diary

言之有物,持之以恒

here is algorand网址链接

PoW的安全性

基于PoW的区块链假定矿工拥有生成下一个区块所需的大部分计算能力。但是,工作证明已将权力集中在少数采矿池中。在比特币中,实际上只有三个这样的矿池控制区块链。对于任何实体而言,这种权力集中对于渴望分权的系统是不可接受的,并且很可能是非常危险的。

Bonded PoS的安全性

在基于Bonded PoS的区块链中,每个用户都可能将自己的部分资金置于危险境地。那些这样做的人有权根据他们的赌注选择一个新的区块。原则上,如果他们发现行为不端,他们可能会失去他们的赌注,如果他们主张通过行为失误赚更多的钱,这可能不是很有威慑力。但是,一个普通用户只能负担得起的一小部分资金。因此,这个系统可能会成为富有的不诚实的人的牺牲品,这些个人通过大量的资金来控制区块链。

DPoS的安全性

在基于DPoS的区块链中,生成区块的权力在很长的时间间隔内被提供给一小部分公认的用户群。这种方法可能比工作量证明的成本更低,但无可否认的是相当集中!在这里,安全依赖于这个小组中大多数人的诚实,但任何一小部分用户都是攻击者的明显目标。

安全在Algorand

如果系统中的大部分资金由诚实用户所有,Algorand将保证安全工作。请注意,我们并不是谈论一些特殊用户拥有的大部分资金,而是所有用户拥有的资金。此外,Algorand的用户不需要将任何一小部分资金投入赌注。用户的钱始终留在她的手中,随时准备用尽自己的希望。

高效且可扩展

Algorand因为它在两个阶段产生一个新的块,每一个都完美地缩放。
阶段1:随机选择一个用户并提出一个新的区块。
阶段2:随机选择一小部分用户来验证并同意该区块。

Algorand不能被审查

两阶段中,用户按照他们在系统中的金额成比例地选择。它可能不包含在由不诚实用户提出的区块中,但只要其提议者是诚实的,它就会进入新的区块。因此,进入Algorand区块链所需的交易费用也非常低。这允许在平等条件下处理宏观和微观支付。

灵活性是成功的关键。

Algorand通过其标志性的建议和约定机制产生一个新的区块。在很高的层次上,Algorand秘密并即时召集一小群用户,他们的加密和安全选择能够公平地代表所有用户的社区(由他们在系统中的持股量加权)。这个代表性的委员会就新的区块达成协议,但事实上,它可以用来就其他问题达成一致。例如,改变议定书或修改货币政策。

我们应该认识到,在任何复杂的系统中改变都是必要的。传统的加密货币是静态的,任何“改变方向”都需要一个硬分叉,从而导致社区分裂。从长远来看,分散会削弱社区和任何货币的效用。

传统的加密货币没有内置的安全机制来达成协议。因此,关于变革的辩论是非常结构化的,无论达成任何形式的协议,都必须在链条外达成。因此,人们总是怀疑任何结论的正确性。

相比之下,Algorand使社区和协议得以发展。Algorand以其有效和安全的拜占庭协议为中心。经过辩论后,在区块链上发布了一项拟议更改,并使用Algorand的共识协议,社群投票接受或拒绝该提案。如果获得批准,建议的更改将立即生效。

在Algorand,这种协议并不是通过智能合同来实施的。相反,它直接内置于协议的核心。

相关文章链接:

可验证随机函数VRF之Algorand共识算法

2018年2月,图灵奖得主、MIT教授Sivio Micali募集400万美元开发Algorand区块链协议一事受到了国内外媒体的普遍关注。在MITMicali教授和MIT媒体实验室数字货币计划负责人Neha Narula合开课程《共享公共账本》(Shared Public Ledger)课程。这门课主要就是讲解Algorand。Algorand的目标是建立一个低能耗、高速度、民主化、可拓展性好而且几乎不会出现分叉的分布式账本。Algorand没有引入激励机制或发行数字加密货币。

论文发表In Proceedings of the 26th ACM Symposium on Operating Systems Principles (SOSP), Shanghai, China, October 2017.:

Algorand由algorithm(算法)和random(随机)两个词合成,顾名思义,就是基于随机算法的公共账本协议(public ledger)。Algorand针对比特币区块链系统的几个核心缺陷进行了改进。

1. Algorand的目标是:

  1. 能耗低,不管系统中有多用户,大约每1500名用户中只有1名会被系统挑中执行长达几秒钟的计算。
  2. 民主化,不会出现类似比特币区块链系统的“矿工”群体。
  3. 出现分叉的概率低于一兆分之一。假设Algorand中平均每分钟产生一个区块(后文会给出有关测试数据),这个概率意味着平均每190万年出现一次分叉。
  4. 可拓展性好。

2. Algorand算法假设

  1. 网络中诚实节点的数目始终占优。
  2. 节点可以自由地随时加入网络,而不需要申请。网络中每个节点通过一个公钥地址(同时也是钱包地址)表示,对于新加入的节点地址,只有被网络中其他节点转账成功(即钱包余额大于0)后,才可以参与到网络中的区块共识。
  3. 攻击者也是动态变化的(诚实节点随时可能变为攻击者)。

3. 用户和交易特征

Algorand是一个公有链系统。用户(或者节点)加入Algorand不需要事先申请,可以随时加入。Algorand对用户数量也没有任何限制。每个用户持有多个公钥。每个公钥均是一个电子签名机制的一部分,也就是有一个与之对应的私钥。每个公钥对应着一定数量的货币。每笔交易实际上是一个电子签名,该电子签名将一定数量的货币从某一个公钥转移给另一个公钥,并用前一个公钥对应的私钥进行加密。不难看出,Algorand的这些设计,与比特币是一样的。

Algorand要求系统中2/3的货币由诚实用户掌握。诚实用户的含义是:其行为遵守有关指引(主要指拜赞庭共识协议,见下文),并且能完美地发送和接收消息。诚实用户以外的是恶意用户,恶意用户的行为可以任意偏离有关指引。

对恶意用户,Algorand假设他们由一个“敌对者”(adversary)控制。“敌对者”能发起强大攻击,包括:

  1. “敌对者”可以在任何时候瞬间地腐化任何他选中的用户,使其成为恶意用户(哪怕该用户之前是诚实用户)。
  2. “敌对者”完全控制并且完美协调所有恶意用户。可以理解为,恶意用户的行为(包括发送和接收消息)完全由“敌对者”代理。
  3. “敌对者”控制所有信息发送,但必须满足一点:诚实用户发出的消息能在一定时间内(该时间只与信息的存储大小有关)抵达95%的诚实用户。
  4. “敌对者”几乎不可能伪造诚实用户的电子签名或者干涉诚实用户之间的通讯。

目前,Algorand是一个单纯的分布式账本协议,没有引入激励机制,没有发行类似比特币的数字加密货币。Algorand中交易所用的货币是外生给定的(可以是任何法定货币或数字加密货币),交易只影响货币在不同用户之间的分配。而在比特币区块链系统中,“矿工”构建了被公共账本接受的区块后,就会得到系统给予的一定数量的比特币作为奖励。

4. 网络通讯

与比特币区块链系统一样,Algorand假设用户之间的通讯采取“点对点传言”模式(peer-to-peer gossip):当某一用户传播一条消息后,第一次收到这条消息的用户随机并且独立地选择他的一些“邻居”,并将消息传给“邻居”们。当没有用户是第一次收到这条消息时,这条消息的传播就终止了。

Algorand对网络通讯的要求是:对任意大于95%的可及性参数(reachability)ρ和消息的存储大小参数μ,总存在一个时间参数λ(λ只与ρ和μ有关),使得一个诚实用户发出的存储大小为μ的消息,在经过λ长时间后,至少被超过ρ的诚实用户接收。

5. 密码抽签(cryptographic sortition)

密码抽签是Algorand的关键创新,也是其得名的由来,其要点如下:

首先,Algorand创建并不断更新一个独立参数,称为“种子”。“种子”参数不仅不可能被“敌对者”预测,也不能被其操纵。

其次,在BA每次循环中,Algorand基于当前 “种子”参数构建并公布一个随机算法(也被称为可验证的随机函数—verifiable random functions,见下文)。该随机算法中的一个关键参数是用户的私钥,这个私钥只有用户本人才知道。

接着,每个用户使用自己的私钥运行系统公布的随机算法,得到自己的凭证(credential)。凭证值满足一定条件的用户就是这一轮的verifiers。verifiers组装一个新区块并连同自己的凭证一起对外发出。其中,在第一个子步骤中凭证值最小的那个verifier的地位比较特殊,称为leader。

最后,所有verifiers基于leader组装的新区块运行拜赞庭协议BA。在BA的每次循环中的每一个子步骤中,被选中的verifier都是不同的。这样能有效防止验证权力集中在某些用户手中,避免“敌对者”通过腐化这些用户来攻击区块链。

6. 共识机制

Algorand中,verifier用户(仅指被系统随机挑中作为verifier的用户)通过一个BFT协议(由Micali教授开发,称为BA)对新区块达成共识。BA执行起来非常快。大致言之,BA每次循环有3个子步骤,在每次循环后均有1/3以上的概率能达成共识。一旦verifier对某一个新区块达成共识,超过一半的“验证者”再用自己的私钥对该区块进行电子签名,相当于认证,该区块就开始在Algorand网络中传播。

BA的一个重要特征是:在点对点网络通讯下,BA的参与者可更换—player-replaceable。也就是,BA每次循环的每一个子步骤均可由全新的、独立随机选择的参与者来执行。在这种情况下,BA仍能正确、有效地达成共识。假设有上百万的用户,BA每次循环的每一个子步骤的参与者可以完全不一样,而且每一批参与者都无法确定下一批参与者是谁,从而无法串谋。

7. 可能的攻击:

  1. 尽管可以通过对上一个区块的哈希计算来确定构建下一个区块的leader节点和verifier节点,但是由于哈希函数自身的性质,攻击节点只需要在区块中添加一些微小的改动就可以很大影响下一个区块的leader节点的选择,从而破坏leader/verifier的随机性。为保证完全随机,在区块中引入block quantity,Qr(r为第r个块),一个区块的Qr值只有在当前区块的leader在整个网络中被揭晓时才能最终确认,从而使攻击者无法事先攻击。

  2. 即使leader/verifier的选择是完全随机的,攻击者也有可能在leader/verifier被揭晓的同时,马上攻击这些节点,从而控制leader/verifier。为解决这个问题,采用的方案是设计多个潜在的leader,并且每个潜在leader都独立完成区块的构建,然后每个潜在leader都将自己的认证信息,构建的区块一起发送到网络中,通过共识算法选定真正的leader。由于在真正leader的身份在被揭晓之前,网络已经完成了区块数据的广播,即使攻击者攻陷了真正的leader也无法改变区块的数据。

  3. 算法中,区块生成都需要经过若干步骤,如果在算法执行过程中verifier节点被攻击,比如网络被断开,可能造成算法无法持续执行下去,从而造成整个区块无法确认,整个网络被停滞。而且,也无法要求每个节点都7x24在线,始终为整个网络进行服务。因此设计算法支持player-replaceable,从而使任何节点都可以随时被其他节点接管。

8. 具体算法

8.1. 选出verifier和leader

  1. 系统创建并不断更新一个独立参数,称为“种子”,记为Q ^{r-1} 。第r轮的种子的参数是256位长度的字符串,入参是第r-k轮结束后活跃用户的公钥集合,记为PK^{r-k}。k被称为回溯参数或安全参数,比如=1,表示上一轮结束后的用户集合。上面2个参数属于公共知识。
  2. 基于当前 “种子”构建并公布一个随机算法,称为可验证的随机函数(verifiable random functions)。该随机算法中的一个关键参数是用户的私钥,这个私钥只有用户本人才知道。
  3. 每个用户使用自己的私钥对“种子”进行签名,用函数SIGi来表示,用它作为参数,运行系统公布的随机算法,用函数H()来表示,得到自己的凭证(credential)= H(SIGi(r,1,Q^{r-1}))(函数SIGi有多个输入参数时,表示将这些参数简单串联后再进行电子签名)。
    3.1. 凭证是一个近乎随机的、由0和1组成的长度为256的字符串,并且不同用户的凭证几乎不可能相同;
    3.2. 由凭证构建的2进制小数0.H(SIGi(r,1,Q^{r-1})),也就是将凭证字符串写到小数点后在0和1之间均匀分布。
  4. 凭证值满足一定条件的用户就是这一轮的验证者verifiers。
    4.1. 条件是:对0和1之间的一个数,0.H(SIGi(r,1,Q^{r-1}))≤p发生的概率为p,称所有满足此条件的用户为verifiers。
    4.2. 有1-10^{-18}的概率保证在所有verifiers中,至少有一个是诚实的。
  5. verifiers组装一个新区块并连同自己的凭证一起对外发出。第r轮第s步(s>1)的verifier的产生程序与上文类似。其中,在第一个子步骤中凭证值最小(按字典方面排序)的那个verifier的地位比较特殊,称为leader。
  6. 所有verifiers基于leader组装的新区块运行拜占庭协议BA。
  7. 在BA的每次循环中的每一个子步骤中,被选中的“验证者”都是不同的。这样能有效防止验证权力集中在某些用户手中,避免“敌对者”通过腐化这些用户来攻击区块链。

8.2. 种子seed的更新

用Br表示第轮结束后,拜占庭协议BA输出的区块。

“种子”的更新过程是:
Q^r =H(SIGlr(Q^{r-1},r)), 如果B^r不是空区块。
Q^r =H(Q^{r-1},r), 如果B^r是空区块。

如果Algorand在第r轮受到了“敌对者”攻击,B^r可能是空的。

8.3. Algorand的BFT实现,即BA

拜占庭协议BA相当于一个两阶段的投票机制。

  • 第一阶段,verifiers对其收到的候选区块(为控制通讯成本,实际上用的是候选区块的哈希摘要)运行分级共识协议(graded consensus), 选出verifiers共识最多的候选区块。
  • 第二阶段,verifiers对第一阶段选出的候选区块,运行二元拜占庭协议(binary Byzantine Agreement),即要么接受它,要么接受空区块。需要强调的,在每一阶段中的每一个子步骤,Algorand可能使用完全不同的verifiers。

以下为叙述方便,假设:

  • 系统处在第r轮;
  • 每一个子步骤都选出n名verifiers,其中恶意verifiers不超过t,并且n≥3t+1(也就是诚实“验证者”占比在2/3以上)。另外,引入计数函数 si(v)表示在第s步“验证者” i 收到的消息v的次数(来自同一发送人的只能算1次)。

    3.1. 第一阶段:分级共识协议

    运行密码抽签程序,选出“领导者” lr 和这一步的“验证者”verifiers。用vi表示“验证者”i收到的并且他认识是来自“领导者”lr的候选区块。

vir不一定等于“领导者”lr构建的候选区块:

  • “验证者” i辨认 “领导者” 的方法是从他收到的所有“验证者”凭证中找出按字典排序最小者。但因为网络通讯原因,“领导者”lr发出的信息可能没有到达“验证者”i处。
  • “领导者”lr正好被“敌对者”腐化,对不同“验证者”发出不同的候选区块。
  • “验证者”i本身可能是恶意的。
  1. “验证者”i将收到的vi广播给其他用户。广播正确的vi代表他告诉其他验证者他同意该vi。
  2. 当且仅当“验证者”i在步骤2中收到消息x的次数超过了2t+1次(即 2i(x)≥2t+1),他将消息x发给其他用户。“验证者”i按以下规则输出(vi,gi):
    1
    2
    3
    4
    如果存在x使得#3i(x)≥2t+1,则, 
    vi=x, gi=2;//2轮都投票成功 如果x存在使得#3i(x)≥t+1,则,
    vi=x, gi=1;//只有1轮投票成功 否则,
    vi=Ø, gi=1,其中Ø代表空区块。
    含义是:
  • 如果存在诚实“验证者”i,使得,gi=2,那么对任意其他“验证者”j,必有gj≥1,vj=vi。此时所有诚实“验证者”输出的候选区块是一样的。当然,如果一开始的“验证者”收到的候选区块都是v,那么最后一批“验证者”输出的也将都是v。
  • 对所有的诚实“验证者”i,gi≤1,并且他们输出的候选区块不一定相同。

    3.2. 第二阶段:二元拜占庭协议

    基于分级共识协议的输出{(vi,gi):i=1,2,K……n}对每个诚实“验证者”赋值:
    1
    2
    如果gi=2,那么bi=0;
    其他情况,bi=1。
    这些bi就是二元拜占庭协议的输入。
  1. 第一步“验证者”i发出bi。
    • 如果#1i(0)≥2t+1,那么“验证者”i设定bi=0,输出outi=0,并停止执行协议(也可以认为他以后将一直发出bi=0);
    • 如果#1i(1)≥2t+1,那么“验证者”i设定bi=1;否则,“验证者”i设定bi=0。
  2. 第二步“验证者”i发出bi。
    • 如果#2i(1)≥2t+1,那么“验证者”i设定bi=1,输出outi=1,并停止执行协议(也可以认为他以后将一直发出bi=1);
    • 如果#2i(0)≥2t+1,那么“验证者”i设定bi=0;否则,“验证者”i设定bi=1。
  3. 第三步“验证者”i发出bi和SIGi(Qr-1,rj)。
    • 如果#3i(0)≥2t+1,那么“验证者”i设定bi=0;
    • 如果#3i(1)≥2t+1,那么“验证者”i设定bi=1;
    • 否则,用Si表示所有给“验证者”i发送消息的其他“验证者”集合。

结论

  • algorand已经成功实施了1000个虚机节点,模拟了500,000用户数量。
  • algorand的TPS性能是比特币的125倍,按照论文中给出的数据,每小时可以共识的交易是750M字节每小时,计算一下(按照每笔交易长度100字节计算):750 1024 1024/60/60/100=2184.5 TPS,考虑到实际环境的运行,估计可以达到1000TPS左右。

—即如何设计“可信”技术的信任。
翻译原文: https://media.consensys.net/designing-for-blockchain-whats-different-and-what-s-at-stake-b867eeade1c9

区块链技术正在重新定义信任,改变我们如何思考日常生活的结构,从身份、经济以及政府。它推动设计师进行系统和更大规模的思考 - 重新定义分散形式的未来团队的角色和价值。

如果我们不解决人们实际存在的问题,就无法实现区块链的未来。

我最近的目标是让这个领域有更多的设计师:更多的同理心,更多的用户研究,更多的设计思维,以及更多的关注现在遇到的用户。

人们经常问:“区块链设计有什么不同?”我想给出更好的答案。这个答案从问正确的问题开始:设计信任的真正含义是什么?

为信任1.0做设计

早在2016年中,就开始在IBM开展区块链工作 - 首先是开发工具来获得和维护区块链网络,然后在短时间内发布潜在的身份识别产品。此时,并没有真正意识到在IBM和Hyperledger平台上所做的超越区块链的大局。加密货币热潮还没有真正开始。我从来没有在电视上看到任何加密货币的报道,朋友当然不知道我在说什么。

在加入区块链团队的过程中,记得看过关于比特币的视频,了解了其中的运行原理。但Hyperledger中是没有加密货币的。关于比特币如何工作 - 挖掘,采矿奖励,防止双重开支的保障措施 - 都不在Hyperledger中。因为比特币存在品牌问题,IBM的区块链人员并没有重视,所以也没有真正讨论加密货币。

IBM关注的是区块链的业务成果:节约成本,提高效率,缩短跟踪供应链上货物的时间。我仍然有很多关于激励和私人网络的问题,但是都没有得到解决。

然后,在很短时间内从事了关于身份产品的工作。 我看到了区块链上自我主权认同的巨大潜力,我被迷住了。 这是一个真正帮助人们的机会 - 无证件,被贩运者,边缘案件,身份被盗的人。 这是一个让人们控制自己的数据并帮助他们的机会,而不是集中式的机构,如果他们想要的话,可以通它赚钱。 这时,区块链开始感觉像一场革命。 当你消除所有的障碍并将控制权交还给人时,小鱼可以与大鱼竞争。

在2017年初,我写了关于如何在IBM设计区块链的问题 - 现在称之为Designing for Trust 1.0。 当时看到的是无法真正使用的应用程序,没有明确的流程。 我们一直在追求工程决策,扭曲用户体验,以适应已经构建的内容。 所以,我只是用以人为中心的常规设计原则来解决问题。有过分使用行话(专业术语)问题,并强调显示哈希值。 我认为这是因为大多数应用程序都是为想要看到区块链工作原理的其他开发人员提供的演示。没有人在谈论最终用户。

所以我和同事们进行了最佳猜测,并试图使设计成为交互的重要组成部分。但它仍然是一个表面层,一个附加组件。 我们正在努力尝试和改造一种值得信赖的体验。

设计理论的要点是:

  • 避免行话(生僻的专业词汇)和不可操作的数据(hash 值)。
  • 始终如一。使用设计系统。
  • 使用现有的 UX 模式。
  • 创建积极的指导和反馈。
  • 允许并预测错误。
  • 设计区块链的全球性 — 本地化,设备不可知论。

上述内容看起来大部分是合理的。很多都是通过一致的视觉设计完成的。不需要华丽的动画(当用户没有明确地告诉它时,事物会移动)以及过多的交互流程。当用户遇到新事物和复杂事物时,这些都是优秀设计师会采用的。

加入以太坊

在2017年7月,我加入了ConsenSys,这是一家主要专注于在Ethereum上构建应用的工作室。在写这篇文章的时候(3月23日),ConsenSys有47个活跃的“spokes”,它们基于区块链之上,工作在教育方法,赏金,土地登记,数据科学,会计,音乐和版权,科幻世界,医疗保健和供应链等等方面。这对设计师来说意味着什么,当我想到这个空间的设计意味着什么时,我突然间想到了更多的信息,用户组和数据。

而在将加密电子货币方面与“真正的区块链可修复的问题”分开之前,我在ConsenSys似乎看到了什么事情可以让我们做到这一点。在比赛后期,我问自己:“在没有中央集权的情况下与一个大集团合作意味着什么?没有中间商的情况下,价值可以转移到什么程度?”

饥饿设计

尽管区块链已经存在近十年了(自从Satoshi在2009年开发比特币创世区块以来),仍然没有足够的设计师,或者对设计师的实际操作有足够的了解。直到去年为止才有好转,因为大多数Web3用户都是那些非常感兴趣和有动力的人。一开始,这些情况大部分发生在命令行中,这些用户已经了解了系统。他们会忍无可忍。但是区块链的成功 - 这种分布式账本未来的传言 - 不仅取决于高度熟练和感兴趣的用户能否采用,还取决于那些试图做好工作,购买商品或玩得开心的普通人。

像2017年12月的Cryptokitties拥堵危机等一些基础设施团队日益增长的问题,它带来了更多的临时用户进入这个空间,迫使很多团队重新评估他们的用户体验。 Cryptonerds开始对设计的力量更加感兴趣,希望设计师们做好准备。

设计思维

人们对区块链感到非常兴奋,有时只是想制造一些东西 - 任何东西 - 使用它,不管是否有人真的需要它。 我们必须依靠一个坚实的过程来确保我们知道正在解决哪些问题以及如何知道是否确实正在解决问题。 通过这个测试并确定你是否真的解决了问题的一个策略是设计思维练习。

“设计思维”只是解决关注人类问题的一种方式。 例如,让我们都同意并验证问题甚至是第一个问题。 然后,它就像绘图,原型设计和验证假设一样 - 因为产品团队(业务,设计和工程)的所有部分都需要参与。

低高保真

当他们仍然在餐巾上时评估想法和解决方案。当你被颜色,按钮风格和字体分散注意力时,你不能专注于重要的事情,比如,它是否解决了问题?是否有要采用的层次结构?

Metamask 的设计师Christian Jeria迅速勾勒出想法,向研讨会中的用户展示。

用户研究

一旦你了解了区块链,为大多数用户客观设计已经太迟了。因为你不是你的用户。所以显然你需要研究和测试更多。

不过,我认为最有效的策略是参与式设计,将用户带入研讨会。你不仅可以看到他们使用的东西,他们可以提供即时反馈,并与你共同构思。事情稍微复杂一点 - 签署法律文件,在特定地点采购用户,并制定补偿或奖励措施 - 但收益是指数级的。

合作

在这个领域良好合作是非常关键的,因为团队中的任何一个人都不太可能完全理解所有领域。在ConsenSys,大多数团队都是远程的(分散的),所以必须制定新的策略,以创建“同一个房间中的每个人”动态:能够快速移动,被动地知道你的团队正在做什么,以及当语言不起作用时,互相展示你的意思。

围绕“信赖机器”设计信任

去年,一位同事说:“仅仅因为区块链技术的建立可以消除对信任的依赖,并不意味着用户会信任机器或网络。”就像我之前说过的那样,当时我认为这是使界面更加“值得信赖” - 对通过界面发生的事情更加诚实。

然而,我认为“为信任而设计”比这更深刻。我们现在很难将经验与技术分开。当看到sprint的用户故事时,我会注意到这一点 - 将用户需求与网络/系统需求混淆非常容易。所以试图定义这些图层,我认为真正的关键是能够分辨它们之间的差异。

我认为确实在谈论三种(也许更多)设计的层次:信任机器(区块链),人类系统相互信任和信任感。

1.信任机器

第一层是设计层,它帮助用户信任区块链的各个方面。这意味着围绕现有系统进行设计,帮助人们以最痛苦的方式与机器进行交互,并教育用户了解正在发生的事情。设计师必须了解区块链是如何工作的,以了解什么可以或不可以改变,以便设计诸如gas,等待时间,智能合同和私钥管理等功能。

尽管对用户进行教育和授权非常重要,但有时从设计角度来看,有必要努力将某些功能抽象出来,以便它们不会成为未来体验的组成部分。当然,关于用户是否应该了解参与的系统的所有内容是存在争议的。但期望每个用户都了解区块链的技术内部工作情况是不可能的。例如,用户不需要处理gas — 但现在,它仍然是体验的一部分。 CryptoKitty 危机完美地捕捉到了这种设计的困境。MetaMask的首席开发人员Dan Finlay对此进行了描述:

主要问题在于用户发送的是一笔价格低于标准gas的交易,可能等待几天之后交易才能通过。但用户并不知道,用户感觉似乎整个以太坊网络都坏掉了。
在MetaMask上提出了一个小型解决方案:对于需要很长时间的交易,我们展示了一个按钮,让人们以更高的gas价格重新提交交易。那个小按钮基本上解决了整个问题。它允许人们参加gas拍卖。长期来说,要让用户不要成为加密经济学游戏中的被动乘客,而是成为活跃的玩家,这一点很重要。我们了解到,您不能简化gas拍卖。有时候,人们需要更高出价的动力。

在区块链生态系统中,协作变得至关重要:设计师、研究人员和工程师紧密合作,为用户解决问题。这也是关于了解我们在历史上的位置 - 用未来的眼光和路线图来设计现在的东西。

以太坊的第二层缩放解决方案:状态通道,等离子和Truebit

对于以太坊来说,2018年是基础设施的一年。在生态系统开发出强大的扩展解决方案之前,信任设计也意味着在区块链上花费的交易时间。我们必须关注这些未决状态的用户体验:我们已经接受过技术培训,即使知道交易需要一段时间,仍然无法阻止挫折感和恐慌。

密钥管理是设计人员需要考虑的另一个关键用户体验。由于没有第三方在区块链空间管理用户的数字身份,因此用户必须使用私钥签署交易。安全和设计之间的权衡是长久的:设计是为了为用户创造最好的体验;安全性是为攻击者创造最糟糕的可能体验。必须平衡给予人完全控制的自由和给予人完全控制的危险。

Jonny Howle正在uPort上为此工作。当人们谈论区块链的好处时,他们经常使用“无摩擦”这个词。但让我们来谈谈这意味着什么 - 从中间人,等待时间,第三方等等中删除 - 在某些方面,在处理交易时确实有很好的用途与易犯错的人。作为设计师的一部分工作就是测量什么时间以及我们可以添加多少摩擦。

2.相互信任

除了促进对区块链的信任之外,设计师还需要设计帮助用户信任并用于彼此协作的机制。这是不同的,因为这些都是可以作为设计师改变的事情,在这之前我们只是设计与区块链机制最舒服的互动。

当一位同事首次向我提出“系统思维”作为产品设计师职位描述的技能时,我的反应很差。我们必须能够在用户研究和线框图,设计思维和原型以及前端和视觉设计和测试之间做到吗?

去年我曾见过一些文章,提出在系统思维和设计思维之间找到一个桥梁,这一切似乎都很累人。但后来我意识到设计人员已经在系统层面思考,例如Design Systems。可持续发展,循环设计和社交平台的设计人员都在不断地考虑这种方式。区块链设计师是事实上的系统思考者。


因为现在有办法消除中间商,并快速转移对等价值 - 除了智能合约外 - 可以谈论如下事情:

  • 微小费用:激励用户更想要的东西。Kauri正在探索如何激励为以太坊开发者提供优质帮助。
  • 赌注:给予团队一个理由认为你将以团队的最大利益作为行动指南。
  • 令牌注册管理机构(TCRs):允许大量相互不信任或不必相互信任的人组织在一起的机制。
  • 治理:一群人如何决定事情?谁来投票?谁决定谁来投票?
  • 众包:思想的聚合与思考,人群的智慧,预测市场以及汇集资金的能力。

设计机制是一个专门研究协议的领域,激励理性行为者以社会期望的方式行事。通常没有人能很好地理解用户并准确地预测用户的行为。必须为系统中的每个利益相关者绘制和设计步骤,同时必须经过研究和测试。


这就是将以人为本的设计、系统思维、机制设计和隐含经济学结合在一起的地方。人们不会为了一个系统而参与系统:必须研究激励以及他们如何映射到某人想要完成的事情。设计师需要了解并很好地调整激励措施,以便恰当地设计出可用且令人愉快的体验,并且还能维持更大的系统。

3.信任感

必须创建的最后一层是对信任的公开展示 - 人类被视为可信赖的一切。这个设计原则从Designing for Trust 1.0开始,主要是关于良好的设计:

  • 显式控制。界面应该以用户期望的方式运行。它不应该做用户没有明确告诉它做的事情
  • 减少焦虑和认知负担。复杂的相互作用会放慢速度并逐渐消失。
  • 指导一致性。视觉元素为用户提供暗示,让他们知道该期待什么 - 形状和颜色等元素在界面中具有意义。
  • 尊重既定的约定。除非绝对必要,否则不要让用户学习新的模式。

还有其他一些方法来表现和证明可靠性。来自外部权威机构的徽章 - 例如推特帐户或批准的商人印章 - 是一种明显的方式。另一个是积极寻找是什么让用户感到困惑或焦虑,并解决这个问题。民众正在努力打击假新闻,在研究中了解到,内容消费者并不真正了解如何评估新闻的准确性或质量。他们提出了“信誉指标”来教育消费者为什么要信任某些信息。

设计师是保护者

最后也是最重要的设计信任:道德和保护用户。如果人们最终因我们所做的事情而受到伤害,那么“信任机器”就会失败。就像在开始时所说的,事实是,区块链影响着人们生活中最亲密的部分 - 比如金钱,身份和健康 - 但生活往往像狂野的西部。

区块链最引人注目的方面之一是在任何时候网络状态都是透明的。但是,这种激进的透明度有时会成为令人担忧的原因。如果有什么应该将你的真实生活身份与地址联系起来,那么你所做的一切都在那里。就个人而言,我担心数据三角测量 - 与其他数据结合变得敏感的无害数据。我们必须仔细考虑区块链上的数据以及管理的链接数据。像zkSNARKS这样的隐私解决方案提供了在不透露交易数据的情况下顺畅地在区块链上进行交易的机会。


用户面临的危险大部分存在于他们与区块链之间的空间中。除了作为攻击点 - 未授权用户可以攻击的不同点(输入或提取数据)的总和 - 这是人们忘记或丢失私钥的地方。这是诈骗活动的地方。


仅仅因为这些问题没有在区块链上发生,它们仍然是区块链高速路入口的一部分。必须尽一切可能来教育和保护人们。当出现问题时,用户会不顾一切地指责区块链。

进入这个领域的原因是因为我想帮助别人,但有些时候我很担心。很担心现实生活中的黑镜头剧集,在完全理解我们正在取代的内容之前,用区块链代替传统系统,并构建只激励利润,上瘾(像当前的社交平台)或不良行为的系统(但并没有预料到)。

行动号召

设计师,我们需要你在这里。几乎所有的项目都有可能改变我们做事情的方式,而且您有能力影响这种变化是正面还是负面。有很多重要的想法和紧迫的哲学问题,我们需要人们对这些话题给予关注。我们需要知道如何构思,测试,研究,迭代,实验和运送产品的人员。

如果你是新手,不要只阅读文章。其实参与是快速学习的最佳途径。安装Metamask,购买Cryptokitty。在Coinbase上购买数字货币,然后花在Overstock上。

区块链不仅仅是加密货币,所以要探索其他社区。查看Ujo的创作者门户网站和Cellarius的故事讲述平台。尝试赏金或Gitcoin的设计任务。编写智能合同或构建dApp的教程。把你的手指放在区块链上。

不要害怕提问。每个人都是新的,我们一起解决它。在ConsenSys,我们一直在寻找产品设计师,系统和设计思想家,设计研究人员等等。我们需要您的帮助来构建和设计人们可以信任的分布式未来。

令牌环领导人选举算法

We start with 6 processes,
connected in a logical ring.
Process 6 is the leader,
as it has the highest number.

Process 6 fails.

Process 3 notices that Process 6 does not respond
So it starts an election,
sending a message containing its id
to the next node in the ring.

Process 5 passes the message on,
adding its own id to the message.

Process 0 passes the message on,
adding its own id to the message.

Process 1 passes the message on,
adding its own id to the message.

Process 4 passes the message on,
adding its own id to the message.

When Process 3 receives the message back,
it knows the message has gone around the ring,
as its own id is in the list.
Picking the highest id in the list,
it starts the coordinator message
“5 is the leader” around the ring.

Process 5 passes on the coordinator message.

Process 0 passes on the coordinator message.

Process 1 passes on the coordinator message.

Process 4 passes on the coordinator message.

Process 3 receives the coordinator message,
and stops it.

让我们分析如何在ZooKeeper集合中选举leader节点,这个过程和令牌环原理是一致的。考虑一个集群中有N个节点。leader选举的过程如下:

  • 所有节点创建具有相同路径 /app/leader_election/guid_ 的顺序、临时节点。
  • ZooKeeper集合将附加10位序列号到路径,创建的znode将是 /app/leader_election/guid_0000000001,/app/leader_election/guid_0000000002等。
  • 对于给定的实例,在znode中创建最小数字的节点成为leader,而所有其他节点是follower。
  • 每个follower节点监视下一个具有最小数字的znode。例如,创建znode/app/leader_election/guid_0000000008的节点将监视znode/app/leader_election/guid_0000000007,创建znode/app/leader_election/guid_0000000007的节点将监视znode/app/leader_election/guid_0000000006。
  • 如果leader关闭,则其相应的znode/app/leader_electionN会被删除。
  • 下一个在线follower节点将通过监视器获得关于leader移除的通知。
  • 下一个在线follower节点将检查是否存在其他具有最小数字的znode。如果没有,那么它将承担leader的角色。否则,它找到的创建具有最小数字的znode的节点将作为leader。
  • 类似地,所有其他follower节点选举创建具有最小数字的znode的节点作为leader。

欺负算法

We start with 6 processes,
all directly connected to each other.
Process 6 is the leader,
as it has the highest number.

Process 6 fails.

Process 3 notices that Process 6 does not respond
So it starts an election, notifying those processes
with ids greater than 3.

Both Process 4 and Process 5 respond,
telling Process 3 that they’ll take over from here.

Process 4 sends election messages
to both Process 5 and Process 6.

Only Process 5 answers
and takes over the election.

Process 5 sends out only one election message
to Process 6.

When Process 6 does not respond
Process 5 declares itself the winner.