蚂蚁区块链BaaS开放在云端落地于实体

自 2018 年 6 月上线以来,蚂蚁区块链 BaaS 不断在技术上实现突破,形成自身独特的优势,并做为行业领军者在不同领域的几十个场景实现落地。在区块链的商用时代加速到来之际,通过开放自身的技术体系,与国内外各合作伙伴一起来构建一个更大的信任体系,赋能于全球实体经济,将是蚂蚁区块链接下来整体的战略路线。什么是蚂蚁区块链 BaaS蚂蚁区块链 BaaS(Blockchain as a Service)是基于蚂蚁金服联盟区块链技术和阿里云的开放式“区块链即服务”平台。它将区块链作为一种云服务输出,支撑了众多的业务场景和上链数据流量,是行业区块链解决方案的基础。蚂蚁区块链 BaaS 致力于搭建一个开放、协作的平台,为全球的企业和个人提供便捷的服务,为世界带来更多平等的机会。 为什么要建立 BaaS(而不是单一的区块链技术)基于云平台开放区块链技术,可以充分利用云计算本身的弹性、高可用性和灵活性。同时,又能充分发挥区块链本身的信任基础设施的能力,比如多方共识、不可篡改、可信。具体来讲,有三大优点: 1、客户可以根据实际需要来选择、定制适合的区块链服务; 2、客户可以快速地实现部署使用,从而节省了宝贵的时间; 3、结合以上两大优点,BaaS 可以使客户在业务和应用上的投入成本达到最小化,让解决方案在各行业中完成高效复制。这样,BaaS 就变成了区块链在各行业解决方案的基础设施,提供可靠、扎实的信任基础。 蚂蚁区块链 BaaS 的优势2019 年 4 月,由蚂蚁区块链团队运营的阿里云 BaaS 被顶级咨询公司 Gartner 评选为全球 6 大领先区块链技术云服务商之一。从平台能力来看,蚂蚁区块链 BaaS 具有五大优势: 1、高性能、高可靠。平台不仅具有高速并行共识能力,达到秒级交易确认,也具备高可靠和高容错性; 2、信任隐私保护。平台不仅在区块链层实现了非常高的隐私保护能力,在 BaaS 服务层也提供了对于企业身份、实人身份的认证的能力; 3、简单易用。平台极大地减少了客户的区块链投入成本,降低了使用门槛,使客户不需要了解区块链很深的细节,也能利用该技术的能力赋能业务; 4、跨网络。区块链有一个相对来说深入人心的特点——去中心化。蚂蚁区块链 BaaS 在跨网络、跨不同云的平台上,以及跨公有云和用户IT环境的场景下,提供了相应的支撑和自动化的部署能力; 5、云上的网络安全。平台充分利用了阿里云的云平台安全能力(如 VPC 网络)来保证区块链网络的安全。 蚂蚁区块链 BaaS 的核心功能在企业级的联盟链场景下,蚂蚁区块链 BaaS 的核心功能包括以下几个方面: 1、联盟链管理。联盟链的创建以及联盟组织的管理,是 BaaS 提供的一个基本能力; 2、身份认证。每一个参与联盟链的企业,都需要通过认证流程。平台会颁发证书来帮助客户认证自己在联盟链上的身份; 3、自动化部署。整个平台对于区块链采用自动化部署。这种方式可以非常迅速,低成本地部署区块链平台,让客户迅速地拥有自己的区块链; 4、区块链能力。蚂蚁区块链技术能力的输出目前主要在两个方面,一方面是存证平台,针对区块链的存证场景提供高性能、高可靠平台。另一方面是智能合约平台,提供可编程的智能合约运行环境; 5、业务配置。不同的场景,不同的业务,其业务数据和业务工作流都是完全不同的。在这方面,平台提供了业务视图,workflow业务订阅服务来帮助客户配置面向业务的应用; 6、开发支持。区块链对于各个场景的应用都需要创新,也需要技术上的开发。平台提供了完备的技术开发相关组件,帮助用户落地最佳实践,拓展更多场景。 蚂蚁区块链 BaaS 的技术架构下图是蚂蚁区块链的产品大图,其中 BaaS 的技术架构主要分为三层: 1、底层是 BaaS Core,基于对主机以及容器提供灵活支持的云资源管理平台,实现跨平台的便捷运行和部署。对于可信硬件,即基于阿里云的神龙服务器提供相应的硬件服务,可以提供一个高可靠、高隐私保护的可信执行环境。除了存证平台和智能合约平台以外,在同构链跨链服务的基础上即将推出异构链跨链服务。目前的市场上,单链或者一条链存在自身的局限性,未来对于建立信任的基础设施、互信的生态,跨链技术将成为其中非常重要的一环。目前 BaaS 平台已通过跨链服务,实现了内部的互联互通,同时也可以通过智能合约和跨链服务,对于外部的互联网上的可信数据源进行访问。此外,对于其他的基础能力,例如联盟管理、安全隐私、证书密钥管理等,BaaS Core 都有相应的功能和支撑。在提供自主研发的蚂蚁区块链体系同时,BaaS 平台也支持开源体系以更好地满足客户多样化的需求,包括企业以太坊 Quorum和Hyperledger Fabric。 ...

June 27, 2019 · 1 min · jiezi

成为区块链行业的产品经理是什么感觉

我曾经收到的关于成为产品经理的最好的建议是,“成为不在房间里的人的代言人”。 如果你正在与工程师交谈,那么你应该为用户代言。如果你在和销售和营销人员交谈,那么你应该为工程师等代言。 你是一个与所有人都有联系的人,一个可以看到整个产品全貌的人,一个可以为所有相关的人发表评论或关注点的人。 你必须了解环境,并知道每个参与产品工作的团队是如何相互互动的。这一原则有助于管理任何产品,尤其是使用新技术的产品,如变化速度巨大的区块链。 使用区块链技术确实为工作增加了一层复杂性,但它也增加了许多非常令人愉快的时刻。 这是我在工作之中发现的: 每天都有人给你惊喜我们从想和我们一起工作的人那里得到了源源不断的询问。区块链技术在过去两年里已经真正起飞,围绕着使用区块链的可能性有很多传言。 我和许多传统行业(比如葡萄酒、鞋子或汽车等)的远见者、创始人和高管交谈,我常常会对其中一些人对区块链的了解程度感到惊讶。在很短的时间内,人们开始了解这项新技术将如何影响他们的行业。 我们在面试许多候选人也是如此。他们中的一些人甚至不是来自软件行业,也没有有限的经验,但是他们对区块链非常了解。 人们对这个领域的兴趣有时仍然让我有点惊讶,回想到几年前很多人都不知道区块链这个领域。 了解全栈解决方案至关重要一些公司只只专注于区块链。但是我们提供了一个全栈解决方案,而区块链技术只是这个难题的一部分。 我们有一个前端,这是一个移动应用程序和一个网站。后端包括运行业务逻辑的 API 和中间件。后端运行在云服务上,现在我们已经将区块链添加到该系统中。 作为一名产品经理,你必须能够与每个领域的工程师进行有效的讨论。如果你在前端工作,你必须能够清楚地表达用户的要求和他们的痛点,因此UX设计师可以构建具有良好形式和功能的设计。你还必须与前端工程师交谈,以确保他们能够实施设计。 你需要能够为后端团队提供满足用户用例所需的业务逻辑描述。API 本身也是一个产品。产品经理必须清楚地阐述通过API公开哪些功能,以便第三方可以与系统集成。 基于区块链的产品他独特功能的需求应该得到足够清晰地定义,以便工程师可以决定功能是否必须在区块链(链上)或后端服务器(链外)上运行。我非常喜欢和我们才华横溢的工程师一起思考这些技术问题。 由于我们的产品是SaaS服务,因此它也有DevOps方面。我必须确保在添加新功能时我们能够继续提供可靠的服务。 你必须帮助用户了解他们真正需要什么在任何一个行业,产品经理的工作都是和用户交谈,了解用户的痛点。 很多时候,他们声称想要的并不是他们想要的。你必须理解他们试图满足的潜在需求,并提出解决方案。 与用户交谈有助于你了解他们试图实现的目标,以及实现目标的解决方案。我真的很享受这份工作。我发现与用户交谈,了解他们既是科学又是艺术的需求。用户往往很模糊,或者他们并不是真正了解他们正在寻找的是什么。我会帮助他们完善他们的愿景,然后用我们的产品来实现它。 但了解用户需求只是成功的一半。你还必须与工程师一起决定如何构建它。 人际交往能力很重要经常有人说,产品经理应该能够在没有任何正式授权的情况下进行影响。 工程,QA,销售或营销团队中没有人向我汇报。但是,我必须与他们合作,以确保按照规定的要求按时构建产品。这包括对进展情况进行澄清和跟踪。 由于指挥和控制不起作用,产品经理需要良好的人际交往能力来说服团队并产生内在动力。做到这一点的一个好方法是站在用户的角度换位思考并展示他/她的痛点。与用户和高管互动也是一个挑战。你必须在解决方案中传达明确的可交付成果、截止日期和警告 (如果有的话)。你在努力实现他们的愿景。你还从后面领导,确保团队成员在产品成功时获得信誉。 你是团队和用户之间的纽带创建一个产品并不像获得一些规格将其交给工程师那么简单。 您必须为工程师提供正确数量的信息和业务环境。他们需要知道他们在为什么、为什么以及谁构建产品——但不要让不必要的信息超载。 同样重要的是,产品经理在描述“如何”构建一个产品时,不要太死板。这是工程师的要求。 在我们公司,当团队构建产品时,我们会向客户展示模型和设计,以便尽快获得他们的反馈,以便根据需求改变产品的开发方向。我们越早向他们展示可用的软件,效果就越好。 这是因为区块链技术发展非常迅速,而且一直在发展有时候需求会突然发生变化,有些想法最终无法实现。产品经理的首要要求是不断学习,并在这个领域中不断成长。 区块链基础设施中的新创新,如新的扩展实现、共识算法、链上和链外交易、令牌经济、监管问题 —— 这些都必须在你的关注清单上。  你将永远有更多的事要做,还有更多的东西需要学习。这只是一个事实。但对于区块链领域的产品经理来说,这是最令人兴奋的地方。 原文链接:What It’s Really Like To Be A Product Manager In The Blockchain Industry

June 27, 2019 · 1 min · jiezi

中心化与去中心化BDEX或将终结交易所世纪之争

数字资产交易所领域一直有一个世纪之争---中心化,还是去中心化? 都说币圈一天,世间一年。币圈一个小小的举动,就有可能在你不经意之间掀起一番巨浪,或者直接迎来一个时代的变革。那么,去中心化跨链交易所BDEX的横空出世,圈内如何评判,看好还是看空?它是否会终结中心化与去中心化的世纪之争?我们从以下几个方面聊起: 一、去中心化---区块链技术的最大特征之一提到区块链,相信90%以上的人首先想到的就是去中心化这一关键词。区块链的本质就是一个去中心化的分布式账本或数据库,它依靠遍布全球的全节点运行,每个全节点上都有全部数据,地位对等。任意数量的全节点都可以保证系统的正常运行,并不存在一个或几个地位突出的中心节点。通过去中心化的结构形式,结合加密算法与共识机制,区块链可实在无需第三方机构参与的情况下完成点对点的可信交易。这是区块链技术的最大价值之一。 二、中心化交易所与区块链精神背离且弊端频出中心化交易所作为聚集币圈最大用户基数的平台,却大都是采用中心化服务器。但即便是诸如币安、OKEx、火币网等龙头交易所,仍无法避免中心化带来的各种弊端。币安遭黑客攻击比特币被盗事件让整个币圈为之一振,OKEx、火币网也频频传出数据造假等负面信息。中心化交易所集中式托管用户大量资产、内部交易不上链、甚至利用其掌控的一手数据操控币价……这些所有诟病都与区块链去中心化的精神相背离。 三、去中心化交易所提升用户资产安全属性除了文章开头提到的BDEX,各大交易所无论是迫于压力,还是大时代所趋,其实都在布局去中心化交易所。那么,去中心化交易所有什么优势呢?在去中心化交易所中,一方面,用户在区块链上的账户公钥即身份,无需再向交易所注册个人信息,因此不存在个人信息安全问题。另一方面,用户的资产托管于智能合约,一旦资金被纳入智能合约,那么只有拥有账户私钥的人才能接触该资金,只要用户保管好私钥而不被恶意第三方知晓,便能保证资金安全。当资金发生转移时,智能合约根据指令自动操作,无需人工审批。此外,在一般情况下,黑客若想盗取资金需攻破每个单独账户,这使得黑客的攻击成本和攻击难度骤升,账户安全性提升。与中心化交易所相比,去中心化交易所的安全性还是要高得多。 四、去中心化交易所发展仍存瓶颈目前,去中心化交易所发展依然频频受阻,原因在于其无法同时兼顾中心化的交易所技术门槛低、支持法币兑换、实现快速成交撮合等良好的用户体验。与之相反,用户需要具有一定的公私钥操作知识,若私钥丢失无法找回,可能会出现私钥不慎泄露而导致资金被盗风险。而这些瓶颈也不可避免地增加了看空去中心化交易所的人群数量。 综上所述,中心化交易所更符合传统用户使用习惯、操作便捷、交易高效,但资产与数据的集中式存储却存在很大的安全隐患。而去中心化在保障资产与信息安全的同时,又提升了很多用户教育成本,带来操作繁琐、使用门槛高、交易不够深度等其他弊端。BDEX,定位全球首个去中心化多协议跨链交易平台,力争在交易深度、速度、交易品种、流动性、透明度、操作易用性等方面达到中心化交易所的体验感,并且通过跨交易所实时清结机制,实现传统交易所之间进行去中心化交易深度共享。可见,BDEX兼容了中心化与去中心化的所有优势,中心化交易所与去中心化交易所这一世纪之争或许将止步于此,数字资产交易所也将迎来新的洗牌!

June 26, 2019 · 1 min · jiezi

百度超级链学院开课啦第一讲教你如何快速建链

百度超级链Xuperchain开源之后,我们感受到了开发者伙伴们的热情关注,其中有不少朋友提到希望进一步了解百度超级链网络的搭建方法。 今天,百度超级链小X姐姐和百度资深研发工程师静姐姐,为大家带来“百度超级链学院系列视频课程——如何快速部署超级链”。 视频课程共分为三讲第一讲:如何快速建链;第二讲:TDPOS共识机制;第三讲:智能合约的开发。 以下为第一讲:如何快速建链,欢迎大家观看(登录视频网站后请选择“高清”) https://v.qq.com/x/page/n0885... 如果你对我们的视频教程有任何问题或者想进一步了解的,都欢迎加入超级链开发者社群。加群方式:添加百度·超级链小助手微信(微信号:image-baidu),申请验证口令:技术论坛进群

June 26, 2019 · 1 min · jiezi

理解CKB的Cell模型

在设计 CKB 的时候,我们想要解决三个方面的问题: 状态爆炸引起的公地悲剧及去中心化的丧失;计算和验证耦合在了一起使得无论是计算还是验证都失去了灵活性,难以扩展;交易与价值存储这两个目标的内在矛盾,Layer 2 和跨链的出现将放大这种矛盾,并对 Layer 1 的经济产生非常负面的影响。 对这些问题没有答案,Layer 1 就无法长久运行,区块链给我们的种种承诺自然也是无从谈起。这三个问题根植于区块链架构和协议设计的最深处,很难通过打补丁的方式来解决,我们必须从最基本的数据结构开始,重新审视问题的根源,寻找更合适的地基。 幸运的是,这个更合适的地基简单得令人感到幸福,而且一直就摆在我们眼前。(本文会包含一些非常简单的代码,应该不会影响非技术读者阅读……) 从 Bitcoin 中我们学到了什么Bitcoin 把整个账本分割保存在了一个个 UTXO 里面,UTXO 是未花费交易输出(Unspent Transaction Output)的简写,实际上是交易中包含的输出(CTxOut)。CTxOut 的结构非常简单,只有两个字段: class CTxOut{public: CAmount nValue; CScript scriptPubKey;...}每一个 CTxOut 代表了一个面值不同的硬币(Yay bit-“Coin”),其中 nValue代表这个硬币的面值是多少,scriptPubKey 是一段表示这个硬币所有者是谁的脚本(通常包含了所有者的公钥),只有能提供正确参数使这个脚本运行成功的人才能把这个硬币「转让」给另外一个人。 为什么要给「转让」打引号?因为在转让的时候,并不是简单地把硬币中的 scriptPubKey 修改或是替换掉,而是会销毁和创造新的硬币(毕竟在数字的世界中销毁和创造虚拟硬币的成本很低)。每一个 Bitcoin 交易,都会销毁一批硬币,同时又创造一批硬币,新创造的硬币会有新的面值和新的所有者,但是被销毁的总面值总是大于等于新创造的总面值,以保证没有人可以随意增发。交易表示的是账本状态的变化。 这样一个模型的特点是: 硬币(资产)是第一性的;所有者是硬币的属性,每一枚硬币有且仅有一个所有者;硬币不断的被销毁和创建。 是不是很简单?如果你觉得自己已经理解了 Bitcoin 和 UTXO ,恭喜你,你也已经理解了CKB 和 Cell! CellLayer 1 的关注点在状态,以 Layer 1 为设计目标的 CKB 设计的关注点很自然就是状态。Ethereum 将交易历史和状态历史分为两个维度,区块和交易表达的是触发状态迁移的事件而不是状态本身,而 Bitcoin 协议中的交易和状态融合成了一个维度,交易即状态,状态即交易,正是一个以状态为核心的架构。 同时,CKB 想要验证和长久保存的状态,不仅仅是简单的数字(nValue),而是任何人认为有价值的、经过共识的数据。显然 Bitcoin 的交易输出结构满足不了这个需求,但是它已经给了我们足够的启发:只需要将 nValue 一般化,把它从一个存放整数的空间变成一个可以存放任意数据的空间,我们就得到了一个更加一般化的「CTxOut」,或者叫 Cell: ...

June 26, 2019 · 3 min · jiezi

Dont-Trust-Verify

这篇文章试图讨论全节点对于区块链的意义。 角色我们都知道,区块链网络中的节点有不同的角色。例如: 出块节点出块节点负责打包交易,生产区块。出块节点在不同的地方有不同的名字,例如比特币和以太坊中的矿工/矿池,Bitshares的Delegator,EOS的Producer, Cardarno的Stakeholder,Tendermint和Casper中的Validator,以及CITA中的共识节点等等。 在这些网络中,出块节点的角色往往与全节点角色重合。最接近纯粹出块节点的例子应该是使用getblocktemplate协议参与挖矿的比特币矿机,他们不验证区块,但是拥有选择交易打包和封装完整区块的权力。 出块节点相对于其他节点往往需要付出更多的资源,包括算力(无论是用于PoW还是用于交易计算),磁盘,网络带宽等等。这些资源要求抬高了出块节点的门槛,容易造成出块节点分布的中心化。 全节点区块链中的区块由两个部分组成,区块头和区块体。区块头中存放包括区块见证(例如工作量证明或是投票)在内的元数据,区块体中包含交易数据。区块的验证由此也可以分为两部分,对区块头的验证和对区块体的验证。对区块头的验证主要是出块权的检查,例如区块头中包含的工作量证明是否有效;对区块体的验证主要是对交易有效性的检查,确保区块体中每一笔交易都是有效的。 全节点同步交易和区块,对其进行验证,并转发有效的交易和区块。为了能够进行验证,全节点必须有完整的当前世界状态(例如UTXO集合)。由于全节点自行进行所有的验证,因此不需要信任其他第三方。 通常情况下,出块节点构造新区块时需要引用前一个有效区块,为了确认父块的有效性必须对其进行验证。此时出块节点也做了全节点的事情,也是一种全节点。这种角色上的重合不是必然的,不影响后面的讨论。 轻节点轻节点与全节点不同:轻节点只同步和验证区块头,不会同步和验证区块体以及其中的交易。因此,轻节点只能验证区块头的有效性,无法验证该区块头对应的区块体中交易的有效性,只能相信构造这个区块的出块节点没有打包无效的交易,并且相信将这个看起来合理的区块头发送给自己的全节点对其进行了完整的检查。轻节点是信任其它节点的节点。由于不同步交易,轻节点也无法得知交易处理之后的世界状态,自然也无法验证交易双花或是世界状态的变更。轻节点的验证能力大大弱于全节点。 相信其它节点的好处是,轻节点的开销很小:区块头的体积只占区块的很小一部分,很容易同步和存储。因此轻节点可以运行在笔记本甚至手机等各种有限硬件环境中。 关系这几种角色之间的关系是一个非常有意思的问题,也是我和朋友们常常会讨论的一个话题。在这样的讨论中,如果你拿出一支笔,请在场的任意一位朋友在白板上画出他心目中的这三种节点组成的区块链网络拓扑,大概率会得到类似这样的图: 图1. 朋友心中的节点拓扑A12856753-e57be4f7b1204b84.jpg1240×960 44 KB图2. 朋友心中的节点拓扑B12856753-90c0b692bf524eaf.jpg1240×960 46.5 KB在图1中,出块节点在最中心的位置,全节点围绕出块节点形成网络,轻节点连接在全节点上;在图2中,出块节点和全节点混合组成分布式网络位于中心,轻节点连接在全节点或者出块节点上。哪一副图更接近真实情况呢? 谁是守护者人们通常认为出块节点是守护者(Keeper)一个区块链网络的守护者,这样的观点不无道理。毕竟是出块节点验证交易,生产新的区块,为用户提供服务,这也是为什么人们会把出块节点/矿工画在网络拓扑的中心。看上去,他们已经拥有了定义区块链的权力。然而,如果我们将注意力再下降一层,从P2P网络的观点来看,结果却不是这样。 一般的P2P网络,例如BitTorrent或是Kad Network,目的在于更快的分享数据,这些网络中的节点并不关心自己转发的数据包包含的是什么样的数据。这些节点不需要理解数据,只需要转发数据,帮助数据从网络中的一点流动到另外一个点。它们只是数据的搬运工。 区块链的P2P网络则不仅仅是数据的搬运工,还是数据的验证者。P2P网络由全节点构成,全节点在接收到新的交易或者新的区块时,首先做的事情是验证。这里的验证不仅仅是验证数据本身的完整性(Integrity),还要验证数据在业务逻辑中的有效性,例如这笔交易是否和账本中已经有的交易冲突(双花),或者这个新区块是否包含了无效的交易。验证交易是否双花是业务层(账本)的逻辑,不是网络层的逻辑。在区块链的P2P网络中,节点不仅仅要转发数据,还需要理解数据。数据转发在区块链节点中是一个提升到业务层的概念,而不只是一个网络层的概念。 这种设计所导致的结果就是,全节点组成的网络形成了一道“防火墙”,有效阻止了无效交易和区块的传播。出块节点如果产生一个包含无效交易的区块,这个区块只能够传播到与其相邻的全节点,无法穿透这些相邻节点形成的防火墙传播到更远的地方,无法进入全节点网络维护的区块链主分叉,无效交易也就无法被依赖全节点的轻节点或是钱包接受。 因此,出块节点只是新的区块的提议者,并不能让全节点网络接受无效的区块或是交易。挖出一个新的区块并不是共识的结束,而是共识的开始。如果套用Paxos共识里面的词汇,出块节点是Proposer,全节点是Acceptor。出块节点持续打包交易,提交新的区块,全节点验证新的区块提案,保证新区块和其中交易的正确性。从这个角度看,作为验证者的全节点更应该被称作守护者(Keeper)。 按照这样的理解,我们可以画出这样一个图: 在图3中,全节点网络位于中心,形成一个相互验证的去中心化网络,一道安全屏障。轻节点连接这个网络中的全节点,使用全节点提供的服务。轻节点之间也可以形成自己的网络,但需要注意的是,轻节点网络没有验证功能,转发在这里更多的是网络层的概念。轻节点网络和全节点网络是不同的网络。出块节点连接全节点提交新的区块,出块节点之间也可以形成自己的网络,以更好的提供服务,例如比特币的FIBRE就是一个矿池之间的专用网络。 全节点网络对区块链的安全至关重要。全节点数量越多,网络越可靠,加密经济的基础越稳固。全节点的运行成本和长期数量这两个指标在未来的区块链价值评估中应该会扮演越来越重要的作用。区块链发展面临的一个关键问题是,如何激励全节点?这个问题看上去简单,实际上会触及一些非常深层次的(也许是不可调和的)矛盾,例如data availability problem,这里就不展开说了,以后有时间再写文章讨论。 案例分析当我们理解了全节点的重要性,在脑海中建立了正确的网络拓扑后,就可以用这个框架来分析实际的问题了。这里举两个例子。 FIBREFIBRE是比特币快速网络中继引擎(Fast Internet Bitcoin Relay Engine)的缩写,是一个专门给矿工提供服务的区块传输网络。FIBRE在全球不同的位置部署了6个节点,相互之间通过高速网络连接,使用UDP+ForwardErrorCorrection传送数据,几乎实现了无延迟的传输。在FIBRE注册过的矿工可以连接到离自己最近的FIBRE节点,以最短的时间获得新的区块数据。FIBRE和比特币P2P网络传输协议的一系列优化使得比特币的新区块几乎可以在瞬间被全世界的矿工接收,非常有效的降低了孤块率,保证了网络安全。 FIBRE是由Matt Corallo维护的一个需要注册使用的网络,因此是一个中心化管理的系统。这也是FIBRE常为人所诟病的地方。但是如果我们按照图3的拓扑来分析,就会发现FIBRE的中心化对比特币网络并没有负面影响:无论矿工是用中心化还是去中心化的网络加速新区块的传播,这个行为都不会影响全节点对新区块的验证。FIBRE也不是整个网络的单点,如果FIBRE崩溃或者作恶,矿工随时可以切换回比特币自己的P2P网络。 思考题:同样的出块节点间专用加速网络,如果用于提升网络吞吐量解决scalability问题,上述结论依然成立吗? EOSEOS的目标是百万级的TPS,为了实现这个目标,EOS使用投票的方式由全网选出21个出块节点(以及一定数量的候选节点),并要求出块节点使用最好的硬件来支撑高性能。EOS是否真的实现了百万级TPS并不重要,重要的是,通过这种方式来提升性能不仅仅要求出块节点付出不菲的成本,也要求全节点付出同样的成本。然而与出块节点不同,EOS网络中的全节点并没有得到网络的补贴,因此用户很难有足够的动力真的去支付几乎与出块节点相同的成本去运行一个全节点。在这种情况下,网络最终会演化成一个没有全节点的结构: ByteMaster对21个节点合理性的论证是,比特币的算力也是集中在<10个矿池手中,21个节点其实比10个矿池更加去中心化。我们通过比较网络拓扑应该容易看出,这个辩护并不成立,因为两者的网络结构有很大区别,无法这样直接比较。在EOS网络中,由于去中心化全节点网络的缺失,出块节点缺乏监督,用户只能完全相信出块节点不会作恶。出块和验证的工作最终都集中到出块节点的角色上,出块节点既是运动员,又是裁判。而在比特币的网络中,大量的全节点承担了裁判的角色,矿池仅仅是运动员。用户可以相信大量的全节点,不需要相信矿池。 需要指出的是,这个问题实际上不仅仅是EOS的问题,也是其他要在Layer 1扩容的项目会遇到的问题。 对CKB的启示出块节点,全节点,轻节点形成了一个动态的网络,网络中的各类角色都可以自由进出(额,出块节点实际上在很多区块链中无法自由进出,这个也不展开了,以后有时间再写文章讨论…),这些角色形成的拓扑结构(例如节点比例、谁和谁连接等等等等)决定了网络的性质,包括性能、安全、中心化程度等各个方面。不同的设计可能会导致网络最终形成不同的结构,而这个最终结构所展现的性质有可能和设计初衷是相违背的。 全节点为了能够不信任任何第三方,选择自行验证所有交易历史。这种做法使全节点不仅仅满足了自己的需求,也为网络安全贡献了力量,体现出一种正外部性。区块链需要这种安全保证,因此全节点对于一个去中心化的网络至关重要。如何内部化这种正外部性是一个需要重视的课题,在这个课题还没有解决的情况下,我们能做的只能是保证全节点可以运行在一个较低的成本,以促进网络保有尽可能多的全节点。 对于希望成为未来加密经济的基础设施的Nervos CKB来说,必须在设计之初就把这些因素考虑在内,以理想中的网络结构为目标,并通过经济激励和其他机制设计来实现。这并不是一件容易的事情,还需要大量的研究和探索。

June 26, 2019 · 1 min · jiezi

Mixin-Network是自由主义思想在数字货币POS方向上的伟大实践

从比特币的运行历史和市场价对比特币安全性的影响出发分析Mixin Network比特币的运行历史和市场价对于比特币的安全性有哪些影响?1. 比特币价格越高,通过比特币可以1小时安全转移的资产总值就越高因为价格越高,矿工收益越高,试图双花这笔交易,或者阻止这笔交易需要花费的金钱就越高。目前对比特币进行持续1小时51%攻击的最低成本是95万美金。因此可以认定,单笔转账低于95万美金的比特币交易在1个小时之后都可以认定安全的,考虑到市场上可以花钱随时购买的算力其实并不多,1小时内安全转账的底线可以继续提高很多倍(币安丢7000个币都找不回来)。 2. 比特币正常运行历史越长,其账本修改难度越高因为已经不仅仅是要购买天量算力来改账本,而是要获得所有全节点的共识来修改一个早期交易,这在现在是非常难,因为大量的利益相关者都在监视比特币网络的分叉情况,试图修改账本,必然导致被发现,一旦全节点进行代码升级,那么就会出现分叉,那么花费的算力很容易完全浪费。 3. 比特币正常运行历史越长,会吸引更多的人用比特币记账因此要购买比特币,会导致需求上升,而比特币总量有限,因此必然导致总市值提高。 4. 根据3,由于价格提升,因此可以循环到1。分析Mixin Network我们使用同样的思路来分析Mixin Network。之所以分析Mixin Network,是因为Mixin Network的节点组织是遵循纯粹的自由主义,基于市场经济原则组建:有10000个xin token就能成为节点,这与比特币是一样的。 不分析EOS或者cosmos是因为他们使用了投票这一社会活动方法来搭建节点,而这和比特币所开创的自由主义道路完全背道而驰。 1. XIN token价格越高,阻止 Mixin Network 记账的成本越高根据拜占庭问题可知,阻止网络形成共识需要f+1个节点,因此需要购买f+1个节点的token,现在网络有25个主节点,需要9个节点才能阻止Mixin Network进行记账,因此需要90000 个token,市场价格2400万美金,而如果Mixin Network被攻击导致记账被暂停,那么持有的xin token价格会暴跌,因此进行攻击获得的收益必须远大于2400万美金才可以。 考虑一下修改账本,同样根据拜占庭问题,需要2f+1个节点才能形成共识记录账本,25个主节点的情况下需要17000个xin token,价值4500万美金。因此修改账本的收益必须远大于4500万美金收益才值得做。 2. Mixin Network主网正常运行的时间越长,修改账本难度越高一旦尝试修改账本,节点可以选择分叉,因此攻击的成本很容易归0。 3. Mixin Network正常运行历史越长,会吸引更多的人用Mixin Network记账因此会导致 系统调用增多,因此导致XIN TOKEN消耗增多,而XIN token总量有限,因此必然导致总市值提高。 4. 根据3, 由于价格提高,因此可以循环到1结论Mixin Network主网上线不到1年,没法和比特币相提并论。但是我们回顾历史就可以知道比特币就是从一文不值开始的,最初非常脆弱,攻击成本极低,但是因为比特币可靠,自由市场会机会发现可靠的东西,比特币承载的资本会慢慢增加,攻击成本就慢慢提高,当力量发现攻击比特币的成本成本高到不合算的时候就会加入比特币。 因此我们完全可以用同样的逻辑来看待Mixin Network,只要他和比特币一样可靠,就可以从脆弱走向强壮,所有早期信任Mixin Network的人,都会得到巨大的回报。 参考资料比特币的超能力 On Stake and Consensus Mixin Network 走向奴役之路 Bitcoin

June 26, 2019 · 1 min · jiezi

FISCO-BCOS-WorkShop-区块链开发特训营开课啦

FISCOBCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造。开源工作组成员包括博彦科技、华为、深证通、神州数码、四方精创、腾讯、微众银行、亦笔科技和越秀金科等金链盟成员机构。代码仓库:https://github.com/FISCO-BCOS 想不想参加这样一个免费的区块链开发特训营? 想不想在区块链黑客马拉松开始之前,对大赛进行一次全方位的摸底? ↓↓↓ 6月29日下午 来深圳湾科技生态园SUGAR cafe就对了! 有理论、有实战、有人脉、有趣味、有精美茶歇、有萌新公仔…… 本次开发特训营,面向所有开发者。无论你是对区块链技术感兴趣的入门选手,还是区块链领域的技术达人,只要你有志于提高区块链技术,或想在区块链黑客马拉松上与极客们酣战36小时,那就带上电脑,来现场参加特训吧! 活动贴士1/提前阅读技术文档、下载代码仓库 Github代码仓库https://github.com/FISCO-BCOS/FISCO-BCOS技术文档https://fisco-bcos-documentat... 2/获取公众号【FISCO BCOS开源社区】资料 留意公众号信息,获取详细开发教程、提pr/issue指南等实用信息。 我们鼓励机构成员、开发者等社区伙伴参与开源共建事业,有你在一起,会更了不起。多样参与方式: 1 进入微信社群,随时随地与圈内最活跃、最顶尖的团队畅聊技术话题(进群请添加小助手微信,微信ID:fiscobcosfan);2 订阅我们的公众号:“FISCO BCOS开源社区”,我们为你准备了开发资料库、最新FISCO BCOS动态、活动、大赛等信息; 3 来Meetup与开发团队面对面交流,FISCOBCOS正在全国举办巡回Meetup,深圳、北京、上海、成都……欢迎您公众号在菜单栏【找活动】中找到附近的Meetup,前往结识技术大咖,畅聊硬核技术; 4 参与代码贡献,您可以在Github提交Issue进行问题交流,欢迎向FISCO BCOS提交PullRequest,包括但不限于文档修改、修复发现的bug、提交新的功能特性。 代码贡献指引: https://github.com/FISCO-BCOS...

June 25, 2019 · 1 min · jiezi

36小时极客嘉年华FISCO-BCOS黑客马拉松报名启动

FISCOBCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造。开源工作组成员包括博彦科技、华为、深证通、神州数码、四方精创、腾讯、微众银行、亦笔科技和越秀金科等金链盟成员机构。代码仓库:https://github.com/FISCO-BCOS FISCO BCOS的开发朋友们,属于你们的竞技场来啦! 7月19日至7月21日,北京朝阳规划艺术馆,一场为期36小时的极客嘉年华——“第四次工业革命”黑客马拉松将在这里热辣上演! 大赛由全球极客组织DoraHacks主办,FISCO BCOS开源工作组成员单位——微众银行,作为联合主办方入驻区块链分赛场,围绕FISCO BCOS区块链底层技术制定赛题。 大赛面向所有开发者,无论你是零基础的入门级小白,还是研究多时的社区资深开发者,都能在赛场中找到自己的兴趣点和力所能及的任务。 大赛报名通道已经全面启动,以下是区块链分赛场的详细介绍: 大赛日程报名截止时间7月10日 参赛选手名单公示7月12日 36小时决战进行时7月19日~7月21日 报名指引 赛题设置区块链分赛场的赛题设置尽展开源社区“Open”理念,依要求,参赛作品需围绕FISCO BCOS区块链技术实现,符合国家对区块链应用的规定,去token化,剩下的,完全交给极客们天马行空的脑洞。 这里,我们提供一些赛题方向供参赛极客参考: 1/FISCO BCOS开源项目优化:新特性挖掘;改进既有代码结构和效率;找bug修bug;提供易用的功能插件、实用工具(比如多语言SDK、业务合约模板、数据管理、链治理工具、性能分析优化工具等 )。 代码库地址:https://github.com/FISCO-BCOS... 包含FISCO BCOS,控制台(console),SDK(web3sdk, nodejs-SDK)等不同的工具、组件仓库。 2/基于FISCO BCOS 底层,有趣、有创意、有用、有技术挑战的Dapp应用。 参赛福利 赛前辅导计划为帮助开发者更快速了解FISCO BCOS,社区将在赛前举办两期线上社群辅导、两期线下面对面实操特训,活动具体时间和地点请留意本公众号消息。 同时,赛事邀请两位区块链资深专家作为赛题专家,他们将为参赛极客提供全程技术支持与辅导: 资源帮助提前下载并熟悉代码https://github.com/FISCO-BCOS... 阅读技术文档https://fisco-bcos-documentat... 获取公众号资料留意本公众号相关通知,获取赛道参赛指南、FAQ、系列开发教程(图文/视频)、提pr/issue指南等资料 进群获得牛人指导我们长期开放FISCO BCOS技术交流群为开发者提供帮助,你可以在群内获得以下人员的帮助: 我们鼓励机构成员、开发者等社区伙伴参与开源共建事业,有你在一起,会更了不起。多样参与方式: 1 进入微信社群,随时随地与圈内最活跃、最顶尖的团队畅聊技术话题(进群请添加小助手微信,微信ID:fiscobcosfan);2 订阅我们的公众号:“FISCO BCOS开源社区”,我们为你准备了开发资料库、最新FISCO BCOS动态、活动、大赛等信息; 3 来Meetup与开发团队面对面交流,FISCOBCOS正在全国举办巡回Meetup,深圳、北京、上海、成都……欢迎您公众号在菜单栏【找活动】中找到附近的Meetup,前往结识技术大咖,畅聊硬核技术; 4 参与代码贡献,您可以在Github提交Issue进行问题交流,欢迎向FISCO BCOS提交PullRequest,包括但不限于文档修改、修复发现的bug、提交新的功能特性。 代码贡献指引:https://github.com/FISCO-BCOS... 本文首发于公众号【FISCO BCOS开源社区】,如转载请注明出处,原创不易,谢谢珍惜

June 24, 2019 · 1 min · jiezi

智能合约入门new

什么是智能合约一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。一个合约由一组代码(合约的函数)和数据(合约的状态)组成,并且运行在以太坊虚拟机上.以太坊虚拟机(EVM)使用了256比特长度的机器码,是一种基于堆栈的虚拟机,用于执行以太坊智能合约 。由于EVM是针对以太坊体系设计的,因此使用了以太坊账户模型(Account Model)进行价值传输。 合约的代码具有什么能力: 读取交易数据。读取或写入合约自己的存储空间。读取环境变量(块高,哈希值,gas)向另一个合约发送一个“内部交易”。在区块链平台的架构 区块链平台的架构 1. 什么是soliditySolidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。 solidity 语言特点 它的语法接近于Javascript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约,它有很多的不同点: 异常机制,类似于事务的原子性。一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行存储是使用网络上的区块链,数据的每一个状态都可以永久存储。2. 开发的工具在线编译器RemixVisual Studio Code + soliidty 插件3 快速入门准备工作:搭建区块链一键部署区块链平台 3.1 举个例子代码 pragma solidity ^0.4.2; contract SimpleStartDemo { int256 storedData; event AddMsg(address indexed sender, bytes32 msg); modifier only_with_at_least(int x) { if (x >= 5) { x = x+10; _; } } function SimpleStartDemo() { storedData = 2; } function setData(int256 x) public only_with_at_least(x){ storedData = x; AddMsg(msg.sender, "[in the set() method]"); } function getData() constant public returns (int256 _ret) { AddMsg(msg.sender, "[in the get() method]"); return _ret = storedData; } }引入概念:address:以太坊地址的长度,大小20个字节,160位,所以可以用一个uint160编码。地址是所有合约的基础,所有的合约都会继承地址对象,也可以随时将一个地址串,得到对应的代码进行调用。合约的地址是基于账号随机数和交易数据的哈希计算出来的ABI:是以太坊的一种合约间调用时或消息发送时的一个消息格式。就是定义操作函数签名,参数编码,返回结果编码等。交易:以太坊中“交易”是指存储从外部账户发出的消息的签名数据包。简单理解是:只要对区块链进行写操作,一定会发生交易。交易回执:发生交易后的返回值合约文件结构简介版本声明pragma solidity ^0.4.10; ...

June 23, 2019 · 4 min · jiezi

一组数据了解测试网挖矿进程

6 月 15 日,第一期测试网挖矿大赛如期进行。近 6 天,比赛情况如下: 从大赛网站上可以看到有超过 9 个国家的伙伴们关注到了此次比赛,网站总浏览量近万。 从 CKB 浏览器上可以看到相应的块高、算力及平均出块时间等基本信息。 截止 6 月 20 日 17:30 左右的数据情况 截止6 月 20 日 17:30 左右的难度曲线图(感谢史迪仔提供) 6 月 17 日 22:00 至 6 月 20 日 10:00 的算力曲线图从社区伙伴知县制作的矿工排行榜 (http://ckb.yamen.co/ 1)可以看到目前的参赛地址总数和矿工排行榜。 截止 6 月 21 日 16:00 的矿工排行榜社区伙伴们为此次挖矿大赛做了很多令大家意想不到的惊喜: 从经济模型提案发布到测试网上线再到挖矿大赛,一直奔赴在社区一线的小可爱史迪仔,国内矿工群的小天使,论坛和微信群到处有他的身影。 知县、shooter 等人在挖矿大赛开始的尽可能短的时间内,为大家整理了最新的一键挖矿教程 ,透过 AustinFly 的实操介绍,使得更多人参与尝试。shooter 用 golang 做了个生成钱包的小工具(支持 win 平台),版本已更新至 v0.03.3。知县深夜为大家做了矿工排行榜 ,更直观地为吃瓜群众服务。 在挖矿大赛开始的第二天,志伟看到微信群有人反馈程序对开多线程支持不是很友好,于是魔改挖矿程序,实测 gps 性能提升 30%。 ...

June 21, 2019 · 1 min · jiezi

社区奖励第二发NCMax-共识协议提案活动细则

6 月 19 日,Nervos Network 的 RFC 专区悄悄上线了共识协议提案,这份 RFC 提案由 Nervos 研究员张韧提交,暂命名为 NC-Max。 NC-Max 在比特币的 Nakamoto Consensus 的基础上,主要有三大创新: 1.通过两步交易确认,降低孤块率;2.动态区块间隔和出块奖励,有效利用带宽;3.在难度调整周期考虑所有的区块来防止自私挖矿。 这次的 RFC 来的又快又急,而且目前只有英文的版本。我们希望透过社区的力量,一起将这一份提案翻译成各种语言的版本,并且和社区一起讨论与分享知识。 同时,我们为本次活动设置了 丰厚的奖励 ,你将有机会得到各种 Nervos 周边以及 Token 奖励,希望这次活动,可以让大家更深入的了解 NC-Max 的协议内容。 活动一:完善提案计划 我们的共识协议提案,目前仍然是英文的版本,需要更多小伙伴们一起翻译成更多语言的版本,让更多的人可以了解这份提案!我们欢迎大家在 GitHub 上提出针对这份提案的支持。 参与方式: 通过 GitHub 参与协作: 提交翻译,或针对已经翻译的部分提交更好的表述针对提案中的任何内容或知识点,用插图的形式表达你的看法奖励方式: 我们将选取共 10 名优秀贡献者,赠予每位「 秘猿木制猿猴一只以及 10000 CKB 」。 活动时间: 2019.6.21—2019.7.31 活动二:Let’s Talk 计划 我们邀请小伙伴们一起到 Nervos Talk 论坛参与讨论这份提案,你可以在这里发表你对 NC-Max 的任何想法,哪怕只是一句吐槽,或是一个困惑,这些内容我们会非常欢迎。 奖励方式: 我们将选出 10 位优秀观点的贡献者,每位赠送「 Nervos 最新版 T-Shirt 以及 10000 CKB 」。 ...

June 21, 2019 · 1 min · jiezi

免费开源的数字货币收款插件

虽然区块链蓬勃发展,但是程序员要在网站上支持数字货币收款依然非常困难。无论是比特币,还是eos都需要安装全节点软件才能比较稳定的做到查询收款服务。然而目前的区块链全节点都耗费大量硬盘空间和系统资源,仅仅为了为了数字货币收款进行投入是不划算的。 这里介绍一个收款插件。 优点:无需依赖外部库,因为是go语言编写的。无需外部数据库,默认数据库使用sqlite3,熟练工可以自己修改支持mysql和postgre。开发者使用http请求就可以创建支付通道,查询支付状态。收到支付有推送,方便编写业务代码。无需安装复杂的比特币全节点,以太坊全节点,eos全节点就可以收款。体积小巧前期准备一 Mixin Messenger账户中国大陆iOS和安卓用户前往该地址下载App并注册账户。 大陆以外地区Apple ID和Google Play用户请前往 地址下载app并注册账户。 成为开发者并且创建app访问开发者中心,点击右上角图标,用Mixin Messenger app的照相机扫描屏幕上的二维码,然后开始创建 App。 创建App流程可以参考这个教程 Clone 代码git clone https://github.com/myrual/mixin-network-snapshot-golangcd mixin-network-snapshot-golang修改参数在mixin_snap.go里面找到如下代码片段 const ( userid = "3c5fd587-5ac3-4fb6-b294-423ba3473f7d" sessionid = "42848ded-0ffd-45eb-9b46-094d5542ee01" private_key = `-----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQDACTrT4uaB9el9qe0MUOsFrm8kpaDI9PowauMB1Ha25mpfL+5hMFqISLS5z2P89nAsXBg+KyQ2gAVA6rBwW/ZqOc1PKiJhhLBS80nzo3ayfv7OlzNGIxMyqD5izCCtPixnqpuTePoPWq4CNZlxop0VYklsWEfU0U0qqMBgmtqYfQIDAQABAoGAR8crZed5oTn5fC73m5LjRcxdXqVJ49MtcMuC7jwr41FckRepUkpwjGAgrRMHnJXAd9Q0e4hEkNppHEqciGLXR1dQfZnaM1Gnv7mD3oSgHaH+4qAMnNOCpvwW4Eu3yp9b1UGj9SvM3D2BrpA+MGf0E/yEJzpRcT956W6SPYYSegECQQDm4uTK+teoxr1ZagJZuCta+IhMzpxIWMob+JN/Huf7OnRcIa9JpXngg4tHOUWmZCDQdqeJMpaQc8SQ44hba015AkEA1OyJswNIhdmvVp5P1zgREVVRK6JloYwmAtj+Qo4pWJ117LqH4w+b491r4AeLEGh8VrZ4k6Hp+Cm783S2jTAWJQJARbWdlHdV45xVkQiDuyjy1h2RsXb0EpfUNcvAZLIlImIMvcBh1x+CA7pTs+Zj1BAJJEee37qJYQXDBGfeRJPKKQJAVG+cx42Ew/eoTZwoIzvLoOkJcFlNHjwaksSER9ZiVQ7URdVOr99vvXQAJG45Wn9k12oy9LCfvNan/wqIngK0tQJBAL1Wc02seEbMeWyt5jycJEhn6G8F18s9S1v0GXb4U/7/6Y87P3TmDLcEuCXkrbZQaCX7jVLu0BkDw8To58TWjh0= -----END RSA PRIVATE KEY-----` ADMIN_MessengerID = ""//this is your mixin messenger id, you can find your id in contact page.)将app创建过程中的那些参数替换到这里。 ADMIN_MessengerID是你的Mixin Messenger ID,你可以在Mixin Messenger里面的联系人页面看到。 编译go build mixin_snap.go运行./mixin_snap实际上由于是基于go语言编写的,你可以在一台linux 机器上编译,然后把执行文件传输到实际工作的服务器上运行。 如何创建一个eos和xlm的充值地址生成一个独一无二的字符串作为支付id,然后设定一个收到支付的时候回掉URL。 curl -d '{"reqid":"value8", "callback":":9090/"}' -H "Content-Type: application/json" 127.0.0.1:8080/payment这个curl指令起到的效果是: 将value8作为支付id传给支付插件,同时要求这个支付id收到支付的时候,程序要访问 本机的9090端口的根URL。 ...

June 20, 2019 · 1 min · jiezi

区块链大纲资源汇总

区块链进化史软件好,才是真的好:区块链的1976—2017 区块链基础概念漫画:什么是区块链?48个区块链专业术语名词解释。 比特币比特币白皮书英文原版比特币是什么 以太坊以太坊白皮书关于以太坊各种网站 共识机制深度长文:区块链共识机制 智能合约去中心化的核心——智能合约是什么? 币分叉解读什么是比特币分叉? 公有链、私有链、联盟链、跨链、侧链什么是公有链、私有链、联盟链、跨链、侧链? 区块链原理篇区块链记账原理 区块链进化史区块链技术指南 区块链应用篇数字货币一、数字货币概念 交易所各大数字货币交易所对比 游戏波场TRON小课堂|第六十四课:一文理清区块链游戏发展史 社交社交应用新趋势:区块链社交系统 基于区块链技术的6大社交网络介绍 存储区块链分布式存储的优势

June 20, 2019 · 1 min · jiezi

Libra-的天秤和-Firstclass-Asset

6 月 18 日,Facebook 加密货币项目 Libra 发布的白皮书引起了区块链业内人士的广泛关注。Nervos 团队及社区伙伴们也对 Libra 进行了大量的讨论。 Nervos 合伙人王博认为: 所有讨论 Libra 是不是一个好货币,算不算货币以及 Facebook 搞的联盟链是不是真区块链的讨论都搞错了重点。Libra 白皮书第一句写得非常清晰「...为十亿人服务的金融基础设施。」货币只是金融基础设施的基础。有了 Move 智能合约,有了用户和基础资产,Libra 上将诞生有史以来摩擦最小的金融服务。会有些什么服务呢?余额宝、花呗、借呗、工资理财,等等。区别是这些服务很有可能是由全球化的第三方提供的,而且他们之间可以互相依赖:房贷可以在链上被分割成小额理财出售给其他用户。现在,Open Banking 刚有了个概念,API Bank 刚有了文档,针对它们的降维打击就来了。 区块链发展到现在展现了两个层面的独特价值。一个是资产的去中心化发行,就是所谓的传统公链价值。一个是金融的去中心化服务,它服务的对象可以是传统金融资产,比如货币,债券等。后者对世界的价值一点不比前者小。Libra 就是定位在后者的头部公链。 Libra 定位在金融基础设施,很准确很有价值。它可以大幅降低金融摩擦,为用户提供价值。 Libra 其中的一个亮点是提到了「First-Class Resources」这个概念,在 Move 编程语言的白皮书中这样写道:「First-class Resources 是一个非常普遍的概念,程序员可以使用实现安全的数字资产(的发行),还可以编写正确的商业逻辑来包装资产和实施访问控制策略。」 First-class Resources 翻译过来是「资源是一等公民」,在 Libra 中用户可以发行自己的资产,并且可以被用户及脚本直接引用和操作。 而关于这个概念,实际上 Nervos 架构师 Jan 在去年的文章《First-class Asset》中已经对这个概念进行了深入的分析。 First-class Asset区块链上的底层模型设计,实际上就是分别以比特币和以太坊为代表的两种模型: 比特币的 UTXO 模型以太坊的 Account 模型而实际上二者的差异千差万别,代表了两种思路。 以太坊的 Account 模型和银行账户类似,在账户中记录用户的余额。账户是用户直接操作的对象,资产的转移是由账户作为用户的代理实现。但是当需要对用户定义的资产进行操作的时候,则需要引入第三方,即托管加密资产的智能合约执行资产转移流程。 而比特币的 UTXO 全名为「Unspent Transaction Output」,每个 UTXO 都是比特币,UTXO 中都通过一段锁定脚本(lock script)记录这个比特币的所有者,我们可以通过比特币脚本对 UTXO 进行编程实现部分业务逻辑,比特币就是一种「First-class Coin」。 ...

June 20, 2019 · 1 min · jiezi

如何使用GETH-CLI在以太坊网络进行资金转账交易

完成同步的以太坊区块链节点后,就可以通过使用GETH CLI在以太坊网络上执行交易。 首先我们来链接GETH控制台,查询以太坊帐户的余额: geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4")> 7500000000000000000我想,你可能会想为什么7.5ETH在Geth控制台中显示为75000000000000000? Ether与wei以太坊虚拟机不支持小数或浮点数。显然,金融计算在整数中更容易。 因此,为了能够发送1 ETH的一小部分,以太坊基金会决定创建自己的单位系统,其中最小单位为1 Wei,1 Ether为1e18 Wei。 但不用担心,有些工具可以让你的生活更轻松。例如,我强烈推荐Ether to Wei在线转换器: https://etherconverter.online 为了发送价值15美元的以太,其中1 ETH == $200(旧时代......),你将发送0.0740 ETH的交易,这必须在Wei中表示为74000000000000000。 在线Ether to Wei转换器: 以太坊单位系统概述: 实战中来掌握。让我们实际发送74000000000000000 wei(15美元)到另一个帐户。 使用GETH CLI将以太发送到另一个帐户在一个终端中,请记住运行完全同步的区块链节点: geth --rinkeby --datadir=~/.gophersland_ethereum_r1 --port=30304 --cache=2048 --rpc --rpcport=8546 --rpcapi=eth,web3,net,personal --syncmode=fast在另一个终端,我们将创建我们的第二个以太坊帐户。 ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 sep 24 15:36 .> drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4geth --datadir=~/.gophersland_ethereum_r1 account new> INFO [09-24|15:36:33.566] Maximum peer count ETH=25 LES=0 total=25> Your new account is locked with a password. Please give a password. Do not forget this password.> Passphrase: > Repeat passphrase: > Address: {7aa4a14286a25e3a275d7a122c23dc3c107a636a}ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 oct 25 20:14 .> drwx------ 4 enchanter enchanter 4096 oct 25 19:48 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4现在,让我们将Geth控制台链接到当前运行的区块链节点,就像我们在上一篇文章中所做的那样,以便通过执行eth.sendTransaction命令将15美元转账到这个新创建的帐户。 ...

June 18, 2019 · 1 min · jiezi

如何成为区块链开发人员

如何成为区块链开发人员 目前的区块链现象是以极其强大的存在形式进行着技术革命,这将在不久的将来成为改变游戏规则的方式,并且是区块链开发人员技能提升的必要条件。区块链应用程序可以使每个领域受益; 这就是为什么需要个人或团队来帮助公司将区块链技术应用到他们的业务运营中。 许多公司,如三星和IBM,都开始实施区块链产品,以改变其工作流程,使客户更舒适,更轻松地使用。目前,区块链开发商的市场需求高于现有的报价,这表明该专业与其他领域相比具有优势。 根据Upwork的2018年前三个月的报告,Blockchain已成为排名前20位的最受欢迎的职位: 1.Blockchain 区块链2.Tensorflow3.Amazon DynamoDB4.Voice-over5.Subtitling6.Art direction7.Content strategy 内容策略8.Computer vision 计算机视觉9.Microsoft Power BI10.增强现实11.Chatbot开发12.React native13.Media buying14.Go语言开发15.Information security信息安全16.Scala开发17.Instagram API18.Adobe Premiere19.Machine learning 机器学习20.AngularJS开发 根据Computerworld的估计,美国区块链开发人员每年的收入约为158,000美元。与软件开发人员的平均薪水相比,这是相当高的:同期105,000美元。问题出现了:区块链开发者是否有需求?肯定有! 让我们通过发现创新区块链技术的基石来开始我们漫长但有趣的旅程,这在新的数据处理时代具有颠覆性的意义。 什么是区块链?区块链是一个数字数据库,包含对块中参与者开放的共享,复制和同步数据。可以存储交易记录,每个交易记录具有时间戳和唯一的加密签名,以使得分类账的每个成员可访问的所有资产交易的不可变历史。通过这种方式,区块链也可用作私人电子分类账。区块链(或对等网络)是: 去中心化其中的信息不存储在某个地方,而是分布在许多计算机中,这些计算机称为节点。用户直接互动。没有像微软,谷歌或Facebook这样的第三方排除对数据的控制。 上市通过块内记录的交易历史记录,网络中的每个人都可以看到所有信息。协商一致的指导如果没有超过一半节点的特别批准,系统中的参与者都无法添加新信息。他们以协商一致方式同意对记录的所有更新,这有助于保护数据免受欺诈。 不可变如果已经在区块链上放置了信息,则无法更改或删除。以下是其他一些独特的区块链功能:如你所知,区块链是去中心化的。这种去中心化提供了业务流程的透明性和可追溯性,使系统无法破解。它也以其执行交易的方法而闻名,这是一个金字塔,其中包括区块链开发人员必备的经验和技能列表,现在让我们考虑一下区块链开发人员应该知道什么,以及可能面临的挑战面对。 知识首先,任何想成为区块链开发人员的人都必须首先学习区块链系统的基础知识。对开发人员的需求可能不同,但基本面下降似乎是第一。你知道的越多,成为经验丰富的开发人员的机会就越大。没有必要开始购买加密货币,但无论如何,在学习区块链的核心基本概念时,熟悉各种加密货币并理解它们之间的差异将是一项必要的技能。让我们探讨2017年开发人员的主要要求: 1.计算机科学或工程学士/硕士学位。2.不少于2年的软件工程师经验。3.对分类账,区块链和加密货币的深刻理解(有实践经验更好)4.使用HTML,CSS,NodeJS和MongoDB的Web开发技能。5.在安全性和去中心化技术方面具有足够的技能。6.至少使用以下编码语言之一感到满意:Go,C,C ++,JAVA,Python。7.了解分布式存储,如RDBMS或NoSQL。8.区块链业务应用程序的技能。9.区块链开发需要与网络和数据安全专业人员以及算法的工作知识密切合作,考虑到查询数据结构(Stack,Queues,LinkedList,Tree和Hedera HashMaps)的时间和资源复杂性。10.其他重要技能:时间规划,团队协作以及确定任务优先级的能力。 另一个有用的优势是对MVC,MVVM,文档视图架构和微服务等基本架构的了解,这将有助于区分传统架构和去中心化架构之间的差异。学习通信架构的核心概念:例如,发布者/订阅者,消息代理和总线架构,也将更容易成功。成为开发人员就像一个堆栈,技术不断被添加到顶部。开发人员使用后进/先出。在深入了解区块链之前,先阅读必备知识基础列表: solidity如果你想在像以太坊这样的区块链平台上编写智能合约,你将需要学习常用的Solidity编程语言。Solidity由Gavin Wood,Christian Reitwiessner,Alex Beregszaszi,Yoichi Hirai和其他以太坊影响者开发。Solidity支持代码设计,牢记以太坊虚拟机或EVM的规则。 Solidity受C++,Python和JavaScript的影响,所以如果你已经了解它们,那么掌握Solidity并不困难,因为它们非常相似。了解开发人员如何从Solidity语言中受益: 提供了复杂的成员变量,如分层映射和结构。存在继承的机会,包括多重继承。应用程序二进制接口(ABI)设计用于单个合同的多个安全功能,在错误数据输入的情况下检测错误。代码功能区块链上的编码不会带来复杂性,因为这个分布式分类账是自动执行的。了解JavaScript语言足以创建一个图层。人们应该记住的主要事情是,每个人都可以看到在区块链上运行的所有内容,因此它可能被黑客入侵,而一个或多个块的所有者可能会损失数百万美元。这就是为什么代码开发需要大量时间,排除可能的漏洞,并因此降低黑客攻击的可能性。值得记住的另一个细节是多个交易无法同时实施。这有助于减少交易过程中的错误数量;例如,避免双倍花费。区块链的一个独特特征是确定性行为。这意味着所有交易操作都以一种方式运行。例如,如果现在是A+B=C,那么无论情况如何,程序都会为给定的输入提供相同的输出。考虑程序可以以非确定性方式运行的可能情况: 根据程序员的要求,当需要非确定性系统功能时。当数据源包含非确定性数据时,程序以非确定性的方式行事。在动态呼叫期间,当一个程序呼叫另一个程序时,此呼叫仅在其执行期间确定。智能合约和交易隔离是一种可以防止不理想结果的解决方案。要编写Java Chain代码,你只需要3个元素: GradleJDKVagrant智能合约 智能合约是一种用代码编写的数字化,分散式应用程序,以确保协议的可信度。它是自治的,因此不需要中介或其他第三方会计服务。此外,智能合约允许人们快速进行交易,解决代价高昂的延误和文书工作的问题。查看此图描述智能合约的工作方式: 以下是一些着名的智能合约用例: 他们贯穿两个系统: 虚拟机(以太坊使用它。)Docker :( Fabric使用它。)实践一旦你做好了准备,找到机会实际应用你的知识。为此,你可以使用平台创建第一个区块链或智能合约,并将区块链应用于某些领域。最常见的工作机会是: 创业科技公司银行私营企业政府服务专业服务公司区块链领域正在蓬勃发展并增加其空缺数量。例如,BlockchainJobz提供1,000多个开放式工作主张。如果你正在搜索,请查看空缺列表。在你开始时,请毫不犹豫地参与开源项目。如果你在Web开发方面拥有至少3年的经验,则可以向Hyperledger平台申请区块链相关认证,这将有助于你更快地获得工作。另一条建议是通过Github共享你的项目(甚至是小项目),Github是一个平台,通过该平台,人们可以托管和审查智能合约并评估其他人的工作。智能合约的发布为你提供了进一步发展的良好经验。 社交网络与现代世界中的任何角色一样,社交网络对于职业发展具有重要意义。走出项目开发的框架,通过聚会和Eventbrites找到你感兴趣的领域的人,Reddit,Slack和Gitter等社交网络经常在世界各地举办。 与经验丰富的开发人员的沟通将使你从他们的有用经验中获益,并与你认为可能有用的人分享你自己的经验。这将有助于你赢得社区的认可。 通过这些类型的互动,你将始终了解自我发展和工作机会的新机会: 加入论坛,GitHub页面和StackExchange,并始终关注有关区块链项目开发的新闻。作为参与者,你越活跃,你从这些交互中获得的收益就越多。 总而言之,了解区块链教育需要大量的时间和其他资源投入。对即时结果的期望并不是帮助你实现既定目标的策略。 说实话:没有神奇药丸。只有不断努力和奉献才能使你成为经验丰富的区块链开发人员。如果出现问题,请不要生气。如果你坚持下去,你一定会成功! 祝你好运,并有一个富有成效的冒险! ================================================================== 如果你想学习区块链并在Blockchain Technologies建立职业生涯,那么请查看我们分享的一些以太坊、比特币、EOS、Fabric等区块链相关的交互式在线编程实战教程: ...

June 18, 2019 · 1 min · jiezi

开源区块链监控系统-CITAMonitor-助力运维人员实时把控链的运行状态

CITA 是秘猿科技从 2016 年就开始研发,2017 年开源的高性能区块链内核。CITA 作为高性能区块链内核,可以用来开发各种联盟链,甚至公有链系统,具有为稳定、高效、灵活、可适应未来等特点。为了降低使用门槛,我们还提供了增加 CITA 易用性的工具链:包括钱包,缓存服务器,SDK,合约调试工具等等。这些项目的代码全部在 Github 上开源,用户可以根据需求进行个性化改造。本文是 CITA 工具链介绍的第一篇文章CITA 生态工具又增一枚利器:CITA-Monitor区块链服务程序是一个 7x24 小时的工作软件,节点分布在不同网络的主机中。作为运维人员,需要关注服务是否正常工作,包括服务中的区块链数据是否能够正常同步、软件进程是否存活、用来存储数据的空间是否足够、其他节点是否正常工作等,因此一个能够实时、直观了解这些指标,并且在运维人员没有主动关注时,也能及时收到服务异常告警通知的监控系统,是十分重要且必要的。 因此,为了给运维人员提供更好的用户体验,秘猿科技研发并开源了 CITA-Monitor 监控系统, 用以监控 CITA 区块链服务运行状态。CITA-Monitor 监控的指标包括:区块链数据、服务进程状态、运行环境的 CPU /存储器/磁盘使用率等主机信息等。 为了能够让数据情况能够一目了然,我们开发了数据可视化面板,节点管理员可以轻松了解节点的运行健康状态。此外,我们还内置了关键的告警规则,例如服务进程状态告警,如微服务、依赖服务进程存活;区块链数据状态告警,如出块高度、出块间隔时间、交易数据的 TPS;运行环境状态警告,如磁盘空间不足,经过简单配置收发邮箱即可第一时间收到相关告警邮件。CITA-Monitor 详细介绍请移步 GitHub 查阅。 功能列表CITA 服务进程监控 CITA 微服务及MQ进程的存活、进程的 CPU、内存使用率、IO区块链数据健康监控 节点出块高度历史、出块时间、出块间隔趋势、Quota、交易量历史、TPS、磁盘占用比例、数据目录大小增长趋势运行环境监控 主机运行环境的系统负载、CPU、内存、磁盘空间使用情况、网络流量、TCP 连接数等故障告警通知 支持邮件通知、Slack 通知、短信通知(Pro 版)监控告警策略节点网络监控(Pro 版) 连接节点数、网络拓扑、地理位置等鉴源限流(Pro 版) 鉴别请求来源、工具;限制访问来源、频率JSONRPC 接口调用分析(Pro 版) 统计分析 RPC 方法的请求时间、请求次数仪表板的监控指标Summary Dashboard 节点列表各节点最新块高各节点 CPU 使用率变化各节点监控进程存活CITA Node Info Dashboard Node Info - 选定节点的详细信息,包括区块链数据、运行环境、运行软件信息CITA Meta Data - 链的配置信息,如 Chain Name、创建时间等Chain Info - 链的最新块高、共识节点数、共识节点出块历史趋势Host Info Dashboard ...

June 14, 2019 · 1 min · jiezi

为何专注于流媒体领域PPIO-技术揭秘

工作日早晨8点的地铁,Lisa 拿出手机打开 Tik Tok 来打发半小时的通勤时间;12点,吃完午饭的 Lisa 趁着午休时间忙里偷闲看看 YouTube 上有趣搞笑的视频;晚上8点,忙碌了一天的她回到家之后躺在沙发上打开电视,在 Netflix 和 Hulu 上搜索着最新的电影准备充实夜晚的生活。看到这里,你是不是仿佛看见了自己的影子?确实,我们每天都花费了大量的上网时间在音视频应用上,而对这一切我们也许毫无察觉。 为什么 PPIO 要做音视频 据2018年10月的《全球互联网现象报告》,视频应用使用所产生的流量占互联网总流量的58%左右。正如报告中所指出,视频应用在全球应用流量的份额出现了前所未有的增长。 PPIO 是为开发者打造的去中心化存储与分发平台,让数据存储更便宜、更高速、更隐私。官方网站是 pp.io 。 在设计 PPIO 的时候,我们就把音视频这一方向视为重中之重,不仅要顺利地支持主流音视频传输协议,还要把服务质量 QoS 做好。为了让大家能更好的理解接下来介绍的 PPIO 流媒体音视频的数据分发,我们先来回顾一下 PPIO 的商业化架构。 PPIO 将陆续提供3套 API: 基于 IaaS 层的存储空间和带宽租用的 API。基于 PaaS 的 POSS,PCDN,PRoute 的 API。基于 Application Service 层的点播,直播以及更多 API 接口。开发者可以选择在任意一层进行开发,完成自己的 APP 或者 DAPP。 如果把 PPIO 和 AWS 云计算服务做对比,其层次类比为: 在 PPIO 的架构中,流媒体音视频的 API 是在 Application Services 层,因为它的场景非常贴近于应用,但 PCDN 的基础在 PaaS 层,下面将重点说明 PPIO 在流媒体视频上的设计尤其是流媒体视频数据分发的相关部分。 ...

June 13, 2019 · 3 min · jiezi

挖矿大赛第一期百万-CKB-等你来赢取

CKB 测试网挖矿大赛终于来了,来不及解释,网址:https://mineyourownbusiness.n... 5 月 18 日,CKB 测试网正式上线,上线至今的半个多月时间里,有上千人关注了 CKB 测试网的挖矿。在「矿工酒馆 1」中,可爱的社区伙伴已经组织了两次挖矿预热活动,大家纷纷上传了自己的挖块截图,并贡献了丰富的挖矿教程。 在 Nervos CKB 主网正式上线之前,为了更好地和社区伙伴共建 Nervos CKB 生态,Nervos 基金会决定赞助并分阶段举办 Nervos CKB 测试网挖矿大赛。 现在,第一期挖矿大赛即将开始。Nervos 基金会为本期大赛准备了 一百万个主网 CKB 代币 的大奖,赶紧来赢取吧! 奖项一:挖矿大户奖比赛过程中,我们将根据每个地址在测试网中所获得的 出块奖励 进行排名。比赛结束后,获得出块奖励最多的前三名将获得 CKB 代币的奖励。 第一名: 200,000 CKB 代币第二名: 100,000 CKB 代币第三名: 60,000 CKB 代币 奖项二:幸运参与奖我们将从所有出过块的账户地址中抽取 64 个地址(排除出块数量最多的前三个地址),并给予每个地址 10,000 CKB 代币 作为奖励。 比赛时间开始时间:6 月 15 日 06:00 UTC UNIX 时间戳:1560578400 结束时间:6 月 29 日 06:00 UTC UNIX 时间戳:1561788000 ...

June 12, 2019 · 1 min · jiezi

大促背后的技术-当我们说促销的时候我们在谈什么

活动概要 在零售创新的趋势影响下,恰逢一年一度618来临之际,在高频、高额、高密度的交易场景下,如何能为用户提供稳定而流畅的购物流程?如何做到通过技术创新打造品牌和合作商的基础设施服务商呢? 在刚刚结束的京东云技术沙龙上海站活动中,多位京东的技术大咖与开发者面对面就零售业以及社交电商方面的核心技术以及成功解决方案进行了深入探讨。 沙龙现场座无虚席 现场百余位开发者热情参与了交流与互动,尤其对“大促”下的数据库服务、企业级监控的设计与实践、社交电商的方方面面以及区块链的智能化溯源等诸多技术领域十分关注。 我们将沙龙中的部分内容整理、总结后放到了本文中,希望也能给相关的从业者们提供参考。(公众号回复“PPT0526”可获取沙龙视频&PPT) 京东数据库服务如何应对“大促活动”?京东云产品研发部高级总监 郭理靖 众所周知,京东商城业务繁多,很多业务在研发设计初期并不想选用太多种类的数据库,因为并不知道着手的业务规模大小,所以开始选择只使用MySQL是最简单的,基于研发的速度考虑有时候还选择写入日志和大字段数据。随着数据积累量增多,用户规模扩大,未来会涉及数据切换的问题。因此,对于这些“后来居上”的业务,还是要进行一些数据架构优化的工作。 京东云数据库“上马”了一些弹性数据库服务,可以做到在一台物理服务器上同时配置多个数据库,将单机利用率提升到比较高的水平;同时配置的灵活调度系统,能够在两个数据库之间完成对压力不大的数据库数据迁移,能帮助客户有效地进行成本控制。另外,在使用MySQL的基础上,性能不可避免地受限于机器,京东商城内部还使用Jproxy这类分布式数据库服务。郭理靖表示,在京东商城的实践中,针对线上系统选择构建两个机房,分别是生产环境以及在灾备环境。 关于智能分析,京东云在助力电商的过程中,一方面着手SQL日志分析以及容量分析,例如连接数是不是一直在增长、IO压力、CP压力等;同时也尝试做一些故障自愈以及磁盘清理等。 在“京东云的服务实践”方面,在云端提供丰富的数据库服务,例如MySQL、Percona、MariaDB、SQL Server、MongoDB等。从京东云的统计角度来看,国内开发者使用MySQL可以高达95%,另外5%会使用Percona或者MarinDB。 从海外的调研数据来看,海外数据库用户大约80%以上用户都在用MySQL,而20%以下的用户会选择用MariaDB和Percona,之所以这有么大的差距,原因可能在官方在国内外的宣传力度上明显的区别的原因。另外京东云还在安全、审计、日志等诸多方面提供了丰富的功能,另外还提供了Binlog备份和下载。 在监控引擎方面,京东云的尝试也是比较细致的,其中包括监控服务、报警服务等。值得提及的是,其中所有监控项都可以设置规则,比如CPU内存超过70%,就可以设置一个短信报警,而其中所有的指标都是对接到云监控系统。“我们也支持只读实例创建,需要只读最大支持创建8个只读实例,每个只读实例都分配一个独立域名,都可以用域名进行访问。”他补充道。 谈及数据运维,如何做到故障自动切换?京东云为此设计了比较完善的自动化系统。起初都是手动切换,选择这样的切换方式主要是担心误切的情况发生,毕竟很多服务通过域名链接数据库,而域名的切换会造成一些延时,时间太长又是服务不可接受的。现在数据库的故障都已经进化到自动切换了。 数据安全性方面,采用了云硬盘加密的功能,对于用户担心的数据库信息“被偷窥”的问题,只要启动了数据加密的功能,使用云端RDS就可以充分放心享受其安全保障的服务。对于哪些IP可以访问特定的数据库这个事儿,灵活设置白名单即可。 重点强调的一点,在京东云数据库服务中还涉及到DRDS,所谓DRDS是分布式关系型数据库,追溯本源是将京东商城上的Jproxy技术移植到京东云上,主要作用还是在数据量特别大的情况下,单机无法支撑的前提下完成分库分表,操控起来比较便捷。 DRDS服务主要解决了以下几个困难:1、随着数据量和访问量的增长,单机数据库会遇到很大的挑战,依赖硬件升级并不能完全解决问题,也就是单机数据库容量瓶颈亟需被重视;2、传统数据库容量扩展往往意味着服务中断,很难做到业务无感知或者少感知等,被认为是扩展窘境;3、更重要的一点,传统数据库使用成本较高,当业务数据访问量增加到一定程度时,传统数据库需要依赖特定的高端存储和小型机设备,对于用户而言,成本较高。但DRDS的使用,恰好就是可以有效地帮客户进行成本控制。 具体来说,DRDS服务提供中间件,例如针对用户表,可以将用户表中的ID进行拆分。当需要查询用户时,并不需要修改SQL语句,DRDS会去解析语句,发现访问的用户数据表,用户ID等信息,其实DRDS起到的作用就是解析SQL语句、分发SQL语句以及汇总SQL语句给用户端,方便用户可以更多聚焦自己的业务逻辑开发等,同时有效提高整个性能。 同时,DRDS可以做到多台部署,但值得注意的一点,整个DRDS系统性能受限于后端实例数量。简单来说后端的实例量越多,DRDS的性能越好。通过实测,DRDS中间件给SQL带来的延迟是非常低的,DRDS对SQL语句的解析速度进行了专门的优化 ,因此因中间件带来的延迟基本也都可以忽略不计了。 DRDS本身不存储数据,数据存放在后端的RDS MySQL 数据库上。为保障系统稳定性,每个分库所在的MySQL版本必须一致。DRDS会在每个RDS实例上创建8个分库,另外还会单独创建0号分库,用于存放非拆分数据。 系统的最大处理能力取决于分库的数量,因此在需要创建之后就应该规划好整个系统的容量以及能力,比较好的做法是根据初步的规划,前期使用小规格的MySQL实例,但足够多的分库数,这样就可以预留出足够的扩容能力。 在技术分享中,郭理靖还系统介绍了扩容的方方面面,例如两核4G的DRDS,性能相对较小,如果将后端RDS升级到更高配置,就被称为是垂直扩容,操作起来十分容易。无论是水平扩容还是垂直扩容,尽管具体的操作方法不同,但过程平滑且随时随地都是共通的。 尽管DRDS 与传统的单机数据库相比,在扩展性上有了巨大的提升,但同时也带来了一些限制,例如可保证同一个分库中的事务一致性,但不支持分布式事务;只支持单个分库内的join操作,不支持跨库的join;只支持UTF8字符集,因此并不是任何基于MySQL的应用都可以无疑迁移到DRDS上,还需要进行一些改造。 企业级监控系统设计与实践京东云产品研发部总监 郑永宽 作为本场沙龙的第二位分享嘉宾,京东云产品研发部总监郑永宽为开发者们现场带来了主题为“企业级监控系统设计与实践”的技术演讲。 监控是什么?监控是运维生命线。监控解决什么问题?远远不止发现问题!监控还需要解决发现问题以后的定位,和定位后的止损,从而降低故障MTTR,即故障平均恢复时间。像京东这样的大体量电商,如果发生不明原因的宕机所导致的损失是十分惨重的。为了高效解决降低故障恢复时间的问题,在故障发生之前提前做好相应故障的恢复预案;在故障发生之后明确故障类型并且准确定位故障,是非常有效的手段。 为了解决快速响应的问题,监控系统通常需要具备丰富的数据采集手段、多维度数据实时聚合计算、准确的异常检测、及时的告警通知、可定制的dashbord、根因定位与辅助决策推荐,以及预案平台等功能,通过以上功能实现快速止损、业务高可用/可扩展等目标。 根据以上功能定位,京东云会针对每个系统不同的业务特征,提供故障恢复预案推荐,用以来保证系统的高效运转;对于监控系统来说,无论是发现问题、定位问题还是解决问题,了解其中循环迭代的系统状态十分重要,京东云的监控平台根据丰富的监控手段可提供可靠有效的系统运维情况反馈,同时基于监控数据和业务分析进行多样化的预案推荐,帮助业务快速恢复。 具体来说,我们首先定义了一套统一的监控标准:即监控需要覆盖基础-存活-性能-业务四个层面,从而保证了采集数据的全面,进而避免监控遗漏。即基础监控涵盖了机器的基本指标,比如cpu、内存、硬盘等;存活监控则聚焦机器和服务进程的存活性;性能监控关注服务对外表现的性能指标,比如PV、平响、错误码等;业务监控则是从用户角度,监控系统是否提供正常服务。进一步,根据不同的报警,我们可以定位到相应的问题,再辅以对应的预案平台,从而确保了故障第一时间定位与恢复。 监控系统需要保证数据采集手段丰富化、计算聚合多样化、存储高效化以及数据展示有效化等几个方面。其中数据的存储以及数据可视化展示等是监控系统最基础的需求,不管多庞大的运维系统都是如此。 京东云采用多种采集方式,包括Agent采集,API推送,外部探测点。通过遍布全国的探测点,可以模拟发起各种协议的访问,同时提供API推送接口,支持用户自己发送数据过来,可以进一步展示用户需要的数据。另外我们自研的tsdb时序数据存储,采用基于Cassandra+自研cache+esmeta的方案,我们将最近3h的数据存入自研cache,增加了查询的时效性和可靠性。其中自研cache基于的Facebook论文gorilla实现,追求极致的压缩比。通过这些手段,存储的空间可以降低到1/10,同时保证了查询性能。 另外京东云的监控CMDB表现出色。首先CMDB可以将资源和业务同时管理起来,这是监控CMDB解决的第一个问题;另一方面,大规模集群中的某台机器发生问题后,通过JNS名字服务可以迅速定位受影响的业务,并基于CMDB提供业务/应用/集群的监控配置推荐,这是监控CMDB重点突出的地方。 题,郑永宽总结道,首先监控可视化是关键一环,多维度的聚合计算使数据更有意义,这是基于京东云多年的运维经验总结得到的。京东云的监控体系可以定位多种故障原因,例如某一业务是否有变更,是否配有相应的报警,网络等资源是否异常,是哪个业务出现的问题等……通过以上方面的监控,我们可以知道某一业务的故障恢复操作的执行情况,此方式对故障快速定位以及查找故障来源非常有效。基于以上确认故障原因的能力,京东云快速迭代升级开发了变更可视化产品,对可能导致故障发生的所有问题来源进行事件监控,从上线操作、配置变更的单任务监控到平台全局事件的监控,进一步助力京东云监控体系定位问题能力的提升。 问题定位后,为使用户接收到有意义的报警进而快速回复问题,我们对异常问题进行分析合并,京东云支持各种策略的合并,可按照固定接收人报警、不同业务范围报警、固定时间报警等策略进行报警,减少告警风暴,另外对于通知下游的对接,我们实现了邮件、短信、微信、电话等多种方式报警。 未来京东云还会着手配置化管理功能的优化,更好支持事件自动恢复。“结合监控CMDB和报警设置,我们可以真正把故障和报警联动起来,对于相关的报警事件,监控系统可以自动调取对应的预案,从而达到系统的故障自愈的目标。” 社交电商SaaS产品技术架构京东云应用研发部社交电商负责人 赵金勇 从整个电商发展来看可以被总结为”四化“,分别是去中心化、场景化、碎片化以及个性化。我们发现流量成本越来越高,“带领着”获客成本、品牌商运营成本也一路居高不下,这恐怕就是品牌商自己不做运营选择其他途径的原因,正所谓“品牌形象宣传去中心化” 就是这个道理。 所谓社交电商,必然与”社交”关系密切,进而社交工具自然必不可少。除了凭借五花八门的推送工具,京东云社交电商还凭借京东与生俱来的海量商品以及优势供应链屡获成绩。基于京东大数据营销的能力,海量用户的精准画像以及商品推销、智能选品等这些稳定可靠的基础服务来打造系统。 京东社交电商支持三级分佣自动结算、灵活设计类目返佣点数、自定义会员晋升规则、自动统计团队销售业绩以及丰富的营销推广玩法等。 技术架构方面,京东云商微服务架构是数据库、硬盘以及统一运维。其中公共平台、开放平台、装修服务还有市场、数据搬运、流量统计等系统都是基于微服务架构,业务层提供统一的、原子化的API接口, 上层业务在这些接口之上构建而成。” ...

June 12, 2019 · 1 min · jiezi

Linux安装BTCPayServer设置比特币和Lightning支付网关

最大的比特币支付提供商之一BitPay已经遭遇Bitcoiners的折磨很长一段时间。该社区呼吁进行抵制,开发商Nicolas Dorier巧妙地利用了这一抵制事件。 Nicolas创建了一个名为BTCPayServer的开源和自托管BitPay兼容支付网关,受到了社区的好评。虽然有许多关于如何使用Docker和其他方法进行设置的指南,但我喜欢控制我在服务器上安装的内容,同时还要了解它的工作原理。 如果你出于某种原因更喜欢手动安装BTCPayServer,我会写一篇关于如何做到这一点的分步指南。 本教程是为Ubuntu 18.04编写的,但也适用于旧版本和其他基于Debian的发行版。在开始之前,请确保运行比特币核心和闪电网络节点。 安装依赖项要运行BTCPayServer,你需要安装.NET Core SDK,NBXplorer和PostgreSQL。 安装.NET Core SDK转到下载文件夹或用于存储临时文件的任何其他文件夹: cd ~/Downloads并下载.NET Core SDK所需的Microsoft软件包: wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpgsudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -sr)/prod.listsudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list更新包缓存并安装.NET Core: sudo apt-get install apt-transport-httpssudo apt-get updatesudo apt-get install dotnet-sdk-2.1安装NBXplorer我们需要安装NBXplorer才能跟踪传入的链上交易。 如果你还没有创建源文件夹并打开它: mkdir ~/sourcecd ~/source克隆存储库并构建代码: git clone https://github.com/dgarage/NBXplorercd NBXplorer./build.sh创建数据文件夹: mkdir -p ~/.nbxplorer/Maincd ~/.nbxplorer/Main新的配置文件: touch settings.config使用你选择的编辑器打开文件并添加以下行: btc.rpc.auth=<bitcoind rpc user>:<bitcoind rpc password>port=24445mainnet=1确保使用你的bitcoind的rpc登录凭据。你可以使用以下命令找到它们: cat ~/.bitcoin/bitcoin.conf | grep rpc测试是否所有设置都正确: ...

June 10, 2019 · 2 min · jiezi

区块链Oracle预言机实现教程含代码

区块链本身是封闭的。区块链的确定性模型基于这样一个事实:在交易执行时区块链不能执行任何来自外部的逻辑,所有的外部数据只能通过交易进入到系统中。预言机/Oracle就是通过交易为智能合约提供可信数据的服务。Oracle虽然听起来神秘,但实现并不复杂,在这篇文章里,我们将介绍预言机的作用以及运作原理,并通过天气数据预言机WeatherOracle的完整实现过程,来帮助你快速掌握区块链预言机/Oracle的精髓。 1、为什么智能合约需要预言机/Oracle?在智能合约中执行的逻辑不可以执行区块链之外的任何操作,例如它不可以访问互联网上的web服务。外部数据进入智能合约的唯一方法是将其置入一个交易中,通过向系统发送一个新的交易来触发区块链状态的更新。 试着考虑一下,如果智能合约在执行时可以访问外部的一个API来获取数据,会出现什么情况? 如果今天部署这个合约,那么API可能会返回如下的数据: { "foo": "bar" }但是明天再部署时,API可能就会返回新的数据,例如: { "foo": "baz" }那么可以想像,一个月以后如果有人进行以太坊区块链的同步,这个智能合约就会被执行,但是API的响应数据是和一个月之前不同的,这就会导致新同步的区块链状态不同于之前已经存在的节点状态。 这就不再是完全自确定的区块链了。经历相同的同步过程,我的区块链和你的区块链却不一样! 让我们再换个说法:给定一组区块,一个节点必须能够从零开始重现区块链的最终状态,而无需互联网连接。 那么这一点对于智能合约的开发者意味着什么?Oralce(预言机),开发者必须构造一个预言机来和实现智能合约与外部世界的交互。 2、如何实现一个简单的预言机/Oracle?现在让我们创建一个简单的预言机/Oracle,来将外部的天气数据传入智能合约: 在最底层的区块链平台,我们需要部署一个智能合约,这个合约有一个方法updateWeather()用来更新天气状态,只有在合约白名单里的地址才可以调用这个方法。updateWeather方法接受天气数据作为参数,同时触发一个以太坊合约事件并将天气数据作为事件的参数,这样JavaScript应用就可以订阅这个事件并获得异步通知了。 同时我们将创建两个nodejs进程,其中之一就是预言机/Oracle,它的实现逻辑就是周期性地轮询第三方天气API来获取天气数据,然后将天气数据提交给智能合约以便进行历史审计。 另一个nodejs进程则负责订阅智能合约的天气事件,然后在控制台输出事件参数。正如之前所述,每当预言机/Oracle调用合约的updateWeather()方法时,都会触发天气事件。 需要指出的是,为了便于理解预言机的核心实现思路,下面的代码进行了简化,剔除了必要的错误处理,因此并不适用于生产环境。 源代码在这里: 预言机合约 - https://github.com/decentorga...预言机服务 - https://github.com/decentorga...接下来我们详细讲解这个简单的预言机的实现。 3、预言机智能合约实现智能合约有一个公开的oracleAddress状态变量,用来表示允许调用智能合约的updateWeather方法的账户地址,我们在构造函数中对其进行赋值: contract WeatherOracle { address public oracleAddress; constructor (address _oracleAddress) public { oracleAddress = _oracleAddress; } // ...}接下来我们要定义天气事件,这个事件将在weatherUpdate()调用成功时触发。同样为了简化,我们让这个事件简单的附带一个表示温度的字符串参数。 event WeatherUpdate (string temperature);最后我们要实现updateWeather()方法。它的可见性为public,意思是可以从外部调用这个方法: function updateWeather (string temperature) public { require(msg.sender == oracleAddress); emit WeatherUpdate (temperature); }请注意require语句。只有当调用地址(msg.sender)和白名单地址(oracleAddress)一致时才允许继续执行该方法,否则将回滚交易。 好了,就这么简单。 4、预言机服务我们的预言机就是一个简单的nodejs服务。它使用request库来调用外部天气API,解析API的响应,然后构造并提交交易给智能合约,然后等一会儿,重复上面的工作,如此周而复始。 让我们从访问API开始,我们将API的地址放在一个环境变量里,以便在开发/生产环境切换时避免修改源代码: ...

June 10, 2019 · 1 min · jiezi

关于挖矿你知道多少

随着 Nervos CKB 测试网 Rylai 上线,我们整理了一些挖矿的知识普及,emmm......这里不是山西采矿,而是区块链的挖矿!因其工作原理与开采矿物十分类似,因此取名「挖矿」。那到底什么是挖矿呢? 挖矿就是记账的过程挖矿最早跟随比特币诞生,2009 年由中本聪提出。在他的自由主义梦想中,比特币是一种去中心化的数字货币,任何人都可以在家挖矿。在比特币圈子里,有个非常有意思的比喻:像挖金子一样「挖」比特币叫做「挖矿」,挖比特币的人被称为「矿工」,而用于挖比特币的电脑被称为「矿机」。那这里就有人问,为什么比特币是挖出来的? 交易需要记账人,这里举个简单的例子便于我们理解:日常我们在给别人转账的时候,会通过银行或者支付宝等方式,这里的记账人就是银行或者支付宝(中心化机构)。但是在比特币中,中本聪的设计初衷是去中心化的,即任何人都可以获得记账的权力,为了让大家有动力参与记账,中本聪设计了挖矿奖励,也就是记账后可以获取比特币作为奖励。 所以,总的来说:挖矿就是记账的过程,矿工是记账员,区块链就是账本。矿工可以将接收到的交易信息打包到区块,每个区块都会允许「发行」一定数量的新比特币,用来激励成功发现数据块的矿工。 挖矿工具专业化在比特币诞生的早期,由于挖矿难度小,矿工数量比较少,CPU 拥有足够的计算能力,几乎任何人都可以轻松地挖出一些比特币。 2010 年,矿工逐渐开始采用 GPU 挖矿,之后出现了 FPGA。后来,ASIC 设备也在 2012~2013 年大量上市。由于挖矿是运算密集型应用,且随着挖矿人数与设备性能的不断提升难度逐渐增加。 比特币的算力难度不断上涨从 2013 年 7 月起,全网算力由于 ASIC 设备大量投入运营呈现直线上涨,以 2013 年 7 月的平均算力计算,所有 CPU 挖矿设备均已经无法产生正收益,而 FPGA 设备也接近无收益。2013 年 9 月平均算力估算,现有的针对个人开发的小型 ASIC 挖矿设备在未来 1-2 个月内也接近无正收益。大量算力被 5 THash/s 以上的集群式 ASIC 挖矿设备独占。个人挖矿由于没有收益,几乎被挤出挖矿群体。 比特币全网算力呈指数级别上涨,单个设备或少量的算力已经无法在比特币网络上获取到区块奖励。这就促使一些「bitcointalk」上的极客开发出一种可以将少量算力合并联合运作的方法,使用这种方式创建的网站便被称作「矿池」。透过加入矿池来参与挖矿活动,无论是否成功挖掘出有效数据块,皆可经由对矿池的贡献来获得少量比特币奖励,亦即多人合作挖矿,获得的比特币奖励也由多人依照贡献度分享。 截止 2019 年,全球算力排名前五的比特币矿池有:SlushPool 、Antpool、BTC.com、F2Pool、KanoPool,中国曾拥有约占全球 70% 的比特币挖矿。 只用笔记本电脑还有机会成为矿霸吗?十年前,中本聪在世界的某个角落用他的笔记本电脑挖出了创世区块,得到 50 个比特币作为奖励,挖矿的大门就此开启。但今天比特币的挖矿技术难度和矿机成本越来越高,门槛越来越高,作为普通用户想体验一把挖出区块的感觉应该怎么办?机会来了: Nervos CKB 测试网 Rylai 上线,直接使用家用电脑即可轻松挖矿! ...

June 7, 2019 · 1 min · jiezi

Nervos-CKB-为了构建能够长久运行的加密经济模型

在 31/32 期秘猿科技小课堂中,我们从经济模型角度分析了现有区块链的问题,以及状态爆炸的问题。Nervos CKB 的经济模型为了解决现有问题,提出了创新的设计,如 Nervos DAO、基础发行 + 二级发行的发行政策。 秘猿科技区块链小课堂第 33 期 区块链和状态爆炸简单来说,区块链是一个公开的账本,区块链的状态指的是这个账本当前的样子。 目前大部分的区块链都存在状态存储的问题,特别是对于追求性能的区块链,在达到性能之后,状态爆炸就会出现,因为写入的数据将更加庞大。但是目前大部分区块链并没有考虑状态存储的问题,因为在此之前公链还被困在性能的瓶颈中。 这是一个区块链版本的公地悲剧--用户只要支付一次手续费就能够永久地在区块链这个账本中写入数据,而且数据存储的成本并不是自己承担。矿工只收到第一笔手续费就要承担状态存储的成本,所以会造成「一次付费,永久占用」的问题。 所有矿工都维护一个公共账本,除了写入数据的用户,维护账本的人并没有权力修改账本,不然就导致大家账本不一致,如此区块链的状态只能不断积累,导致状态爆炸的问题: 由于对交易的验证需要读取状态,状态不断增大,让交易验证变得缓慢;新区块的打包和验证也会更加缓慢;在同步的时候请求周围节点的数据,而周围节点为降低自己的存储压力会周期性地修剪状态。当同步时间过长,会导致请求的数据发生变化,从而降低节点同步的成功率。最重要的是,区块链的状态爆炸会使得参与运行全节点的成本变高(比如说需要很高的硬件规格),这会降低社区成员参与运行全节点的意愿:如果存储空间占用累积太快,最后只会剩下少数的节点有能力可以承担运营成本,那就会影响区块链的去中心化特性和抗审查能力。 在一个区块链系统中,计算和带宽都是瞬时资源--如果这些资源用完了,下一个循环或是下一个出块,这些资源会更新,可以重复使用。状态存储是长期资源(对于现有的智能合约平台,已经占用的状态存储空间是无法更新的),对于存储的计费应该怎么做,如何与生态的发展挂勾,一直以来也没有一个很好的解决方案。 Nervos CKB 的经济模型亮点Nervos CKB 经济模型的最大亮点是将链上的存储空间作为公共资源:每一个原生代币 CKB 代表一个单位的存储空间。也就是说,如果发行了 3 亿枚 CKB Token,那就代表整个 CKB 网络有 3 亿 Kb 的状态存储空间。持有者可以在存储空间中写入任何数据或者合约,矿工通过工作量证明机制在获得激励的同时为这些空间提供安全性。 CKB 分为「基础发行」和「二级发行」: 基础发行CKB 的基础发行和比特币发行策略类似,区块奖励大约每四年会减半一次,一直到所有的基础发行被矿工开采完毕。 二级发行CKB 的二级发行是一个常量增发的奖励,不像基础发行会每四年减半一次,二级发行每一年发出的区块奖励都是一样的,并且会一直增发下去。 NervosDAONervosDAO 可以帮助长期投资者(Holder)对抗二级发行造成的通胀效应,假设我持有 1 万个 CKB 原生代币,并且预计这是一笔长期投资,那么我可以将代币锁定进 NervosDAO 合约中,换取一定的利息,不会因为二级发行的通胀效应而受到损失。 双管齐下的发行政策在基础发行结束之前,矿工的收入是这样:「基础发行 + 二级发行 + 手续费」,与比特币有着类似的发行曲线。在前 3 个减半周期中,网络会发出绝大部分的区块奖励,与比特币不同的是,当基础发行完全结束后,仍然有二级发行担任出块奖励的角色。 举个例子,在「已占用的 CKB 占全部 CKB 的 60%,锁定在 NervosDAO 的 CKB 占比 35%,可自由流通的 CKB 占比是 5% 」的状况下:如果二级发行的出块奖励是 100 CKB,那就会有 60 CKB 被分配到矿工手上,35 CKB 分配到 DAO 的合约的持有者手上,5 CKB 将会被交由社区治理处理。 ...

June 6, 2019 · 1 min · jiezi

深入了解-CKB-经济模型中的创新点之一Nervos-DAO

在上一节秘猿科技小课堂中,我们已经提到了Nervos 加密经济网络中底层公链 CKB 经济模型中的创新点:Nervos DAO 和 二级发行政策。在本文中,我们深入了解 NervosDAO ,了解 NervosDAO 的作用,以及 NervosDAO 存在的意义。秘猿科技区块链小课堂第 34 期 我们都知道智能合约平台允许人们用一种新的视角来看待合约,过去我们签订书面合约的时候,会加上一条:当出现纠纷的时候,双方同意在指定的某一法院作为仲裁的法院,也就是说,我们拥有智能合约之前仍然需要依靠中心化的机构实现仲裁。 但是当社会的发展越来越快,人与人的合作更多了,公司之间的协作更复杂了,我们希望其中的一部分工作可以自动执行,来提升合约执行或是仲裁的效率。建立在智能合约的特性之上,我们发现有更多的功能可以实现,其中一个就是 DAO(去中心化自治组织),在 DAO 普及以前,还有一种叫做 DAC(Decentralized Autonomous Corporation),这些组织的发展也许就是为了弥补现有制度的不足。 大家应该对 2016 由德国 Slock.it 公司所推动的 The DAO 印象深刻,但很可惜的是 The DAO 发生了漏洞被攻击之后,也陆续的发现许多潜在的攻击方式,导致最后计划被迫中止。想要了解 The DAO 的朋友请参考 EthFans 上刊登的文章:《三分钟看懂史上最逆天的区块链众筹项目 The DAO》 而今天要讨论的 NervosDAO 则是做了一次角色的迁移,让它不再是担任主角,而是一个辅助的调节器,这有可能是一次有趣的尝试。过去在 DAO 的组织运作里面,理想状态是一个代币一票,来决定整个生态的下一步。 但是这牵涉到比较多人性的因素,也有比较多的认知或是操作门槛,导致在各种区块链的自治上,都出现了投票率过低的状况。所以把 DAO 放在最主要的功能上面,最有可能发生的问题就是使用者跟不上。若 DAO 被设计成一个辅助角色,还可以帮助生态中的所有人调节资产状态,也许就会有更多的使用者愿意参与这个组织。 在分析 NervosDAO 之前,我们先来对比一下大自然里面的调节器是怎么运作的吧!大家应该都听过亚马逊河的热带雨林吧,这个被称为世界之肺的森林,它能够调节二氧化碳与氧气的比例,也可以调节区域内的湿度与雨量,热带雨林对于生态系的贡献,是不言而喻的。接下来我们一起来看看 NervosDAO 是如何帮助生态做调节的。 Nervos 生态中的热带雨林NervosDAO 是一个写在系统底层的合约,可以自动将 CKB 的二级发行分配给锁定在 NervosDAO 合约里的持币者。如果持币者愿意牺牲代币的流动性,那就可以获得系统的补偿,让持币者不被二级发行给稀释。 根据 Nervos 经济模型提案,原生代币 CKB 的特性是这样的: ...

June 6, 2019 · 1 min · jiezi

从经济模型角度看比特币和以太坊存在的问题

公链的竞争是惨烈的,这个战场里的玩家要想生存下来,既要有绝活,还得没短板。在构建加密经济网络上,在技术实现和共识协议部分,我们为大家分享了CKB 的绝活,即: 与时俱进的 Cell 模型用 RISC—V 从头造的 CKB-VM 虚拟机突破中本聪共识的新型 NC-Max 共识协议今天,我们开进构建加密经济网络的最后一个支柱:经济模型。 比特币和以太坊像两座最早出现的虚拟城市。在它们之后,越来越多公链试图建立自己的城邦,吸引游民入住。但这些项目没有意识到的是,经济系统的运作真正决定了一个城市长期的繁荣。对经济模型设计的重视程度,决定了一个城市能否留住自己的居民。橙皮书表示:“Nervos 是我们看到的最令人惊喜的存在,为公链介绍了另一种完备的经济学设计思路。” 秘猿科技区块链小课堂第 31 期 任何一个加密货币项目都可以看作是一个经济体,加密经济机制是经济体的根基和推进体系持续运转的动力。区块链发展到现今这个阶段,人们在共识协议、可扩展性方向都做出了大量的尝试和创新,但是在加密经济模型设计方面的创新相对来说则不那么多见。 区块链的世界,既需要计算机专家也需要经济学家,Nervos 加密经济研究小组做了大量的研究分析并发布了 Nervos CKB 经济学模型提案,希望可以抛砖引玉,引起大家的探讨。本文是社区伙伴 Henry 对 CKB 经济模型提案部分内容的解读,同时也欢迎大家进入 Nervos Talk 论坛,加入我们的讨论当中。两个重要的方向 在现有的区块链系统中,代币的用途大致可以被分为两个方向:一种是 SoV(Store of Value / 资产存储),另一种是 MoE(Medium of Exchange / 交易媒介)。 SoVSoV 属性的代币,通常会在以下三个维度做出努力: 确保足够的稀缺性确保足够的算力和安全性价值的增值保值MoEMoE 属性的代币,通常会倾向于在以下三个维度做出努力: 更低的交易手续费更快的交易速度更优的连网体验(我们不希望一个系统要求交易双方都同时在线,甚至握手三次才能完成交易。)SoV vs MoE一个方向的经济模型最佳化,不太可能是另一个的最佳化,因为 SoV 和 MoE 具有不同的系统资源利用方式:交易花费是一瞬间的,而且计算和带宽是可更新的资源,但是保值却需要长期的占用资源。就像我们买黄金,并不是用它来作为交易媒介,而是用来保值。下面我们先来分析比特币和以太坊这两个最大加密经济体的经济模型,我们经过研究发现它们在可持续性上都存在各自的问题。 比特币加密经济模型比特币 as MoE比特币是一个点对点的电子现金系统, 但是它在走 MoE 这条路时,面临着几个问题: 交易速度慢:TPS 低,交易至少需要经过 6 个区块确认;交易手续费高;现今很少有人会用比特币来频繁交易,大家都把比特币视为数字黄金用来保值。虽然作为 MoE 是比特币最为本质的属性,但是比特币作为一个交易媒介,目前并不那么成功。但是发展到现在,由于先发优势,和经过了十年的验证,比特币慢慢拥有了大范围的矿工来保障系统的安全性和可持续性。如果一个系统的安全性和可持续性越高,那么它的价值就会越高——现在的比特币更像一个储值平台而不是交易的中介。 比特币 as SoV在未来,比特币的出块奖励会持续减半,距离下一次减半还有差不多 400 天,由于稀缺性的增加,比特币的预期价格会持续上涨,这也代表着未来需要投入更多的算力来保证整个网络的安全性。 ...

June 6, 2019 · 1 min · jiezi

区块链无法解决的状态爆炸问题

在设计全新的区块链经济模型之前,我们以 SoV(价值存储) 和 MoE(交易媒介) 两个框架分析了比特币和以太坊经济模型,得出了上一篇中的问题。在本次秘猿科技区块链小课堂中,我们带大家来了解一个全新的状态爆炸问题。这类问题将会在未来解决扩展性问题后,显著爆发出来,我们称之为 post-scalability problem!秘猿科技区块链小课堂第 32 期 如果 Layer 1 的关注点应该是状态而不是计算,在设计 Layer 1 区块链时,我们就需要先理解什么是区块链的状态。理解了状态是什么,我们才能理解状态爆炸是什么。 状态区块链网络中的每一个全节点,在网络中运行一段时间之后都会在本地存储上留下一些数据,我们可以按照历史和现在把它们分为两类: 历史——区块数据和交易数据都是历史,历史是从 Genesis 到达当前状态的路径。状态(即现在)——节点在处理完从 Genesis 到当前高度的所有区块和交易后形成的最终结果。状态随着区块的增加一直处于变化之中,交易是造成变化的原因。共识协议的作用是通过一系列的消息交换,保证每一个节点看到的当前状态是相同的,而实现这个目标的方式是保证每一个节点看到的历史是相同的。只要历史相同(即所有交易的排序相同),处理交易的方式相同(把交易放在相同的确定性虚拟机里面执行),最后看到的当前状态就是相同的。当我们说「区块链具有不可篡改性」时,是指区块链历史不可篡改,相反,状态是一直在变化的。 有趣的是,不同的区块链保存历史和状态的方式不同,其中的差异使得不同的区块链形成了各自的特点。由于这篇文章讨论的话题是状态,而影响状态的历史数据主要是交易(而不是区块头),接下来的讨论历史的时候会侧重交易,忽略区块头。 举个例子:Bitcoin 的历史和状态Bitcoin 的状态,指的是 Bitcoin 账本当前的样子。Bitcoin 的状态是由一个个 UTXO(尚未花费的交易输出)构成的,每个 UTXO 代表了一定数量的 Bitcoin,每个 UTXO 上面写了一个名字(scriptPubkey),记录这个 UTXO 的所有者是谁。如果要做一个比喻的话,Bitcoin 的当前状态是一个装满了金币的袋子,每个金币上刻着所有者的名字。 Bitcoin 的历史由一连串的交易构成,交易内部的主要结构是输入和输出。交易更改状态的方法是,把当前状态中包含的一些UTXO(交易输入引用的那些)标记为已花费,从 UTXO 集合中移出,然后把一些新的 UTXO(这个交易的输出)添加到 UTXO 集合里面去。 可以看出,Bitcoin 交易的输出(TXO,Transaction Output)正是上面说的 UTXO,UTXO 只不过是一种处于特殊阶段(尚未花费)的 TXO。因为构成 Bitcoin 状态的组件(UTXO),同时也是构成交易的组件(TXO)。由此 Bitcoin 有一个奇妙的性质:任意时刻的状态都是历史的一个子集,历史和状态包含的数据类型是同一维度的。交易的历史(所有被打包的交易的集合,即所有产生过的 TXO 的集合)即状态的历史(每个区块对应的 UTXO 集合的集合,也是所有产生过的 TXO 的集合),Bitcoin 的历史只包含交易。 在 Bitcoin 网络中,每一个区块,每一个 UTXO 都要持续占用节点的存储空间。目前 Bitcoin 整个历史的大小(所有区块加起来的大小)大约是200G,而状态的大小只有大约 3G(由约 5000万个UTXO组成)。Bitcoin 通过对区块大小的限制很好的管理了历史的增长速度,由于其历史和状态之间的子集关系,状态数据大小必然远小于历史数据大小,因此状态增长也间接的受到区块大小的管理。 ...

June 6, 2019 · 2 min · jiezi

区块链共识分析的简单框架

在之前的几期秘猿科技小课堂中,我们对比分析了 PoW 和 PoS 的优劣,以及我们 CKB 是如何改进比特币的 PoW 协议的。这一期是共识部分的最后一期,我们带大家综合了解一下区块链共识,以及如何用一个简单的分析框架来解剖区块链共识。秘猿科技区块链小课堂第 30 期 [1] 延迟为交易发出到被共识确认所需要的时间。低:<10s,中:10s-600s,高:>=600s[2] 保持共识性能的情况下允许的共识节点数量。低:<100,中:>=100,高:没有限制[3] Bitcoin的Nakamoto Consensus具有很低的通讯开销(communication overhead),但由于共识参数的设定(10分钟区块间隔,~4MB区块容量)导致带宽利用率低。[4] EOS的宣传中说的是BFT,但是与一些朋友交流得知现在用的依然是NC,也就是说EOS的DPoS与BitShares的DPoS应该是一样。 框架思路共识算法是一个很大的话题,在区块链出现之前,分布式系统和数据库领域都已经有很多的共识算法的研究和沉淀。但区块链的共识与之前的研究又有非常大的不同,如果不注意很容易掉进传统共识的老套路里面。实际上不仅仅是区块链有自己的独特需要,我的感觉是数据库会议上的共识研究和分布式系统上的共识研究也是有不小的区别。其实这非常好理解,因为场景不同嘛,设计自然不同。 本文尝试提出一个分析区块链共识的简单框架,方便将不同的区块链共识放到一起来比较。 基本要求共识的基本度量包括两个方面,正确性和性能。正确性简单来说包括: 一致性(Consistency) - 节点最终能看到相同的本地状态活性(Liveness) - 请求/交易总会在有限时间内被处理正确性是最最基本的要求,这也是大部分区块链共识都能做到的。要在异步网络中始终保证一致性和活性是一个非常难的任务,因此共识设计通常会选择保证一点而在一些特定情况下放弃另外一点,例如Bitcoin使用的Nakamoto共识选择优先保证活性,而BFT共识则优先保证一致性。 性能包括: 吞吐量(Throughput)- 单位时间内系统可以处理的请求数量延迟(Latency)- 一个请求/交易从发起到处理完毕/完全确定所需要的时间对吞吐量和延迟的影响因素很多,例如共识节点的数量,共识的消息复杂度,消息验证需要的时间,共识可用的带宽,共识设计的倾向等等。一般来说,吞吐量和延迟也难以两全,这是因为共识的消息复杂度有一个下限:对于每一轮共识,参与共识的节点至少要收到一次消息(否则连要共识的东西是什么都不知道)。如果要低延迟,就要尽快对每个请求/交易的达成一致,意味着单个请求/交易需要更高的消息复杂度;如果要高吞吐,就要尽可能的对请求/交易进行批量处理,以此降低单个请求/交易的消息复杂度,但也会造成高延迟。 对于共识性能,Nervos研究团队的张韧提出的一个比较有参考性的指标是共识对带宽的利用率:给定相同的带宽,共识对带宽的占用越低,共识的吞吐量越高。 区块链共识的特点动态的参与者集合无论是permissionless(翻译成“无需许可”太绕口了,用“公有链”又不是很准确 2,这里还是用单词)还是permissioned blockchain,最重要的一个特征是它是一个长期运行的开放系统。长期运行和开放叠加的结果是,共识的参与者会一直变化,每隔一段时间,总会有老的共识节点离开,新的共识节点加入,共识参与者是一个动态集合。如何处理共识参与者的动态变化,是区块链共识的一个核心问题。 与区块链共识不同,传统的共识研究往往先假设一个固定的参与者集合,然后研究如何在这个集合内达成共识,偶尔讨论参与者集合变化时的处理,基本上不关心参与共识需要什么样的资格。研究的重心在于如何保证共识的正确性(e.g. 一致性与活性),形成共识集合的方式只是个附属课题。传统共识的应用场景往往是中心化控制的网络,增加或者减少的服务器都是自己的,形成这样的侧重也很自然。 数量众多的参与者去中心化是permissionless blockchain共识协议的一个独特目标。我们通常用参与共识的门槛来度量去中心化程度(为什么这是一个好的度量?),参与门槛越低,去中心化程度越高。低参与门槛的自然结果是共识参与者的集合可以非常的大,因此共识协议的设计必须考虑到这一点,保证共识效率不会因为参与者的增多而下降。 最小的信任模型执行共识算法的目的是为了能对一个计算请求产生一致的计算结果,在这个过程中一定会有发起请求的节点和处理请求的节点。在传统共识模型中,有的完全在请求处理节点集合内部执行共识算法,有的是由请求发起节点和处理节点一起执行共识算法,无论何种情况,信任边界一般是在请求发起节点和请求执行节点之间,发起节点将计算请求发送给执行节点,执行节点计算出结果后返回给发起节点,发起节点信任执行节点的计算结果(反过来,执行节点不一定信任发起节点的消息,如果发起节点参与共识过程的话)。 区块链共识的信任模型则大为不同,对信任的要求往往要小的多。在permissionless blockchain网络中,同一个节点即发起交易又参与共识,节点对于共识结果要进行验证,并不是简单的信任其他节点的共识结果。以Bitcoin为例,如果一个全节点参与挖矿,它就同时是一个发起请求(交易)的节点和处理请求(交易)的节点。即使它只想做一个安静的全节点,不参与挖矿,它也会自行验证收到的请求处理结果(区块),并不信任其他共识节点提供的结果。这样的全节点只是选择跟随多数算力选择的交易排序,不相信多数算力给出的交易结果。这是一个最小的信任模型。 SPV/轻节点使用一个比全节点更强的信任模型(更强意味着对信任的假设更多),并不验证交易的执行,只验证区块头的有效性。如何验证区块头的有效性则是区块链共识设计的另一个核心问题。如果只是通过对区块头附带的非对称签名来验证有效性,这个信任模型基本上和传统共识的信任模型是等价的,因为传统共识中的请求处理节点也可以对结果附加签名,这个模型在结合动态参与者集合时会遇到一系列的问题,例如大家熟知的长程攻击。如果是通过PoW来验证区块头有效性则天然没有这些麻烦,主流的研究方向是在于如何进一步提高区块头的验证效率。 一个简单的分析框架根据以上的分析,我们可以整理出一个简单的区块链共识分析框架,用于比较各种区块链共识: 进入方式* - 购买算力 / 抵押代币 / …出块方式* - 轮流出块 / PoW随机选择 / 链上伪随机 / VRF随机选择 / …共识方式* - Nakamoto Consensus / BFT / …退出方式* - 停止挖矿 / 解除抵押 / …一致性 - 可以容忍多少恶意节点/算力/Stake/…活性 - 可以容忍多少恶意节点/算力/Stake/…延迟 - 交易被完全确认(被推翻的概率小于x)所需要的时间带宽效率 - 共识对带宽的利用率,越高越好节点数量 - 共识节点的数量上限是高还是低举例说明: ...

June 6, 2019 · 1 min · jiezi

突破中本聪共识公链-CKB-公布-NCMax-共识协议

本期秘猿科技区块链小课堂将会就 PoW 共识的突破进行展开。带宽实际上是区块链吞吐量的最大限制,在美国旧金山举办的 Scaling Bitcoin Meetup 中,秘猿科技研究员张韧从「带宽利用率」角度分析了诸多共识协议的效率和可行性。理解本文需要以下知识储备: 比特币共识协议(也就是 Nakamoto Consensus)基本概念 以太坊共识协议基本概念 孤块、叔块、自私挖矿等概念 秘猿科技区块链小课堂第 29 期 自我介绍一下,我是张韧,Nervos & Cryptape 的研究员,目前我在鲁汶大学 COSIC (Computer Security and Industrial Cryptography group) 读博士,师从 Bart Preneel。 如果你对 COSIC 不熟悉的话,不知道你是否听说过 AES,它是我们所有人的手机中使用的加密标准。 当然如果你熟悉 Bart Preneel 的话,会知道他是 RIPEMD 160 的设计者。RIPEMD 160 是比特币公钥转化为比特币地址时使用的哈希算法。 Nervos CKB 是一个公有链,能够支持各种编程语言的智能合约,以及各种各样的 Layer 2 协议。在 Nervos CKB 上你可以用任意资产支付交易手续费。在 Nervos CKB 中智能合约的执行和验证是分离的,从而达到更好的隐私和性能。最后,在 Nervos CKB 中采用了 NC-Max ——一个 Nakamoto Consensus 的变体——作为共识协议,拥有更高的吞吐量。 声明:本次分享内容仅着眼于 Layer 1 共识协议的分析,我将不会谈到 Lightning Network 这样的 Layer 2 方案。 ...

June 6, 2019 · 3 min · jiezi

制定通用的标准评估-PoW-共识协议的安全性

在秘猿科技区块链小课堂 26/27 期中,我们分享了研究员 Ren Zhang 对于主流共识协议的分析(Ren Zhang 来自于前比特币技术实现公司 Blocksteam)。这一期小课堂,我们将会深入分析 PoW 共识协议的安全性,指出三种攻击 PoW 链的方法,以及解决方案。并且提出衡量协议安全性的共同指标!(PS:前排提示,理解本文需要一定共识方面背景知识,如果看不懂。那么,只需要了解结论:1/公链更适合 PoW 共识;2/PoW 共识性能能够被突破)秘猿科技区块链小课堂第 28 期 在 Nakamoto 共识协议(Nakamoto Consensus 图片中简称 NC)中,为解决分叉问题,矿工们被要求在可能的情况下选择最长的链;在没有最长链时,矿工选择第一个接收到的区块加入到主链中。在发放奖励方面,主链区块会获得全部奖励,而孤块什么也得不到。 这样是否足够安全? Nakamoto 共识的原始分析倾向于认为区块链本身具备完美的链质量,即低于全网 50% 算力的攻击者是无法修改区块链的。然而实际上攻击者完全可以有非常高的成功率去修改区块链。 有三种攻击方式会修改区块链:自私挖矿(Selfish Mining)、双花(Double Spending)和审查攻击(Censorship Attack)。其中,自私挖矿的攻击者可以获得与其算力不成正比的、不公平的区块奖励。他们可以将挖矿算力集中起来去获得更高的相对区块奖励,从而破坏区块链的去中心化特性;在双花攻击中,攻击者可以逆转已确认的交易,将自己利益最大化;审查攻击情况下,攻击者阻止交易被确认,造成诚实矿工的经济损失。 三种攻击 自私挖矿红色方块表示块被传播到网络的时间,然后橙色圆圈表示攻击者的区块,三角形表示被诚实矿工挖出的区块。攻击者很幸运地找到了第一个区块,但没有将其发布到网络上,而是选择了扣留这个区块。 当诚实矿工找到一个块时,攻击者会在这时候抢在诚实矿工之前广播之前扣留的区块,则之后所有的矿工都将在攻击者的区块而不是诚实矿工的区块上挖矿。 如果攻击者足够幸运,能够连续找到多个区块,那么攻击者就可以毫无风险地孤立一个诚实区块。在这种情况下,攻击者的的链变得更长,并且全网的算力会到它的链上挖矿。通过这种方式,攻击者成功地增加了在整体区块奖励中获得的相对比例。 双花攻击双花攻击与自私挖矿攻击非常相似,是通过秘密挖矿来获得额外奖励。如比特币中,按照惯例有 6 个区块确认交易后基本是完全确认了。如果攻击者秘密地扣留了 6 个区块,并一次性将它们广播到网络中,他就能够在收到商品或者服务之后逆转这个交易。 审查攻击审查攻击试图孤立所有不符合审查要求的块,即我要广播我要审查的这些交易,如果你不听从我的命令,我会尽力孤立你的块。 两种解决方法 下面我们来说说解决 Nakamoto 共识安全问题的两种方法。 第一大类我们称之为「更佳链质量」协议。如图所示这一大类中有很多协议,这些协议声称它们可以提高链的质量。这次我将重点介绍「最小哈希平局打破协议(Smallest hash tie-breaking protocol ,简称 SHTB)」 和 「不可预测的确定性平局打破协议(Unpredictable deterministic tie-breaking,简称 UDTB)」。 第二大类称为「抗攻击」(Attack-resistant protocols)协议。这些协议声称,他们可以在链的质量并不完美的情况下抵御攻击,因此他们不需要提高链的质量。 抗攻击协议的三种类型第一种是「全部奖励」(Reward-all)协议。这类协议给大多数最近做了工作量证明的以奖励, 符合要求的块无论如何都会获得奖励,如此攻击者无法进行自私挖矿攻击来迫使诚实矿工的奖励无效,从而攻击者没有动机进行自私挖矿攻击。 第二个被称为「惩罚」(Punishment)协议。这些协议将没收那些可疑的区块的奖励。惩罚规则希望通过损失厌恶, 让所有人不得不遵守协议。 ...

June 6, 2019 · 2 min · jiezi

深入研究-PoW-和-PoS-优劣和取舍

在秘猿科技区块链小课堂第 26 期开始,我们开始讨论「构建加密经济背后的三大支柱之一」的共识部分,浅谈了 PoW 和 PoS 共识差异。今天我们分享前 Blockstream 共识协议、安全、隐私的研究员 Ren Zhang 来为大家深入分析 PoW 和 PoS 优劣取舍。本文节选自《What PoS Cannot Achieve (But PoW Can) And What PoW Cannot Achieve, Either》的主题演讲 秘猿科技区块链小课堂第 27 期 安全性假设和安全属性在分享的一开始,张韧就给出了安全性假设和安全属性关系的基本公式: 系统的脆弱性 =(理想中的安全属性 - 实际的安全属性)+ 安全性假设从这个公式中我们可以看到,当想要建设一个更好的区块链时,我们的关键目标应该是降低系统整体的脆弱性。而要达到这个目标,我们应该做到:与之前的设计相比,新增加的安全性假设少于新增加的安全属性 或者减少的安全性假设多于减少的安全属性 本质上这就是在构建一个更健壮的架构。 然而现状是,有太多项目宣称自己是具备强安全属性的区块链 X.0,但实际上在这些安全性上的改进都包含一些前提假设,所以这也让它们各自的网络存在脆弱性。 PoW vs. PoS熟悉 Nervos 的伙伴都知道,我们推崇比特币的 Nakamoto 共识机制。在比特币之前,(在分布式系统中)一个共识网络中的所有参与者都彼此知道其它的每个参与者。它们之间的信息会通过安全链接或者采用数字签名的方式进行传递,并且,消息对于定时的假设是异步的。 比特币引入了带有延迟的无需许可网络的概念。在比特币网络中,新的节点可以随时加入,并且可以获得可信的网络历史记录。网络的参与者不再需要知道其他参与者,信息也不再需要被可信的主体签名,而是通过广播的方式传递。 那么,如果不采用工作量证明机制,或者在一段时间内不采用工作量证明机制,这样的网络还能够正常运转吗?对于一个无需许可区块链来说,答案是否定的。 为了保证后来加入的节点能够看到可信的区块链历史,工作量证明机制必须永远持续下去。并且,节点需要随时知道网络的延迟信息,因此网络中无法采用异步协议。另外,这个网络还要求大部分节点都是诚实的。 那么,权益证明机制可以达成网络中的这些属性吗?和工作量证明机制类似,权益证明机制的运行需要一种稀缺资源作为基础。然而和工作量证明机制不同的是,如果没有可信的主体,那么采用权益证明机制的网络无法容忍较高的延迟。这意味着在某些情况中,权益证明机制系统会面临几种能够让新参与者无法分辨真实网络历史的攻击。 为了解决这个问题,采用权益证明机制的系统必定会采用由一些拥有公共身份的可信主体进行签名的检查点机制,这实际上又违背了去中心化和无需许可的这个核心信条。 在某些情况中,采用权益证明机制比采用工作量证明机制的系统有更强的安全属性。因为整个系统的价值是已知的(全网有多少 Token,Token 的价格都是公开可知的),如果大部分「价值」达成一致,那么参与者的数量就不那么相关,这样一来,网络可以绕过由于不知道所有参与者数量带来的问题。 但为了确保它们是否达成一致,所有人都必须保持在线,而这是一个很强的安全假设,并且每一个区块都必须被几千个节点签名,这会对性能产生很大的负面影响。因此,虽然参与者数量是已知的,但这并不能弥补权益证明机制相对于工作量证明机制的缺陷。

June 6, 2019 · 1 min · jiezi

浅谈-PoW-共识与-PoS-共识差异

在秘猿小课堂 16-25 期,我们给读者介绍了构建加密经济网络的技术实现的两个部分,即 Cell 模型和 CKB-VM 虚拟机。在本期中,我们将会进入构建加密经济背后的三大支柱之一的共识部分(加密经济的三大支柱:技术实现、共识协议、经济模型。)在这一部分,我们会给大家讲解,秘猿科技技术团队在深入研究 PoW 和 PoS 以及其他共识后,为什么坚定选择 PoW 作为底层公链 CKB 的共识协议原因。秘猿科技区块链小课堂第 26 期 关于 PoW 和 PoS 的误解太多,想要在一篇文章中讲个明白实在是一个极高难度的任务,所以这里只简单讨论两点,一个是从经济学上思考 PoS 给出的美好承诺是否可靠,另一个是 PoS 本质上是一种许可机制。之所以拿这两点出来是因为很多讨论非常纠结一些技术性的细节,忽视了这两个根本性的问题。 成本悖论区块链技术提供的价值是去中心化的安全,而安全是可以用攻击成本来衡量的。一条链的攻击成本有多高,它就有多安全。 区块链的共识节点提供的产品是安全,共识节点是网络服务的生产者。我们也知道,经济学里面有一个基本定律,在完全竞争市场中,生产者在均衡状态下的边际收益等于边际成本。也就是说,如果区块链的共识算法创造了一个完全竞争市场,提供多少安全,就需要多少生产成本: 攻击成本 = 安全程度 = 生产成本想要提供多少边际安全,就需要付出多少边际成本。现在 PoS 告诉我们,我们可以提供等量的安全,但是只需要 10% 甚至 1% 的成本,你不会觉得很奇怪吗?为什么 PoS 这么容易就打破了经济规律? 一种情况是,同等安全程度的PoS需要的实际成本是一样的,只是一部分被隐藏起来了。以 DPOS 为例,如果你想要做 Validator,就需要通过某些方法搜集足够多的票投给自己,进入前 X 个 Validator 的列表才行。搜集足够多的票的成本是多少呢?这个成本对于不同的人/机构是一样的吗?如果不一样,这是一件好事还是坏事呢?这个成本是一个公开信息吗?如果不是一个公开信息,这是一件好事还是坏事呢? 我很喜欢一句话: Financial institutions make people feel safe by hiding risk behindlayers of complexity. Crypto brings risk front and center and bragsabout it on the internet.而把成本以最清楚的方式公开在所有人面前,正是 PoW 的特点。 ...

June 6, 2019 · 3 min · jiezi

使用符合-CKB-虚拟机当前系统架构的真实-CPU-指令集来构建自己的虚拟机

Nervos 底层公链 CKB 的虚拟机(CKB-VM)是基于 RISC-V 打造的区块链虚拟机。在前两期中,我们介绍了 CKB 虚拟机的设计理念,以及基于 RISC-V 指令集打造的选择逻辑。那么再往前推一步,我们为什么会选择基于真实 CPU 指令集来构建 CKB-VM 呢?在本篇文章中,CKB-VM 设计者将和我们继续讨论 CKB-VM 的设计灵感、设计以及基于真实 CPU 指令集来构建 CKB-VM 的额外优势。秘猿科技区块链小课堂第 24 期 灵感与设计 在设计 CKB-VM 之前,我们发现很多区块链项目并不是用真实的 CPU 指令集来构造自己的虚拟机。我们熟知的以太坊下一代虚拟机 EWASM、EOS 以及 Dfinity 等都选择了 WASM(WebAssembly,一种编码格式)来构造自己的虚拟机。我们也完全可以设计出一个具有高级语言特性的 VM,比如可以用于静态验证,或是可以直接支持高级数据结构,或是支持各种加密算法的 VM。 但是我们发现,虽然带有高级语言特性的虚拟机能够提供更多的便利,比如能够支持语法各异的编程语言,但同时也会出现其他一些问题:任何复杂的、带有高级语言功能的 VM,无论多么灵活,都不可避免的会在设计层面引入一些语义约束,出于性能的原因,不同的语言在底层几乎需要共享相同的语义(带有高级语言特性的虚拟机需要绑定密码学原语,若未来现有的原语被攻破,或者需要更换一套密码学原语时,需要通过分叉来实现)。这样一来, VM 自身的灵活性就会受到限制,这和 CKB 作为加密经济底层基础设施的愿景并不相符。 与此同时,一个带有高级语言功能的 VM 通常会包含某些高级的数据结构与算法,这样任何在 VM 中嵌入的高级数据结构与算法都可能只适合于某一类应用的开发,却不适用于其它应用程序的开发。并且,我们无法预设所有可能的使用方式,这些嵌入 VM 本身的数据结构或算法除了兼容性之外没有任何作用,随着时间的推移,甚至会成为负担。 另外我们还发现,所有的区块链项目都要在冯·诺伊曼 CPU 架构(x86,x86_64,ARM 等架构)下才能运行,并且所有高级的 VM 特性都必须映射到现代体系架构的 CPU 汇编指令。 举个例子,虽然 V8 引擎(由 Google 开发的开源 JavaScript 引擎,用于 Google Chrome 及 Chromium 中)看上去可以有无限量的内存,但是其内部实现依然需要依靠一个十分复杂的垃圾回收算法,才能在有限的内存空间中模拟出无限的内存空间。 ...

June 5, 2019 · 2 min · jiezi

开发者如何利用-CKBVM-进行智能合约开发

Nervos 底层公链 CKB 的虚拟机(CKB-VM)是基于 RISC-V 打造的区块链虚拟机。在前三节课中,我们介绍了 CKB 虚拟机的设计理念及优势。那么,怎样才能利用 CKB-VM 更好的开发呢?本文是实现 CKB 背后脚手架-技术系列的最后一篇文章,CKB-VM 设计者肖雪洁会以三种不同的方式展示 CKB-VM 的合约示例,它会帮助你更好的在 CKB-VM 上玩耍~秘猿科技区块链小课堂第 24 期 最简化智能合约示例以下代码示例为可以在 CKB-VM 上运行的最简化智能合约: int main(){ return 0;}以下代码可以通过 GCC 编译: riscv64-unknown-elf-gcc main.c -o mainCKB 的智能合约是一个遵循传统 Unix 调用方式的二进制文件。可以通过 argc/argv 输入参数,以 main 函数的返回值来表示输出结果。 若返回值为 0 表示合约调用成功,返回值为其它表示合约调用失败。 为了简化说明,我们以 C 语言为例来实现示例中的合约。但实际上任何可以编译成 RISC-V 指令集的语言均可以直接用来开发 CKB 的智能合约: 最新版的 Rust Stable 已经有 RISC-VGo 语言的 RISC-V 支持也在开发中:对于更高级的语言,我们可以直接将其 C 语言的实现编译为 RISC-V 二进制文件,并通过 「VM 中的 VM」 技术,在 CKB 上启用以这些语言编写的智能合约。举个例子,我们可以将 mruby 编译为 RISC-V 二进制文件,来启用基于 Ruby 的合约开发。基于 MicroPython 的 Python 语言或基于 Duktape 的 JavaScript 语言也可以使用同样的方式,在 CKB 上开发智能合约。即使是编译为 EVM 字节码或 Bitcoin 脚本的智能合约也可以编译为 CKB-VM 字节码。当然我们可以清晰地看到这些传统合约迁移到更有效字节码上的优势,并且,与使用较低级编程语言实现的智能合约相比,在 CKB 上的这些合约可能具有更大的运行开销(CPU cycles),但是对于一些不同的应用场景来说,这里节省下来的开发时间以及安全性优势,可能比在运行开销更有价值。 ...

June 5, 2019 · 4 min · jiezi

追求极致的设计理念用-RISCV-从头设计-CKB-虚拟机

Nervos 底层公链 CKB 的虚拟机(CKB-VM)是基于 RISC-V 指令集打造的区块链虚拟机。在上一堂分享中,我们简单介绍了区块链虚拟机,以及我们理想中的区块链虚拟机的样子。在本篇文章中,CKB-VM 设计者将详细的介绍 CKB 虚拟机的设计理念,以及选择 RISC-V 指令集背后的思考逻辑。秘猿科技区块链小课堂第 23 期 CKB-VM 的设计理念CKB 是 Nervos Network 的基础层,其目标是 为上层应用提供足够的安全性和去中心化 。在调研 CKB-VM 选型的过程中,我们反复思考:CKB-VM 应该要有哪些特性?显然,对于一个在区块链上使用的虚拟机,有两个关键特性在任何情况下都必须满足: 确定性 :对于固定程序和输入,虚拟机必须始终返回固定的输出结果,结果不会由于时间、运行环境等其他外部条件而改变;安全性 :执行虚拟机时不会影响到平台本身的运行。但是这些条件仅仅是强制性条件,我们希望设计出一个虚拟机,能够更好地服务于 CKB 的目标。经过深思熟虑,我们认为这样的虚拟机应该 满足如下特性: 灵活性我们的目标是设计出一个足够灵活,能够长期运转的虚拟机,从而使得 CKB 能够与密码学的发展携手并进。密码学的历史是一段「执剑」和「破壁」的永恒之战:数千年的密码学发展史,加密与解密是一场没有终点的智力角逐,过往如此,未来亦然。一些适用于今天的加密算法,比如 secp256k1,将来可能会被淘汰;未来还会有更多有价值的新算法和技术(如 Schnorr 或后量子签名等)不断涌现。在区块链的虚拟机上运行的程序,应该能够更自由便捷地使用新的算法,同时那些已经被过时的算法应该能够自然地被淘汰。 为了方便理解,我们用比特币来举例。目前,比特币使用的是 SIGHASH 1 来进行交易签名,并且在共识协议中使用了 SHA-256 哈希算法。那么我们能够确保几年后比特币用的这种 SIGHASH 方式仍然是最好的选择吗?或者说,伴随着日益增长的算力,SHA-256 仍然适合作为稳定的哈希算法吗?而目前我们研究的所有区块链协议,若需要升级加密算法,则则不可避免地需要硬分叉。 在设计 CKB 时,我们希望探索如何通过 VM 的设计来降低硬分叉的可能性。 我们在思考,虚拟机是否可以允许升级加密算法?或者说,是否能够向 VM 添加新的交易验证逻辑?比如,在仍然使用 secp256k1 的情况下,如果有经济激励的驱动,或者出现更新算法的需求,我们是否可以在不分叉的前提下实现更高效的签名验证算法?又或,如果有人找到了在 CKB 上实现更好算法的途径,或者需要引入一个新的加密算法,那么我们是否能够确保他/她自由的实现? 我们希望 CKB-VM 能够给大家提供更多的实现空间,最大限度地提供灵活性,并且可以让用户无需等待硬分叉即可使用新的加密算法。 运行透明性在对当前这一代区块链 VM 进行研究后,我们注意到了一个问题,还是以比特币为例:比特币的 VM 层提供的仅仅是一个堆栈,并且执行时堆栈无法知晓可以存储在堆栈上的数据大小,或堆栈深度,其它所有以堆栈模式实现的 VM 都有同样的问题,虽然共识层可以提供堆栈深度的定义或间接提供堆栈深度(基于指令长度或 gas 限制)。这会让 VM 上的程序开发者必须要去猜测程序运行时的状态,这种类型的 VM 让程序无法充分发挥 VM 的全部潜能。 ...

June 5, 2019 · 2 min · jiezi

不用-WASM我们从头造轮子采用-RISCV-设计的区块链虚拟机-CKBVM-诞生记

秘猿科技使命是用技术创造信任,为价值网络提供基础设施和服务。为了实现这个使命,我们三年来坚持初心,步步为营打造加密经济网络。我们想要让互联网回归到本源,用区块链技术,去构造更美好的社会,因此我们设计了 CKB 底层公链。我们自己造轮子,开创性设计了独一无二的 CKB 模型,以及用 RISC-V 打造的 CKB-VM 虚拟机。本文就将谈谈 CKB-VM 虚拟机的诞生。秘猿科技区块链小课堂第 22 期 区块链的出现使得智能合约得到了更好的实现和发展,而区块链和智能合约之间,还存在着一个重要的角色: 虚拟机(Virtual Machine) 。 虚拟机的概念在上个世纪六十年代就被提出来,而到九十年代才开始流行。当时的网络跨越了众多不同的操作系统、浏览器,如果开发者想要制作一个应用,就需要去适配所有不同的操作系统。大家知道现在 App 开发就分为安卓和苹果系统,而当时局面更加复杂。恰好 Java 程序语言开始流行,Java 构建的虚拟机能够让程序只需要写一次,依托 Java 虚拟机就能够在多个平台上运行,所以当时提出的口号就是: 一处编译、到处运行 。 我们知道比特币是没有虚拟机的,因为比特币就是把一段数字(也就是「比特币」)从地址 A 转移到地址 B,而以太坊则提出,区块链上执行的为什么不能是一套代码,能够实现更多复杂多样的东西?这就是我们所说的智能合约平台,所有节点运行一样的合约代码得到完全一样的结果。 在区块链上,虚拟机就是智能合约的运行环境,是一个可以完全对外隔离的完整计算机体系。区块链通过虚拟机来调用和执行智能合约,并要求所有节点都达成一致。而节点用的是不同的系统,有些机器是 64 位的,有些是 32 位的,传统的 Java 虚拟机容忍计算结果有少量的差异,但是在区块链上所有结果必须一样,因此,一个新的、适用于区块链的虚拟机是必不可少的。 理想中的区块链虚拟机每个区块链项目的虚拟机设计,都会有自身的艺术追求,在追求众多的特性同时做不同层次上的取舍。在做了大量的研究之后,我们认为理想中的区块链虚拟机应该是这样的: 运行时有足够的 确定性 ,在调用同样的智能合约输入时,应该返回相同的输出结果,输出结果不依赖于时间、运行环境等外部的条件;运行时有足够的 安全性 ,虚拟机的执行不会对平台本身带来负面影响;对更新足够的 灵活 ,让区块链不用通过硬分叉,就可以实现加密算法的升级或新增(回想一下以太坊硬分叉升级的痛苦);信息足够的透明,可以让虚拟机上运行的智能合约充分发挥虚拟机的潜力;费用机制足够的 合理 ,能够确保虚拟机运行时资源消耗的计算方式更加合理准确;可以 支持不同的语言编译 ,让开发者能够自由地开发,将最新的科技运用其中。在设计 Nervos CKB 虚拟机之前,我们发现很多区块链项目都不是用真实的 CPU 指令集来构造自己的虚拟机的,他们更多的是选择了 WASM 来构造自己的虚拟机。 而我们更倾向于采用真实的 CPU 指令集来构造自己的虚拟机,因为在任何精巧复杂的虚拟机的最底层,都需要将操作转变为原始的汇编指令来执行对 CPU 的操作。另外,采用真实 CPU 指令集就不会在设计层面引入一些语义约束,束缚虚拟机的灵活性。 做一个不恰当的比喻,操作 CPU 需要有一套语言体系,使用真实的 CPU 指令集就如同能直接用这套语言体系和 CPU「说话」,那就非常方便。否则,就好像先说中文,再转换为英文,不论多完美的翻译水平,都会有一定的偏差和束缚。 ...

June 5, 2019 · 2 min · jiezi

Cell-模型让-Layer-1-成为一个灵活的法院

在上一篇《小白都能看懂的 Cell 模型》中,我们用大白话简单介绍了 Cell 模型。在这篇文章中,我们将会从「验证模型」和「状态存储」两个方面来介绍 Cell 模型——一个适合分层架构的区块链设计秘猿科技区块链小课堂第 21 期 首先我们来简单回顾一下区块链的发展历史:Bitcoin 作为一种点对点的电子现金系统应运而生,而后出现了更通用的去中心化应用平台 Ethereum,随着区块链的发展,各种各样的新项目也涌现了出来。在分析 Cell 模型设计之前,我们先了解一下区块链的分层理念。 为什么选择了分层?扩展性问题在区块链的发展过程中,始终有一座大山横亘在我们面前:扩展性问题。区块链如果不能解决扩展性问题,将会严重限制链上应用的发展。因为安全、扩展性、去中心化这个不可能三角问题的存在,在不牺牲安全和去中心化的前提下,要在 Layer 1 上解决扩展性问题几乎是不可能完成的任务,因此我们只能绕道而行,选择分层方案。 状态爆炸问题随着区块链慢慢被更多人使用,它必然会面临状态爆炸的问题,若是将所有的信息都存储在区块链上显然是不合理的。 交易费用问题在经济学上判断一项技术能否被大规模使用的标准是:是否节约了全社会的交易成本。在区块链中所有交易和存储都需要经过全网共识,这就使得交易费用相对昂贵。从这个角度来讲,分层架构也是必然的选择。 这里类比一个计算机的例子:在计算机中有各种存储设备,包括寄存器、多级缓存、内存、硬盘,运行速度越快的设备价格越高,但正是计算机充分利用了分层设计,才使得它以更低成本被制造并被大众所接受。 在区块链中同样如此,安全和去中心化是非常昂贵的,分层可以降低成本,使其成为一种更普世的基础设施。所以当我们在思考如何去设计区块链时,就需要设想未来的场景,它应该是一个分层的区块链。 不知道以上的分析是否会帮助你理解区块链的分层呢?在此基础之上,我们来介绍为什么选择使用 Cell 模型的设计。 Account 模型与 Cell 模型Bitcoin 的 UTXO 模型只能作为数字货币,并非通用的模型,所以这里我们主要对比 Account 模型和 Cell 模型。 Cell 模型继承了 UTXO 的衣钵,是一种验证模型;而 Account 模型是一种计算模型。关于验证模型和计算模型的论战从来没有停止过,今天我们就从另外一个角度来审视这个问题。 现有的 Layer 2 方案,包括闪电网络,雷电网络,Plasma 等,在将其 Layer 2 上的资产退回到 Layer 1 时,都采用了提交证明、验证挑战的机制。所以 Layer 1 更像是一个法院的角色,通过对用户提交的证明来进行审判。在这种模式下,Layer 1 更多的是担任了验证者的角色,而非计算者。从这一层面来讲,Layer 1 更适合采用 Cell 模型,而 Account 模型在计算上更胜一筹。 在 Ethereum 中状态存储的问题已经非常严重,全节点的数据存储代价已经很高,且其中保存有大量的僵尸账号。在 Account 模型中,同一合约的所有用户的资产都是保存在一个账号中的,将用户的状态拆分非常困难。在 Ethereum 中,交易采用的一次付费永久保存的方式,显然是不合理的。 ...

June 5, 2019 · 1 min · jiezi

小白都能读懂的-Cell-模型一个被施展了魔法的盒子

设计一条好的底层公链,必须从技术角度、经济角度、以及共识角度进行全方位的考量。我们花了 4 期(第 16/17/18/19 期)向大家解释了底层公链 CKB 技术实现中的关键点之一:Cell 模型。为了让大家更好的理解公链 CKB 的 Cell 模型,我们为大家带来两期小白都能读懂的 Cell 模型文章。(PS:该篇是小白都能读懂的 Cell 模型系列文章之一)秘猿科技区块链小课堂第 20 期 UTXO: 只能存放数字的盒子我们先从区块链鼻祖 Bitcoin 说起。Bitcoin 是一个点对点的电子支付系统,它的账户模型叫 UTXO,也就是未花费交易输出(Unspent Transaction Output)。 我们可以把 UTXO 看成一个带锁的盒子。是的没错,是一个盒子,而不是账本,不要慌。这个盒子里存放的是一个数字,用来表示这个盒子的面值。另外,这个盒子上还有一把锁,只有拥有对应钥匙的人,才可以打开这个盒子。在进行转账时,所有者使用钥匙打开锁,接着重新找到另外一个空盒子,将新的面额放进去,并配上一把属于接收者的新锁(私钥)。如此一来,我们可以将交易过程简单理解为「打开盒子,取出里面的钱,销毁原来的盒子,放到另外的盒子里」。 总结而言,在 Bitcoin 的账户模型中,盒子表示 UTXO,数据保存在 UTXO 中,而锁(私钥)用来表示所有权。 密码学实在是一项伟大的发明,它把物理世界锁的概念映射到了虚拟世界。 Account: 存放数据与逻辑的 ATM 机在理解 UTXO 模型后,我们再来介绍一下 Account 模型,其中最出名的当属 Account 模型的首创 Ethereum。在 Ethereum 中 Account 模型存储的也是数据,不过与 UTXO 不同的是,Account 中除了数据还有逻辑。因此,相对于比特币脚本而言,他可以执行更丰富的智能合约。 以 ERC-20 的智能合约为例,我们也可以将它比喻成一个盒子,不过在这个盒子里存的并不是钱,而是一套复杂的逻辑和数字。与 UTXO 不同,Account 模型的盒子是一直被重复利用的,并且无法打开。就像在盒子的出厂设置时,我们就已经将一套逻辑写到盒子里,只留几个固定的按钮给外界,外界的用户只有在特定的情况下才能触发这些按钮。 Account 的特性就像一台 ATM 提款机,当我们需要转账时,就需要一张能够标示身份的银行卡,以及对应的密码,然后输入转账金额以及收款方等信息,最后点击转账。盒子在接受到这些信息之后,就会将对应的金额从转账发起方的余额中扣除,在收款方的余额中增加,并同步更新内部数据,用户的金额会一直保存在盒子中。熟悉编程的同学很快就会发现,Account 模型就是现实世界中的面向对象模型,具有图灵完备的性质。 在 Account 模型中,盒子负责保存逻辑和数据,并且借此更完备的执行智能合约。出厂设置将逻辑写入盒子后,就永远无法更改。若需要修改数据,只能通过外部的条件去触发。所有人的钱都会集中记录在盒子里,交易过程中,交易双方只需要输入交易信息即可,盒子负责处理和更新数据。 ...

June 5, 2019 · 1 min · jiezi

全新的设计Cell-模型

本文是对前几期秘猿区块链课堂中关于 Cell 模型的总结。底层公链 CKB 的 Cell 模型是一个高度抽象的模型,事实上,你不仅可以在 Cell 上实现 First-class Asset,也可以在 Cell 上模拟 Account。通过本文的介绍我们可以看出,Cell 模型是一个不同于 UTXO 模型和 Account 模型的新设计。除了状态模型的不同,CKB 还将计算(也就是状态生成)转移到了链外,在链上只需要对状态进行验证的逻辑。独特的状态模型和计算验证分离这两点决定了 CKB 的编程模型上必然会出现新的 DApp 范式和设计模式。秘猿科技区块链小课堂第 19 期 喜欢函数式编程的工程师应该很熟悉一个名词:First-class Function,翻译成中文应该叫「头等函数」或者「一等函数」。First-class Function 指的是一类编程语言,在这些语言中函数是一个完全独立的概念:函数可以被当作值赋给一个变量,可以被当作参数传递给其他函数,也可以被当作返回值从其它函数传出来。在这样的语言中我们可以像操纵数据一样操纵函数,所以在这些语言中函数和数据一样是「一等公民」(First-class Citizen)。First-class Function 是函数式语言的一个关键特性,很多函数式编程的强大能力来源于此。 Nervos CKB 使用 Cell 模型来构建整个共同知识库的状态。Cell 模型是一个非常简单但是与现有区块链设计非常不同的状态模型,我们在设计 Cell 模型的时候已经意识到,基于 Cell 模型的 DApp 将拥有一些非常不同的性质,就像函数式编程和面向对象编程会产生风格迥异的设计模式和程序特性一样。在这篇文章中,我想阐述 Cell 模型可以支持的一种非常有趣的 DApp 设计模式,我们把它叫做 First-class Asset,因为通过它我们可以将用户自定义的加密资产变成区块链中的「一等公民」。 状态模型的快速入门在 Cell 模型之前,各种区块链使用的状态模型基本上就是两种:UTXO 模型和 Account 模型。 使用 UTXO 模型的代表是比特币。UTXO 是未被花费的交易输出(Unspent Transaction Output)的缩写,一个 UTXO 可以简单的理解为是一个比特币,然而和一般的硬币不同,每一个 UTXO 的面值都是不一样的。每个 UTXO 中都通过一段锁脚本(Lock Script)记录了这枚硬币的所有者是谁,同时保证只有所有者能够花费这枚硬币。每一个比特币全节点都会维护当前所有 UTXO 的集合,这个集合我们就称为比特币账本的当前状态(即当前的账本)。每一次比特币转账都是一个从 UTXO 集合中删除几个硬币(属于付款方)然后又增加几个新硬币(属于收款方和 / 或付款方)的过程。由于整个账本状态是基于 UTXO 这个最小单元构建的,我们把它叫做 UTXO 模型。 ...

June 5, 2019 · 2 min · jiezi

理解-CKB-的-Cell-模型

为了理解底层公链 CKB 的 Cell 模型,我们前置了几篇概念性文章,讲述了我们应该以状态为中心设计区块链系统的,以及这么做带来的好处。并且在上一篇文章中,详细分析了比特币 UTXO 模型和以太坊的 Account 模型,以及进行了对比分析。终于,我们要来了解集大成者 Cell 模型了。(前排提示:一遍看不懂没关系,多看几遍就懂了)秘猿科技区块链小课堂第 18 期 在设计 CKB 的时候,我们想要解决三个方面的问题: 状态爆炸引起的公地悲剧及去中心化的丧失;计算和验证耦合在了一起使得无论是计算还是验证都失去了灵活性,难以扩展;交易与价值存储这两个目标的内在矛盾,Layer 2 和跨链的出现将放大这种矛盾,并对 Layer 1 的经济产生非常负面的影响。对这些问题没有答案,Layer 1 就无法长久运行,区块链给我们的种种承诺自然也是无从谈起。这三个问题根植于区块链架构和协议设计的最深处,很难通过打补丁的方式来解决,我们必须从最基本的数据结构开始,重新审视问题的根源,寻找更合适的地基。 幸运的是,这个更合适的地基简单得令人感到幸福,而且一直就摆在我们眼前。(本文会包含一些非常简单的代码,应该不会影响非技术读者阅读……) 从 Bitcoin 中我们学到了什么Bitcoin 把整个账本分割保存在了一个个 UTXO 里面,UTXO 是未花费交易输出(Unspent Transaction Output)的简写,实际上是交易中包含的输出(CTxOut)。CTxOut 的结构非常简单,只有两个字段: class CTxOut{public: CAmount nValue; CScript scriptPubKey;...}每一个 CTxOut 代表了一个面值不同的硬币(Yay bit-“Coin”),其中 nValue代表这个硬币的面值是多少,scriptPubKey 是一段表示这个硬币所有者是谁的脚本(通常包含了所有者的公钥),只有能提供正确参数使这个脚本运行成功的人才能把这个硬币「转让」给另外一个人。 为什么要给「转让」打引号?因为在转让的时候,并不是简单地把硬币中的 scriptPubKey 修改或是替换掉,而是会销毁和创造新的硬币(毕竟在数字的世界中销毁和创造虚拟硬币的成本很低)。每一个 Bitcoin 交易,都会销毁一批硬币,同时又创造一批硬币,新创造的硬币会有新的面值和新的所有者,但是被销毁的总面值总是大于等于新创造的总面值,以保证没有人可以随意增发。交易表示的是账本状态的变化。 这样一个模型的特点是: 硬币(资产)是第一性的;所有者是硬币的属性,每一枚硬币有且仅有一个所有者;硬币不断的被销毁和创建。是不是很简单?如果你觉得自己已经理解了 Bitcoin 和 UTXO ,恭喜你,你也已经理解了CKB 和 Cell! CellLayer 1 的关注点在状态,以 Layer 1 为设计目标的 CKB 设计的关注点很自然就是状态。Ethereum 将交易历史和状态历史分为两个维度,区块和交易表达的是触发状态迁移的事件而不是状态本身,而 Bitcoin 协议中的交易和状态融合成了一个维度,交易即状态,状态即交易,正是一个以状态为核心的架构。 ...

June 5, 2019 · 3 min · jiezi

UTXO-和-Account-模型对比

Nervos 加密经济网络中的底层公链 CKB 是比比特币更像比特币的价值存储平台。(这一点将会在经济模型设计中讲到,敬请期待~)在技术实现上,我们也充分对比了比特币 UTXO 模型和以太坊 Account 模型的优劣,从中继承了比特币协议对状态为核心的优秀架构。我们称 CKB 是一个通用验证网络,Cell 是对 UTXO 的一般化版本。并且,发展出了 CKB 模型的优势,在 CKB 当前状态中存储的是任意的共同知识,而不再仅仅是某一种单一数字货币。在深入了解 CKB 公链中的 Cell 模型前,我们来谈一谈前置概念:UTXO 和 Account 模型!秘猿科技区块链小课堂 17 期 在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式。Bitcoin 采用的是 UTXO 模型,Ethereum 采用的 Account 模型,同样 CITA 也采用了 Account 模型。 Bitcoin 的设计初衷是点对点的电子现金系统,在比特币中,每个交易消耗之前交易生成的 UTXO 然后生成新的 UTXO,账户的余额即所有属于该地址的未花费 UTXO 集合,Bitcoin 的全局状态即当前所有未花费的 UTXO 集合。Ethereum 意图创建一个更为通用的协议,该协议支持图灵完备的编程语言,在此协议上用户可以编写智能合约,创建各种去中心化的应用。由于 UTXO 模型在状态保存以及可编程性方面的缺陷,Ethereum 引入了 Account 模型。下面我们对两种模型的优缺点做进一步展开。 UTXO 模型UTXO 模型中,交易只是代表了 UTXO 集合的变更。而账户和余额的概念是在 UTXO 集合上更高的抽象,账号和余额的概念只存在于钱包中。 ...

June 5, 2019 · 2 min · jiezi

HelloCKB走向加密经济的重要里程碑

说到“猿”起,这些心里的想法能追溯到 2016 年,甚至更早。2017 年,包括分层的网络以及一个作为共同知识库(Common Knowledge Base)的区块链,都已经成熟。因此 2018 年元旦一过秘猿科技的技术团队就迫不及待的行动了起来,聚集在一间小小的办公室,进行了 CKB 想法的第一次分享,第一次整理了开发计划,在 1 月 23 日写下了第一行代码。 从那时起到现在已经过去了 300 多个日日夜夜,经历了多个迭代和冲刺,CKB 的版本终于来到了 0.1.0。设计框架基本成型,包括共识、Cell 模型、虚拟机以及网络协议在内的组件都已经实现,开源的准备都已经完成。现在,我们终于可以说一句,Hello CKB! 我们朝着心中的加密经济网络迈进了历史性的一步! 秘猿科技区块链小课堂第 15 期 CKB 开源仓库Nervos 网络是一个分层架构的分布式应用网络。CKB 是一个在设计上非常不同的公有链协议,也是 Nervos 网络中的基础层,是整个加密经济网络的信任引擎。CKB 从分层架构的角度出发,目标是成为资产存储层和上层协议的仲裁层。 CKB 的开源仓库如下:https://github.com/nervosnetw... - CKB 主仓库https://github.com/nervosnetw... - CKB 虚拟机仓库。CKB 虚拟机是我们专门为区块链设计的,使用 RISC-V 指令集[1],用来执行CKB上智能合约的虚拟机。 CKB 的编程模型由 Cell 模型和 CKB-VM 组成,在 CKB 上运行的 DApp 都有计算和验证两个部分[2],计算在链外运行,验证在链上由 CKB-VM 执行。由于这是一种新的编程模型,我们通过如下三个仓库提供了合约代码及 SDK 示例: https://github.com/nervosnetw...https://github.com/nervosnetw...https://github.com/nervosnetw... 请注意,CKB 还在快速开发迭代中,这里只是提供简单的示例参考,CKB 的 API、编程模型和其它设计在未来都有可能发生变化。 作为一个开放的网络,Nervos 通过 RFC (Request for Comments) 流程来定义规范和改进协议。我们欢迎社区通过RFC流程来和我们一起推动 Nervos 网络的发展。Nervos RFCs 仓库位于:https://github.com/nervosnetw... ...

June 5, 2019 · 2 min · jiezi

区块链共识的四个阶段

在接下来的秘猿科技小课堂里,我们会从技术角度、经济模型设计角度、以及共识角度来拆解 Nervos 加密经济网络中,底层公链 CKB 的设计理念。而本文将会作为技术角度核心设计 Cell 模型的预备文章,通过本文,我们希望读者能够理解比特币以状态为中心设计的优势!从而,能够在接下来的几篇文章中,更加充分的理解 Cell 模型对于比特币/以太坊模型的传承与突破。(PS.本文源于 2018 年初,秘猿科技在招商银行总行举办的一次金融区块链闭门会,公链 CKB 是对文中思想的具体实现。) 秘猿科技区块链小课堂第 16 期 如何对状态机建模状态机是计算机的一个基本模型,它可以分成二个部分:状态和操作。状态是指计算机里的数据;操作是指对数据进行的操作。如果把状态机比喻成日常使用的数学计算器,计算器屏幕上显示的就是状态,按「按键」就是对计算器的操作。 状态机模型 区块链用许多的节点共同模拟了一台多复本的状态机。在许多区块链或者分布式系统中,用户发出的签名交易包含了对状态机的操作,节点执行共识协议对所有操作进行排序,然后按共识排好的顺序执行操作,计算出新的状态。 多复本状态机 举例:我们先保证所有节点初始状态一致,就是让每人手上的计算器开始状态为数字 0。然后我们把要执行的操作广播给每个操作员,这四个操作员算完后,这个计算器上的最终结果是一模一样的。为什么会有一样的结果?因为他们有一个相同的初始状态。接着,我们用共识算法保证了相同的操作顺序。所以最后一定有一个相同的最后状态。 状态机的概念在区块链里面非常重要,但我们往往忽视其中的基本细节。设计区块链最应该考虑的因素,是应该以状态为中心,还是以操作为中心进行设计?这二种不同的设计理念会对整体架构产生很大影响,这也是比特币和以太坊架构的一个根本区别:比特币是以状态为中心的设计,以太坊是以事件为中心的设计。 这两者有非常大的区别。如果以事件为中心,计算是在节点上发生;以状态为中心的话,计算是在客户端发生。计算转移到客户端,节点的计算就相应减少。交易包含最后的状态的话,节点可以很方便的判断交易的相互依赖关系。计算在节点上发生的话,客户端就可以很简单。所以我们需要根据目标来权衡这个事情。其实很难说谁更好,只是看我们目标是什么。 如何设计账本区块链被称为分布式账本,记录着所有者和资产之间的关系。账本里有二个概念,一个是资产,一个是所有者。所以可以从二个方向去设计系统。 账本设计 账户模型以「人」为核心建模,先建立账户的概念,再记录他们的账户里有多少钱,以太坊、CITA 、Ripple 都是这个模型;以「资产」为核心建模,最基础的概念是资产,比如 UTXO,在 UTXO 的基础上去记录所有权。以资产为核心建模,更适合并行处理,一个人所拥有的资产不再是一个字段,而是可能分成十份。我可以独立去操作这十份资产。 RSM设计 以账户为核心的设计,交易并行处理更难,账户更改只能按照交易顺序一个一个来。但是,账户模型可以很方便的去记录账户相关的元数据,比如说这个账户有哪些权限。所以对于许可链来说,账户模型是非常适合的选择。 如何选择共识在公有链上,比特币所开创的 Nakamoto 共识,在开放网络下,引入了经济激励,在开放网络下实现了对拜占庭错误的容忍,但也付出了性能上的代价。许可链中通常使用传统拜占庭共识的变种,充分利用了分布式系统领域过去几十年的研究成果。优点是延迟非常低、吞吐量很高。 在网络分裂时,许可链是选择网络停止服务,等待网络的恢复,来保证一致性;公有链则偏好可用性,在网络分裂时可以容忍账本分成二个版本,等网络恢复之后,选择其中一个版本作为正确的版本,废弃掉另外一个版本。公有链想要的是 24 小时不间断的服务;金融行业回滚的代价太大,想要的却是一致性。所以选择 C 还是选择 A,取决于你的需求是什么。 区块链共识的四个阶段第一阶段是「加入共识」加入共识阶段决定了什么样的节点可以参与共识协议。比如:在比特币中,一开始是任意节点都可以加入共识。现在则可以认为比特币的共识加入机制变成了买矿机,有矿机才能参与共识。在 PoS 里面,则是需要持有代币或者交保证金才能参与共识。在 DPoS 里面,代理人需要获得足够多的投票才能参与共识。学术界也有其他的研究,比如是加入共识也需要提供一个工作量证明。 通过加入共识阶段的设计,我们可以把参与共识的节点范围缩小。比如公有链上有一万个节点,但是我们只要设计一个加入共识的机制,就可以把共识范围缩小到 100 个节点,一旦我们可以缩小这个共识范围,后面就可以用任意的方法去实现共识。 第二阶段是「出块」这个阶段需要选择一个节点来将交易打包,生成一个新的区块。通常有三种方式: 1.共识节点按轮流顺序出块,比如 PoA。2.采用随机出块方式,从 共识节点里随机挑一个节点出块,比如 PoW, NXT-PoS,DPoS。3.在不出问题的情况下一直保持一个节点出块,目前只有许可链会用这种方式。 第三阶段是「进行验证和投票」涉及到共识投票的过程,这里的设计就非常多。现在大家经常在讨论的一些新的共识方法,往往只是第二和第三阶段的方案。 投票主要有用区块投票和用消息投票两种方式。在 Nakamoto 共识中,新制造的区块是一张投票,下一个矿工挖出的块是对之前一系列区块的投票。每一个区块都是一张票(严格来说票有权重,例如工作量证明),最后那条高度最长,包含的区块(票数)最多,就是胜出的那条链。在许可链里面,常常通过节点之间交换投票消息来对新出的块进行投票,所以在下一个块没有出之前就可以对这一个块完成共识。 第四阶段是「退出共识」这是常常被忽略的部分。在比特币系统中,退出共识很简单,停止挖矿就行了。在许可链中,我们本来是共识节点,现在不想做共识节点了,则需要有相应的设计,进行共识节点变更。 以上四个步骤是区块链共识的一个完整流程。传统 BFT 共识算法,发挥作用一般是在第三阶段,在网络异步的时候会涉及第二阶段,基本上不讨论其它两个阶段。所以我们如果要将传统的共识算法融入到区块链中,需要另外考虑的问题是非常多的。 未来我们能做什么在设计 CITA 的时候,我们是为企业级的用户考虑的。他们拥有很好的计算资源,所以我们可以通过内部并行和分片的方式解决区块链面临的性能扩展的问题,把区块链里每一个节点的能力放大一百倍,那么整个网络的能力就会放大一百倍。这是我们 CITA 提出微服务的原由。我们把一个节点拆散,将节点内部变成一个集群是 CITA 能够提升吞吐量的根本原因。在 CITA 里面有很多的微服务,比如 auth 服务是交易验证的,是可以并行处理的。所以我们通过这个方式去解决性能瓶颈问题。 ...

June 5, 2019 · 1 min · jiezi

区块链未来的展望

在前面秘猿科技小课堂的三篇文章中,我们从三个角度看待了区块链,第一个方面是区块链对一些基本问题的答案;第二个方面是区块链作为基本工具的工具论;第三个方面涉及到区块链对每个部门法的影响。在最后一个方面,我们将会对整个行业级技术应用做一个简单的展望。 秘猿科技区块链小课堂第 11 讲点击关注秘猿科技在思否的技术社区吧~ (一)政治上的展望:代码成为新的主体第一个展望是:社会上会出现大量的新的主体:代码。区块链的无限地址服务在很多情况下不是为自然人或是法人准备的。因为有关自然人加法人一起的数量实在太少了,以至于用传统互联网就能在短时间内处理完。区块链在更多的情况下是为物联网上的机器和人工智能算法准备的。 现在人工智能有一个趋势叫做自动调参,也称作自动算法。那么这个过程中存在大量的遗传算法。因为大家知道人工智能是一个黑箱,程序员是通过输入的数据和输出的数据调节其中的参数的。调节好之后再用它来处理数据。因为人工智能是个黑箱,实际上没有人知道其内部的工作原理。这种情况下实际上人工智能需要通过类似遗传筛选的方法淘汰掉大量低效的算法。也就是说,它会维持一个很大的算法主体群,使他们计算同样的事情并及时淘汰掉不需要的算法。这些都是区块链可以提供的相关的服务。 区块链有海量的低成本的地址可以为物联网提供服务。例如一个分布式太阳能发电群,它的每一个设备的太阳能板的账户不可能是开在银行的账户,这是无法想象的事情。它们肯定是在区块链上的,由区块链提供这种实时的清结算服务。 (二)经济上的展望:区块链与物联网和人工智能第二个展望是:区块链将为物联网设备和人工智能算法提供政治治理,市场交易和法律服务。 1.人工智能如何进行决策已经难以被人类理解刚刚也讲过了人工智能的决策。《未来简史》中提到:人在未来可能会被机器和代码当成宠物圈养。人们可能已经无法理解人工智能到底如何进行决策。因为它的数据量,交易的频次以及交易的密度都不是人脑能够负担的。这些场景其实离人类已经很近了。 2.新的经济组织:DAO经济上,会出现一个新的类型的经济组织。这个组织叫作 DAO(Decentralized Autonomous Organization)。比特币就是一个典型的 DAO。那么它是怎么组织生产的呢?现在的人们主要组织生产的形式是公司制以及投资形式基金制。在 DAO 中是人,更多情况下是设备算法向代码支付费用:加密货币,并购买代码加密资产,比如以太猫。这就是一种客户服务。同时人们也通过把东西卖给区块链代码来获得加密货币。这个过程就不只有区块链在中间工作,其中也会有大量的人工智能的算法在决定价格。 在这之后就要看这个算法设定的条件是给所有人的福利最大化吗?经济学家经常做一个假设使所有人的福利最大,最后会得到一个顶点的结果。这个结果会不会剥夺某些个体的权利呢? 这种情况下我们也要考虑一个问题,如果都交给人工智能了,人工智能会不会基于环保的考虑,或者说极少数人对于环保的极端要求消灭大多数人类?这种情况很可能需要区块链的设置来约束人工智能的行为。 3.拥有代码修改权的组织掌握了巨大的经济分配权在这种情况下,掌握区块链代码修改权的人或者组织会掌握巨大的经济分配权。Garvin Wood 是以太坊黄皮书的作者,他在进行 Polkadot 项目 ICO 的时候被锁了十几万个以太坊。然而想要解锁这部分以太币,需要以太坊回滚。即使他完全可以算是 Vitalik Buterin 的好朋友,最后社区也没有同意回滚的选择。回滚在技术上是有可能性的,但是整个社区将要付出巨大的代价并承担巨大的风险以及不确定性,并且有很大的声誉损失,在此之后可能大家就不和你玩了。部分回滚最后会造成分叉,这也是一个巨大的代价。 (三)法律上的展望:区块链降低了制度实验的门槛法律上出现了一个历史上从未有过的景象。法律实践以及制度实验门槛从未如此之低,代价如此之小。过去人们想在一个民族或者一个经济社会里面做一个制度设计或者制度实验,需要推翻一个政府,来实践自己的主张。 现在实际上要求没有那么高了。人们可以在区块链上面设计各种投票制度。对于这种法律之间的竞争,分叉也是一种途径。那么最后实验胜出的人他会通吃吗?在这个地方会出现一个跨链协议的概念。现在有很多公链协议实际上在做跨链。跨链就是在不同公链之间的资产如何转移,如何进行兑换,通兑。 大家有没有想过,有一天会出现链之间的并购。公司间的并购是经常被提到的。现在其实在现实生活中已经出现了链和链之间的并购。也就是他双方互认对方的资产和身份。这是一种新的玩法。当然也会涉及到大量的协议。举一个例子,Aragon 是一个公链项目。它的口号是要做一个区块链上的特拉华州。主要内容是以公司或者商业为核心的登记和治理。它还有一整套的法官体系,包括三级法院。每级法院的法官的产生的规则都不一样。这是一个很有意思的实验。

June 4, 2019 · 1 min · jiezi

区块链作为基本工具的工具论

上一讲中,我们深入探讨了区块链对一些基本问题的答案,包括对时间的答案、对空间的答案以及对能量的答案。在这一篇文章中,我们将从区块链作为基本工具的工具论方面切入。这个方面包括了它是怎样看待这个世界的:它使用了哪些工具,以及它使用了哪些方法?构造了哪些全新的博弈环境并形成了哪些新的博弈均衡态?这些方法也许和人们过去所知道的方法都不太一样,就像原始人无法理解一个现代白领的工作意义一样。这些玩法也是区块链的核心,需要人们去重新理解,积极参与的,并将从根本上重新塑造人与人之间,人与物质世界之间的关系。秘猿科技区块链小课堂第 9 期 (一)区块链是软件开源运动结出的果实接下来让我们来了解一下,在整个新的商业结构里面还有哪些玩法是大家不熟悉的。 区块链是软件开源运动所结出的果子。在以下这张图中左侧是软件开源,右侧是硬件开源。软件开源是从 1991 年的开源系统 Linux1.0 开始的。硬件开源也有很多。其中有一个叫做 RISC-V。在这里简单地介绍一下,因为这可能跟目前所说的内容有关系。RISC-V 是 CPU 的指令集。 1.个人电脑的指令集在个人电脑时代,只存在一个指令集。这个指令集叫做 x86。这个指令集是英特尔还有 AMD 公司正在使用的指令集。然而这个指令集是闭源的。并且这个指令集非常复杂。现如今它包括了几十万条的指令。现今个人电脑的英特尔制造的 CPU 用的指令集就是 x86 指令集。 这种指令集有两个特点。第一,它的存在是闭源的。换言之,只有特定公司懂得如何编译这种指令集。第二,这个指令集非常的复杂。其中有几十万条指令。这么多指令是很难进行修改的。将这个指令集开源,其他人也看不懂;能看懂也不敢改,一改很可能就崩了。非专业人员很难对这些指令进行编译。这种商业模式给英特尔这些核心的芯片厂商带来了巨额的垄断利润。 2.手机端的指令集还有一个指令集。它是手机芯片的 ARM 指令集。编译这个指令集的公司是一家英国公司。这个指令集是有开放许可的。授权费用大概在 1000 万到 2000 万美元之间。有这个指令集的存在,谷歌开源的安卓系统才会大规模应用。安卓就是手机操作系统软件的开源。ARM 并不是开源,但是它是公开许可使用的。所以在国内可以看到众多厂商,只要它是一个大规模的公司,这些厂商就可以制做自己的手机,比如步步高的 OPPO 和 VIVO。还有很多家电厂商也可以做手机,比如 TCL。这是一种商业模式。 这也是中国现在手机厂商能够通过自己努力去占领印度以及非洲市场的原因。印度人用的手机和非洲很多国家的人用的手机都是中国制造,但是手机的品牌大多数人在国内并没有没听说过。这种手机并不在中国售卖。它们不是针对中国人设计的产品。它们的设计理念是超长待机。超长待机是什么概念?这些手机充一次电可以用半个月。因为有些非洲国家的人时隔半个月才能找到可以充电的地方。所以这些手机不是为中国人设计的。但是人们会发现这个市场比原来宽松了许多。 3.物联网时代的指令集说完个人电脑和手机的指令集,我们现在来谈谈物联网时代的指令集。我们将RISC-V 称之为物联网时代的指令集。这是一个什么样的指令集呢?这个指令集是 2016 年加州伯克利大学专门研究指令集的教授做的。这个指令集的指令十分简略,基本指令控制在一百条以内。这个教授说:根据他多年对指令集的研究,这一百条以内的指令可以搭建出其它所有的复杂的指令。而且这个指令集是开源的。不知道大家对 IC 行业有没有了解。现在已经有很多基于 RISC-V 的芯片在流片了。也存在很多大的芯片生产设计厂商提出会支持 RISC-V。 RISC-V 是专门为物联网设计的。它的指令集会达到 32 位甚至更小的 16 位,并拥有更低的耗能。在不远的将来,人们就会看到,过去的昂贵的嵌入式芯片很快就会被基于 RISC-V 的芯片全部替代。 这个改变是 2016 年才开始的,到现在为止也不到三年时间。因此这会是一个重大的机会。 这个就是开源的玩法,我们看到大量的软硬件产品在进行开源,包括很多大厂的产品。以上提到的软硬件对程序员或者从事 IC 行业的人来说应该更为熟悉。这些软硬件都是他们日常在使用的。在这个过程中也许中间出现了很多误解,开源到底是什么意思?首先代码开源运动不代表着免费。代码开源运动被称为自由代码运动。任何人都可以使用这些代码,但是不代表这些代码是免费的。 (二)区块链和开源运动的关系1.区块链应该是开源的那么区块链和开源运动是什么关系呢?有这样一个说法:没有开源就没有区块链。原因是区块链创造的信任是基于代码产生的。这里存在误解。这个误解是就很多国内的公司不会宣传自己的做的区块链是开源的。很多人会问如果做的是区块链,为什么不开源?这些公司不敢对区块链进行开源的原因,我不敢妄自揣测。但是如果所做的区块链不是开源的,其他人就不能看到对应的代码。不能看到代码就不能证明这个是区块链还是一个 TPS 很高的中心化系统。因此不开源的区块链技术是无法在技术上实现区块链的增信的,你还只是在信任这家区块链公司而已。 2.对区块链的信任建立在它代码之上那么最早比特币的信用又是怎样一点点搭建起来的呢?原因并不是中本聪这个人。是因为中本聪长得帅还是因为中本聪有钱呢?其实都不是。当然也不是因为比特币的白皮书。很多人非常看重白皮书。白皮书其实没那么重要,白皮书就是一个 vision,它是一个编写出的梦想。 对比特币的信任来自它的代码。这种信任是一步步建立的。到后来才有很多人开始觉得比特币可以信任。在这之后比特币才扩展成了一个网络。最后网络成型了,大家都愿意持续地在这个网络和网络的交易逻辑上进行投入。这种信任是基于代码增长起来的。 比特币的代码在对量进行控制。代码也在对账户进行控制。代码允许用户自己对量进行控制并且对账户进行控制。这种信任是基于代码的。因此我想说黄皮书比白皮书重要无限倍。 3.区块链白皮书、详细设计文档与开源代码在 ICO 风潮出现之后,大家都会去看白皮书。这是完全错误的方向。正确的做法是去看它详细设计文档和代码写的如何。详细设计文档是什么呢?以区块链详细设计文档的著名代表,Garvin Wood 撰写的以太坊黄皮书为例,它的细节丰富完备,定义清晰严格,逻辑自洽,根据这个黄皮书的内容,以太坊白皮书的内容在设计上具有很强的说服力了,才会有人进行投资和支持。只有白皮书是无法证伪所提出来的愿景是可以在工程上和博弈关系上实现的。另一方面要看代码,代码已经基本完成并且已经开源,程序员们才能通过去 review 以及测试这些代码,在觉得代码是可行的,才会进行投资。这里要补充强调一点,并不是一个项目有了详细设计文档和开源代码,就一定是靠谱的项目,但是相对于一个没有提供任何可以证伪的材料的项目而言,有详细设计文档和开源代码的项目至少是走在一个有诚意的、科学的道路上。 ...

June 4, 2019 · 1 min · jiezi

区块链对一些基本问题的答案

为了让大家能够更深入的理解区块链,接下来的秘猿小课堂里将会从四个方面切入。第一个方面是区块链对一些基本问题的答案。其中包括对时间的答案,对空间的答案以及对能量的答案。秘猿科技区块链小课堂第 8 期 (一)区块链是一个时钟让我们从第一个问题开始。区块链可以被看作一个时钟。如果与文明史结合来看,最早的时钟是什么?在北大隔壁学校的广场上有一座日晷。日晷上有一根杆子,从杆子影子的位置可以推测时间。这种时钟非常的依赖于太阳并且不精确。同时它只能够提供有限的服务范围,阴天或者晚上就不在服务区了。 1.牛顿时间与柏格森时间想要理解时间,首先要区分两个关于时间的概念。 第一个概念叫做牛顿时间。它是牛顿力学,也就是经典力学中的一个时间的概念。在经典力学里,时间实际上是空间的附庸。这个时间具有同质,可逆,均匀的性质。换言之,如果将牛顿力学中有关时间的公式在时间变量上逆转,公式也是成立的。 除了牛顿时间之外还有另外一种时间。这个时间叫做柏格森时间。亨利.柏格森(Henri Bergson)是一位法国哲学家。在柏格森看来时间是绵延的洪流。它是非均质的,不可逆的。它也是发散的,自由发展的并且是在连续创新的。这个时间是人类的时间。换言之,这个时间是社会的时间。它并不是物理的时间。 2.柏格森的习得记忆和纯粹记忆还有一个概念,叫做柏格森记忆。柏格森记忆分为两种。其中一种是习得记忆。以人类的历史为例,人们把过去事件的回忆记录下来,就叫做习得的记忆。胡适曾说过历史是任人打扮的小姑娘。历史学家克罗奇提出,所有的历史都是当代史。建立在这种历史上的记忆就是习得记忆。 另外一种记忆是纯粹的记忆。这种记忆是一种比较理想化的记忆。记录者会非常忠实的记录发生过的事情。这种记忆实际上是非常昂贵的。例如古代的史书如果想拥有这种纯粹的记忆,史官想真实地记录发生的史实,比如李世民杀兄屠弟的前因后果,做到这一点需要承受很大的压力。中国传统文化里还有为尊者讳,肆意删改历史的“春秋”史学和政治传统。所以纯粹的记忆是非常奢侈的。 3.区块链的时间现在区块链给了人们一个选择,或者一个答案。这个选择就是区块链上的时间。区块链给了社会另外一种时钟的选择。 区块链时间具有不可逆性区块链的时间是不可逆的。一般情况下,在确认了比特币上的六个区块之后, 再把六个区块重新推翻的可能性在数学概率上是非常小的。所以当有人进行一个交易,例如我给别人转了 0.01 个比特币,在确认了一个区块以后,换言之就是交易的这个区块被打包以后,交易所就会发出通知:这个比特币已经转入了。但是在这时,比特币里只有一个区块被确认。那么当支付方看到已经有六个区块被确认的时候,比特币的支付就已经完成了。因此,区块链有不可逆的特性。同时,区块链也是不可改的,也就是说区块里的哈希码是无法更改的。 区块链的时间是非均质的区块链上的时间还具有非均质的特性。何为非均质?举个例子,以太坊的以太猫交易曾导致以太坊的网络拥堵了很长一段时间。所以有一段时间人们发现以太坊的的交易特别多,这就使得有些交易被拖延了。因此,区块链的时间具有非均质的特性。有的时候区块链上的时间会出现非常火热的情况,有的时候反而又很冷清。 区块链时间是发散,自由并且连续创新的区块链的时间又可以被视为一个发散,自由并且连续创新的时间。 这个概念该怎么理解呢?人们经常听说区块链上存在分叉。例如以太坊马上要在块高7,280,000 上做一次硬分叉(注:后来又因为漏洞被推迟了,而且这次硬分叉原则上讲不会出现两条链)。如果这次升级后导致出现了两条新链,硬分叉之前的这段时间实际上是两条链来共享的。但是在硬分叉以后,出现了两个有共同过去的时间。并且在硬分叉这个节点的后面,两段时间的内容是不一样的。所以这个时间是一种自由的,连续创新的时间。 区块链时间是由事件堆叠而成的这样一来,区块链实际上给人类,给社会提供了一个可以使用的时间。在过去,人们拥有的时间是国家授时中心颁布的时间。它是物理的时间,由于这个时间是中心化发布的,这个时间很精确,但是人们在社会中交互的时候对这个时间的使用却很难做到精确。在这个时间里,时间和事件也无法紧密地结合。而区块链的时间却是由事件堆叠而成的时间。这个时间里每个事件都对应一个哈希值,每个哈希值都存在一个区块里,而区块是按照事件先后顺序紧密相连的。每一个事件都是另一个事件的时间证据,也就是区块关系上的见证。 所以如果想要在区块链上做一些有关商业,政治,文化的事情,首先需要理解一点:区块链是一个时钟。而且这是一个建立在所有过去与未来的事件的见证上的,世界性的时钟。处在这样一个世界性的时钟里,如果有人提问一个商业行为是在什么时候发生的?答案不会是某年某月某日。对方给出的回答会是这个事件发生在以太坊的某一个块高上。而这个回答可能对未来的商业交易来说是更加精确的。因为“块”是可查的。通过这个“块”的底层的交易哈希码就能够查到对应的商业交易,也可以查清哪些商业行为是在此之前,与此同时和在此之后发生的。 以下这个图片中的人是以太坊的创始人:Vitalik Buterin。他的手上举着这个牌子是有原因的。 事情发生在 2017 年的时候,有谣传说他因为遇到交通事故而丧命。而 Vitalik 在第二天就在 Twitter 上贴出了这张图片。图片中有他和最新的以太坊的区块报头。这个照片就可以证明 Vitallik 没有死。这就是一个以太坊在运用区块链时间的基本特性的例子。 Vitalik 将块高和报头都写在了这个牌子上。而这张照片是无法在拍照当时以前的任何时间拍到的。 图1: Vitalik Buterin 和他的“牌子” (二)区块链与空间让我们再来从空间的角度看区块链。每一个用户在区块链上都会有一个账户。这个账户包括一个比特币的地址。与此同时,用户还会有一个比特币的余额。这个地址可以先简单地理解为一个空间坐标,稍后我们会提到这个空间有多大。而在这个地址上会存在一个值。这个值可以是标量,例如比特币的余额。这个值也有可能是个向量。如果一个账户是被智能合约所控制的,那么这个值就可以被理解为一个向量,向量的特性是有方向的,有条件的。有了坐标,有了标量,还有了向量,我们在这个空间能干多少事情就无需烦言了。 1.区块链账户和传统账户的区别传统银行账户那么这个账户,或者称之为空间,跟传统的银行账户之间存在什么区别呢?先回到一个基本问题:银行账户是什么?如果有一个人想拿着身份证去银行开户,银行在开户时会告知一个账号。在此之前,银行会调查这个人在这家银行是否已经开通了三个以上的帐户。如果账户超过了三个,银行会要求这个人把对应的银行卡找出来。或者,如果卡找不到了就需要本人去办理挂失。银行不可能为任何人提供无限的服务。而且银行很难容忍账户里没有钱或者余额太少。如果卡中的余额不足以支付银行的服务费用,银行会把这张卡取消。如果这个人成功地开通了新账户,银行会让他设置一个密码。有一点需要明确:账户的号码是银行给的。而密码是账户持有者本人设定的。账户和密码这两者之间是没有必然联系的。同时这个没有必然联系的两个号码之间的联系是登记在银行的。持有者会自己记下账号和密码。但是,因为账户和密码是登记在银行的,所以最后银行比账户持有者更有发言权。 刚才也曾提到,在银行开户会有各种各样的限制和管制。例如根据现今的反洗钱法的规定,大额转账需要汇报。同样的法规在美国可能还更加严历。在美国收到特定金额以上的美元,是需要当事人把合同告知银行的。在合同报备了以后,当事人才能够把钱取出账户。从这个角度出发,美国比中国的管理得还要严格许多。这其中存在各种各样的管制和限制。 所以有人会问账户里的钱到底是不是自己的?这个问题的后面会有一个很大的问号。当然还有一点需要注意:我国的存款保险制度。人们曾经会认为银行是不会倒闭的。但是对法律体系熟悉的人就会知道我国在好几年以前就已经推出了存款保险制度。这个制度的最高赔偿金额是 50 万。在这里建议各位把的 50 万以上的存款分散存到不同的银行中。 区块链的账户我们再来看一下区块链的账户。区块链的账户是什么?使用区块链的账户首先需要设置一个私钥。换言之就是用户需要先设定一个密码。这个私钥是一个随机数。拥有了这个私钥之后,通过一个计算的过程,用户才会拥有自己的账户地址。 举一个例子,有一名用户拥有一个私钥。这个私钥简称 k。k 只有这个用户知道。这个 k 最好不是名人诗句。因为有人可以用程序遍历这种名人诗句产生私钥,这种私钥控制的地址就不安全了。因此私钥应该是一个随机数。拥有了一个私钥之后可以用这个私钥产生一个 K。这个更高一级的钥匙就是公钥。用这个公钥去进行哈希计算,就可以生成一个地址 A。所以说从设定私钥到生成一个地址是一个一以贯之的过程。换言之一个人就可以完成这个过程。如此一来,用户既有一个地址,又有一个操作地址余额的密码。这其中是没有第三方的介入的。除了用户自己没有任何人来登记账户和密钥之间的关系 。用户自己在登记,自己在管理,自己在操作。 那么地址有没有数量限制呢?答案是无限。无限是什么概念?地址的数量理论上是由数据结构决定的。这个数量的上限是 2^256。这个数字折算成十进制大概是 1.158 x 10^77。一个数字的 77 次方有多大?根据物理学的最新的研究,通过微波背景辐射计算出的整个宇宙的原子数的量级是 10 的 80 到 82 次方。 所以这个地址数量的上限已经非常接近无限了。可是使用账户的费用是按次计算的。一个账户可以一直放置到天荒地老。如果一个人想将一个地址留给重子重孙,是没有问题的。在这个传承地址的过程中间不需要任何其他的操作。 ...

June 4, 2019 · 1 min · jiezi

区块链解决个人数据滥用问题

在前面的秘猿科技小课堂中,我们了解到了区块链的本质,清晰了各种定义,明白了 2016 年,秘猿科技为什么要从许可链入手,以及秘猿科技高性能区块链内核 CITA 的优势。在本文中,我们将会探讨 CITA 将如何来解决个人数据隐私问题。秘猿科技区块链小课堂第 7 期 欧洲时间2018年5月25日,欧洲联盟出台了《通用数据保护条例》(以下简称“GDPR”)。该法案被公认为目前全球对用户个人数据保护最严格的法律,其适用范围涵盖所有与欧盟个人数据收集和处理相关的商业主体,违规企业将最高被处以上一年度全球营业额的4%或2000万欧元作为罚款。Facebook和谷歌等美国企业或成为GDPR法案下第一批被告。 据了解,GDPR的监管范式是针对互联网企业中心化服务的数据体系进行的,核心点在于加大数据控制者和处理者的法律责任。这与区块链在数据处理上的去中心化模式是完全不同的,其实施和推行将给区块链行业带来何种影响也一直是业内热议的话题。 控制个人数据滥用,谁是更好的答案?如今在全球范围内,个人数据泄露与滥用的情况普遍存在。其对民众基本权利造成的侵害,已经引起了社会公众和法律界的警惕。GDPR正是在现有的法律体系内,对相关民事、商事权利义务和政府监管义务作出了一整套的规范,试图构建一个新的法律框架,使个人数据的保护与商业使用等行为之间达到一个平衡的状态。 与GDPR的思路不同,区块链技术则试图从另一个角度给出答案。对于公有链网络,用户通过相关隐私措施,可以做到匿名使用相关服务。对于联盟链,个人数据的使用和存储都可以是加密的,除了共识节点、交易相对方和经授权的第三方以外,其他参与方都无法取得个人数据。一些最新的开放许可链和公有链甚至希望通过密码学技术、次级网络或是两者的组合,实现交易的数据和执行过程对包括共识节点在内的所有无关方的隐私保护,将个人数据的控制权完全交还到个人手中。通过基于可信硬件或是密码学的加密计算,保证商业主体和行政主体在提供相应服务的同时,也无法收集和留存个人数据。 以上两个思路都旨在解决个人数据滥用的问题。GDPR的优势在于依托成熟的法律框架,威慑可信,效果立竿见影;但同时由于执行成本高、过于依赖中心化互联网企业的配合,在切实提高企业经营成本的情况下难以得到有效执行,也难以制止互联网巨擘通过并购的方式扩展个人数据的授权使用。区块链技术的优势在于釜底抽薪,从根本上解决个人用户行使个人数据的选择权问题,在避免过度监管的同时,也能使用户个体从自己产生的数据中获益,为个人数据的商业使用打下坚实的基础;但受限于技术处于早期,应用的成熟与稳定性不高:没有大规模商业应用的实践和测试,需要大量的消费者教育工作,远水难解近渴。 七大基本原则,GDPR与区块链相爱相杀?目前,GDPR为个人数据保护设立了七项基本原则: ·可问责性原则·据完整性和保密性原则·准确性原则·限期储存原则·目的限制原则·数据最小化原则·合法性、合理性与透明性原则 这里面有些原则的落实正是区块链技术的强项,另有一些则看似与区块链技术存在冲突。是否真的如此?我们逐条来分析: (一)可信的解决方案GDPR的可问责性原则要求:对于GDPR原则的遵守,数据控制者有责任提供证明。而区块链技术的一大优势就在于链上数据的存证和可溯源服务。对于可问责性的监管要求,数据控制者可以在把所有操作上链的同时,在监管部门和认证机构设立同步全部账本的节点,这样就可以起到自证清白的作用。 GDPR的数据完整性和保密性原则要求:处理过程中应确保个人数据的安全,避免数据未经授权即被处理或遭到非法处理,避免数据发生意外毁损或灭失。倘若数据控制者对所有个人数据进行区块链管理的分布式存储,则可以用较传统手段低很多的成本避免数据发生意外毁损。同时,将数据操作的授权通过区块链验证并将操作过程上链存证,也可以大大增加安全性,避免数据未经授权操作即被非法处理。 (二)并不相悖的要求GDPR的准确性原则要求:个人数据应当是准确的,如有必要必须及时更新;必须采取合理措施确保不准确的个人数据及时得到擦除或更正。看似与区块链的不可更改性相冲突,但区块链账本上的数据可以通过后续区块做标记的方法进行更改,只是这种更改不会删除掉更改前的数据,而是将更改前的数据、更改过程的操作和更改后的数据同时保留了下来。这样一来,只要保证公开范围内的访问者只能访问更改后的数据就完全可以达到数据准确性的要求。同时对于为了公共利益需要访问更改前数据的政府、司法部门,也能满足其例外要求。 GDPR的限期储存原则要求:对于能够识别数据主体的个人数据,其储存时间不得超过实现其处理目的所必需的时间。而这看似又与区块链账本上数据的永久保存性存在冲突,其实可以按照以下方式处理:对于联盟链,链上主体都是商业主体,链上数据都是有隐私方案保护的,同时链上数据的保存都有作为商事证据保留的性质,这一点已经构成了个人数据权利行使的限制。对于公有链,用户完全可以选择匿名化链上数据。对于开放许可链,可以通过基础链数据匿名化、侧链数据联盟链化处理来解决这一问题。 (三)坚实的基础与保障GDPR的目的限制原则:个人数据的收集应当具有具体的、清晰的和正当的目的,对个人数据的处理不应当违反初始目的。GDPR的数据最小化原则:个人数据的处理应当是为了实现数据处理目的而适当的、相关的和必要的。GDPR的合法性、合理性与透明性原则:对涉及到数据主体的个人数据,应当以合法的、合理的和透明的方式来进行处理。 首先,开源的区块链技术代码清晰地展现了操作者对个人数据的收集和处理是否违反了GDPR的原则和规定,为真正实施以上三大原则提供了坚实的基础。其次,区块链项目特有的分叉功能真切地实现了数据的可携权,也真正防止了垄断。在GDPR监管的语境下,使技术开发者获得商业利益的同时,也促进了良性竞争与新技术的应用。最后,区块链项目特有的代币投票公共治理制度将行为人的利益与项目结果相捆绑,是实现上述三大原则的保障。 综上所述,GDPR和区块链技术本质上并不敌对,它们都是为了改变严峻的互联网企业滥用用户个人数据和形成行业巨头垄断的局面应运而生的。在保护个人数据方面,两者各有利弊,相辅相成。对于GDPR的七项基本原则,区块链技术提供了坚实的支持与保障。而GDPR的普及和推广也将是相关公司的试金石,在良莠不齐的区块链技术公司里去伪存真,营造健康监管生态,为真正优秀的企业保驾护航。

June 4, 2019 · 1 min · jiezi

那些存储在云上的数据真的安全吗未来的云服务将会是这样的

在这个信息爆炸的时代,数据存储与我们每一个人息息相关。从打孔卡到软盘硬盘再到中心化云端存储服务,人类在寻求更便捷有效的数据存储方式的道路上从未停下过脚步。未来会出现比如今最流行的中心化存储服务更便宜,更高速,更隐私的服务吗?在后续的文章中,将会从当今市场所出现的问题入手,带大家一起慢慢领略去中心化存储的魅力所在。 存储市场有多大? 当我们谈及某个特定市场时,规模和发展趋势必定是最重要的两点。从上图来看,截止到2020年, 预估硬盘总出货量达到1120 EB 且一直保持着上升的趋势。那么,如此庞大的市场,现在存在着什么样的问题呢? 当前市场最大的问题是什么? 在此,首先要介绍一下存储这个行业。存储分为企业存储和个人存储两部分。企业存储,最好的例子是 AWS 的 S3 和阿里云的 OSS。而个人存储,就是大家熟悉的用于备份和同步功能的网盘,例如微软的 Onedrive,苹果的 iCloud,谷歌的 Google Drive,还有第三方公司的 Dropbox。 不论是企业服务还是个人服务,最流行的还是中心化方案。商家自己建立数据中心,购买带宽,采购机器,部署软件,从而搭建起一个完整的服务产品,这就是所说的中心化存储。 中心化存储虽然流行,但并不完美,它有以下几个问题。 中心化存储,拥有明确的中心,安全成本高昂,且更容易被攻击。众所周知,对黑客而言,只要攻破了这个明确的中心,就可以拿到所有的数据,甚至篡改。对于实力不足的运营方而言,有随时终止服务的风险。之前中国流行过一段时间的网盘大战,而且这还不是由创业公司直接发起的价格大战,参战方有360网盘,金山网盘,新浪微盘,百度网盘等。几年过去了,大部分的网盘业务都已经关闭,大量用户的存储数据丢失。个人数据不再被个人所拥有,反之,平台方拥有所有的数据。部分平台方为了出于自身的利益考虑,会将这些数据用作 AI 深度学习的训练数据样本,最终在其他领域谋取利益。而这些数据在变相分析后,拥有一定的商业价值。商家可以运用这些数据进行用户画像分析,从而精确指导用户的行为习惯和心里推演,最终诱导用户购买商品,从而产生价值。因此,只要把数据放在中心化的地方,那么用户的数据权利就一定得不到最终保证。存在个人隐私数据被审查的风险。首先,我们认为违法数据的审查有利于社会和经济的安定。但是对审查方而言,在审查的时候,由于并不确定什么数据是违法的,什么数据是没有问题的,只有把所有的数据全部审查一遍,这导致了不论是否有问题的数据都会被审查,也势必影响合法用户的合法隐私数据被看到,甚至被泄露的可能性。带宽传输成本非常高昂。注意,我这里说的是带宽,不是存储。无论上传数据还是下载数据都会消耗带宽,所以带宽是不可忽略的,而且比存储成本要贵。而中心化的存储服务,为了保证各个地方的用户都拥有良好的体验,他们会将数据中心部署到主干网络上,而主干网络在任何一个国家都是最贵的。正因为中心化的存储有这样的问题,所以我们考虑采用去中心化的存储方案来解决。 为什么是去中心化存储? 所谓的去中心化存储,指的不再是搭建数据中心,购买带宽,采购机器和硬盘,而是通过建立一套公正有效且透明的规则,尽可能的去发动全世界所具有的存储能力且有效连入互联网的资源。然后,通过一个大一统的分布式软件体系,将所有的资源都有效地联动起来,在此之上提供一个稳定的服务。这符合 P2P 技术的本质,即在相对不稳定的基础设施上,通过概率法则建立起稳定的服务。 去中心化存储具有哪些优势? 低廉的传输成本:中心化存储为了保住多个地方的用户体验,只能把服务部署在带宽成本高的主干网节点;而去中心化存储可以充分利用廉价的城域网带宽,甚至是用户端的闲置家庭带宽,这样能够大大降低带宽成本,更具体的内容,参见我之前的文章《为什么 PPIO 的价格能做到比阿里云和 AWS 更低》。绝对的安全性:去中心化网络和中心化网络的安全机制是不同的,中心化网络安全很依赖于中心化运营方的信用,其核心存储机制也是封闭的,不开源的形式,中心化的运营方机构拥有和用户同样的对数据查看,修改和删除的权限。而去中心化存储的安全机制则不同,是由数学,密码学,以及网络机制共同决定的,其核心存储机制的代码最终也是以开源透明的形式出现。数据的查看,修改,删除由用户的私钥来决定,只要这个私钥不被盗用,数据就是安全的,就像比特币一样,只要私钥不被盗用,所有资金都是安全的。永不关停:对于去中心化存储的用户来说,不用担心运营方关停的可能性,因为最终去中心化存储是属于用户的,属于社区的,并不是属于公司的。具体来说, 只要网络能够跑起来,最终其会和比特币一样,以完全开源的形式出现,由于最终是没有中心的,只要还有人愿意部署节点,整个网络就会自动连接所有节点,从而提供有价值的服务网络。综上,去中心化存储是很有潜力打造的有商业价值的平台。注意,这里提到的有价值,不是指币价被炒得越高,就越有价值;也不是说信仰与共识的多少;而指的是在真实的商业化落地的过程中,由真实需求和满足需求所产生的价值。 正是出于这样的考虑,我们发起了 PPIO 项目,PPIO 是为开发者打造的去中心化存储与分发平台,让数据更便宜、更高速、更隐私。官方网站是 https://pp.io。 在此,我说 PPIO 是个平台,那么什么是平台?所谓的平台至少有两个角色,一个是供给,另一个是需求,促成这两个角色之间的匹配并最终形成交易,这就是平台做的事情。并且,平台上的各方能否有序地快速的增长决定了平台的价值。 PPIO 去中心化存储平台有哪些重要的参与者? 在 PPIO 去中心化存储平台上,有三类角色: 第一类是用户,作为平台的需求侧,他们使用存储服务。第二类是矿工,也就是存储节点,作为平台的供给侧,他们提供存储服务,和上传下载产生的带宽服务。第三类是服务节点,因为整个平台还需要有些节点来提供特别的,组织性的服务,如索引检索,监督证明,出块,以及执行预言机等。 那么 PPIO 网络的早期应该怎么启动呢?大部分区块链项目都是先靠拉动供给侧启动的。下面我重点分析一下对 PPIO 冷启动的思考。这三类角色是同时拉动?还是早期的时候,先拉动需求侧或者供给侧? PPIO 冷启动过程是怎样进行的? 既然是平台,就有早期冷启动的策略问题。那么这样的市场早期是适合单边启动,双边启动,还是多边启动呢? 这是个很有意思的问题,我们不妨做个分析。 首先,服务节点在早期冷启动的时候,承载的负载并不多,可以自己部署服务器来承担服务节点的角色。在用户和存储节点上量且软件程序被验证稳定后,可逐步开放给第三方,大家共同部署服务节点。这也是我提出的先强中心,再弱中心,最后去中心的过程。参见文章《PPIO 的三个阶段:“强中心”“弱中心”“去中心”》。所以,服务节点是不需要早期重点运营,设法拉动的。 再讨论用户节点和存储节点,这是个经典的话题,其本质是供给和需求之间的话题。我们先做几个其他互联网平台的分析,抖音,微博,快手都是运用供给侧拉动,他们首先争抢的都是内容的创作端,创作端是个性化,非标准化的,好的内容能带来巨大的价值,这符合他们的商业逻辑,但这些都是供给侧单边拉动的。而京东商城的冷启动,就不是从供给侧而是从需求侧拉动的,因为京东销售数码 3C 等标准化的产品起家的,早期采用的是自主运营,重点把增长的压力放在了用户上,这采用的就是需求侧单边拉动。 对我们 PPIO 去中心化存储平台来说,其出售的商品本质是存储和带宽,除了地域因素以外,其他都是标准化的产品,没有任何创意,也没有特别的部分。所以我们要采用的也是类似京东的策略,即早期采用需求侧单边拉动模式,也就是重点发展用户使用。 ...

June 4, 2019 · 1 min · jiezi

CITA-是如何达到-15000-TPS-的

在前两期中,秘猿小课堂给大家分享了构建高性能区块链内核 CITA 背后的思考。这一期,我们深入研究 CITA 是如何进行性能优化,并且将交易处理的性能达到 15000 TPS量级秘猿科技区块链小课堂第 6 期 在区块链的设计中,有一个「不可能三角」的说法,即安全、去中心化、性能,这三者只能取其二。Nervos 是用分层设计来解决不可能三角问题。在底层 Layer1 里,CKB 就选取安全和去中心化,Layer2 选性能。Layer2 追求把性能做到极致,去中心化和安全由 CKB 来解决。 CITA 作为支持智能合约的区块链框架,有非常良好的性能表现,交易处理的性能可以达到 15000 TPS[1],非常适合作为 Layer2 的高性能区块链解决方案。本文将会简要讨论秘猿科技是如何对 CITA 进行性能优化的。 微服务架构传统的公有区块链往往采用整体式架构。因为需要考虑去中心化,就需要考虑节点可以在普通硬件上可以执行,而在架构设计上无法兼顾性能。CITA 作为专门面向企业用户设计的高性能许可链(许可链可以是联盟链,也可以是公有许可链),采用微服务架构,可以更好的利用服务器集群,而不是使用单一机器运行节点。这样可以充分利用硬件的优势,节点不再是一个物理概念,而是一个逻辑概念。 CITA-BFT传统的 PBFT 类算法中,一般使用三阶段协议 prevote、precommit、commit ,以 Tendermint 为例。 Commit 阶段主要是为了 Proposer 向其他节点再广播一轮 BlockProof,使得所有节点统一投票。但是实际上在 Precommit 阶段,各个节点已经收集足够的投票,只是投票集合可能不一致。比如对于 ABCD 四个节点,A 可能收到 ABCD 的投票,B 只收到 BCD 的投票。由于投票属于 Block 的一部分,也需要共识,为了保证节点统一投票,所以由 Proposer 再进行一轮广播。 在 CITA-BFT 中,我们优化了 Commit 阶段。在区块链中,Block 的共识是一个连续的共识。所以,我们可以将当前 Block 的 Proof 放到下一个块的 Proposal 中,这样可以在下一个块的 Prevote 阶段对上一个 Block 的 Proof 进行统一,不再广播共识后的 Block。 ...

June 4, 2019 · 2 min · jiezi

为什么我们需要另一种区块链

2016 年年初,Eris Industry 最早把 BFT 的共识引入到区块链中,创造了许可链。秘猿科技创始人等在 Ethfans 做了很多次 Meetup,当时讲了为什么我们需要许可链。简单来说,在比特币的区块链上我们实现了不记名资产,但是在很多金融场景里面我们会需要很多记名资产。我们需要知道资产是登记给谁的、身份是明确的、可追溯的,而不是一个完全匿名的环境。区块链如果要真正做到商业落地,身份融入区块链是一个必要条件。所以,在 2016 年初,我们设计与开发了企业级高性能区块链内核 CITA,并于 2017 年开源。CITA 从开源至今已经有超过 10 个版本的稳定迭代,目前已经有包括招商银行,中钞区块链研究院等多家银行和国有大型机构使用 CITA 搭建自己的底层架构。(P.s 本文首发于 2016 年 6 月的个人博客)秘猿科技区块链小课堂第 4 期 出世2007年,中本聪踏上征程,开始寻找困扰密码学爱好者多年的一个问题的答案:我们能不能在数字世界中构建一个点对点的现金系统? 2008年,在一群密码朋克的聚集地metzdowd邮件列表上,比特币白皮书悄然问世。这篇划时代的论文算上引用只有短短9页,简洁明了的描述了一个前所未有的系统。 2011年,我从正热衷于挖矿的好友那里听说了这个项目,但真正引起我极大兴趣的,是名为Paul Bohm的用户对Quora上一个提问的回答,他在文章中将比特币和拜占庭将军问题联系到了一起。这篇文章为我打开了一个新世界的大门,这个世界的基石不是密码学货币,而是区块链。(最带劲的是,这个世界没有奇怪的防沉迷系统...) 区块链实际上是一种新型的分布式数据库。这个数据库与以往的分布式数据库之间最大的不同,在于它能够容忍所谓的拜占庭故障。拜占庭故障是一种最宽松的故障类型,节点被黑客控制所能表现的任意行为也是一种拜占庭故障。可以容忍拜占庭故障的分布式数据库,只有在网络中的多数数据库节点同意时,才会执行客户端请求的操作。换句话说,没有任何一个单一节点,或者容忍数量之内的多个节点,可以擅自修改这个数据库里面的数据,因此即使这些节点被黑客恶意控制,他也无法写入错误数据或者篡改以前的数据。 这样一个不能被篡改的共同维护的数据库,记录的是从数据库开始运行以来所有的操作和数据。任何人都不能否认这些数据的真实性,它是一个唯一的可信数据源,可以作为其它需要信任的业务的基础。它将一座座的信息孤岛连接成了一个完整的世界。有了这样一个数据库我们就可以创造出许多以前不可能存在的应用。中本聪用这个数据库记录了一个现金账本,于是比特币诞生了。在这样一个由遍布全球的节点共同维护的网络上,每一笔转账记录实际上都可看作数据库中的一个操作:把 A 的账户余额减少 100,再把 B 的账户余额加上 100。 如果在数据库里面记录谁拥有多少股票,我们就得到了一个股权登记系统,如果在里面记录域名和 ip 的对应关系,它就变成了一个域名注册系统。最棒的是,这些数字形态的股票,域名,各种各样的资产,还能够在这个 7*24 小时持续运行,无人可篡改,多地备份强力容灾的系统上自由流转!共同维护一个数据库,也就意味着无需对账,降低了结算清算的成本。资产可在网络中轻松流转,交易摩擦几近于零。而数据无法篡改的性质,又完美的响应了监管机构的要求,根据摩根士丹利的分析,仅这一项就能为银行节约百亿美元规模的合规成本。 “完美。” 成茧可惜事情并不如想象的那么简单。在比特币之后,人们按照这些想法在公有链上进行了一系列的尝试(染色币,二代币,etc.),却渐渐的发现,区块链的万里晴空上,还飘荡着两朵乌云。 第一朵乌云,是区块链的性能问题。以比特币为例,目前整个系统的吞吐量最大为每秒 10 笔左右(与单笔交易数据大小有关),而一笔交易需要至少 10 分钟才能得到确认响应(更严格的标准下需要 60 分钟)。这样的表现远远没有达到诸多场景下的实用标准。 乌云之二,是所谓的确定性问题。确定性的意思是,当你得到一笔交易的确认响应之后,这笔交易应该就算是最终确定,永远不能撤销了(除非法院判决之类的事情发生)。如果不能保证这一点,我们无论如何无法将房产股票这些资产放到链上进行流转。 无论是工作量证明 PoW,还是权益证明 PoS,实际上都是由制造后面区块的人,不停的对之前的每一个区块进行投票。以 PoW 为例,每个新制造的区块是一票,算力高的人,将获得更多的投票机会。由于投票一直在持续,永不结束,因此理论上每个区块都没有最终确定,因为后面还有无穷多的票可以用来否认它的有效性。现实中,投反对票的成本与被投票区块的年龄有关,年代越久远的块需要越多的反对票才能推翻(也就等于需要越多的算力)。只要区块中包含的交易价值够高,高过推翻这个块所需要的成本,攻击者就有动力去实施这样的进攻。 无论是性能问题,还是确定性问题,根源都在于公有链的共识算法设计上。公有网络的本质决定了,网络上的节点都是匿名的,没有真正的身份,所以公有链的共识算法必须基于这一点来设计,如果不能正确的限制匿名节点,很容易就会陷入女巫攻击的汪洋大海。还是以比特币为例,因为节点都是匿名没有身份,中本聪天才的将原本设计用来防垃圾邮件的招数,工作量证明用于出块节点的选择,再由之后的出块节点对前面的区块投票,以算力的限制代替了节点身份的限制。 虽然在比特币之后,又有包括 GHOST, Inclusive Blockchain Protocol 等各种改进出现,但是受制于匿名网络这道深层的藩篱,区块链的性能问题并没有根本性的进步 - 以太坊的共识设计可以算是代表了当前的最高水准,也仅仅做到了平均 15 秒的时延(区块间隔),吞吐量也依然停留在个位数每秒。更糟糕的是,无论哪一种研究,都没能给出确定性问题的解决方法。 ...

June 4, 2019 · 1 min · jiezi

公有链有未来还是联盟链有未来

在我们讨论区块链时,分类是不可避免的一件事情。想必大家都听说过「公有链、联盟链、私有链、许可链、无需许可链」这些词汇,虽然我们已经耳熟能详,然而这些名词并没有公认的定义。我们在讨论中只能各凭自己的理解,用这些名词指代大致上相同实际上有些区别的概念,由此造成了上面那样的沟通困难。本文将对这些名词,从最基本的纬度进行分析。秘猿科技区块链小课堂第 5 期 维度 1:许可链/无需许可链无需许可链(permissionless blockchain)网络参与者可以自由的加入和退出,也即加入或退出网络的成本接近于零。在讨论中听到的“公链”、“公有链”或者“基础链”的时候,我一般会认为是在说无需许可链。 这一类型的区块链包括 Bitcoin/Litecoin/Peercoin/Monero/ZCash/Ethereum 等等。Bitcoin 是无需许可链的开山鼻祖,通过 PoW 巧妙的实现了世界上第一个无需许可的分布式系统,2015 年之前的区块链项目基本上属于这一类。Nervos CKB 是无需许可链,第一阶段使用 PoW 共识。 无需许可链的去中心化程度最高,其发展也高度依赖社区自治,是最有潜力成为全球基础设施的区块链类型。 许可链(permissioned blockchain)网络参与者需要获得某种形式的许可才可以加入或退出,加入或退出网络的成本大于零。“许可链”在讨论中常常与“联盟链”混用,后面我们会看到这两者的区别。 许可链的思潮在 2014 年兴起,彼时金融机构已经发现了数字货币、智能合约和区块链这片新大陆,并开始思考如何将区块链技术引入自己的业务。对记名资产的登记和交易需求,以及金融业务中 KYC/AML 的需要,让人们开始认识到身份的必要性,以及由此带来的重构区块链的可能1。身份的存在可以很自然的解决让无需许可链头疼的女巫攻击问题,因此也就可以避免 PoW 而使用传统BFT 共识,可以获得更低的能耗和更好的性能。比较早期的公司如 Eris Industries(现改名 Monax)在 2014 年成立,是许可链的先驱。R3 也是在 2014 年成立,虽然 Corda 自称为分布式账本而不是许可链(也确实不仅仅是链,而是一个没有区块、由交易编织成的网络),但它很明显是许可链思潮下的产物。Hyperledger Fabric 和我们自己设计开发的 CITA 都是许可链。 许可链一般由行业联盟或是科技公司设计、实现和推动,具有接近中心化方案的性能,注重金融和企业场景。 细化如果将网络参与者分为出块节点、全节点和用户(通过钱包访问全节点使用区块链提供的服务)[3],我们可以进一步细化无需许可链和许可链的分类。 我将看起来没有实用价值的组合标记为 Nonsense,不做讨论。 用户许可链在用户许可链中,节点加入、退出、参与共识都不需要许可,但是用户需要获得许可才能使用区块链提供的服务。虽然目前还没有看到用户许可链的实例,但我认为用户许可链是一个非常有意思,值得探索的方向。如果把节点属于网络层,构成了区块链的基础;用户空间存在于节点共同维护的账本/共同知识库之中,是区块链架构中的上层。无需许可的基础层和需要许可的上层是一个很和谐的组合:基础层无需许可,无论什么样的节点都可以参与,网络性质中立,保持了无需许可链的全球基础设施属性;上层需要许可,用户具有某种形式的身份,更加适合需要身份的各类商业和金融场景 用户许可链需要解决的难题也不少:如何实现一个去中心化的身份认证服务?如何在基础层对这个身份协议提供支持?能够识别身份之后,基础层需要根据一定的规则,选择是否为用户提供服务。谁来制订这些规则?如何制订这样的规则?如何保持规则的中立性? 出块许可链出块许可链只要求出块节点获得许可。由于全节点可以自由加入,区块链历史和当前状态都不会被出块节点垄断,全节点可以验证并决定是否接受新区块,整个系统依然是透明可验证的,其可靠性(原谅我使用一个模糊的“可靠性”来指代包含可用性、安全性等等在内各种性质,下同)比中心化系统高,比用户许可链/无需许可链低。如果获得许可的出块节点数量不大,系统性能也会非常不错。 值得指出的是,如果我们将“许可”的定义放宽,出块许可链将包含我们常称为“公有链”的一些项目 —— 基于代币抵押或是代币投票的 PoS,本质上是以代币作为一种许可,限制出块节点数量,达到降低共识过程的消息复杂度以提升系统性能的目标。这样一类 PoS 区块链所展现出来的性质,与出块许可链更接近,与无需许可链更遥远。出块许可链与完全许可链之间的主要区别在于全节点和用户是否需要许可,与无需许可链之间的主要区别在于出块节点集合大小是固定还是动态。 节点许可链节点许可链的出块节点和全节点都需要许可,此时只有拥有许可的节点才能复制和验证区块链数据,用户无法获得账本/共同知识库的独立复本,也无法独立进行验证。这样的系统其可靠性弱于出块许可链,比中心化系统略高,性能与出块许可链接近。由于数据只会在小范围内复制,数据隐私性更好。 根据不同的部署,秘猿科技高性能区块链内核 CITA,既可以是出块许可链,也可以是节点许可链。 维度 2:公有链/联盟链/私有链让我们换一个维度,按照区块链的服务对象来分: 公有链(public blockchain):为公众提供服务的区块链。联盟链(consortium blockchain):存在一个区块链之外的实体联盟,只对联盟内成员提供服务的区块链。私有链(private blockchain):存在一个区块链之外的实体,只对实体内成员提供服务的区块链。 「公有链」从 public blockchain 翻译而来,而 public 直译应为「公众、公共」。之所以会翻译成「公有链」,我想大概是由于早期的 public blockchain都有内在的代币机制,使用者即代币持有者,因此也无不妥。但按照今天的眼光看,public blockchain 理解为「公共链」更为合适,「公共链」无差别的对所有公众提供服务,但公众不一定是「公共链」的所有者。我在讨论中还是沿用「公有链」这个词,但我用它指代的其实是「公众链」。 ...

June 4, 2019 · 1 min · jiezi

区块链实现信任自动化

在前两期秘猿科技区块链小课堂中,我们理解了什么是区块链,以及区块链的发展史。那么,区块链能够为我们带来什么呢?秘猿科技 CEO 谢晗剑分享了对区块链技术带来现实意义的理解,请注意文章中公有许可链的想法在 2017 年第一次被秘猿科技提出。秘猿科技区块链小课堂第 3 期 我们用区块链解决数字世界信任难题人类是一种群居动物,人类学家通过对不同动物群落的分析发现,对于人类而言,最自然的群落人数上限是 150,这代表了我们在日常生活中可以维护的比较亲密的关系数量。从古至今,人类一直在尝试各种发明创造,以期通过不同的工具、制度来突破这个限制。 因此,我们有了公司这个非常伟大的发明。 用机器管理流程在公司内部,我们会制定各种各样的制度来激励人,用于维持一个团体向同一个目标迈进;在公司与公司之间,我们会制定公司法等一系列法规,用于保证公司与公司之间商务合作的顺利进行。公司制度下充斥着各种各样的商业流程,诸如下单、采购、制造、发货、开票、收款等等,它们把各环节上所有的人串起来,保证他们在既定流程中可以有效协同地完成一个任务。 但当计算机出现后,计算机的能力在不断增强,而人类的能力却相对没有变化,这个时候我们开始思考,是否应该把计算机运用到这些流程之中,用它们来管理流程。 这和我们把机器用于工厂是相反的。在工厂里,机器人是工人,管理者是人,但是在流程管理里,我们尝试的是用机器去管理人,这就是我们所描述的“流程自动化”。所以在今天,我们看到了各种各样基于网络和计算机技术的信息系统,比如说ERP、商业智能。 基于这样的信息系统,我们能够组建起越来越多的大公司,那些跨国公司也早已司空见惯。但如果我们想要把这个自动化的流程再向外扩张,延伸到公司边界之外时,我们就会发现各种各样的问题。公司及组织本身是一个信任边界,内部能有很好的协作,但一旦脱离组织边界,我们就没法去相信流程上的其他人也会忠于他该做的事情。 这是我常常思考的一个问题: 能不能通过技术的手段,使得企业与企业之间,而并非仅限于企业内部,也能做到流程自动化呢?在互联网的技术环境下,我一直没有找到答案,直到以太坊的出现。 以太坊给的答案以太坊通过去中心化的技术为我们构造了一个共享的数据库,在这个共享数据库之上又为我们构造了一个共享的计算机,我们可以把代码部署到以太坊这个分布式系统上,让机器来帮我们执行代码。我们可以把在商业世界中用自然语言写成的合约改为用代码写,把由人来执行的合约改为由机器来执行。另外,我们还在以太坊上创建了两种不同的账户,这和诸如比特币等任何其他的区块链都有很大不同。在其他的区块链上,只有一种人类控制的账户,你可以通过你的资料去管理你账户里的余额。 但在以太坊上,只有一种叫做合约账户的东西,它由机器控制,合约账户里储存了用代码写成的逻辑,这个世界上没有任何人可以控制它,只有这段代码可以控制它。 这是一个破天荒的发明。它代表机器在历史上第一次实现了经济独立。在以太坊系统里面,机器和人的地位是一样的。在以太坊上,我们不区分人或者机器,机器也可以在以太坊上面开户,因此机器有了经济自主权。也正是因为这一点,机器能够在这个世界里成为一个可靠的中间人。在我们现在的商业世界里,所有的中间人都由人来担任,你可能没办法相信他能够妥善保管你的财产;但是当机器有了经济自主权之后,你可以相信机器能够安全保管你的财产。 你可以把财产托付给智能合约,即托付给机器,因为机器没有办法从区块链上跑路。到了这个时候,我觉得当初我们想要达到的企业与企业之间的流程自动化就有可能实现了。那么是不是就 OK 了?很遗憾还有很多事情要做。 如果我现在问大家,区块链里最靠谱的应用是什么?你会想到地下市场还是 1CO?我们能够看到的是,这些应用都离我们商业世界里的应用很远。我们需要去中心化的 Uber、去中心化的阿里巴巴,但我们不需要去中心化的地下市场,那与我们普通人没有关系。在我看来,造成这种现象的原因是,现有的公有链是一个无需许可链,任何人都可以匿名的身份在这个环境里做一些事情。但是对于每一个正常人来说,我们需要的不是匿名而是隐私,这是不同的东西。 数字世界的信任在现有的公有链里,我们也很难看到稳定货币的存在。如果我们真的要把现在的商业世界搬到数字世界里,我们就需要稳定货币的支持,那样我们才能对卖出的商品、提供的服务给出一个稳定的定价,才能很好地核算成本和收益。但你又会发现,汇率稳定在公有链里很难,它难以用一种去中心化的方式去实现。商业世界必然需要监督,但是在数字世界里,怎么做到这一点呢? 作为前以太坊的成员,我也经历过去年发生的区块链历史上最最最有名的黑客事件。 在很短的时间内,价值五千万美元的以太币被偷走,这些以太币是由一个智能合约、一个机器保管的。 当时整个社区发生了剧烈的争论,讨论我们是应该尊重《代码及法律》(认为黑客是合理合法的利用了代码漏洞)不去管它,还是立即采取措施把这笔钱找回来? 当时我们联合了几个团队做了一个投票的网站,尝试去收集社区的投票,最后的共识是应该采取措施把损失降到最低,所以最后以太坊也确实采取了这样的行动。我们在代码里硬编入了更改数据状态的代码,把这笔钱找了回来。 但当时这个行为也引起了非常大的争议。有人说这违反了区块链上数据不可篡改的性质, 这样做区块链还有什么意义?但是我想说,区块链的不可篡改究竟指的是什么?它指的是交易的历史不可篡改,这和我们的现实世界非常相似。 因为你在不停的转账,比特币上的账本每时每刻都在更改,每个人账户里的余额都在变化,但是一个交易一旦发送到区块链上,它就不能再被撤销。在以太坊上,从来没发生过交易撤销的事情,只有这个世界的状态改变过,这是我们应该保证的一个原则。但是我常常会想,也许我们可以做得更好,也许我们可以通过某种方式,而非硬性的更改代码来完成这个事情。 身份认证是许可链的基础怎么做?近年来出现了一种新型的区块链,我们把它叫做许可链。它跟公有链有很大的不同,许可链很好的回答了这些问题。 在许可链里,无论是节点还是用户,可能都需要先通过身份认证才能获得一定的许可,才能够加入这个链及使用这个链提供的服务。身份是许可链的基础,有了这个基础,我们才能够去更好地构建一个数字商业。 在许可链里,由于有了身份,我们可以很容易地把现实世界中有信用的机构引入,由这些有信用的机构承担我们称之为法币网关的决策,由这些法币网关去发行对于稳定货币1:1汇率的代币。 在许可链里使用这种基于信任的稳定货币机制可能是最容易的,而且在未来数字货币真正推出的时候,法币网关的机制也更能够让许可链接入真正的数字货币。 有身份的许可链上,我们也能够构造不一样的治理机制,我们可以形成一个链外的治理委员会,在有紧急状况发生时,可以由治理委员会在链外形成人的共识,达成决议来决定我们是否要去做一些操作。 这样一种做法的好处是说,我们不仅没有修改历史,还将当时发生了什么以及我们做出了何种决议,都以交易的形式保存到了历史中。在这样的情况下,区块链可以成为一个非常好的信息记录工具。 但是,这样就够了吗?很可惜还差一点点。我们现在看到世界各地有许多大大小小的许可链正在建设当中,但它们都是分割的网络,而区块链是一个具有网络效应的技术,即:网络越大,网络中资产的价值就越大。我们需要有一个大大的所有人一起用的许可链。 公有许可链是未来许可链现在存在的第二个问题是经济激励机制。区块链里的节点是通过使用自己的计算能力提供存储空间,为区块链上的所有用户提供服务。但是在许可链里,这个服务是免费的,我们缺乏经济激励的机制来激励这些节点提供服务。 如果没有这样的经济激励,我们很难想像许可链可以长久稳定的运行下去。在可遇见的未来,如果没有经济激励,许可链还是不是区块链呢?或者说只是区块链的一个分布式数据库。所以我们该怎么办呢? 现在有一种叫公有链的技术,和许可链比较两者各有好处。首先你会发现,公有和许可的定义并不矛盾,公有说的是希望有尽可能多的用户来使用它,许可说的是希望用户在进入这个链使用服务之前先获得一定的许可,或者说通过一定的身份认证。 这两个定义并不矛盾,我们为什么不可以把它们弄在一起?这是我们觉得未来可能会出现的一种新的区块链,我们把它叫做公有许可链。它既是一个公有链,有很多人一起使用;又是一个许可链,这上面的用户还有节点都是有身份的,这在技术上是可行的。 它的形态可能是说在共有的无许可链上再增加一个许可层或身份认证层,也有可能是完全构造一个独立的共有许可链,和共有无许可链平行。我们相信在未来,这两种类型的区块链会是非常好的互补。 在这样一个分布式的、支持智能合约的、有身份的平台上面,我们可以把今天的商业世界整个的搬到这个数字世界当中,我们可以实现企业与企业之间的商业流程自动化。 换句话说它其实是信任的自动化。 什么是信任呢? 信任就是说,我认识你,什么都别说了,把我的钱拿走,这就是信任。

June 4, 2019 · 1 min · jiezi

区块链发展史

区块链技术并不是一项凭空出世的神奇技术,而是站在前人几百年的研究基础之上,将多学科进行融合发展而成的一项技术。为了让大家能够明白区块链技术,到底是对哪些传统技术的融合和发展,秘猿科技区块链小课堂给大家带来了通俗易懂的第二篇文章,诉说区块链的发展历程。秘猿科技区块链小课堂第 2 期 区块链发展史Cypherpunk 发展和成果众所周知,区块链发源于比特币这个项目,也可以说比特币是区块链的第一个应用。但其实在比特币诞生之前,就已经有很多东西在酝酿之中了,而这其中就包含区块链所依赖的最关键的两个技术,一个是分布式系统,一个是密码学。(所以有人称区块链是分布式数据库,更准确一点说是采用了密码学加密的分布式数据库) 密码学是一个很古老的学问,发展到上世纪 70 年代的时候出现了一些质变,包括民用的对称加密算法,非对称签名算法,还有密钥交换算法。这给互联网的隐私传输加密创造了条件。其中一个非常重要的变化,是非对称对抗成为可能。而这也直接导致了 Cypherpunk 的诞生。 在 1997 年亚当·贝克(Adam Back)创建了“Hashcash”匿名交易系统。就其本质而言,它其实是一种反垃圾邮件机制,通过增加发送电子邮件的时间和计算能力,从而使发送垃圾邮件的成本提高:发件人必须证明他们已经花费了算力在电子邮件标题中创建“邮票”(这是比特币中工作量证明 PoW 的雏形) 1998年,戴伟(Wei Dai)发布了B-Money提案,并推出了两种维护交易数据的方法。在提案中,对记录数据进行监管的用户组表现诚实的话,就会获得激励。为此,他们不仅需要把自己的钱存入到一个特殊账户中,如果他们表现的不诚实,就会损失这笔钱。这种方法被称为“权益证明(Proof of stake)”,用户特定组(或主节点)如果试图处理任何欺诈性交易,那么将会失去自己所有的资金。 2004年,哈尔·芬尼(Hal Finney)借鉴亚当·贝克的 Hashcash 原则,创造了可重复使用的工作量证明(Proof of Work)。2005年,尼克·萨博(Nick Szabo)发布了 Bitgold 提案,该提案的理念正是建立在哈尔·芬妮和其他加密项目的基础之上的。 分布式系统的发展和成果在 80 年代的时候,分布式系统的研究已经开展了一段时间,在这些人中有两类人,一类人是比较实际的,他们研究的是数据库的技术,那时候已经有分布式的数据库了,他们研究的是怎么样把这个分布式的数据库做得更加稳定和可靠;而另一类人则偏重于理论,他们会研究一些在实践中基本碰不到的问题,比如 Leslie Lamport 在 1982 年提出的拜占庭将军问题。 到了 2000 年以后,在这两个领域都已经有了很多研究成果。正是在这样的背景下,出现了区块链这样一个技术。2008 年 10 月,中本聪向 metzdowd.com 的“密码朋克”邮件列表中发布了论文《比特币:P2P电子现金系统》。这篇论文直接引用了戴伟的 B-Money 和亚当·贝克 Hashcash,同时还解决了早期开发者所面临的许多问题,比如双重支付。至此,比特币登上了加密货币的历史舞台,区块链技术也应运而生。

June 4, 2019 · 1 min · jiezi

什么是区块链

对于什么是区块链,每个人都有自己的看法。但是,如何通俗易懂的理清楚、说明白区块链到底是什么?真正能够做什么?恐怕少之又少。不是将区块链技术神化,就是一味的宣传区块链无用论。秘猿科技从事区块链基础技术与工具研发,开发项目涵盖区块链领域所有核心环节,先后参与设计与开发企业级高性能区块链内核CITA ,公有链 Nervos 与 Ethereum ,手机钱包 Cyton 与 Neuron ,浏览器 Microscope等开源项目,并建立开源技术交流社区 CITAHub 帮助技术与商业的结合。在我们的眼中,区块链是一块全世界都能看到的石头!秘猿科技区块链小课堂第 1 期 区块链是一块全世界都能看到的石头为什么是一块石头区块链是一块全世界都能看到的石头。它的特质是什么呢?你刻在石头上的字是不能改的,同时,全世界所有人都能看到这块石头和上面写的字。不可篡改和共识,区块链其实就是这么简单。 如果我把这个范围缩小,比如就我们在场的几个人,我去随便拿一块石头,它起到的作用和区块链是一样的。石头看起来是一个很平凡的东西,但它确实极少数能够保存信息上千年的技术。古代的文明信息几乎全部是以石头为载体保存下来的。这其实和《2001漫游太空》里的那块神秘黑石设计一样,它是最古老的技术之一,同时又是极致精确的比例代表着最先进的技术。 现在没有特殊的技术,不可能造出一块全世界都能看到的石头。这时就要靠区块链技术了,用工程学的方法去扩展,让只有一部分人能看到的石头,变成全世界都能看到。 我们能够用区块链这块石头做什么?最直接的应用就是审计:无论你想做什么,先要求你在石头上刻一遍,让所有人看到。我们可以再叠加一层东西,叫做“惩罚”。一旦你做的和你说的不一样,就要接受惩罚。过去,“惩罚”是通过社会机构和人力进行的,比如法院和警察。但在区块链上面,我们想把它自动化。 所以浓缩到最小,区块链就是那块全世界都看到的石头。但我们想用工程的方法,围绕这块石头去开发,让它变成一个更大的系统。这样一来,你就可以构建出“信任”。因为有审计、有惩罚,这就是一个完整的体系,就像现实社会一样。我写合同就是我向全世界许下的诺言,我不遵守合同、违背了承诺,那就去法庭打官司,没收我的财产,这就是我的惩罚。只不过现实社会是用“人的方式”在做这件事,没有办法规模化。但如果我们把这件事统统丢给机器,那就可以规模化了。

June 4, 2019 · 1 min · jiezi

说信任区块链时究竟在信任什么

FISCOBCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造。开源工作组成员包括博彦科技、华为、深证通、神州数码、四方精创、腾讯、微众银行、亦笔科技和越秀金科等金链盟成员机构。代码仓库:https://github.com/FISCO-BCOS 大家好,我是张开翔。 如你所见,【FISCO BCOS开源社区】开通了,很高兴和你在此以文相会。这个号将由你,由我,由FISCO BCOS背后117家成员单位的工程师们,乃至社区沉淀下来的数千开发者通力打造。我们开放了多元化的社区协作通道,希望和你,和广大区块链爱好者,一起聊聊从事区块链技术研发的切身感悟,一起分享踩过的每一个坑、越过的每一道槛,一起将咱中国自己的联盟链技术推向世界的顶端。 这是本号第一篇文章,就从The trust machine、Code is Law、信链得永生这些近乎痴迷的口号说起吧。我会在今明的两篇文章里抛砖引玉,谈谈在区块链的世界里,我们的信与不信。 当前,“区块链,信任的机器(Blockchain:The trust machine)”已经成为了一句口号,紧接着就是“去中心化、群体共识、不可篡改、高一致性、安全和保护隐私”等一系列听起来很厉害的术语。究竟区块链具有多大的魔力能让人如此信任,或者说,我们在说“信”的时候究竟信的是什么。 信息,指身份、资产、价格、地理位置等自然属性和行为信息,它并不是先天可信任的,因为信息散乱、不完整,可能虚假,甚至可能会有人利用信息的不对称性牟利。 把信息整理成结构化数据,通过数据校验的方式,保证其在传播中可保持完整性、全网一致性、可追溯性,不会被恶意篡改;通过冗余存储的方式,保证其公开、共享、可访问,保证数据一直有效。那么,这信息本身就可以被“信任”,从而成为大家的“公共知识”,成为全网参与者都认可的“最大公约数”。 如果信息体现着价值,且这些价值被大家认知、认可,能被量化,具有可交易的等价物属性,或可能随着时间增值,甚至得到司法背书承认,这些信息才具有商业意义上的“信用”。 好比我们认识一个人,但不代表我们信任他。然而这个人一贯表现不错,在社群里言行一致,渐渐地获得了大家的信任。这时的信任依旧不等于信用,除非这个人拥有可观的资产,或者其个人历史上有盈利和偿还的能力,未来也大概率能持续持有资产和承兑债务,那么这个人才具备了“信用”。 区块链体系基于算法而不是人治,有望通过其独特的分布式架构、加密算法、数据结构、共识机制等,把信息固化成大家的信任锚点;有望通过技术手段把各种现实世界的资源转换成可兑付的数字资产,并展开一系列多方商业协作的活动,这就是所谓的 “信息到信任到信用”,甚至于因为区块链这个黑科技的、行之有效且难以理解的玄妙,这个“信”字仿佛升华成了“信仰”。 那么我们说信区块链时,信的是什么呢? 1、信密码学算法区块链是用算法达成信任的,其中最重要的算法之一,就是密码学。区块链中最基本的密码学应用是HASH摘要、对称加密和非对称加密算法,以及相关的签名验签算法。 HASH算法的旧版本已经被证明可破解而被抛弃了,目前在用的SHA256等算法依旧坚不可破。HASH算法的特性是把一堆数据单向生成一段定长的数据,基本不会发生碰撞,可起到原始数据的“指纹”作用,其单向性不可逆,推不出原始数据,具有一定的抗量子性,是能隐藏原始数据又能在必要时提供校验凭据的最佳方式。 数字签名一般基于公私钥体系,用私钥签名,公钥验签或者反之。数字签名源自密码学的牢靠性,使得不可能有人能伪造别人的私钥签名,所以一个拥有私钥的人可以通过数字签名,对他的资产签名确权,或者在双方交易时,采用对手方的公钥发起交易,将资产转移给对方,对方用自己的私钥才能验签解开,以获得所有权。 AES、RSA、ECC椭圆曲线等几种对称和非对称算法广泛地用于数据加解密、安全通信等场景,其安全级别取决于算法本身和密钥长度,当AES使用128~512位密钥,RSA/ECC采用1024甚至2048位密钥时,其保护的数据理论上需要普通计算机上亿年的计算时间才能暴力破解。这些算法在商业、科学、军事领域都经受了考验。 加密学领域里还有同态加密、零知识证明、环签名群签名、格密码等新的方向,目前都处于从理论发展到工程的阶段,都在功能、安全强度、效率方面快速优化中,已经可以看到落地使用的可能性了。同时我们也意识到,密码学通常需要经过长期的发展、验证,稳定后才能获得广泛认可,要么实践中经历了大量考验,要么经过权威机构的审核和认证,才能在生产领域大放异彩。密码学里的理论到工程,常常有很长的时间周期。 加密算法的一个基本哲学是计算成本,当一个算法保护的资产价值,远低于攻破该算法所需的成本时,就是安全的。但如果用一个算法保护一个无价之宝,自然就会有人不计成本地去攻击获利,所以,密码学的安全,也是辩证的、需要量化的。 随着量子计算机等学说的兴起,经典密码学可能会经受一些挑战,但量子计算机的理论完善和工程实现还有待时日,目前来看,基本上我们可以近乎“无条件”相信区块链里已经采用的密码学算法,同时,区块链领域的实践者也在陆续引入各种抗量子的密码学算法,这是一场持续的博弈。 2 、信数据区块链的数据结构,无非是区块+链。新区块将自己的区块高度、交易列表,和上一个区块的HASH,共同再生成一个HASH做为新区块的标识,如此循环,形成了一个环环相扣的数据链。这个链条里的任何一个字节甚至一个Bit被修改,都会因为HASH算法的特性被校验发现。 同时,区块数据被广播给全网所有参与者,参与者越多,规模效应越强。少数人即使强行修改、删剪自己的区块数据,也很容易被其他人校验出异常并不予采纳,只有多数人认可的数据得以留存和流传。也就是说,数据是大家人盯人的形态盯着的,且存在多份副本,一旦落地,只要链还在,数据就可以永远留存。 基于容易验证的链式数据结构、群体冗余保存、共同鉴证,区块链数据是“难以篡改”的,所有人拿到的数据也都是一致的,信息公开透明,公共知识得以彰显和固化。 从另一个角度看,数据达到信任,但能否达到“信用”还要看数据的价值,也就是数据本身携带的信息,是否能代表有价的资产、有用的信息,诸如身份、交易关系、交易行为、大数据等等,都能代表一定的商业价值。这些数据如果分享出来,足以构建完整的商业基础。 但如果是在过于强调隐私的场景里,大家愿意分享的信息本来就很少,那样就很难达到信用的“最大公约数”。然而,在当前的商业环境里,信息隔离和隐私保护是硬诉求,信息共享和隐私保护成了严峻的矛和盾的关系,除非整个商业关系和商业逻辑出现了革新。 所以,隐私保护相关的研究被大量关注,诸如“多方安全计算”、“零知识证明”的理论大行其道。理论上讲,确实可以做到公布很少的信息就能做到可验证,但其复杂性和计算开销,又是工程层面要去解决的事情了。 3 、信博弈论区块链中最玄妙的部分是“共识算法”。共识算法的定义是在一个群体中,用一种机制协调大家共同或轮流记账,得出无争议的、唯一性的结果,且保证这个机制可以持续下去。 换句话说,大家一起维护一个账本,选择谁做为记账者?凭什么相信记账者的动作是正确的?怎么防止记账者作恶?如果记账者正确记账如何得到激励?共识机制完整地回答了这些问题。 共识的逻辑是发生在线上的,但实际上,背后是现实世界的竞争博弈。 POW(工作量证明)采用算力去竞争记账者的席位和获得记账者的奖励。现实生活中,为了构建具有竞争力的算力工厂,矿工通常需要研发或购买大量的新型号矿机,运输到有稳定和便宜电力供应地区,消耗大量的电费、网费以及其他运营费用,在被监管时又得举家搬迁,浪迹全球,实际上投入了大量(现实世界的)资金、精力以及背着巨大的风险。如果要在POW竞争中获得稳定可观的收益,投入的资金动辄以亿计,并不亚于办一家企业。 POS和DPOS用权益证明代替了算力消耗,看起来是环保多了。而代表权益的token,除了创始团队自己发行的之外,“矿工们”一般需要通过币币兑换,或者直接法币购买数字币的方式获得,即使是币币兑换,掏出来的币也常常是采用法币购买的,或者至少这些权益都能以法币进行标价,这其实也是现实世界里的财富注入和背书。 然而,和现实的商业关系对比,POW和POS等共识并没有法律和监管机制兜底,也容易受不断变化的博弈形势所影响,比如社群的规模、矿工的更迭、核心技术运营团队的变化。慢慢地,本来有钱和有能力的人,或许会更加有钱和有权力,去中心化的网络可能逐渐变成了卡特尔组织,矿工和技术社区的瓜葛也会不停地掀起波澜,造成分叉、回滚、价格倾轧、对韭当割等现象。 总的来说,人们还是信任区块链上的“自治”,在这种分布式自治里,单个事件(如一笔交易)具有“概率性”,同时全网又追求“最终一致性”(公共账本的一致)。这种短期的概率性和长期的确定性,一定程度上可以达成动态的“纳什均衡”,支撑起链的生态,给人演化出一种玄妙的“信仰”感。 另一方面,联盟链的记账者一般是机构级的角色。联盟链要求记账者身份可知,参与者们经过许可才能接入网络,他们之间是一种合作博弈。联盟链引入了现实世界里的身份信息作为信用背书,如工商注册信息、商业声誉、承兑信用、周转资金,或者行业地位、执业牌照、法律身份等,参与者在链上的一切行为均可审计、追查,也让相关的监管部门在必要时可以有的放矢,精准惩戒,强制执行,具有很高的威慑力。 在这种环境里,联盟链的参与者一起协作维护网络,共享必要的信息,在平等透明、安全可信的网络里开展交易,只需要防止少量记账者的恶意操作风险,避免系统上的可用性风险。因引入了现实世界里必要的信任背书,即使联盟链业务逻辑非常复杂,而信任模型却更直观。 所以,所谓的共识机制,背后依旧是现实世界里财力物力的竞争和信用背书,以及相应行之有效的激励和惩戒机制。 天下并没有免费的午餐,也没有平白无故的爱恨。“信”一个记账者,是信他在现实世界里所投入的成本、付出的代价,以及考虑到整个机制有震慑他的惩罚,相信记账者为了持续的收益和增值,不会无故破坏这个网络。 4 、信智能合约智能合约是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表于自己的网站的几篇文章中提到了智能合约的理念,定义如下: “一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议"。 简单地说,可以理解为纸质合约的电子版,用代码实现,无差别地运行在区块链网络的每一个节点上,在共识的作用下执行既定的合约规则。 ...

June 4, 2019 · 1 min · jiezi

区块链共识分析的简单框架

区块链共识对比区块链进入方式*出块选择*共识方式*退出方式*安全偏好延迟[1]带宽效率节点数量[2]Algorand持有代币Random/VRFBA停止出块一致性中中高Bitcoin购买算力Random/PoWNakamoto Consensus停止挖矿活性高低[3]高Cardano持有代币Random/Delegated MPCOuroboros停止出块活性中中高CKB购买算力Random/PoWNC-Max停止挖矿活性中高高EOS链上投票DeterministicNC[4]链上投票/停止出块一致性低高低Ethereum抵押代币Random/RANDAO+VDFCasper CBC/FFG解除抵押活性中中中HoneyBadger抵押代币联合出块BA (BFT)解除抵押一致性中中中Tendermint抵押代币Weighted Round RobinBFT解除抵押一致性低中中[1] 延迟为交易发出到被共识确认所需要的时间。低:<10s,中:10s-600s,高:>=600s[2] 保持共识性能的情况下允许的共识节点数量。低:<100,中:>=100,高:没有限制[3] Bitcoin的Nakamoto Consensus具有很低的通讯开销(communication overhead),但由于共识参数的设定(10分钟区块间隔,~4MB区块容量)导致带宽利用率低。[4] EOS的宣传中说的是BFT,但是与一些朋友交流得知现在用的依然是NC,也就是说EOS的DPoS与BitShares的DPoS应该是一样。 框架思路共识算法是一个很大的话题,在区块链出现之前,分布式系统和数据库领域都已经有很多的共识算法的研究和沉淀。但区块链的共识与之前的研究又有非常大的不同,如果不注意很容易掉进传统共识的老套路里面。实际上不仅仅是区块链有自己的独特需要,我的感觉是数据库会议上的共识研究和分布式系统上的共识研究也是有不小的区别。其实这非常好理解,因为场景不同嘛,设计自然不同。 本文尝试提出一个分析区块链共识的简单框架,方便将不同的区块链共识放到一起来比较。 基本要求共识的基本度量包括两个方面,正确性和性能。正确性简单来说包括: 一致性(Consistency) - 节点最终能看到相同的本地状态活性(Liveness) - 请求/交易总会在有限时间内被处理正确性是最最基本的要求,这也是大部分区块链共识都能做到的。要在异步网络中始终保证一致性和活性是一个非常难的任务,因此共识设计通常会选择保证一点而在一些特定情况下放弃另外一点,例如Bitcoin使用的Nakamoto共识选择优先保证活性,而BFT共识则优先保证一致性。 性能包括: 吞吐量(Throughput) - 单位时间内系统可以处理的请求数量延迟(Latency) - 一个请求/交易从发起到处理完毕/完全确定所需要的时间对吞吐量和延迟的影响因素很多,例如共识节点的数量,共识的消息复杂度,消息验证需要的时间,共识可用的带宽,共识设计的倾向等等。一般来说,吞吐量和延迟也难以两全,这是因为共识的消息复杂度有一个下限:对于每一轮共识,参与共识的节点至少要收到一次消息(否则连要共识的东西是什么都不知道)。如果要低延迟,就要尽快对每个请求/交易的达成一致,意味着单个请求/交易需要更高的消息复杂度;如果要高吞吐,就要尽可能的对请求/交易进行批量处理,以此降低单个请求/交易的消息复杂度,但也会造成高延迟。 对于共识性能,Nervos研究团队的张韧提出的一个比较有参考性的指标是共识对带宽的利用率:给定相同的带宽,共识对带宽的占用越低,共识的吞吐量越高。 区块链共识的特点动态的参与者集合无论是permissionless(翻译成“无需许可”太绕口了,用“公有链”又不是很准确,这里还是用单词)还是permissioned blockchain,最重要的一个特征是它是一个长期运行的开放系统。长期运行和开放叠加的结果是,共识的参与者会一直变化,每隔一段时间,总会有老的共识节点离开,新的共识节点加入,共识参与者是一个动态集合。如何处理共识参与者的动态变化,是区块链共识的一个核心问题。 与区块链共识不同,传统的共识研究往往先假设一个固定的参与者集合,然后研究如何在这个集合内达成共识,偶尔讨论参与者集合变化时的处理,基本上不关心参与共识需要什么样的资格。研究的重心在于如何保证共识的正确性(e.g. 一致性与活性),形成共识集合的方式只是个附属课题。传统共识的应用场景往往是中心化控制的网络,增加或者减少的服务器都是自己的,形成这样的侧重也很自然。 数量众多的参与者去中心化是permissionless blockchain共识协议的一个独特目标。我们通常用参与共识的门槛来度量去中心化程度(为什么这是一个好的度量?),参与门槛越低,去中心化程度越高。低参与门槛的自然结果是共识参与者的集合可以非常的大,因此共识协议的设计必须考虑到这一点,保证共识效率不会因为参与者的增多而下降。 最小的信任模型执行共识算法的目的是为了能对一个计算请求产生一致的计算结果,在这个过程中一定会有发起请求的节点和处理请求的节点。在传统共识模型中,有的完全在请求处理节点集合内部执行共识算法,有的是由请求发起节点和处理节点一起执行共识算法,无论何种情况,信任边界一般是在请求发起节点和请求执行节点之间,发起节点将计算请求发送给执行节点,执行节点计算出结果后返回给发起节点,发起节点信任执行节点的计算结果(反过来,执行节点不一定信任发起节点的消息,如果发起节点参与共识过程的话)。 区块链共识的信任模型则大为不同,对信任的要求往往要小的多。在permissionless blockchain网络中,同一个节点即发起交易又参与共识,节点对于共识结果要进行验证,并不是简单的信任其他节点的共识结果。以Bitcoin为例,如果一个全节点参与挖矿,它就同时是一个发起请求(交易)的节点和处理请求(交易)的节点。即使它只想做一个安静的全节点,不参与挖矿,它也会自行验证收到的请求处理结果(区块),并不信任其他共识节点提供的结果。这样的全节点只是选择跟随多数算力选择的交易排序,不相信多数算力给出的交易结果。这是一个最小的信任模型。 SPV/轻节点使用一个比全节点更强的信任模型(更强意味着对信任的假设更多),并不验证交易的执行,只验证区块头的有效性。如何验证区块头的有效性则是区块链共识设计的另一个核心问题。如果只是通过对区块头附带的非对称签名来验证有效性,这个信任模型基本上和传统共识的信任模型是等价的,因为传统共识中的请求处理节点也可以对结果附加签名,这个模型在结合动态参与者集合时会遇到一系列的问题,例如大家熟知的长程攻击。如果是通过PoW来验证区块头有效性则天然没有这些麻烦,主流的研究方向是在于如何进一步提高区块头的验证效率。 一个简单的分析框架根据以上的分析,我们可以整理出一个简单的区块链共识分析框架,用于比较各种区块链共识: 进入方式* - 购买算力 / 抵押代币 / …出块方式* - 轮流出块 / PoW随机选择 / 链上伪随机 / VRF随机选择 / …共识方式* - Nakamoto Consensus / BFT / …退出方式* - 停止挖矿 / 解除抵押 / ...一致性 - 可以容忍多少恶意节点/算力/Stake/…活性 - 可以容忍多少恶意节点/算力/Stake/…延迟 - 交易被完全确认(被推翻的概率小于x)所需要的时间带宽效率 - 共识对带宽的利用率,越高越好节点数量 - 共识节点的数量上限是高还是低举例说明: ...

May 31, 2019 · 1 min · jiezi

BTCbtcoincli使用

json-rpc api 钱包btcoin-cli -conf='xx' getwalletinfobtcoin-cli -conf='xx' walletpassphrase "passphrase" timeoutbtcoin-cli -conf='xx' walletlockbtcoin-cli -conf='xx' walletpassphrasechange "oldpassphrase" "newpassphrase"btcoin-cli -conf='xx' backupwallet "destination"btcoin-cli -conf='xx' importwallet "filename"btcoin-cli -conf='xx' dumpwallet "filename"账户istaccounts ( minconf )getaddressesbyaccount "account"getaccountaddress "account"getaccount "bitcoinaddress"validateaddress "bitcoinaddress"dumpprivkey "bitcoinaddress"setaccount "bitcoinaddress" "account"getnewaddress ( "account" )keypoolrefill ( newsize )importprivkey "bitcoinprivkey" ( "label" rescan )createmultisig nrequired ["key",...]addmultisigaddress nrequired ["key",...] ( "account" )

May 31, 2019 · 1 min · jiezi

Ruby-比特币开发教程汇总

Mixin Network 是一个免费的 极速的端对端加密数字货币交易系统. Mixin network 官方资源汇总 课程简介创建一个机器人Ruby比特币开发教程: 机器人接受比特币并立即退还用户Ruby比特币开发教程: 创建比特币钱包Ruby 买卖Bitcoin:ExinCore API 实时兑换Ruby 买卖Bitcoin:在自由市场Ocean.One挂单买卖Ruby 买卖任意ERC20 token:在自由市场Ocean.One挂单买卖其他编程语言汇总Python 比特币开发教程 Node.js 比特币开发教程 Java 比特币开发教程 Golang 比特币开发教程 C# 比特币开发教程

May 29, 2019 · 1 min · jiezi

用Ruby在去中心化交易所OceanOne上挂单买卖任意ERC20-token

在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne支持交易任何Mixin Network上的token,包括所有的ERC20和EOS token,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个ERC20 token挂上OceanOne交易!在掌握了ERC20 token之后,就可以把任何token在Ocean上买卖。 此处我们用一个叫做Benz的ERC20 token为例。这个token已经被充值进Mixin Network,你可以在区块链浏览器看到这个token在Mixin Network内部的总数和交易 预备知识:先将Benz币存入你的钱包,然后使用getAssets API读取它的UUID. 取得该币的UUID调用 getAssets API 会返回json数据, 如: asset_id 币的UUID.public_key 该币的当前钱包的地址.symbol 币的名称. 如: Benz.if cmd == "aw" assetsInfo = walletAccount.read_assets() p "--------The Wallet Assets List-----------------" assetsInfo["data"].each { |x| puts x["symbol"] + " " + x["balance"] + " " + x["public_key"] + x["account_name"] + " " + x["account_tag"]} p "----------End of Wallet Assets --------------"end调用 read_assets API的完整输出如下: "--------The Wallet Assets List-----------------"Benz 10.03 0x822664c2EFb27E2Eb4c4286f421B4BF6FB943fC6ETH 0 0x822664c2EFb27E2Eb4c4286f421B4BF6FB943fC6EOS 0 eoswithmixin b0adfae2f8828d15e11cb1fbe23d6096USDT 1 1KB4RbV5W4MNybpjcJjULKNVXubfR5MJqACNB 0.99999995 0x822664c2EFb27E2Eb4c4286f421B4BF6FB943fC6BTC 0 1KB4RbV5W4MNybpjcJjULKNVXubfR5MJqA"----------End of Wallet Assets --------------"-------------------------------------------------------------------------限价挂单挂限价买单 低于或者等于市场价的单.挂限价卖单 高于或者是等于市场价的单.OceanOne支持三种基类价格: USDT, XIN, BTC, 即: Benz/USDT, Benz/XIN, Benz/BTC, 这儿示范Benz/USDT. ...

May 29, 2019 · 2 min · jiezi

百度超级链xuperchain开源代码评测

评测作者:jolestar 如果你对XuperChain开源技术及应用感兴趣,欢迎添加“百度超级链·小助手“微信,回复“公众号进群”,加入“百度超级链开发者社区”,与百度资深工程师深度交流!

May 29, 2019 · 1 min · jiezi

区块链笔记4用JS写个简单的区块链原型

介绍了一些关于比特币的概念与机制,为了加深理解,本文基于JavaScript来实现一个简单的区块链原型,后续再对其进行不断丰富。1. 概述如前所述区块链模型的组成部分,包括区块,区块构成的区块链,以及保存区块链的数据持久层等。一个超简单的UML类图如下:由于我是前端的,业余看了这么久区块链的理论,还是手痒痒谢谢代码,把这个类用JavaScript实现一下。写完之后发现目前阶段,对于区块链原型来说还是太过简单,不过如果说用来做前端面试题,考察下面向对象和Promise等知识点倒是挺接洽。 2. 定义区块数据模型摘取比特币区块的详情进行修改,去除所有多余信息,只留下能描述区块最基本的信息,声明区块类如下: class Block { constructor(data) { // 区块的属性值 this.hash = ""; this.height = 0; this.body = data; this.time = 0; this.previousBlockHash = ""; }}module.exports.Block = Block;3. 数据持久层其实用数组实现区块链是最简单的原型方案,但每次重启数组都会被清空,数据并不持久。所以这里引入levelDB数据库作为持久层来保存数据,相关操作可参考level。由于直接调用API,对于应用层来说过于麻烦,所以在此声明一个数据操作类LevelSandbox,该类不像传统的关系型数据库具有增、删、改、查等全部功能,由于区块链上数据的不可更改性,此类只包含增和查的操作。 3.1 根据key从数据库中获取数据本文如下相关异步实现,都采用Promise的方式而非回调,其中好处作为前端工程师此处就不多介绍了,有需要了解的可异步Promise介绍,自行扩展阅读。 getLevelDBData(key) { let self = this; return new Promise(function(resolve, reject) { self.db.get(key) .then(value => { console.log('Value = ' + value); resolve(value) }) .catch(err => { console.log('Not found!'); reject(err) }) });}3.2 将key/value数据插入数据库中以key/value的方式在数据库中存储,其key值得选取,这里考虑使用区块类中声明的height字段,该字段标识一个区块在链中的位序,同时也具有唯一性,非常合适。 addLevelDBData(key, value) { let self = this; return new Promise(function(resolve, reject) { self.db.put(key, value) .then(() => resolve()) .catch((err) => { console.log('Block ' + key + ' submission failed'); reject(err) }) });}3.3 获取数据库中区块总数createReadStream()方法创建一个读取数据库的流,这里的作用是为了遍历整库以获取存储的区块总数,另外此方法还可通过传参,设置遍历次序,详情可参阅文档。 ...

May 28, 2019 · 2 min · jiezi

通过-Ruby-买卖Bitcoin使用开放交易所OceanOne

上一章介绍了Exincore,你可以1秒完成资产的市价买卖。如果你想限定价格买卖,或者买卖一些exincore不支持的资产,你需要OceanOne。 方案二: 挂单Ocean.One交易所Ocean.one是基于Mixin Network的去中心化交易所,它性能一流。你可以在OceanOne上交易任何资产,只需要将你的币转给OceanOne, 将交易信息写在交易的memo里,OceanOne会在市场里列出你的交易需求,交易成功后,会将目标币转入到你的MixinNetwork帐上,它有三大特点与优势: 不需要在OceanOne注册不需要存币到交易所支持所有Mixin Network上能够转账的资产,所有的ERC20 EOS代币。预备知识:你先需要创建一个机器人, 方法在 教程一. 安装依赖包我们需要依赖 msgpack and mixin-bot ,第四章 已经做过介绍, 你应该先安装过它了. 充币到 Mixin Network, 并读出它的余额.此处演示用 USDT购买BTC 或者 用BTC购买USDT。交易前,先检查一下钱包地址。完整的步骤如下: 检查比特币或USDT的余额,钱包地址。并记下钱包地址。从第三方交易所或者你的冷钱包中,将币充到上述钱包地址。再检查一下币的余额,看到帐与否。(比特币的到帐时间是5个区块的高度,约100分钟)。比特币与USDT的充值地址是一样的。 if cmd == "aw" assetsInfo = walletAccount.read_assets() p "--------The Wallet Assets List-----------------" assetsInfo["data"].each { |x| puts x["symbol"] + " " + x["balance"] + " " + x["public_key"] + x["account_name"] + " " + x["account_tag"]} p "----------End of Wallet Assets --------------"end取得Ocean.one的市场价格信息如何来查询Ocean.one市场的价格信息呢?你要先了解你交易的基础币是什么,如果你想买比特币,卖出USDT,那么基础货币就是USDT;如果你想买USDT,卖出比特币,那么基础货币就是比特币. if ocmd == "1" Utils.OceanOneMarketPriceRequest(BTC_ASSET_ID, USDT_ASSET_ID)enddef self.OceanOneMarketPriceRequest(asset_id, base_asset_id) full_url = "https://events.ocean.one/markets/" + asset_id + "-" + base_asset_id + "/book" data = HTTP.get(full_url).body body = "" redData = data.readpartial while redData != nil body = body + redData redData = data.readpartial end result = ActiveSupport::JSON.decode(body).with_indifferent_access result["data"]["data"]["asks"].each { |x| puts x["side"] + " " + x["price"] + " " + x["amount"] + " " + x["funds"] } result["data"]["data"]["bids"].each { |x| puts x["side"] + " " + x["price"] + " " + x["amount"] + " " + x["funds"] }end交易前,创建一个Memo!在第二章里,Ruby比特币开发教程: 机器人接受比特币并立即退还用户, 我们学习过转帐,这儿我们介绍如何告诉Ocean.one,我们给它转帐的目的是什么,信息全部放在memo里. ...

May 27, 2019 · 3 min · jiezi

Bystack的高TPS共识算法

共识算法是分布式系统保证节点数据状态一致性的方法,在区块链的共识算法分POW(工作量证明)和POS(权益证明)两大类。第一类POW模式是在公链项目中运用的最广泛应用的共识算法,比特币长达10年的运行已充分证明POW的安全性与稳定性。POW的特性是将去中心化与安全性发挥到了极致,但却牺牲了性能。 如比特币的峰值TPS为3.87, 平均每笔交易被打包入块需要10分钟;比原链的峰值TPS为36.32,平均每笔交易被打包入块需要2.5分钟。第二类的POS模式是由通过算法来选择出块共识节点,多用于联盟链和一些追求高TPS的新公链项目中。POS的特性是通过支持更小的出块间隔来达到最优的性能,但却牺牲了部分的安全性与去中心化。 Bystack是一个基于主侧链架构的区块链BaaS平台,将区块链分为Layer1和Layer2两层。 Layer1既比原链的主链,由POW算法保证最高级别的资产安全与去中心化。Layer1的TPS问题则通过跨链技术将资产转移到Layer2上来解决. 侧链(既Layer2)使用创新的BBFT共识算法使单条侧链的TPS达到20000以上,多条侧链配合可使TPS线性增长。 在未达到节点带宽与性能瓶颈的前提下,TPS = 区块交易数 *每秒确认的区块数。由于区块可以容纳的最大交易数可以通过简单的修改代码参数实现,所以提高每秒确认的区块数就成了提高TPS的关键方式。如比原链的每个区块最大可容纳5500笔左右的交易,在主链上因为平均每150秒出一个块的POW特性所以TPS是36.32.但上在侧链如将每秒进入最终确认的区块数提高到5个则可轻易的将TPS达到25000以上。 DPOS的问题传统的DPOS共识算法如EOS已经完全可以做到支持每秒2个区块的出块速度,但却有一个等待最终确认的问题。因为一个传统的DPOS区块获得最终确认的依据是所有超级节点都在此块之后出过至少一个子块。这意味着假设有21个超级节点,每个节点每轮出6个块,平均每个出块时间为0.5秒。那么一个区块获得最终确认的时间需要60秒。 BFT的问题基于BFT的POS因为BFT的特性所有每个块在产出之后可以得到快速的最终确认,但是却难以获得较高的TPS.原因是BFT每个区块分为三个状态,产生,预最终状态与最终确认状态。状态的改变是依靠收集到2/3节点的签名,而签名产生的效率依赖网络的延迟。假设部分超级节点在美国,部分在中国那么通信的延迟大约为200毫秒。那一个区块从产生到最终确认至少需要600毫秒的限制。所以在BFT的共识算法中网络延迟成为了高TPS的瓶颈。 DPOS BBFT共识算法Bystack的共识算法是基于DPOS和BBFT算法特性的全新混合共识算法,通过将出块与BBFT签名异步进行的模式使得算法同时具有高TPS与快速最终确认的特性。在BBFT共识算法由全网用户投票选出n个共识节点进行出块。共识节轮流成为出块节点,当成为出块节点的共识节点将会以s秒一个块的速度连续出m个区块。当区块产生之后将直接广播至全网,但出块节点不会等待获取2/3的其他共识节点签名而是继续在当前块的基础上出下一个块。此时当前区块已是合法区块但是未获得最终确认,类似于比特币未获得6个块确认存在回滚的可能性。当其他共识节点收到区块并且验证通过之后将会对区块进行签名并广播到全网,当一个区块获得超过2/3的签名时就进入了最终确认状态。 TPS实现高TPS的核心点是每个共识节点连续出m个区块。因为当每个节点只出一个块的话那么下一个共识节点出块需要等待上一个共识节点出的块,这里就需要考虑一个网络延迟带来的问题。如果把出块间隔设置小于网络延迟的,那会有大概率共识节点在出块时未收到上一个块造成分叉的状态。但当m设为一个稍大的数则可以将tps提升到带宽与节点性能的极限。假设当m=20,当下一个共识节点出块时因为网络延迟未收到最后1个块但却收到了之前的19个块,节点会接在上一轮第19个块之后出块。区块链会进入瞬间的分叉状态但会根据最长链原则在2个块之后全网状态统一。虽然损失了1个区块的TPS,但任保证了出块间隔小于网络延迟情况下的高出块率。 异步BFT在BBFT的设计中出块与与共识节点的BFT签名是并行进行来抵消因网络延迟收集BFT签名对出块效率的影响。但不同于经典BFT算法中有产生,预最终状态与最终确认三个状态,BBFT根据区块链的特性改造使算法只有一个最终确认状态。但添加了两个额外的限制条件:第一个是当一个共识节点对相同高度的两个不同区块进行签名既发生欺诈;第二个是当一个共识节点对相同时间的两个不同区块进行签名既发生欺诈。通过这种方式的改造减少了共识节点之间的通信次数,从而降低了区块获得最终确认所花费的时间。同时BBFT还有区块获得直接确认与间接确认两种。第一种直接确认既区块获得了超过2/3的共识节点签名。第二种间接确认是一个区块未获得2/3的共识节点签名,但其子块获得了超过2/3共识节点的签名,BBFT则会认为此区块间接的获得了最终确认的状态。 容灾容错支持只剩单共识节点存活的情况下支撑整个网络的运行到下一轮共识节点替换,但出块速度会下降为正常情况的1/n.用户可在此期间更改投票替换超级节点,在下一轮共识节点替换时网络既恢复正常状态。支持1/3的共识节点作恶的情况下网络正常运行,当超过1/3的共识节点作恶区块将长时间不能进入最终确认功能直至网络运行到下一轮共识节点被替换。当超过1/2的共识节点作恶,恶意节点将控制网络。BBFT共识出块情景分析以下案例假设 n = 5, m = 3, s = 1,区块高度 = 100,时间戳为= 1557148900,  轮到3号共识节点准备出第一个块 完美状态 3号节点出高度为101, 时间戳为155714890区块A,广播至全网区块A得到超过2/3的节点确认,进入最终确认状态3.  3号节点出高度为102, 时间戳为155714891区块B,广播至全网 区块B得到超过2/3的节点确认,进入最终确认状态5.  3号节点出高度为103, 时间戳为155714892区块C,广播至全网 区块C得到超过2/3的节点确认,进入最终确认状态4号节点成功收到区块A, B, C并都处于最终状态,在此链的基础上继续连续出4号节点出高度为104, 时间戳为155714893区块D,广播至全网达到毫秒级最终确认,无回滚发生, 只有在网络延迟低与共识节点稳定的时候产生 理想状态3号节点出高度为101, 时间戳为155714890区块A,广播至全网3号节点出高度为102, 时间戳为155714891区块B,广播至全网区块A得到超过2/3的节点确认,进入最终确认状态4.  3号节点出高度为103, 时间戳为155714892区块C,广播至全网 区块B得到超过2/3的节点确认,进入最终确认状态4号节点成功收到区块A, B, C但只有A,B处于最终确认状态,在此链的基础上继续连续出块 4号节点出高度为104, 时间戳为155714893区块D,广播至全网区块C得到超过2/3的节点确认,进入最终确认状态达到秒级最终确认,无回滚发生,但因收集共识节点对区块的确认签名,导致最终确认的延迟。但由于所有区块已成功传递到下一个出块共识节点,所以不影响出块 出块共识节点异常状态时间戳为155714890, 无新块产生时间戳为155714891, 无新块产生时间戳为155714892, 无新块产生4号节点未收到任何区块,轮到挖矿后出高度为101,时间戳为155714893区块A广播至全网 区块A得到超过2/3的节点确认,进入最终确认状态达到秒级最终确认,无回滚发生,因共识节点down机导致全网3秒内无节点出块。造成的影响是减慢了全网的出块速度,当单节点长期down机需要等待下一次投票时重新选出新一轮的共识节点可修复 网络延迟异常13号节点出高度为101, 时间戳为155714890区块A,广播至全网区块A得到超过2/3的节点确认,进入最终确认状态3.  3号节点出高度为102, 时间戳为155714891区块B,广播至全网 区块B得到超过2/3的节点确认,进入最终确认状态5.  3号节点出高度为103, 时间戳为155714892区块C,广播至全网 区块C得到超过2/3的节点确认,进入最终确认状态4号节点成功收到区块A, B但C区块由于延迟问题暂未收到4号节点出高度为103, 时间戳为155714893区块D,广播至全网由于2/3的共识节点已最终确认区块C, D无法获得最终确认4号节点收到区块C与C的最终确认信息, 回滚区块D, 切换链至区块C4号节点出高度为104, 时间戳为155714894区块E,广播至全网区块E得到超过2/3的节点确认,进入最终确认状态达到秒级最终确认,有回滚在所有没收到区块C的节点中发生,造成的影响是减慢了1个块的出块速度 ...

May 27, 2019 · 1 min · jiezi

以太坊中文文档翻译交易

本文原文链接点击这里获取Etherscan API 中文文档(完整版)完整内容排版更好,推荐读者前往阅读。 交易(Transaction)交易相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中不单独说明。 [BETA] 检查合约执行状态(if there was an error during contract execution) Note: isError":"0" = Pass , isError":"1" = Error during Contract Execution https://api.etherscan.io/api?module=transaction&action=getstatus&txhash=0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a&apikey=YourApiKeyToken[BETA] 检查交易收据状态(Only applicable for Post Byzantium fork transactions) Note: status: 0 = Fail, 1 = Pass. Will return null/empty value for pre-byzantium fork https://api.etherscan.io/api?module=transaction&action=gettxreceiptstatus&txhash=0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76&apikey=YourApiKeyToken点击获取Etherscan API 中文文档(完整版)示意图: 相关文档推荐:Solidity 中文文档(完整版)ethers.js 中文文档(完整版)Web3.js 中文文档(完整版)Truffle 中文文档(完整版)

May 26, 2019 · 1 min · jiezi

以太坊中文文档翻译区块

本文原文链接点击这里获取Etherscan API 中文文档(完整版)完整内容排版更好,推荐读者前往阅读。 区块(Blocks)区块相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中不单独说明。 通过区块号获取块及叔块奖励https://api.etherscan.io/api?module=block&action=getblockreward&blockno=2165403&apikey=YourApiKeyToken示意图: 相关文档推荐:Solidity 中文文档(完整版)ethers.js 中文文档(完整版)Web3.js 中文文档(完整版)Truffle 中文文档(完整版)

May 26, 2019 · 1 min · jiezi

以太坊中文文档翻译智能合约

本文原文链接点击这里获取Etherscan API 中文文档(完整版)完整内容排版更好,推荐读者前往阅读。 智能合约(Contracts)智能合约相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中不单独说明。 Newly verified Contracts are synced to the API servers within 5 minutes or less 获取已经验证代码合约的ABIVerified Contract Source Codes https://api.etherscan.io/api?module=contract&action=getabi&address=0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413&apikey=YourApiKeyTokenA simple sample for retrieving the contractABI using Web3.js and Jquery to interact with a contract var Web3 = require('web3'); var web3 = new Web3(new Web3.providers.HttpProvider()); var version = web3.version.api; $.getJSON('http://api.etherscan.io/api?module=contract&action=getabi&address=0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359', function (data) { var contractABI = ""; contractABI = JSON.parse(data.result); if (contractABI != ''){ var MyContract = web3.eth.contract(contractABI); var myContractInstance = MyContract.at("0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359"); var result = myContractInstance.memberId("0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715"); console.log("result1 : " + result); var result = myContractInstance.members(1); console.log("result2 : " + result); } else { console.log("Error" ); } });获取已经验证代码合约的源码https://api.etherscan.io/api?module=contract&action=getsourcecode&address=0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413&apikey=YourApiKeyToken点击获取Etherscan API 中文文档(完整版)示意图: ...

May 26, 2019 · 1 min · jiezi

以太坊中文文档翻译账号

本文原文链接点击这里获取Etherscan API 中文文档(完整版)完整内容排版更好,推荐读者前往阅读。 账号(Account)账号及地址相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中不单独说明。 获取单个账号余额 译者注: 英文 `balance` 有人翻译为`金额`,译者习惯称为`余额`。 账号和地址大部分也是指一个意思。接口: /api?module=account&action=balance&address=0x&tag=latest&apikey=YourApiKeyToken返回: { status: "1", message: "OK", result: "40807178566070000000000"}说明: 余额的单位都是最小单位wei, 更多单位换算可阅读:以太单位换算 请求样例URL,点击可在浏览器查看效果。 获取多个账号余额接口: /api?module=account&action=balancemulti&address=0xabc,0x63..,0x198..&tag=latest&apikey=YourApiKeyToken使用,来分割地址,一次请求最多20个账号。 返回: {status: "1",message: "OK",result: [{account: "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a",balance: "40807178566070000000000"},{account: "0x63a9975ba31b0b9626b34300f7f627147df1f526",balance: "332567136222827062478"}]}请求样例URL 获取地址(普通)交易列表接口: /api?module=account&action=txlist&address=&apikey=YourApiKeyToken可选参数:startblock 、endblock、sort 返回: { "status": "1", "message": "OK", "result": [{ "blockNumber": "47884", "timeStamp": "1438947953", "hash": "0xad1c27dd8d0329dbc400021d7477b34ac41e84365bd54b45a4019a15deb10c0d", "nonce": "0", "blockHash": "0xf2988b9870e092f2898662ccdbc06e0e320a08139e9c6be98d0ce372f8611f22", "transactionIndex": "0", "from": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", "to": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2", "value": "5000000000000000000", "gas": "23000", "gasPrice": "400000000000", "isError": "0", "txreceipt_status": "", "input": "0x454e34354139455138", "contractAddress": "", "cumulativeGasUsed": "21612", "gasUsed": "21612", "confirmations": "7525550" }]}说明: ...

May 26, 2019 · 1 min · jiezi

如何用-Ruby-买卖Bitcoin

方案一: 通过ExinCore API进行币币交易Exincore 提供了基于Mixin Network的币币交易API. 你可以支付USDT给ExinCore, ExinCore会以最低的价格,最优惠的交易费将你购买的比特币转给你, 每一币交易都是匿名的,并且可以在区块链上进行验证,交易的细节只有你与ExinCore知道! ExinCore 也不知道你是谁,它只知道你的UUID. 预备知识:你先需要创建一个机器人, 方法在 教程一. 安装依赖包正如教程一里我们介绍过的, 我们需要依赖 mixin-bot, 你应该先安装过它了, 这儿我们再安装 easy-uuid, msgpack 两个软件包. gem install msgpack gem install easy-uuid充币到 Mixin Network, 并读出它的余额.ExinCore可以进行BTC, USDT, EOS, ETH 等等交易, 这儿演示如果用 USDT购买BTC 或者 用BTC购买USDT, 交易前,先检查一下钱包地址!完整的步骤如下: 检查比特币或USDT的余额,钱包地址。并记下钱包地址。从第三方交易所或者你的冷钱包中,将币充到上述钱包地址。再检查一下币的余额,看到帐与否。(比特币的到帐时间是5个区块的高度,约100分钟)。请注意,比特币与USDT的地址是一样的。 if cmd == "aw" assetsInfo = walletAccount.read_assets() p "--------The Wallet Assets List-----------------" assetsInfo["data"].each { |x| puts x["symbol"] + " " + x["balance"] + " " + x["public_key"] + x["account_name"] + " " + x["account_tag"]} p "----------End of Wallet Assets --------------"end查询ExinCore市场的价格信息如果来查询ExinCore市场的价格信息呢?你要先了解你交易的基础币是什么,如果你想买比特币,卖出USDT,那么基础货币就是USDT;如果你想买USDT,卖出比特币,那么基础货币就是比特币. ...

May 25, 2019 · 3 min · jiezi

区块链笔记3比特币交易的数据和流程

区块链技术只能用来做关于金融交易的应用么?或许先去了解它有关交易的细节,才能看到是否有其它应用的可能。1 交易的数据模型1.1 起因在此之前,我们关于Bitcoin Core介绍了许多,以及把它当作工具如何使用,现在我们将进一步来研究下区块链中的数据模型。 为什么说将区块和交易当作数据模型来理解非常重要?我的答案是:为了知道如何使用数据。 我们使用区块链应用与网络中的其它节点进行通信、交互以及协作时,可能更关注的是协议。但如果直接去看协议,可能会不容易看得通透,例如在面对一些问题:通过协议传输的数据长什么样?开发自己的区块链应用时,数据是主角,那如何组织和使用它呢?要搞清楚,数据模型这座大山势必要推倒。 另外谈到数据这个话题,开发者可以通过操作码(Op-code)的方式向区块中嵌入额外的数据,对此目前社区反应出两种不同的声音,以比特币平台为例,一些人认为比特币区块链如此便包含了许多非金融数据,当区块链不断延展的同时,会对那些不在意这些数据的人的存储空间带来了沉重的负担;另一些人则认为这些非金融数据的存在,可能使区块链在金融领域之外,产生更多的应用可能。 Op-code:来自比特币脚本语言的一些操作码,用于在公钥脚本和签名脚本中推送数据或执行函数。其实在社区中看到类似的争论还是蛮有意思的,早期时候,人们为了给比特币交易添加备注信息,或其他和交易本身无关的非金融数据,是通过刻录比特币的方式来进行的,就是在不同的交易中,将output里的验证脚本换成其他数据,这会使得UTXO数据集不断变大,因为这么做会导致这笔交易里的比特币不能再被花费,又因为整个比特币系统出于速度的考虑,会把所有未被花费的交易(UTXO)都存储在内存中,这必然使得网络各节点中包含大量的冗余信息,造成跨节点分类账的维护成本变高。而现在,随着新的改进方案已纳入区块链和操作码中,如Op-return。如此协议已经渐趋成熟,UTXO数据集就不会夸张的膨胀. UTXO:即未花费的交易输出(Unspent Transaction Outputs),它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。另外值得提的一点是,在比特币钱包当中,我们都可以看到账户余额,但在这个账户余额的概念与我们所熟知的银行账户余额有着巨大的不同,其实站在UTXO交易模型上看,并没有什么所谓一个一个的比特币,有的只是UTXO。当我们说张三拥有10个比特币的时候,我们实际上是在说,当前区块链账本中,有若干笔交易的UTXO项的收款人写的是张三的地址,而这些UTXO项的数额总和是10。比特币钱包中所看到的账户余额,实际上则是钱包通过扫描区块链并聚合所有属于该用户的UTXO计算得来的。Op-return:本质上讲,OP_RETURN是一个脚本操作码,是专门被设计出来承载额外的交易信息的。它的作用就像我们在日常转账过程中的备注信息。通过它发送的数据会和我们进行的比特币交易一样,永久保存在比特币区块链的区块中。 1.2 交易的输入和输出不论你面对的是哪种区块链应用,交易都是区块链系统中最重要的部分。你可以把交易理解为组成区块链宇宙的原子,正如原子是组成所有生命的基础,交易则是组成数据块的单位。你可能已经注意到了,比特币区块链上所做的任何事情都是,为了确保一笔交易能否被创建,并在网络中传播和验证,以及最终添加到区块链上。当然搞清楚这些具体细节,还是为了以后能够创建自己的区块链应用。所以现在还是一步一步来,先回顾下交易是如何运作的,以及它的输入和输出,这对后面讨论交易的数据模型来说很重要。 交易描述的是一笔资金从它的原始所有者(input)向即将所有者(output)价值转化的数据结构以下交易详情是使用之前我们介绍过的站点,查看比特币测试链上的一笔交易:从图中显而易见的是,有两笔为0.01BTC的输入,参与了一次0.001BTC的转账后,又退回给原所有者0.019BTC,基于此我想问的是:这些输入从何而来,产生的新输出又去向何处? 一个交易的输入,都来自与另一个交易的未花费输出(UTXO)。 在交易发生时有获取账户余额的需求,都是通过统计整个区块链上,该钱包地址关联的所有UTXO(未花费交易输出)上的比特币数量来完成的。所以并不存在存储一个账户余额的字段,或者一个比特币的地址。 1.3 数据模型这一小节我们来看交易的信息在数据模型中是如何存储的。如果要求网络返回一个原始交易信息给我们,所得到的可能是像下面这样的信息: 0100000001f3f6a909f8521adb57d898d2985834e632374e770fd9e2b98656f1bf1fdfd427010000006b48304502203a776322ebf8eb8b58cc6ced4f2574f4c73aa664edce0b0022690f2f6f47c521022100b82353305988cb0ebd443089a173ceec93fe4dbfe98d74419ecc84a6a698e31d012103c5c1bc61f60ce3d6223a63cedbece03b12ef9f0068f2f3c4a7e7f06c523c3664ffffffff0260e31600000000001976a914977ae6e32349b99b72196cb62b5ef37329ed81b488ac063d1000000000001976a914f76bc4190f3d8e2315e5c11c59cfc8be9df747e388ac00000000这是一条还未解码成JSON对象的十六进制数据。虽然确实不是很容易看的懂,但其实组织的还是很有条理的。以上面这条信息为例,从起始位开始,一条交易一般包含如下内容: 比特币的版本(Version):01000000交易的输入数量(Input Count):01交易的输入信息(Input Info):f3f6a909f8521adb57d898d2985834e632374e770fd9e2b98656f1bf1fdfd427010000006b48304502203a776322ebf8eb8b58cc6ced4f2574f4c73aa664edce0b0022690f2f6f47c521022100b82353305988cb0ebd443089a173ceec93fe4dbfe98d74419ecc84a6a698e31d012103c5c1bc61f60ce3d6223a63cedbece03b12ef9f0068f2f3c4a7e7f06c523c3664ffffffff交易的输出数量(Output Count):02交易的输出信息(Output Info):60e31600000000001976a914977ae6e32349b99b72196cb62b5ef37329ed81b488ac063d1000000000001976a914f76bc4190f3d8e2315e5c11c59cfc8be9df747e388ac锁定时间(loctime):00000000。它表示该条交易最早被确认后,写入的最早区块或最早被确认写入的时间: 若该字段非零,且<5亿,则表示该条交易最早被写入的区块的区块号。若>5亿,则表示该条交易最早被写入区块的时间。若为零,则表示该条交易立即被写入区块。其中在交易的输入信息和输出信息中,还分别包含了一小段用以验证该次交易是否有效地指令脚本:即输入信息中的解锁脚本(UnLocking script)和输出信息中的锁定脚本(Locking script)。 这里的脚本(script),指的是记录在每条交易中的一系列指令字符,执行用于验证交易是否有效及比特币能否发出。而名称与之类似的比特币脚本语句(Bitcoin Script)是一种基于栈的简单轻量级的语句,被设计用来能通用于一系列硬件平台上做相关运算的指令。我们可以在栈中存储数字或数据常量,并使用一系列前缀为OP_的指令(Opcode)对数据进行操作。例如通过OP_ADD将栈中的两个数据进行相加,通过OP_EQUAL来检查栈顶的两个元素是否相等,OP_DUP复制栈顶的数据等等,总共大概有80多个指令,详见Opcodes的维基百科。接下来我们通过一条简单的算数运算指令来具体观察上面提到的三个概念:解锁脚本、锁定脚本和包含Opcodes指令的比特币脚本语句,算数指令如下: 2 6 OP_ADD 8 OP_EQUAL比特币脚本语句的执行顺序是从左向右的,并且是基于栈结构的,那么这条语句的执行步骤就应当是: 数字2入栈;数字6入栈;执行OP_ADD:数字6和2依次出栈后,相加所得的结果(8)再入栈;数字8入栈执行OP_EQUAL:数字8和8依次出栈后,进行相等比较,所得的结果(True)再入栈其中我们可以将6 OP_ADD 8 OP_EQUAL这部分视为锁定脚本,它需要满足使其最终结果为True的解锁脚本(2),才能完成算数验证。也就是说如果用这条语句来验证交易的有效性,那么所有知道数字2能满足条件的解锁语句,都可使其生效。 对于比特币脚本语言有两个特性: 无流程控制:语句简单,不存在循环和条件控制,好处是不用担心死循环之类的阻塞性错误;缺点是不够灵活。无状态:在执行过程前后,不保存任何关于状态的值,好处是安全,不论在哪个平台上执行相同的语句都会得到相同的答案;不足是比较简单。任何实现方式的特点,都有其长短优劣,在做整体方案架构的考量时,应谨慎根据业务场景进行选取。 而在实际情况中,我们验证交易有效性所使用得解锁脚本(UnLocking script)和锁定脚本(Locking script)构成的比特币脚本语句是如下的结构: <sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG其中对应于解锁脚本(UnLocking script)和锁定脚本(Locking script)的部分分别是: UnLocking script:<sig> <pubKey>Locking script:OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG忘了说清楚一点,验证交易发生的有效性,并不是用同一个交易的解锁脚本(UnLocking script)和锁定脚本(Locking script)进行验证。而是用当前进行交易的解锁脚本,与该输入回溯的UTXO中的锁定脚本进行验证,而当前交易的锁定脚本则是用来,和未来将要发生的交易中的解锁脚本进行验证。具体验证关系如下图: 交易的有效性验证的工作原理其实很简单,就是利用了非对称加密,在解锁脚本中,包含了钱包所有者用私钥生成的签名。因为只有钱包所有者才有交易权,才能生成判断交易有效地解锁脚本。 具体拆分上面的原始交易数据如下图: 其中我们将输入信息细化为如下部分: Previous output hash:所有的输入都可以回溯到一个输出,即上一笔交易所产生的UTXO。Previous output index:可能一笔交易会包含多项UTXO,这项便是指定多个UTXO的索引,其中第一个UTXO从0开始算。Script Size(bytes):表示解锁脚本的字节数大小。scriptSig:上文谈到的解锁脚本Sequence:这目前是比特币废弃的一个属性位,默认设为ffffffff。而输出信息也可细化出如下部分: ...

May 25, 2019 · 2 min · jiezi

Ruff-Chain-双周报-5月13日5月24日

在过去的两周,RuffChain 完成了测试网络的代码审计工作,目前正在进行主网测试网络的修复和功能新增。以下为本期完整双周报:· RuffChain 主网: -增加BP退出功能(可以主动退出候选人列表) -增加BP质押/用户质押的冻结功能(在一定的时间后才能够赎回) -开发物联网网关与智能合约交互的demo,目前已进入测试阶段 -RuffChain浏览器的版本迭代,包括主网钱包需求分析和开发 -代码安全审计工作完成,目前正在根据优先级修复安全bug -链投票功能迭代开发 · Ruff 人脸识别智能终端正式上线使用 -Ruff 人脸识别智能终端经过一系列的开发和测试,目前已经成功上线微软旗下的上海张江功夫孵化器,让原先依靠门卡的门禁实现了无需改造,即可人脸刷卡进出入,同时保证了原先密码及门卡的开门功能。 -Ruff FaceID 智能门禁终端RAF-G1 系列产品是基于Ruff FaceID 模组开发的用于人脸识别的智能终端。终端利用AI芯片的神经网络计算能力,动态识别人脸,实现出入口人员的安全认证,有效管理人员进出。 · RUFF 成为首批入驻微软人工智能和物联网实验室企业 -2019年5月15日,微软人工智能和物联网实验室启用仪式在张江人工智能岛举行,浦东新区副区长管小军、微软全球资深副总裁、大中华区董事长兼首席执行官柯睿杰、微软全球人工智能和混合现实商业拓展负责人Rashmi Misra以及张江集团党委书记、董事长袁涛等众多嘉宾参与了本次启用仪式。 Ruff 南潮科技作为首批入选企业,在300余家申请企业中脱颖而出,成为入驻微软人工智能和物联网实验室的第一批 AIoT 企业。据悉,首批入驻企业一共30家,包括上海ABB工程有限公司、泛亚汽车技术中心有限公司、上海云从科技等一大批科技领域的优秀企业。 关于微软人工智能和物联网实验室: 直属微软总部战略发展部门,是一个开放的研发合作组织,为当地合作企业提供人工智能及物联网产品方案“设计研发、测试实验、原型生产、技术支撑、架构优化、方案构建”等全方位服务。微软希望实验室能帮助全球的开发者利用微软丰富的开放资源和平台来探索自己的人工智能及物联网项目,助力企业在数字化转型的过程中缩短研发周期、加速技术创新和产业转化。据悉,上海的人工智能和物联网实验室是微软全球的第四个实验室。 微软AI & IoT实验室致力于为来自各个行业的企业创造价值,全球已累计服务企业200余个,超过半数的企业有多个项目在不同时段获得了微软AI & IoT实验室的指导。其中,获得突破性进展的企业包括:MARS(智能零售)、Daimler TSS(汽车制造)、BAYER(数字医疗)、MERCK(数字医疗)、P&G(日用化学品)、OTIS(运输系统)、KOHLER(智慧家居)、DUPONT(化工)、Tetra Pak(食品包装)等。 社群访问地址 Website http://ruffchain.com/ https://ruff.io/ Official Blog https://ruffchain.com/blog/ Twitter https://twitter.com/Ruff_Chain Facebook https://www.facebook.com/Ruff... Telegram https://t.me/ruffchain https://t.me/ruffchainchinese

May 24, 2019 · 1 min · jiezi

Ruby-比特币开发教程-创建比特币钱包

我们已经创建过一个回复消息的机器人和一个能自动支付比特币的机器人. 通过本教程的学习,你可以学到如下内容如何创建一个比特币钱包.如何读取比特币钱包的余额.如何支付比特币并即时确认.如何将Mixin Network的比特币提现到你的冷钱包或第三方交易所.前期准备:你要有一个Mixin Network账户。下面的代码创建一个帐号,并写到csv文件里。 if File.file?(WALLET_NAME) p "mybitcoin_wallet.csv has already existed !" nextendyaml_hash = YAML.load_file('./config.yml')MixinBot.client_id = yaml_hash["MIXIN_CLIENT_ID"]MixinBot.session_id = yaml_hash["MIXIN_SESSION_ID"]MixinBot.client_secret = yaml_hash["MIXIN_CLIENT_SECRET"]MixinBot.pin_token = yaml_hash["MIXIN_PIN_TOKEN"]MixinBot.private_key = yaml_hash["MIXIN_PRIVATE_KEY"]access_token = MixinBot.api.access_token("GET","/","")rsa_key = OpenSSL::PKey::RSA.new(1024)private_key = rsa_key.to_pem()p private_keypublic_key = rsa_key.public_key.to_pemsecret_client = public_key.sub("-----BEGIN PUBLIC KEY-----\n","").sub("\n-----END PUBLIC KEY-----\n","")reqInfo = MixinBot.api.create_user("ruby bot",secret_client)p reqInfo["data"]["pin_token"]p reqInfo["data"]["user_id"]p reqInfo["data"]["session_id"]CSV.open(WALLET_NAME, "wb") do |csv| csv << [private_key, reqInfo["data"]["pin_token"], reqInfo["data"]["session_id"], reqInfo["data"]["user_id"]]end上面的语句会在本地创建一个RSA密钥对,然后调用Mixin Network来创建帐号,最后保存帐号信息到csv文件. 现在你需要小心保管好你的帐号信息,在读取该账户的比特币资产余额或者进行其他操作时,将需要用到这些信息. 给新建的帐号创建一个比特币钱包新账号并不默认内置比特币钱包, 现在读一下比特币余额就可以创建一个比特币钱包。 if cmd == "2" table = CSV.read(WALLET_NAME) MixinBot.client_id = table[0][3] MixinBot.session_id = table[0][2] MixinBot.pin_token = table[0][1] MixinBot.private_key = table[0][0] botAssetsInfo = MixinBot.api.read_asset(BTC_ASSET_ID) p botAssetsInfo p "The BTC wallet address is " + botAssetsInfo["data"]["public_key"] p "The BTC wallet balance is " + botAssetsInfo["data"]["balance"]end创建的帐号的比特币资产详细信息如下,其中public key就是比特币的存币地址: ...

May 22, 2019 · 3 min · jiezi

CKB-测试网-Rylai-上线之后你可以玩些什么

正如 5 月 18 日发布的《Nervos CKB 测试网正式上线》里说的一样,Rylai 经过了三十多次的迭代,我们在全球通过购买服务器,部署了真实的节点,限制了带宽,所有的测试都在真实的网络上发生。这期间的测试过程中出现了很多问题,但很幸运,我们也都解决了这些问题。(谢谢冰女保佑????) 为什么叫 Rylai?很多人问起名字的来源,终于在 Testnet Launch Party 上,Terry 做了公布: Rylai 是一个女孩子的名字。为什么是女孩子的名字?据说船在起航的时候都会用一个女孩子的名字来命名,具体什么原因,大家可以去搜一下知乎排名第一的答案(我们就不详细说啦)。 Rylai 是 Dota 里面的英雄,叫冰女(水晶室女)。Dota 文化属于 Nervos 亚文化之一,所以未来我们也会用 Dota 里面的英雄命名以后的里程碑。 另外,还有其它的解释: 项目诞生是在寒冬测试网通常会 Freeze 一些 Feature,到主网不会有太大的变化,Freeze 和冰女的气质比较相像更多画面,大家可以联想......当前的 Rylai 中包含了什么?共识(NC-Max)和 P2P 协议虽然现有的项目有成熟的共识和 P2P 协议,但我们还是决定单独将它们做出来。因为对于一个需要经受真实环境残酷考验的项目来说,现有的共识和 P2P 协议并不是那么地完善和适合我们。 Nervos 现在的共识算法叫 NC-Max,由研究员张韧设计。在测试网上线之前,我们最重要的一份工作就是证明 NC-Max 比 Bitcoin 的 Nakamoto Consensus 更好。我们对 Bitcoin 网络和 CKB 网络进行了测量,后续,我们将发布所收集的数据、RFC 以及共识协议的论文。 Rylai 三十多次的迭代过程,也是我们对 NC-Max 以及 P2P 协议参数不断调试的过程。这个参数调优就像是在给一辆汽车做零件的调试(这里请大家自行脑补,周杰伦出演的电影《头文字 D》中,其父亲藤原文太调试汽车的场景),尽可能将发动机、油门、离合器、刹车等部件调到最好的状态。现在我们找到了顺畅运行的参数组合,测试网上线,大家可以来尽情体验了。 CKB-VM我们没有用 EVM,也没有用 WebAssembly,而是基于一个完全由开放的,由社区推动的 RISC-V 指令集,打造了一个新的 CKB-VM,这很符合我们的开源理念。这里有一个很特别的技术设计就是我们把自己验签的算法跑在了 VM 里面,也可以允许用户选择自己认为合适的验证签名的方法。 ...

May 22, 2019 · 1 min · jiezi

使用Hyperledger-Fabric和Composer实现区块链应用程序

目前无法绕过技术领域的是区块链话题。但除了加密货币之外,还有更多有趣的应用程序可以带来许多激动人心的软件生态系统。这也适用于Hyperledger项目,该项目提供了一个非常模块化的区块链框架。让我们看看使用Hyperledger Fabric和Composer实现区块链应用程序是多么容易。 关于项目HyperledgerHyperledger是一个umbrella项目的名称,在该项目下开源区块链方法和工具是协同开发的。它由Linux基金会于2015年推出,并享有IBM,英特尔和富士通等软件巨头以及大型社区的热烈参与。Hyperledger的GitHub存储库目前比以往更加活跃。任何人都可以参与开发。 在Hyperledger中,不仅开发了单个区块链框架(或平台)。相反,重点是并行采用多种方法,创造协同效应,可重复使用的组件和灵活性。从Hyperledger概念的角度来看,区块链网络与比特币或以太网等加密货币的代表无法比较。相反,Hyperledger网络的节点分布在参与组织中,这使得私有,许可或联盟区块链网络特别有趣。首先,我们可以忘记公共区块链的工作证明,股权证明和其他共识机制。所涉及的组织从应用程序业务价值和所涉及的信任中作为联合体验证彼此的交易和利益。这也很大程度上解决了可扩展性问题(我们从比特币网络中了解到)并且可以实现高交易吞吐量。 项目Hyperledger的不同区块链方法是Fabric,Burrow,Iroha,Indy和Sawtooth。私有,许可和联合区块链可以与所有这些区块链一起开发,但每种实现都遵循不同的方法。 我们将在本文中详细介绍Fabric,因为它拥有最活跃的社区,并且是最灵活的变体。由于其强大的模块化,fabric是普遍可用的。 “你可以将Hyperledger Fabric视为类似于Apache Web Server”,Linux基金会Hyperledger执行董事Brian Behlendorf说。其他方法更多用于在有限的环境中实施特殊情况。 Hyperledger Fabric ——灵活的区块链应用平台使用Fabric作为平台,可以开发完全独立的分布式分类帐解决方案。Fabric包含可以尽可能自由实现的概念。区块链网络的基础是对所需组织结构的建模。每个参与者都有固定的身份,可以通过颁发的证书来识别自己。除了身份验证之外,还包括授权。使用这种基于角色的系统,可以获得许可区块链中隐私和机密性的灵活方面。对于证书和参与者的管理,可以使用结构证书颁发机构(1.0版之前的成员服务提供者)。 资产的定义(要在区块链上管理的项目)完全取决于区块链应用程序。这些资产,例如来自汽车行业的引擎块由JSON和/或二进制格式的键值对模型定义。 链代码的概念旨在基于资产及其所有者实现业务逻辑。这可用于实现Go,Java或Node.js等语言中的规则,这些规则定义读取权限或资产修改。执行链代码功能可以读取和返回资产和/或创建和修改资产并将它们存储在本地分类帐数据库中。在节点上的本地持久性更改之后,将更改提交给网络(“认可”)并在其他组织接受后插入到区块链中。在以太坊或其他公共区块链平台的背景下,可以将链码与智能合约进行比较。 通道用于实现隐私领域。在最简单的场景中,整个链代码部署在所有参与者加入的单个通道上。但是,为了创建封装区域并仅允许选定的参与者在其中进行通信,可以配置具有受限参与者组的通道。每个通道可以部署不同的链代码,从而可以实现功能隔离。此外,可以使用AES部分或完全加密通道中的通信。 结果,在每个通道中维护一个分布式分类帐,这可以被想象为链接交易的现金簿。每个参与者为他们所属的每个通道保留一份分类帐副本。这为网络中的每个现有信道创建了区块链数据结构。与区块链一样,交易存储在块中,这些块在单个连接列表中成为加密链。 但是,为了向客户端应用程序提供分类帐数据的单独视图,甚至可以执行针对网络的复杂读取请求。由于使用了像CouchDB这样的面向文档的数据库,这是可能的。这为连接到Fabric网络的客户端提供了灵活的数据访问。 使用Composer添加更简单的概念Hyperledger-Composer是Hyperledger生态系统中的工具之一。你可以将其视为Fabric的框架。如果你想开发,构建和管理Fabric网络,那么即使不是强制性的,也是实用的。它引入了基于Fabric的进一步概念,以提供精美的抽象概念。 除资产外,还可以在Composer建模语言中定义网络参与者,交易和事件的方案。每种交易类型的流都通过JavaScript代码在简单的API上实现。访问控制文件可用于限制参与者对某些资源的访问权限。可以在Composer Query Language中定义对分类帐中数据的常用查询,这是一种类似SQL的语言。 然后,必须将所有必需文件打包到.bna文件中的BND(业务网络定义)。然后,可以将此存档安装在现有Fabric网络上。BND的源代码当然可以在我们首选的编辑器中进行本地开发和测试,因此可以通过Git进行版本控制。对于原型设计和演示目的,有Composer Playground。这提供了一个现代,清晰且直观可用的Web界面,可访问Composer CLI的本地配置。使用Playground,你可以轻松创建,安装,测试,编辑,导入和导出BND。 在Composer Playground中,你可以以用户友好的方式安装,修改和测试新的业务网络,而无需先前的样本区块链应用知识(例如车辆生命周期,汽车拍卖或农场动物跟踪)。在设置工具之后,可以在本地完成相同的操作,这样我们就可以在短时间玩游戏后离开托管游乐场。这个游乐场非常适合使用原型验证想法并了解底层的Composer和Fabric模型。 使用案例:引擎块的供应链跟踪为了使用Hyperledger-Fabric和Composer实现私有区块链网络,以汽车行业的发动机组跟踪为例。在这种情况下,有制造商和经销商作为网络参与者。发动机及其安装的车辆显示为资产。制造商和经销商的公司被引入并被识别为网络中的组织。 Fabric链代码应提供以下功能: 1.生产具有唯一序列号的发动机缸体。2.生产后将发动机缸体传送给经销商。3.跟踪车辆的序列号。4.将发动机缸体安装到注册车辆中。下一步是安装所需的工具和设置项目。 开发环境设置和项目创建首先,需要安装文档中列出的Fabric的所有要求。然后我们安装Composer和Composer及其相关工具本身的要求。 然后,最好让自己熟悉新环境。如果我们完全按照上一个链接的说明操作,则fabric-tools现在位于我们的主目录中。通过描述的脚本,我们可以在Docker-Compose中启动一个简单的Fabric网络,获得对等管理员访问权限并停止并再次删除它。首先,我们下载1.1版的Docker镜像并启动网络: export FABRIC_VERSION=hlfv11 && ./downloadFabric.sh && ./startFabric.sh在网络运行时,composer-playground web-UI可以通过composer-playground启动。它使用composer-cli的所有托管配置并访问正在运行的Fabric网络。从现在开始,我们将Fabric视为可配置的平台/基础架构,其状态通过合适的工具进行更改。我们不直接使用Fabric概念开发链代码,权限或任何模型,因为Composer提供了更多优势。 实施功能现在我们在我们选择的目录中创建我们的BND项目。对于Yeoman(使用模板设置项目的代码生成器,如Maven Archtypes),有一个模板(hyperledger-composer:businessnetwork。但是,我已经准备了一个存储库,我们现在也可以使用JavaScript ES6和一些很好的工具。我们应该从开始分支“初始”开始。master分支具有最终版本和工作版本。我们首先克隆存储库的初始分支。 git clone -b initial git@github.com:jverhoelen/fabric-composer-engine-supplychain.git现在我们在我们选择的编辑器中打开文件夹。Visual Studio Code非常适合Composer,因为它具有可安装的语法高亮扩展。稍作修改后你会发现它是一个NPM项目,所以我们从npm install开始安装所有依赖项。使用npm test我们可以运行单元测试,使用npm run lint我们可以测试代码样式,并且使用npm run createArchive我们可以创建the.bna文件,我们以打包格式完成业务网络定义。让我们马上试试看是否一切正常。 然后我们熟悉项目结构。lib文件夹包含实现交易处理器功能的JS文件。当然,我们想测试这个业务逻辑并将我们的单元测试存储在test/文件夹中。模型定义(参与者,资产,交易等)在models/中。 我们想首先为所需的区块链网络建模。为此,我们删除模型文件的内容,并在第一行为其指定一个新的命名空间: namespace org.acme.enginesupplychain我们为参与者制造商和经销商建模,并使用Composer建模语言的继承。我们还希望每个参与者除了姓名外还有一个可选地址。我们将这些属性放入一个概念中: participant Member identified by memberId { o String memberId o String name o Address address optional} participant Manufacturer extends Member {} participant Merchant extends Member {} concept Address { o String country o String city o String street o String streetNo}然后我们介绍我们网络的资产:引擎块和稍后安装引擎的汽车。在这里,我们了解资产和参与者可以互相参考。引用始终指向任何类型的现有资源。我们以小“o”开头的属性总是存在于资源本身中。 ...

May 22, 2019 · 3 min · jiezi

Awesome-Blockchain-区块链技术导航

区块链技术导航:收集整理最全面最优质的区块链(BlockChain)技术开发相关资源。以后找不到文档资料的时候去导航站看看。 先亮个像,我长这样: 导航站内容区块链开发所涉及的资源: 如 项目白皮书、黄皮书、SDK 文档及翻译、GitHub地址库、开发工具链、开发案例、音视频课程等。 涉及的技术有: 区块链主流技术如比特币、以太坊、超级账本、EOS等提供区块链前沿技术如跨链、侧链、Layer2、存储协议、DAG 、匿名技术等导航索引区块链技术导航区块链入门/比特币 区块链入门/比特币比特币闪电网络比特币术语区块链英文术语-中文对照以太坊 以太坊资源汇总开发文档以太坊扩容技术1以太坊扩容技术2以太坊术语柚子EOS超级账本IPFS/FileCoinDAG/树图跨链 波卡 Polkadot隐私/匿名技术Defi 去中心化金融技术动向课程学习区块链社区参与贡献本站有由一群区块链技术爱好者共同维护,欢迎大家提交内容,我们会第一时间处理,大家可以提交Issues,也可以提交Pull Request,这里还有一个份如何贡献操作指南 部分贡献者以下排名不分先后: Tiny熊虞是乎Bob尊重汗水,转载请注明来自 深入浅出区块链社区 - 技术导航站。

May 22, 2019 · 1 min · jiezi

今天Nervos-CKB-测试网正式上线

在过去的 15 个月里,经过 Nervos CKB 核心开发团队以及所有贡献者的共同努力,今天,我们终于迎来了 CKB 测试网的第一个版本: Rylai !???????????? 区块链浏览器:https://explorer.nervos.org Rylai 发布后将会分为多个阶段继续进行完善,直至主网上线。我们今天发布的第一阶段的测试网主要包含共识协议、P2P 协议以及 CKB-VM,非常欢迎和鼓励社区成员运行节点和挖矿!第一阶段还包含了基本的智能合约编程模型和 NervosDAO 的初步实现,开发者勇士们可以尝试构建和运行 CKB 脚本进行体验。 对于此次 Rylai 的发布,Nervos 首席架构师 Jan 有话说: CKB 的全部设计都已经敲定,细节处理也日臻完善。经过三十多次迭代之后,Rylai 终于成功发布!欢迎大家都来尝试一下在 CKB 上挖矿和发送交易的感觉。Rylai 在发布之后还会持续迭代直到主网上线,期间我们会根据社区的反馈改进 CKB 的编程模型,让它对开发者更加友好, 更重要的是,我们将提出和实现一个新的 PoW 挖矿算法!Daniel 想对社区说: 一年多来,从 CKB 的第一个 PoC 原型验证的完成,到 CKB 白皮书的撰写,到 CKB 代码开源,到 CKB 经济模型提案发布,现在到了 CKB 测试网正式上线,这中间凝聚了许许多多参与者的力量。不仅仅有开发团队一次次闭关、夜以继日的开发迭代,也有着来自社区朋友们的支持和很真诚的建议。我们是一个开源的社区,这次的测试网上线,也欢迎大家来尝试,大胆提出你的想法!测试网的上线对每一个参与 Nervos 项目的人来说都是一项重大成就,这使我们离想要共同创建的加密经济体系又近了一步。我们非常感谢大家对 Nervos 这个开源项目投入的热情和精力,也非常开心可以和大家一起去完成这项使命。 最后,这里有一份关于 Rylai 的操作说明,欢迎大家一起体验在 CKB 上挖矿和发送交易:https://docs.nervos.org 如果在运行中有任何问题,或者有更好的改进建议,可通过以下渠道找到我们。Nervos CKB 正处于快速发展阶段,我们希望能够和大家一起进行代码改进,也许你的建议会对现有功能和模块产生巨大的积极意义! GitHub IssuesNervos TalkCKB Dev Telegram小提示:Rylai 测试网仅供体验和试用,会根据开发需要进行重置,挖出来的代币没有任何价值。测试网每两周会进行一次重置,开发进展也将于每两周进行同步更新。 ...

May 18, 2019 · 1 min · jiezi

使用-Nodejs-在开放交易所OceanOne上挂单买卖奔驰币

在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne支持交易任何Mixin Network上的token,包括所有的ERC20和EOS token,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个ERC20 token挂上OceanOne交易。掌握了ERC20代币的交易方法,就可以交易任何其他Mixin Network代币了。 此处我们用一个叫做Benz的ERC20 token为例。这个token已经被充值进Mixin Network,你可以在区块链浏览器看到这个token在Mixin Network内部的总数和交易 预备知识:先将Ben币存入你的钱包,然后使用getAssets API读取它的UUID. 取得该币的UUID调用 getAssets API 会返回json数据, 如: asset_id 币的UUID.public_key 该币的当前钱包的地址.symbol 币的名称. 如: Benz.if ( args.type === TYPE_WALLET_ASSETS_INFO ) { const assetsInfo = await newUserClient.getUserAssets(); console.log("-AssetID--Asset--Balance--public_key--"); assetsInfo.forEach(function(element) { console.log(element.asset_id + " " + element.symbol + " " + element.balance + " " + element.public_key + " " + element.account_name + " " + element.account_tag ); }); // console.log(assetsInfo);}调用 getUserAssets API的完整输出如下: ...

May 16, 2019 · 3 min · jiezi

沙龙报名-探索新零售时代的数字化创新

互联网技术正在重塑新零售的消费场景,使顾客消费思维发生改变。消费习惯由价格时代转为价值时代。同时,体验需求得到升级。新零售在“人、货、场”数字化过程中,针对不同垂直领域需要不同的设计和思考,产出不同的商业要素解决方案划分。 此次沙龙活动以京东在零售业和社交电商方面的核心技术以及在“618”、“双11”大促时的成功解决方案为出发点,并结合京东云在新零售领域的诸多落地实践,详解新零售数字化创新的方方面面,同时聚焦监控运维的技术升级、企业如何依靠”京东能力“打造社交电商系统、区块链技术对零售行业的创造性影响等诸多方向与开发者们展开深入探讨。 活动详情 时间:2019年5月26日(周日)13:00—18:00 地点:上海·Hello Coffee(上海市长宁区延安西路918号1楼) 主题:从高并发架构到企业级区块链,探索新零售时代的数字化创新 点击“阅读原文”即可报名!** 活动日程 讲师信息 内容预告 主题一:京东数据库服务如何应对”大促活动“? 郭理靖 京东云产品研发部高级总监 数据库作为底层架构的中枢“神经”,其稳健、可靠以及高性能对业务支持意义重大。本次分享会: 1、从选择合适业务的数据库服务出发 ,详细解析常见的数据库服务性能问题 2、如何在业务高峰的场景下高性价比完成需求等技术详情,并配合京东电商具体的生产实践加以说明,让开发者做到更深入了解数据库选型的基本方法、高可用架构与性能优化的诸多模式等,并提供超大流量场景下系统保障的经验与技巧。 主题二:企业级监控系统设计与实践郑永宽 京东云产品研发部总监1、企业级监控系统的关键问题 2、大型监控系统设计思路与方法 3、京东云监控实践经验 主题三:社交电商SaaS产品技术架构赵金勇 京东云应用研发部社交电商负责人1、社交电商的概念 2、如何依托”京东能力“,帮助企业打造社交电商系统 3、京东电商云在社交电商领域的技术优势 4、明确微信小程序SaaS化,探究如何通过托管方式实现小程序SaaS化部署 5、深入探讨服务端如何通过域名泛解析来实现多租户部署 主题四:基于企业级区块链框架系统JD Chain的技术实践张作义 京东数科区块链产品创新负责人1、京东区块链整体技术架构解读 2、JD Chain区块链底层框架介绍 2、京东区块链产品创新应用概览 3、区块链在零售业应用案例分享 福利预警 京东云开发者社区用户专属福利! 我们为您的学习买单! ???????????? 报名并参加此次京东云技术沙龙,现场为大家抽取价值2400元由CNCF主办的“KubeCon/CloudNative开源大会”参会门票2张! 作为2019年最大规模的云原生和开源盛会,感兴趣的小伙伴千万不能错过哦! 立即点击“加入我们”报名吧!

May 16, 2019 · 1 min · jiezi

通过-Nodejs-买卖Bitcoin

上一章介绍了Exincore,你可以1秒完成资产的市价买卖。如果你想限定价格买卖,或者买卖一些exincore不支持的资产,你需要OceanOne。 方案二: 挂单Ocean.One交易所Ocean.one是基于Mixin Network的去中心化交易所,它性能一流。你可以在OceanOne上交易任何资产,只需要将你的币转给OceanOne, 将交易信息写在交易的memo里,OceanOne会在市场里列出你的交易需求,交易成功后,会将目标币转入到你的MixinNetwork帐上,它有三大特点与优势: 不需要在OceanOne注册不需要存币到交易所支持所有Mixin Network上能够转账的资产,所有的ERC20 EOS代币。预备知识:你先需要创建一个机器人, 方法在 教程一. 安装依赖包我们需要依赖 msgpack5 and mixin-node-client ,第四章 已经做过介绍, 你应该先安装过它了. 充币到 Mixin Network, 并读出它的余额.此处演示用 USDT购买BTC 或者 用BTC购买USDT。交易前,先检查一下钱包地址。完整的步骤如下: 检查比特币或USDT的余额,钱包地址。并记下钱包地址。从第三方交易所或者你的冷钱包中,将币充到上述钱包地址。再检查一下币的余额,看到帐与否。(比特币的到帐时间是5个区块的高度,约100分钟)。比特币与USDT的充值地址是一样的。 if ( args.type === TYPE_WALLET_ASSETS_INFO ) { const assetsInfo = await newUserClient.getUserAssets(); console.log("-AssetID--Asset--Balance--public_key--"); assetsInfo.forEach(function(element) { console.log(element.asset_id + " " + element.symbol + " " + element.balance + " " + element.public_key + " " + element.account_name + " " + element.account_tag ); }); // console.log(assetsInfo);}取得Ocean.one的市场价格信息如何来查询Ocean.one市场的价格信息呢?你要先了解你交易的基础币是什么,如果你想买比特币,卖出USDT,那么基础货币就是USDT;如果你想买USDT,卖出比特币,那么基础货币就是比特币. ...

May 15, 2019 · 4 min · jiezi

如何使用docker和dockercompose在EOS本地Testnet上开发

EOS区块链的开发并不是立竿见影的,因为需要一些非显而易见的组件,需要对它们进行配置和协同工作。 nodeos:块生成器守护程序。keosd:钱包守护进程,存储私钥。eosio-cpp:智能合约编译器。eosio.token:平台的参考标记。cleos:用于与EOS区块链远程交互的CLI。scatter:为本地Testnet配置的EOS钱包。 我将学到什么?如何运行和初始化EOS本地Testnet。如何编译和运行EOS智能合约。如何通过cleos进行EOS交易。要求要学习本教程,你需要使用下面的软件: Ubuntu Linux(推荐)docker/docker-compose困难程度中间教程内容Dockerfile(你需要的软件)docker-compose.yml(该软件应该如何运行)cleos,命令行EOS钱包。部署eosio.token,即EOS货币系统智能合约。Dockerfile(你需要的软件)。你可以直接在Linux操作系统上安装以下组件,但这样可以使你的开发环境更加干净,更易于维护和测试。 以下所有文件均为官方文件,并由EOSIO发布: FROM ubuntu:18.04RUN apt-get update && apt-get install -y curl libicu60 libusb-1.0-0 libcurl3-gnutlsRUN curl -LO https://github.com/EOSIO/eos/releases/download/v1.7.0/eosio_1.7.0-1-ubuntu-18.04_amd64.deb \ && dpkg -i eosio_1.7.0-1-ubuntu-18.04_amd64.debRUN curl -LO https://github.com/EOSIO/eosio.cdt/releases/download/v1.6.1/eosio.cdt_1.6.1-1_amd64.deb \ && dpkg -i eosio.cdt_1.6.1-1_amd64.debRUN curl -LO https://github.com/EOSIO/eosio.cdt/archive/v1.6.1.tar.gz && tar -xvzf v1.6.1.tar.gz --one-top-level=eosio.cdt --strip-components 1RUN cd /eosio.cdt/ && curl -LO https://github.com/EOSIO/eosio.contracts/archive/v1.6.0-rc3.tar.gz && tar -xvzf v1.6.0-rc3.tar.gz --one-top-level=eosio.contracts --strip-components 1你可以使用以下命令生成打包的镜像沙箱: docker build -t my/eos .docker-compose.yml(该软件应该如何运行)正如我所说,需要一些配置来互相讨论所需的所有部分。 default.wallet是一个预配置的钱包,带有用于测试的私钥。config.ini是Block Producer(BP)的文件,在EOS Mainnet中你不会/不能改变它。version: '3'services: nodeos: container_name: nodeos image: my/eos command: nodeos -e -p eosio --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin --http-server-address=0.0.0.0:8888 --access-control-allow-origin=* --contracts-console --http-validate-host=false --filter-on="*" stop_grace_period: 3m0s volumes: - ./:/eosio.cdt/contract - ./config.ini:/root/.local/share/eosio/nodeos/config/config.ini ports: - '8888:8888' - '9830:9876' depends_on: - keosd keosd: container_name: keosd hostname: keosd image: my/eos command: keosd --http-server-address=0.0.0.0:8901 --http-validate-host 0 --verbose-http-errors --unlock-timeout=9999999 volumes: - ./default.wallet:/root/eosio-wallet/default.wallet expose: - 8901 ports: - '8901:8901'运行在新终端中运行以下命令: ...

May 14, 2019 · 2 min · jiezi

以太坊智能合约之如何执行智能合约

区块链技术在顶级技术中占据主导地位的主要原因在于其去中心化。虽然区块链的主要目的是在没有中心的情况下维护交易记录,但为了实现自动化,智能合约被引入。那么在写完智能合约之后呢?在本文的这个以太坊智能合约教程中,我们将了解如何使用Truffle Ethereum和以太坊专用网络来执行智能合约。 我们将在以太坊智能合约教程中查看以下主题: 使用案例:保险流程中的智能合约智能合约的好处安装先决条件配置Genesis Block运行以太坊专用网络创建以太坊帐户创建以太坊智能合约执行以太坊智能合约使用案例:保险流程中的智能合约区块链遵循的是“没有中央权力机构”,这就是智能合约引入的原因。但你有没有想过如何使用智能合约?那么,在以太坊智能合约的这一部分中,我将解释保险流程中智能合约的使用案例。 让我们考虑一个航班延误保险的例子。假设你想要从出发地A到目的地C进行飞行,但你没有直接飞行。那么,你决定通过B来转机。现在,你的路线将从A到B,然后从B到C,其中B是机场,你将更改航班。不幸的是,从A到B以及从B到C的航班之间没有太大的时间差距。所以,如果有任何问题,一旦从A到B的航班延误,那么你将错过从B到C的航班。意识到这一点后,为了避免重大损失,你可能需要一个航班延误保险。 现在,如果你从A到B的航班延误(这将使你错过从B到C的航班),你将获得保险金额。这是正常的情况,如果你的航班延误,你可以申请保险。然后,有人会核实并批准保险,最后,你将获得你的保险金额。但这是一个漫长的过程。 你如何使用智能合约来改善保险流程?谈到金融交易,特别是当你拿钱时,“越快越好”,不是吗?那么,让我们看看智能合约如何加强保险流程。智能合约是数字合约,在满足特定条件时自动执行。如果航班延误,可以编写智能合约以向选择航班延误保险的人支付保险金额。因此,当航班延误并且系统记录此延迟时,保险将立即支付。 OK!保险金额在几秒钟内支付。这就是智能合约如何简单快速地实现流程。 智能合约的好处你已在上面的示例中看到智能合约如何加强财务流程。除快速交易外,智能合约还有更多好处。在这里,我列出了使用智能合约的其他一些好处: 自动化:智能合约自动执行所有步骤。没有中介:当你使用智能合约时,你不需要中介来完成工作,因为一切都将由智能合约处理。成本效益:使用智能合约可以节省银行收取的交易费用和中介(如果有的话)的服务费用。现在,我们知道如何使用智能合约来让世界变得更快,让我们亲身体验这个以太坊智能合约教程。 安装先决条件对于以太坊智能合约教程,我们需要5个重要的应用程序: NodeJSNPMEthereumTruffleSolidity Compiler安装NodeJSNodeJS是一个用于构建服务器应用程序的JavaScript框架。由于我们使用的是专用网络,因此NodeJS可以轻松构建网络应用程序。 要安装Nodejs,请在终端中运行以下命令: $ sudo apt-get install nodejs安装NPMNPM代表Node Package Manager,用于运行Nodejs应用程序。 要安装NPM,请在终端中运行以下命令: $ sudo apt-get install npm安装以太坊以太坊是一个基于开源和公共区块链的分布式计算平台,用于构建去中心化应用程序。 要安装以太坊,请在终端中运行以下命令: $ sudo apt-get install software-properties-common$ sudo add-apt-repository -y ppa:ethereum/ethereum$ sudo apt-get update$ sudo apt-get install ethereum安装TruffleTruffle是以太坊Blokchains的开发环境,测试框架和资产管道。 要安装Truffle,请在终端中运行以下命令: $ npm install -g truffle安装Solidity CompilerSolidity是一种用于编写智能合约的编程语言。要在我们的系统上运行智能合约,我们必须安装Solidity Compiler。 要安装Solidity Compiler,请在终端中运行以下命令: $ sudo npm install -g solc配置Genesis BlockGenesis Block是Blockchain的起点,我们需要一个genesis文件来启动Blockchain。在以太坊智能合约的这一部分中,我们将编写一个Genesis文件并对其进行配置以允许我们运行智能合约。 让我们首先创建一个新目录,然后在该目录中创建genesis文件: $ mkdir ethereum-network$ cd ethereum-network$ nano genesis.json现在,在genesis.json文件中输入以下行: ...

May 14, 2019 · 1 min · jiezi

通过-Go-在去中心化交易所OceanOne上挂单买卖任意ERC20-token

在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne支持交易任何Mixin Network上的token,包括所有的ERC20和EOS token,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个ERC20 token挂上OceanOne交易!在掌握了ERC20 token之后,就可以把任何token在Ocean上买卖。 此处我们用一个叫做Benz的ERC20 token为例。这个token已经被充值进Mixin Network,你可以在区块链浏览器看到这个token在Mixin Network内部的总数和交易 预备知识:先将Ben币存入你的钱包,然后使用ReadAssets API读取它的UUID. 取得该币的UUID调用 ReadAssets API 会返回json数据, 如: asset_id 币的UUID.public_key 该币的当前钱包的地址.symbol 币的名称. 如: Benz.if cmd == "aw" { priKey, _, sID, userID, _ := GetWalletInfo() assets, err := mixin.ReadAssets(userID,sID,priKey) if err != nil { log.Fatal(err) } var AssetsInfo map[string]interface{} err = json.Unmarshal(assets, &AssetsInfo) if err != nil { log.Fatal(err) } // fmt.Println("Data is: ",AssetsInfo["data"].(map[string]interface{})["public_key"]) for _, v := range (AssetsInfo["data"].([]interface{})) { if v.(map[string]interface{})["symbol"] == "EOS" { fmt.Println(v.(map[string]interface{})["symbol"]," ", v.(map[string]interface{})["asset_id"]," ", v.(map[string]interface{})["account_name"]," ", v.(map[string]interface{})["account_tag"]," ", v.(map[string]interface{})["balance"]) } else { fmt.Println(v.(map[string]interface{})["symbol"]," ", v.(map[string]interface{})["asset_id"]," ", v.(map[string]interface{})["public_key"]," ", v.(map[string]interface{})["balance"]) } }}调用 ReadAssets API的完整输出如下: ...

May 13, 2019 · 3 min · jiezi

Ruff-Chain-双周报-4月26日5月10日

在过去的两周,RuffChain 主要工作集中在主网公测版本的准备中,目前测试网络还在代码审计中,预计会在5月中旬完成全部代码安全审计工作,之后 RuffChain 团队将对审计结果进行全面review,包括代码bug的修复、代码质量优化等。以下为本期完整双周报: RuffChain 确定主网公测版本: -主链 -物联网区块链演示demo -主网区块链浏览器 -主网钱包 物联网区块链demo设计 -物联网+区块链demo项目是在共享租房领域的物权合约实现,将房屋信息、订单信息、交易结算信息、评论信息等全部实现链上管理,打通客户在下单之后,在开门时利用物权合约,实现链上自动交易结算,远程控制开门。 Ruff 智慧工地项目正式启动 -Ruff 智慧工地解决方案是利用物联网信息技术实现工地可视化管理,包括环境监测管理系统(扬尘监测、冲洗台抓拍)、视频联网系统、实名制考勤系统、车辆管理系统以及安全帽穿戴管理系统等。 -首批项目正式上线南京各个工地,聚焦工地冲洗台的监测,保证车辆在冲洗台完成规定时间内的冲洗,对于不符合要求的车辆,实现自动抓拍和视频存证,利用云端的人工智能分析引擎,监测不符合要求的车辆。 RUFF 正式成为微软物联网人工智能实验室首批入选企业 -2019年1月,微软目前全球最大的人工智能和物联网实验室签约落户上海张江。实验室落户将推动微软与张江的战略合作关系和华东乃至整个中国经济的数字化转型,同时,微软将投入更多的资源用于物联网研究和实践,并在多个行业领域展开人工智能及物联网与企业转型的深度融合。 -根据推进与评估,Ruff 成为首批入选实验室的技术企业,后续将在物联网及人工智能方面与微软共同推进相关产品业务落地。 社群访问地址 Website http://ruffchain.com/ https://ruff.io/ Official Blog https://ruffchain.com/blog/ Twitter https://twitter.com/Ruff_Chain Facebook https://www.facebook.com/Ruff... Telegram https://t.me/ruffchain https://t.me/ruffchainchinese

May 13, 2019 · 1 min · jiezi

通过-Go-在去中心化交易所OceanOne上挂单买卖Bitcoin

上一章介绍了Exincore,你可以1秒完成资产的市价买卖。如果你想限定价格买卖,或者买卖一些exincore不支持的资产,你需要OceanOne。 方案二: 挂单Ocean.One交易所Ocean.one是基于Mixin Network的去中心化交易所,它性能一流。你可以在OceanOne上交易任何资产,只需要将你的币转给OceanOne, 将交易信息写在交易的memo里,OceanOne会在市场里列出你的交易需求,交易成功后,会将目标币转入到你的MixinNetwork帐上,它有三大特点与优势: 不需要在OceanOne注册不需要存币到交易所支持所有Mixin Network上能够转账的资产,所有的ERC20 EOS代币。预备知识:你先需要创建一个机器人, 方法在 教程一. 安装依赖包第四课, 在上一课中已经安装好了. 充币到 Mixin Network, 并读出它的余额.此处演示用 USDT购买BTC 或者 用BTC购买USDT。交易前,先检查一下钱包地址。完整的步骤如下: 检查比特币或USDT的余额,钱包地址。并记下钱包地址。从第三方交易所或者你的冷钱包中,将币充到上述钱包地址。再检查一下币的余额,看到帐与否。(比特币的到帐时间是5个区块的高度,约100分钟)。比特币与USDT的充值地址是一样的。 userInfo, userID := ReadAssetInfo("USDT")fmt.Println("User ID ",userID, "'s USDT Address is: ", userInfo["data"].(map[string]interface{})["public_key"])fmt.Println("Balance is: ", userInfo["data"].(map[string]interface{})["balance"])func ReadAssetInfo(asset_id string) ( map[string]interface{}, string) { var UserInfoMap map[string]interface{} csvFile, err := os.Open("mybitcoin_wallet.csv") if err != nil { log.Fatal(err) } reader := csv.NewReader(bufio.NewReader(csvFile)) record, err := reader.Read() if err != nil { log.Fatal(err) } fmt.Println(record[3]) PrivateKey2 := record[0] SessionID2 := record[2] UserID2 := record[3] UserInfoBytes, err := mixin.ReadAsset(mixin.GetAssetId(asset_id), UserID2,SessionID2,PrivateKey2) if err != nil { log.Fatal(err) } fmt.Println(string(UserInfoBytes)) if err := json.Unmarshal(UserInfoBytes, &UserInfoMap); err != nil { panic(err) } csvFile.Close() return UserInfoMap, UserID2}取得Ocean.one的市场价格信息如何来查询Ocean.one市场的价格信息呢?你要先了解你交易的基础币是什么,如果你想买比特币,卖出USDT,那么基础货币就是USDT;如果你想买USDT,卖出比特币,那么基础货币就是比特币. ...

May 12, 2019 · 4 min · jiezi

笨蛋问题是产品

2003 年,是互联网公司最困难的时刻。互联网泡沫自 2000 年达到顶峰之后开始破灭,之后股市和投资额一路下跌,一直跌到了 2002 年底,该破产的公司早已破产,没破产的也很难再融到新的资金,只能靠裁员勉强让公司能多活一段时间。到谷底的时候,四处都是恐慌和绝望,甚至最坚定的互联网信仰者也多少有点动摇。大家也在疑问,我们从事的这个行业,到底有没有价值? 到 2003 年,硅谷名人,最大的计算机技术出版商 O'Reilly 的创始人,年近 50 的 Tim O'Reilly,决定站出来给年轻的互联网公司们鼓劲。除了开始推广一个叫做 Web2.0 的概念,宣称互联网最大的浪潮即将到来之外,O'Reilly 还组织了一场特别聚会,叫做 Foo Camp。 <center>The "camp" in the Googleplex atrium</center> Foo Camp 和当时所有的技术活动都不一样,它是完全没有主题的。按照组织者的说法,这个活动就是大家拿出一个周末的时间,在一个有网络的大厅里,提供吃喝和帐篷,让大家随便聊天,并向其他人讲述自己对科技行业发展的想法,或者展示自己的产品点子。你可以随便抓住一个人开始聊,也可以累了钻帐篷里面睡一觉,起来继续聊,如果觉得自己聊出了特别有价值的东西,马上就到白板上自己写个时间表,上台给所有人讲。但是即使台上有人拿着麦克风讲,下面的人也未必感兴趣认真听,他们可能会继续激动的聊天,完全不理会台上的人。 这个活动吸引了 200 多人参加,大家聊了无数想法,一些程序员还带着自己正在做的项目原型当场展示。整个活动充满了西海岸的嬉皮劲儿,加州的一堆精酿啤酒作坊也带着自己得意的啤酒跑去为这些“聪明的脑袋”提供酒精燃料。 之后这个活动席卷全球,各国各地都开了一场又一场,中国也曾经开过几次。今天我们可以说,那是互联网的先驱者的活动。他们在整个行业最绝望的时候,讨论出了各种应用场景,最终这些场景大部分变成了产品。比如,如何组织信息流,如何提供 Feed,这些想法后来开启了 Blog 时代,最终又演变成了社交网络。再比如说,BT 下载在那次活动上已经能拿出一个完善的产品演示,通过在活动上的展示开始为世人所知。 实际上,在 2003 年那个时间点,互联网需要的基础技术和开源软件已经都具备了。虽然它们远没有今天强大,没有今天这么方便快捷,但是技术基础已经完全具备了。只是大部分人在那个时间点还不能理解,这些技术基础能提供什么实际用途。 这正如克林顿当年的竞选美国总统时候的著名标语:“笨蛋,问题是经济“。在那个时间点上,互联网面对的问题正是如此,问题是产品。 这种场景在互联网和科技的发展历史上每过几年就会出现一次。再比如说,移动互联网时代从 GPRS 网络铺设完成就算开始了,到 3G 建设时候已经具有相当不错的技术基础,然而,人们苦寻杀手产品而不得,很多国家的运营商差点被拖到破产。一直到 iPhone 这个杀手产品出现,移动互联网的浪潮才算真正开始。科技发展史可以 告诉我们的一个经验就是:技术发展的速度通常超前,产品通常滞后。而更有趣的是,产品的出现和发展弹性非常大,人们完全可以通过适当的取舍,在技术发展有一定局限性的时候,就产生出真正可用的产品。比如说,今天手机 4G 网络已经到了200M 带宽,但是 90 年代末人们已经开始开始 P2P 下载了,当时常见的宽带带宽还不到 1M。 区块链,在我看来恰好就是那个时代的状态。技术基础已经足够产生有意思的应用,但是实际上应用本身远远不够丰富。除了钱包,菠菜,真正让人们觉得可用的东西远远不够,一场热潮又刚刚结束,熊市还不知道要维持多久,这恰好就是 2002 年我见过的互联网世界。比起来 2002 年的互联网基础设施,今天区块链实际上已经好于那时候了,也有了足够多的技术方案。这些方案已经足够解决一些问题了,但这些问题往往分布在不同行业里,我们这个行业的从业者可能还没有意识到它们的存在。而那些行业的从业者,也不知道区块链现在已经足够解决他们的问题。虽然区块链还有各种缺点,但是在不同行业的不同应用场景下,根据具体需求重新组合效率,可靠性,成本,去中心化的不同需求和粒度,理应可以产生真正解决问题的产品模式。归根结底还是这句话:“问题是产品”。 因此,当我们的 PRESS.one 基础设施逐渐齐备,可以开始负担一些应用的时候,团队问我,咱们要不要搞一个黑客松之类的活动。但我第一个想起的活动不是黑客松这种开发类活动,而是更接近创意和讨论的 Foo Camp。在这个时代我们更需要的是想法的碰撞,尤其是来自完全不同行业,不同背景的人群的想法,哪怕是觉得“你们这事完全不靠谱”的想法也值得辩论。毕竟,互联网的早期也有大批传统软件拥护者跑过来砸场,坚称大众互联网毫无价值,软件才是未来。 ...

May 9, 2019 · 1 min · jiezi

通过-C-买卖Bitcoin

上一章介绍了Exincore,你可以1秒完成资产的市价买卖。如果你想限定价格买卖,或者买卖一些exincore不支持的资产,你需要OceanOne。 方案二: 在去中心化交易所OceanOne上挂单买卖BitcoinOcean.one是基于Mixin Network的去中心化交易所,它性能一流。你可以在OceanOne上交易任何资产,只需要将你的币转给OceanOne, 将交易信息写在交易的memo里,OceanOne会在市场里列出你的交易需求,交易成功后,会将目标币转入到你的MixinNetwork帐上,它有三大特点与优势: 不需要在OceanOne注册不需要存币到交易所支持所有Mixin Network上能够转账的资产,所有的ERC20 EOS代币。预备知识:你先需要创建一个机器人, 方法在 教程一. 安装依赖包我们需要依赖 MsgPack.Cli and mixin-csharp-sdk ,第四章 已经做过介绍, 你应该先安装过它了. 充币到 Mixin Network, 并读出它的余额.此处演示用 USDT购买BTC 或者 用BTC购买USDT。交易前,先检查一下钱包地址。完整的步骤如下: 检查比特币或USDT的余额,钱包地址。并记下钱包地址。从第三方交易所或者你的冷钱包中,将币充到上述钱包地址。再检查一下币的余额,看到帐与否。(比特币的到帐时间是5个区块的高度,约100分钟)。比特币与USDT的充值地址是一样的。 if (cmd == "aw" ) { // Console.WriteLine(mixinApi.VerifyPIN(USRCONFIG.PinCode.ToString()).ToString()); MixinApi mixinApiNewUser = GetWalletSDK(); var assets = mixinApiNewUser.ReadAssets(); string wuuid = GetWalletUUID(); Console.WriteLine("Current wallet uuid is " + wuuid); foreach (Asset asset in assets) { if (asset.symbol == "EOS") { Console.WriteLine(asset.symbol + " Public Address is: " + asset.account_name + " " + asset.account_tag + " Balance is: " + asset.balance); } else Console.WriteLine(asset.symbol + " Public Address is: " + asset.public_key + " Balance is: " + asset.balance); Console.WriteLine(); }}取得Ocean.one的市场价格信息如何来查询Ocean.one市场的价格信息呢?你要先了解你交易的基础币是什么,如果你想买比特币,卖出USDT,那么基础货币就是USDT;如果你想买USDT,卖出比特币,那么基础货币就是比特币. ...

May 7, 2019 · 4 min · jiezi

当区块链遇见-RISCV

区块链的出现使得智能合约得到了更好的实现和发展,而区块链和智能合约之间,还存在着一个重要的角色:虚拟机(Virtual Machine)。 虚拟机的概念在上个世纪六十年代就被提出来,而到九十年代才开始流行。当时的网络跨越了众多不同的操作系统、浏览器,如果开发者想要制作一个应用,就需要去适配所有不同的操作系统。大家知道现在 App 开发就分为安卓和苹果系统,而当时局面更加复杂。恰好 Java 程序语言开始流行,Java 构建的虚拟机能够让程序只需要写一次,依托 Java 虚拟机就能够在多个平台上运行,所以当时提出的口号就是:一处编译、到处运行。 我们知道比特币是没有虚拟机的,因为比特币就是把一段数字(也就是「比特币」)从地址 A 转移到地址 B,而以太坊则提出,区块链上执行的为什么不能是一套代码,能够实现更多复杂多样的东西?这就是我们所说的智能合约平台,所有节点运行一样的合约代码得到完全一样的结果。 在区块链上,虚拟机就是智能合约的运行环境,是一个可以完全对外隔离的完整计算机体系。区块链通过虚拟机来调用和执行智能合约,并要求所有节点都达成一致。而节点用的是不同的系统,有些机器是 64 位的,有些是 32 位的,传统的 Java 虚拟机容忍计算结果有少量的差异,但是在区块链上所有结果必须一样,因此,一个新的、适用于区块链的虚拟机是必不可少的。 理想中的区块链虚拟机每个区块链项目的虚拟机设计,都会有自身的艺术追求,在追求众多的特性同时做不同层次上的取舍。在做了大量的研究之后,我们认为理想中的区块链虚拟机应该是这样的: 运行时有足够的确定性,在调用同样的智能合约输入时,应该返回相同的输出结果,输出结果不依赖于时间、运行环境等外部的条件;运行时有足够的安全性,虚拟机的执行不会对平台本身带来负面影响;对更新足够的灵活,让区块链不用通过硬分叉,就可以实现加密算法的升级或新增(回想一下以太坊硬分叉升级的痛苦);信息足够的透明,可以让虚拟机上运行的智能合约充分发挥虚拟机的潜力;费用机制足够的合理,能够确保虚拟机运行时资源消耗的计算方式更加合理准确;可以支持不同的语言编译,让开发者能够自由地开发,将最新的科技运用其中。在设计 Nervos CKB 虚拟机之前,我们发现很多区块链项目都不是用真实的 CPU 指令集来构造自己的虚拟机的,他们更多的是选择了 WASM 来构造自己的虚拟机。 而我们更倾向于采用真实的 CPU 指令集来构造自己的虚拟机,因为在任何精巧复杂的虚拟机的最底层,都需要将操作转变为原始的汇编指令来执行对 CPU 的操作。另外,采用真实 CPU 指令集就不会在设计层面引入一些语义约束,束缚虚拟机的灵活性。 做一个不恰当的比喻,操作 CPU 需要有一套语言体系,使用真实的 CPU 指令集就如同能直接用这套语言体系和 CPU「说话」,那就非常方便。否则,就好像先说中文,再转换为英文,不论多完美的翻译水平,都会有一定的偏差和束缚。 通过真实的 CPU 指令集,虚拟机可以根据需要增加任意类型的数据结构或算法,可以最大限度的让开发者写出任何满足要求的合约。于是我们决定大胆的尝试使用真实的 CPU 指令集来构造自己的虚拟机 CKB-VM。 在 CPU 指令集的选择中,我们选择了精简的开源指令集 RISC-V。RISC-V 可以满足从低功耗小型微处理器,到高性能数据中心(DC)处理器的实现要求,并且有着透明性、精简性、模块化、支持的广泛性和成熟性的特点。这些特性都和 CKB-VM 的设计需求完美契合。那么 RISC-V 又是什么呢? RISC-VRISC-V 是一个清晰、简约、开源的 CPU 指令集架构,诞生于美国加州大学伯克利分校。 2010 年,由于其他商业闭源指令集的局限性,该校的一个研究团队在启动一个新项目时,从零开始设计了一套全新的开源指令集。这套全新的指令集有着大量的寄存器和透明的指令执行速度,能够帮助编译器和汇编语言程序员将实际的重要问题转换为适当、高效的代码,并且只包含了不到 50 条指令。这套指令集就是 RISC-V。 ...

May 6, 2019 · 2 min · jiezi

Layer-1-应该做什么

Nervos ApproachNervos Network 的技术目标是设计一个分层的加密经济网络。这样一个出发点带来的是一个与众不同的设计思路,我们自己把它称为「Nervos Approach」: 如果我们认为分层是未来的发展方向,我们应该从一开始就考虑到上层协议和分层网络的需求,在分层的大框架下设计区块链协议。 换句话说,从分层的角度来看,现有的区块链设计方式都是过时的。现有的区块链在设计时考虑的是特定的功能(例如支付,或者是运行 DApp),并希望在运行一段时间后,让上层协议来适应自己。然而如果我们阅读互联网的历史就知道,今天互联网的协议分层不是这样打补丁打出来的,相反是在吸收过去经验之后基于分层的思路重新设计出来的(是的,互联网协议也是分层的,我们说的 TCP/IP 实际上是两个协议的名字)。Nervos Approach 是向互联网学习的产物。 这是为什么区块链并不天然是 Layer 1,Layer 1 是需要设计的。这也是为什么我们选择设计 CKB 这样一个新的区块链协议的原因。 Layer 1 vs. Layer 2要弄清 Layer 1 应该做什么,首先要弄清楚它和上层协议的区别。Layer 2 起源于我们发现公有链(这里指 Permissionless Blockchain)的性能不足,很难扩容到满足整个加密经济体需求的水平,同时我们又非常迷恋公有链提供的可用性和极大的服务范围,因此慢慢演化出了一系列可以由区块链来保证安全的 Layer 2 协议,例如支付通道(Payment Channel),Plasma,etc. 这些协议的共同特点是牺牲共识范围来换取性能。公有链最让人惊艳的地方是通过开放网络,提供不间断的覆盖全球的服务,这意味着全球共识,也意味着性能低下。解决这个问题的最好方式是将大部分交易转移到共识范围更小,但是性能更好的上层协议中,并且保证上层协议的参与者总是可以在不满意的时候退回到区块链上来解决问题,代价仅仅是一些时间成本。 因此作为 Layer 1 的区块链,关注点显然不应该是性能,因为 Layer 2 会承担这个职责。Layer 1 是保障上层协议参与者的最后防线,它的关注点应该是安全和去中心化(安全和去中心化是两个东西,有时间再展开)。如果我们观察 Layer 2 协议与 Layer 1 交互的模式,我们还会发现,Layer 1 负责的是状态共识(存储),Layer 2 负责的是状态生成(计算)。 计算与状态程序员的世界中有一个流传甚广的公式:程序 = 算法 + 数据结构。这个等式指出了程序设计的两个核心关注点,计算(算法,即计算的步骤)与数据(计算的对象)。而数据又可以分为两种,程序输入(外部数据)和状态(内部数据)。 计算机科学中的「状态」一词可以理解为程序在运行时,某个特定时刻可访问的一切数据。程序中有变量,变量通常代表着内存中的一个可以存放数据的位置,这个位置的内容就是程序的状态。一段程序的输出完全取决于它的输入和其开始执行时的状态。计算(CPU)、输入/输出(IO)与状态(内存)构成了完整的冯诺依曼体系,今天最流行的计算架构。 以支付通道为例在支付通道中,Layer 2 的共识范围缩小到两人之间,这是最小范围的共识。参与通道的两人进行的操作如下: 1.向 Layer 1 发送交易建立通道,锁定特定的状态,锁定的状态只有用 Alice 和 Bob 双方的签名才能更新 ...

May 6, 2019 · 2 min · jiezi

区块链与状态爆炸

如果 Layer 1 的关注点应该是状态而不是计算,在设计 Layer 1 区块链时,我们就需要先理解什么是区块链的状态。理解了状态是什么,我们才能理解状态爆炸是什么。 状态区块链网络中的每一个全节点,在网络中运行一段时间之后都会在本地存储上留下一些数据,我们可以按照历史和现在把它们分为两类: 历史——区块数据和交易数据都是历史,历史是从 Genesis 到达当前状态的路径。状态(即现在)——节点在处理完从 Genesis 到当前高度的所有区块和交易后形成的最终结果。状态随着区块的增加一直处于变化之中,交易是造成变化的原因。共识协议的作用是通过一系列的消息交换,保证每一个节点看到的当前状态是相同的,而实现这个目标的方式是保证每一个节点看到的历史是相同的。只要历史相同(即所有交易的排序相同),处理交易的方式相同(把交易放在相同的确定性虚拟机里面执行),最后看到的当前状态就是相同的。当我们说「区块链具有不可篡改性」时,是指区块链历史不可篡改,相反,状态是一直在变化的。 有趣的是,不同的区块链保存历史和状态的方式不同,其中的差异使得不同的区块链形成了各自的特点。由于这篇文章讨论的话题是状态,而影响状态的历史数据主要是交易(而不是区块头),接下来的讨论历史的时候会侧重交易,忽略区块头。 举个例子:Bitcoin 的历史和状态Bitcoin 的状态,指的是 Bitcoin 账本当前的样子。Bitcoin 的状态是由一个个 UTXO(尚未花费的交易输出)构成的,每个 UTXO 代表了一定数量的 Bitcoin,每个 UTXO 上面写了一个名字(scriptPubkey),记录这个 UTXO 的所有者是谁。如果要做一个比喻的话,Bitcoin 的当前状态是一个装满了金币的袋子,每个金币上刻着所有者的名字。 Bitcoin 的历史由一连串的交易构成,交易内部的主要结构是输入和输出。交易更改状态的方法是,把当前状态中包含的一些UTXO(交易输入引用的那些)标记为已花费,从 UTXO 集合中移出,然后把一些新的 UTXO(这个交易的输出)添加到 UTXO 集合里面去。 可以看出,Bitcoin 交易的输出(TXO,Transaction Output)正是上面说的 UTXO,UTXO 只不过是一种处于特殊阶段(尚未花费)的 TXO。因为构成 Bitcoin 状态的组件(UTXO),同时也是构成交易的组件(TXO)。由此 Bitcoin 有一个奇妙的性质:任意时刻的状态都是历史的一个子集,历史和状态包含的数据类型是同一维度的。交易的历史(所有被打包的交易的集合,即所有产生过的 TXO 的集合)即状态的历史(每个区块对应的 UTXO 集合的集合,也是所有产生过的 TXO 的集合),Bitcoin 的历史只包含交易。 在 Bitcoin 网络中,每一个区块,每一个 UTXO 都要持续占用节点的存储空间。目前 Bitcoin 整个历史的大小(所有区块加起来的大小)大约是200G,而状态的大小只有大约 3G(由约 5000万个UTXO组成)。Bitcoin 通过对区块大小的限制很好的管理了历史的增长速度,由于其历史和状态之间的子集关系,状态数据大小必然远小于历史数据大小,因此状态增长也间接的受到区块大小的管理。 再举个例子:Ethereum 的历史和状态Ethereum 的状态,也叫做「世界状态」,指的是 Ethereum 账本当前的样子。Ethereum 的状态是由账户构成的一棵 Merkle 树(账户是叶子),账户里面不仅记录了余额(代表一定数量的 ether),还记录了合约的数据(例如每一只加密猫的数据)。Ethereum 的状态可以看作是一个大账本,账本的第一列是名字,第二列是余额,第三列是合约数据。 ...

May 6, 2019 · 2 min · jiezi

比特币Layer2对比闪电网络对比Mixin非技术角度

闪电网络Mixin Network节点数量无限制不超过50建节点是否有限制条件无条件持有10000 xin token就可以交易确认时间小于 3 秒小于 1 秒交易金额是否有限制是,仅支持小额无限制用户是否需要建立节点是否是否开源是是确保资产安全的方法用户的节点实时广播自己的交易对抗理论: 攻击网络的成本大于收益以是否允许建立节点标准看,闪电网络是完全无门槛开放式的网络,liquid是完全封闭式的网络,而Mixin Network则有资产门槛的开放式网络。 闪电网络和Mixin Network的相同之处:都是为比特币服务。比特币占有整个加密货币市值的一半,而且比特币会承载越来越多的经济活动,放弃比特币的layer2或者跨链是空中楼阁。都是点对点传输,没有发行对应比特币的证券化token。一些野心勃勃的layer2设计者尝试把存入layer2的比特币资产进行证券化,在其网络内试图自由流通,但是一旦开启了这一步,这个系统就不是一个简单快捷的清算系统,而是一个混合了金融活动属性的清算系统。闪电网络和Mixin Network的不同点设计原则不同闪电网络的设计要求是最小化信任他人,意味着需要时刻防范交易对手耍赖。Mixin Network的设计要求是追求快速确认和高吞吐量。场景不同闪电网络的场景是小额快速支付。Mixin的场景是通用型快速转账。目标用户不同:闪电网络的假定用户还是有相当高动手能力的技术用户,需要知道如何购买云服务,搭建闪电网络节点Mixin的目标用户是更加广大的普通用户,他们不知道如何搭建服务器,这一点与EOS的用户类似。场景和用户不同所导致的技术方案不同:闪电网络上的资金安全是通过个人服务器时刻保持在线实现的,因此需要用户自己搭建服务器,或者委托第三方代理。Mixin上的资金安全是通过商业利益的制衡实现的:类似商业联盟,加入联盟需要抵押大量的资本(不是投票),当然也可以获得联盟给予的奖励。只要破坏网络的成本大于因此获得的收益,那么联盟里面的人就不会尝试攻击系统。这个逻辑实际上和比特币的51%算力攻击计算是一样的,如果有一个超强算力,它理性的选择是加入并且维护这个网络,而不是试图破坏这个网络,因为加入网络赚的多。缺点也是不同的:闪电网络目前的缺点主要是两个: 随着付款金额的上升,失败率会上升。当然这在小额支付场景下还不是问题。而且这个问题正在改善。闪电网络的目标虽然是小额支付,但是小额支付的用户很少具有搭建闪电网络的节点的能力。这个问题可能需要生态系统和开发人员共同设计出安全的托管方案。Mixin目前的缺点是整个系统的安全性其实取决于xin token的价格,xin token的价格足够高,导致攻击成本高到无法实施就可以保证安全。因此这个缺点其实和比特币的缺点一样,在弱小的时候无法对抗一个超级对手,但是往往超级对手发现了这个系统的时候,其实整个系统已经很健壮或者很贵,导致利用这个缺点的成本过高。而XIN TOKEN和比特币都是固定发行量。xin token是发行量为100万的ERC20 token,总量较少,不具备通胀基础,一个节点质押1%, 目前已经参与主网的15个节点已经锁住了15%,排队的四个节点又锁了4%,而IEO只卖了50%,意味着目前市场上自由流通的XIN token只有31%左右。 攻击Mixin Network的成本收益分析收益截止2019年5月4日,Mixin Network有以下几个主要资产:1204个比特币,130万个USDT,141万EOS,1966以太坊,合计约1500万美金。 成本以19个节点为例(写此文是已经有15个主网节点,4个节点在排队等待自由加入),根据pbft的假设,如果网络内有f个节点是瘫痪或者攻击者,那么网络内必须有2f+1个正常工作的节点才能保证整个网络的正常工作,因此整个网络的节点数应该满足 >= 3f+1. 因此可以推算出19个节点可以允许 f=6,意思就是即使网络中有6个节点失效或发起攻击,该网络依然可以正常工作。而如果要导致该网络发生分歧停止正常工作需要f+1个节点,也就是6+1=7个节点。以目前XIN token 178美金的价格,意味着需要付出178x7x10000 = 1200万美金才能使Mixin Network失效。而如果想要彻底控制Mixin Network的所有资产,需要2f+1个节点,也就是 2x6+1 = 13个节点。这意味着投入2300万美金。 2300万美金的投入,才能获得1500万美金的收益,这属于赔本买卖。而且我们是按着市场价估算的Mixin Network资产,如果真的发动攻击,那么攻击者一定会低于市场价快速出手以快速抽身,而由于Mixin Network被攻击,会导致质押的XIN token直接归0。 本文在pressone的签名是 https://press.one/file/v?s=13...

May 5, 2019 · 1 min · jiezi

NodeJS实现简易区块链

之前由于课程要求,基于Nodejs做了一个实现简易区块链。要求非常简单,结构体记录区块结构,顺便能向链中插入新的区块即可。 但是如果要支持多用户使用,就需要考虑“可信度”的问题。那么按照区块链要求,链上的数据不能被篡改,除非算力超过除了攻击者本身之外其余所以机器的算力。 想了想,就动手做试试咯。 ????查看全部教程 / 阅读原文???? 技术调研在google上搜了搜,发现有个项目不错: https://github.com/lhartikk/naivechain 。大概只有200行,但是其中几十行都是关于搭建ws和http服务器,美中不足的是没有实现批量插入区块链和计算可信度。 结合这个项目,基本上可以确定每个区块会封装成一个class(结构化表示),区块链也封装成一个class,再对外暴露接口。 区块定义为了方便表示区块,将其封装为一个class,它没有任何方法: /** * 区块信息的结构化定义 */class Block { /** * 构造函数 * @param {Number} index * @param {String} previousHash * @param {Number} timestamp * @param {*} data * @param {String} hash */ constructor(index, previousHash, timestamp, data, hash) { this.index = index // 区块的位置 this.previousHash = previousHash + '' // 前一个区块的hash this.timestamp = timestamp // 生成区块时候的时间戳 this.data = data // 区块本身携带的数据 this.hash = hash + '' // 区块根据自身信息和规则生成的hash }}至于怎么生成hash,这里采用的规则比较简单: ...

May 3, 2019 · 2 min · jiezi

用PHP在去中心化交易所OceanOne上挂单买卖任意ERC20-token

在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne支持交易任何Mixin Network上的token,包括所有的ERC20和EOS token,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个ERC20 token挂上OceanOne交易! 此处我们用一个叫做Benz的ERC20 token为例。这个token已经被充值进Mixin Network,你可以在区块链浏览器看到这个token在Mixin Network内部的总数和交易 预备知识:先将Benz币存入你的钱包,然后使用getAssets API读取它的UUID. 取得该币的UUID调用 getAssets API 会返回json数据, 如: asset_id 币的UUID.public_key 该币的当前钱包的地址.symbol 币的名称. 如: Benz.if ($line == 'aw') { $mixinSdk_eachAccountInstance = GenerateWalletSDKFromCSV(); $asset_info = $mixinSdk_eachAccountInstance->Wallet()->readAssets(); foreach ($asset_info as $key => $asset) { echo $asset["symbol"] . " " . $asset["asset_id"] ." ". $asset["balance"] . " ". $asset["public_key"].PHP_EOL; }}调用 getAssets API的完整输出如下: Make your choose:awrun...client id is:26b20aa5-40c0-3e00-9de0-666cfb6f2daaBenz 2b9c216c-ef60-398d-a42a-eba1b298581d 799 0x9A4F6c67444cd6558905ef5B04a4c429b9538A9dEOS 6cfe566e-4aad-470b-8c9a-2fd35b49c68d 0CNB 965e5c6e-434c-3fa9-b780-c50f43cd955c 4.72599997 0x9A4F6c67444cd6558905ef5B04a4c429b9538A9dBTC c6d0c728-2624-429b-8e0d-d9d19b6592fa 0 17z1Rq3VsyvvXvGWiHT8YErjBoFgnhErB8XIN c94ac88f-4671-3976-b60a-09064f1811e8 0.01 0x9A4F6c67444cd6558905ef5B04a4c429b9538A9d限价挂单挂限价买单 低于或者等于市场价的单.挂限价卖单 高于或者是等于市场价的单.OceanOne支持三种基类价格: USDT, XIN, BTC, 即: Benz/USDT, Benz/XIN, Benz/BTC, 这儿示范Benz/USDT. ...

May 2, 2019 · 2 min · jiezi

区块链笔记2直观感受比特币

解惑是每个人都在走的一条路,可谁又能解这漫漫无期呢?路上总是麻醉的人多,释怀的人少。书接上回区块链笔记(1)基础概念扫盲,我们讨论了关于比特币以及区块链的许多基础概念,可能通过我略带类比的描述,让你初步有了一些概念,但是对于一个比特币到底长什么样?以及如何使用比特币进行交易?可能还不是很清楚,说的直白点就是:听过猪叫,但没吃过猪肉。好吧,那就安排上! 一、比特币网络首先明确两个概念:Bitcoin和Bitcoin Core: Bitcoin:指比特币用户创建与验证交易的网络。Bitcoin Core:指的是帮助你在比特币区块链上构建应用的一套强大的开发者工具。简单说,Bitcoin是我们口口相传的名称、概念,实际使用它还得用Bitcoin Core。 接下来就利用Bitcoin Core来把玩一下比特币,见识一下我们之前说的那些概念究竟实际上长什么样子。 你们是不是以为接下来这篇文章,将是一场低调的炫富:打开我的比特币钱包,不小心让你看到了我的比特币余额,然后演示了一笔交易是如何发生的全过程。我想我或许真的想说那句话:“我也想低调呀,但是实力不允许呀”好了,言归正传,首先要明白比特币三种类型的网络: MainNet:承载着比特币网络上的实时交易,一个比特币值多少钱,说的就是这个网络上的比特币的价值。由于要保证使用的稳定性,那么在该网络上对应用进行构建与测试,显然不是理想的选择。TestNet:在比特币应用部署到正式环境(MainNet)之前,进行构建与测试用途的环境,详情求查阅wiki百科。RegNet:本地验证一些功能性用的。值得说明的是,后两个网络上的比特币其实一毛钱都不值,但是TestNet是公网上真实存在的,我们可以在上面观看比特币全流程的生命周期,所以接下来的演示也是基于TestNet,下表简单比较了这三类网络的不同。 二、Bitcorn Core环境搭建1.下载安装移步bitcoin.org下载安装适合你电脑版本的,安装步骤比较傻瓜不多说。 2. 切换至测试网络安装好后,默认打开是正式网络,我们需要通过配置文件将其设置为测试网络。于是找到安装目录,创建配置文件bitcoin.conf,默认安装目录可能会根据操作系统而不同: Mac: ~/Library/Application Support/Bitcoin/Linux: ~/.bitcoin/打开刚才创建的配置文件bitcoin.conf,写一句话:testnet=1,然后重新打开软件,就会如下图的样子,正在同步测试网络上的数据。 3. 获取测试用的比特币有了接入比特币网络的客户端,要进行比特币交易还需要有比特币,比特币不会凭空而来,要么找你认识有比特币的大佬,跪舔他。当然这种方式对于一个有职业操守的开发者来说,实施起来可能比较惆怅。 当然社区也注意到了这一点,所以建了一个比特币的公用池,你可以将你钱包的收款地址留给他,社区会发送少量的比特币供你测试使用,当你测试完成后,本着职业操守,请将你借出的比特币归还给社区,虽然这里的比特币并不值什么钱,但是总量也是有限的,要是有人恶意囤积,破坏的是社区的利益。所以还是要注意职业操守,职业操守,职业操守,重要的事情说三遍。 登录比特币测试网络丐帮总舵testnet-faucet,如下图:接下来是如何获取,自己钱包的收款地址,打开上面下载安装好的软件,按照下图步骤进行操作,就可生成收款地址,我的地址也附在上面了,欢迎大家给我汇款,体验比特币交易哈。 4. 进行交易其实很简单,就是两个钱包之间的交易,你可以给我的收款地址汇款比特币,你也可以在本地再建一个钱包,自己和自己交易。方法就是打开比特币的命令行工具(菜单-Help-Debug Window),通过命令在本地创建: createwallet <walletName>:创建一个新的钱包loadwallet <walletName>:加载已创建的新钱包如下是我的交易记录: 三、查看数据上一步我们已经完成了一次完整的交易,具体的交易数据如何查看呢?是不是迫不及待了,我们可以通过一些线上的平台进行具体的查看: MainNet:https://blockexplorer.com/TestNet:https://live.blockcypher.com/...打开网站,我们可以通过在搜索框中输入,交易或区块的地址进行详细的查看:具体每一个字段是什么意思,可以结合上一篇讲到的基础概念进行理解。 最后预告一下,下一篇将对交易的数据模型中的细节进行探讨。如果喜欢欢迎点赞支持。

May 2, 2019 · 1 min · jiezi

PHP比特币开发教程在去中心化交易所OceanOne上挂单买卖比特币

上一章介绍了Exincore,你可以1秒完成资产的市价买卖。如果你想限定价格买卖,或者买卖一些exincore不支持的资产,你需要OceanOne。 方案二: 挂单Ocean.One交易所Ocean.one是基于Mixin Network的去中心化交易所,它性能一流。你可以在OceanOne上交易任何资产,只需要将你的币转给OceanOne, 将交易信息写在交易的memo里,OceanOne会在市场里列出你的交易需求,交易成功后,会将目标币转入到你的MixinNetwork帐上,它有三大特点与优势: 不需要在OceanOne注册不需要存币到交易所支持所有Mixin Network上能够转账的资产,所有的ERC20 EOS代币。预备知识:你先需要创建一个机器人, 方法在 教程一. 安装依赖包正如教程一里我们介绍过的, 我们需要依赖 mixin-sdk-php, 你应该已经先安装过它了. 安装依赖的库第四课, 在上一课中已经安装好了. 充币到 Mixin Network, 并读出它的余额.此处演示用 USDT购买BTC 或者 用BTC购买USDT。交易前,先检查一下钱包地址。完整的步骤如下: 检查比特币或USDT的余额,钱包地址。并记下钱包地址。从第三方交易所或者你的冷钱包中,将币充到上述钱包地址。再检查一下币的余额,看到帐与否。(比特币的到帐时间是5个区块的高度,约100分钟)。比特币与USDT的充值地址是一样的。 const BTC_ASSET_ID = "c6d0c728-2624-429b-8e0d-d9d19b6592fa"; const EOS_ASSET_ID = "6cfe566e-4aad-470b-8c9a-2fd35b49c68d"; const USDT_ASSET_ID = "815b0b1a-2764-3736-8faa-42d694fa620a"; $mixinSdk_eachAccountInstance = new MixinSDK(GenerateConfigByCSV($data)); $asset_info = $mixinSdk_eachAccountInstance->Wallet()->readAsset(BTC_ASSET_ID); print_r("Bitcoin wallet address is :".$asset_info["public_key"]."\n"); print_r("Bitcoin wallet balance is :".$asset_info["balance"]."\n");取得Ocean.one的市场价格信息如何来查询Ocean.one市场的价格信息呢?你要先了解你交易的基础币是什么,如果你想买比特币,卖出USDT,那么基础货币就是USDT;如果你想买USDT,卖出比特币,那么基础货币就是比特币. if ( $ocmd == '1') { getOceanOneMarketInfos(XIN_ASSET_ID,USDT_ASSET_ID);}function getOceanOneMarketInfos($targetCoin, $baseCoin) { $client = new GuzzleHttp\Client(); $baseUrl = "https://events.ocean.one/markets/".$targetCoin."-".$baseCoin."/book"; $res = $client->request('GET', $baseUrl, [ ]); if ($res->getStatusCode() == "200") { // echo $res->getStatusCode() . PHP_EOL; $resInfo = json_decode($res->getBody(), true); echo "Side | Price | Amount | Funds" . PHP_EOL; foreach ($resInfo["data"]["data"]["asks"] as $key => $exchange) { echo $exchange["side"] . " " . $exchange["price"] . " " . $exchange["amount"] ." " . $exchange["funds"] . PHP_EOL; } foreach ($resInfo["data"]["data"]["bids"] as $key => $exchange) { echo $exchange["side"] . " " . $exchange["price"] . " " . $exchange["amount"] ." " . $exchange["funds"] . PHP_EOL; } }}交易前,创建一个Memo!在第二章里,基于Mixin Network的 PHP 比特币开发教程: 机器人接受比特币并立即退还用户, 我们学习过转帐,这儿我们介绍如何告诉Ocean.one,我们给它转帐的目的是什么,信息全部放在memo里. ...

April 30, 2019 · 3 min · jiezi

比特币的超能力永恒不变

全文转载自硬币星球翻译:李林 校对:杜江南 英文原文: Bitcoin’s superpower: Immutability Volumne 1, Monday, Febuary 25, 2019 永恒不变=对抗修改在比特币世界,如果你想通过时间倒流来修改账本上的一笔交易,你不仅需要准备足够的挖矿设备(投入大量资本),还需要足够多的电力来赢得算力游戏,同时还要验证这笔交易之后到现在的所有交易。 这么做不仅仅在财务上是巨亏,而且几乎不可能实现。 为什么?验证交易需要成本,在分布式网络上维护统一账本也需要成本,这些成本赋予比特币一个特点:永恒不变。 如果有人想改变比特币网络的这个历史,必须掏出几十亿美金。 相当于动用3万亿(你没看错,是万亿这个级别)台高端笔记本的计算能力,来改动比特币网络上的一笔交易。这就是为什么我们称它为永恒不变。 这就是工作量证明法给比特币带来的成本,同时也是比特币算力对抗理论的基础。 工作量证明法是连接数字世界和真实世界的桥梁,已经投入到比特币世界的资金和工作使得比特币不变。人们听到“区块链”这个词的时候会同时听到很多神奇的词,比如”密码学“,“加密”或者“哈希”,因此会错误的认为就是这几个概念实现了不变。 那些不懂数学,概率或者对抗理论的人,以及不懂比特币工作 远离原理 的人常常宣称“挖矿费电”,“对环境不好”。这类人觉得他们可以去掉工作证明法的成本,然后依然能搞出来一个漂亮,浮夸,不贵的软件(区块链)。 但我们明白这个想法是有问题的:如果不费劲就能改变,那么我们就随时可以坐时光机回到任何时候。某些人坚信的这类方案在我看来只有99.9%的适用性。当你追求永恒不变,个人权利以及安全的时候就完全不靠谱。(假如你不信任你的家人或者同事,区块链解决不了这个问题) 所以,再重申一遍:安全和永恒不变是付出成本后获得的。 工作量证明法是历史上第一次把这些联系到一起,将真实世界的成本带给易逝,可替代的数字化对象。 不仅于此,因为工作量证明法是一种具有复利特性的现象,随着时间流逝,它只会越来越强大,越来越不可被改变。这就是人们说“比特币反脆弱” 的核心。比特币受益于时间的流逝(林迪效应)。 比特币是第一个可以像真实物品一样存在的数字产品。 因为它绑定了数学,所以在纯数字世界被证明是稀缺的。 举个香蕉的例子:如果我给你一个市场上买得到的普通香蕉,我就不再拥有这个香蕉。如果我给你一个数字化的香蕉,我只要复制一份,那么你和我都有一个香蕉。 如果我给你一些比特币,那么我就不再拥有比特币,就像我给你一个普通的香蕉一样。 我无法创建一个新的比特币,也无法复制一个,我也无法要回来,我也无法使时间倒流。 我拿回那个比特币的唯一方法是你把它给我。但是那已经是一个新的交易。 比特币是第一个(可能也是最后一个)能达到这种状态的网络。 为什么很大一部分原因是运气和时间点。 比特币用了5年才从人们口中的“垃圾“变成值得认真研究的东西。如果有人想赶上或者复制这个水平的架构,大概需要1000亿美金, 同时需要奢望没有人发现他的动作和他竞争,因为双方都需要花这么多钱。 这种竞争只会让比特币更加重要并且更贵,而且使其实现了一种无法打破的自我强化的循环。 比特币是一种一生只有一次的事情,Andreas这么说过:“比特币的工作量证明法有用,就是因为它曾经无用“ 现在人们终于当真了。 如果你打算重复这个实验,会有人注意到你,一旦你取得了进展就会有人攻击你。而比特币只会走的更远。 回想一下,这个网络从一文不值,增长到价值1000亿美金,却没有任何市场投放。 上次这种事情发生是什么时候?最接近的是互联网,但是这个网络与可衡量的价值有关,所以它是有争议的。 这也能解释为什么其他人必须去融资并且售卖一些胖协议论文来制造噪音并且获得关注。 我猜人人都想拥有这种东西,就像电信巨头想拥有互联网。但现实情况是:到目前为止是人民群众集体拥有比特币公共网络,正是集体给了比特币力量。时间和海量的参与者站在比特币这一边。 比特币只要正常运行一天,他就能更强大,更安全,更不可改变,更稳定,更值得信赖而且更珍贵。 实际上,这是一种我们从没见过的带有加速特点的林迪效应。 如果比特币的竞争者获得了增长,那么比特币会获得很多倍的增长。 网络效应就像跑远的火车,比特币基于工作量证明法的永恒不变的网络已经跑的很远了,而且几乎不可能被超越。 这就是为什么我相信万亿资产的经济活动都会最终与比特币有关。互联网是数字世界中最稳定的信息流通的方式,比特币是数字世界最稳定的资产流动的方式。— — — — — — — — — — — — — — — — — -PressOne 签名 https://press.one/file/v?s=fb... ...

April 30, 2019 · 1 min · jiezi

Solidity-057简明教程

以太坊不仅是一种加密数字货币,它更是功能完备的智能合约平台,solidity就是用来开发以太坊上的智能合约的原生开发语言。solidity最早发布于2015年,它是第一种图灵完备的智能合约专用开发语言。目前除了以太坊之外,在其他区块链中也逐渐开始支持solidity,例如hyperledger fabric、tendermint等。在这个solidity快速教程中,我们将使用最新0.5.7版的solidity,以一个具体的案例来介绍solidity智能合约的开发、部署与交互,希望对你快速掌握solidity智能合约的开发有所帮助。 如果要高效系统地掌握以太坊智能合约与DApp的开发,推荐访问汇智网的在线互动课程:以太坊开发入门 | java以太坊 | python以太坊 | php以太坊 | C#以太坊 | 电商DApp实战 | ERC721通证实战 0、问题的背景有一个老爷爷,在生命的最后岁月别无他求,只是希望自己的财产能够通过遗嘱顺利地传给其他家庭成员。 在传统的遗嘱中,遗产分配方案是落实在法律文件上的,然后当真正开始分配时,法官需要重审文件并做出相应的决定。常见的问题发生在家庭成员之间对分配比例的争执上,甚至因此而导致家庭成员关系的破裂。在法庭听证阶段,这些都会影响法官最终的裁决,并因此可能导致不公平的结果,甚至对家庭关系造成进一步的伤害。 那么,如果我们可以让遗产分配自动进行,是否可以避免上述情况的发生? 如果遗产是一个智能合约,那么就不需要法官了。老爷爷可以自主地利用合约管理资产,然后在他去世后由程序来分配遗产给家庭成员。合约里的代码就决定了最终的分配结果,因此无需法官的介入。例如萨拉分$10000,本得到$5000,朱丽叶得到$2000。代码执行后,资产以代币或加密货币的形式自动分配给这些家庭成员,而无需人工介入。虽然不能保证每个成员都对遗产的分配结果满意,但是没有人会和代码争执。这听起来还比较可行,对吗? 记住这个案例,在这个快速教程中,我们将使用solidity,为老爷爷开发一个简单的遗嘱合约,来满足他最后的愿望。 1、搭建solidity开发环境开发solidity智能合约最简单的方法,就是使用官方提供的在线集成开发环境REMIX,你可以点击这里打开remix,在网页里就完成solidity智能合约的编写、编译与部署: 在你打开remix页面后,注意在右侧的run选项页,environment下拉框中,要选中JavaScript VM。这个选项的意思是使用一个内存仿真以太坊节点作为你的solidity智能合约的运行平台,这样就不用考虑与实际的以太坊主网交互所需要的账号、资金、计算费用等问题,而可以先把精力聚焦在学习如何使用solidity表达你的业务逻辑上。 点击remix页面左上方的+图标,就可以创建一个新的代码文件,我们将其命名为will.sol。在remix页面中间的编辑区域可以同时显示多个文件,当前正在编辑的文件,则以活动选项页的形式显示文件名称。 2、声明solidity编译器版本solidity还是很早期阶段的语言,从语法到编译器都在不断地演化,所以在solidity代码的第一行,一定要用pragma关键字声明这个文件中的solidity代码需要哪个版本的编译器。例如: 注意在solidity中,末尾的分号不可省略。 3、编写第一个solidity合约接下来就可以定义我们的第一个合约: 使用contract关键字来定义一个合约,solidity的合约类似于我们熟悉的OOP中的类,因此通常合约的名称首字母也会大写,例如Will。一对大括号用来定义合约的实现逻辑,单行注释也使用//,这和很多开发语言都类似。 4、solidity中的全局变量和构造函数在我们开始写代码之前,应当首先明确遗嘱的条款。假设老爷爷的遗产是50个以太币,其中20个留给他的儿子康莱德,剩下的30个留给他的妻子丽莎。在真实的环境中,当老爷爷去世后,应当有一个外部的程序将调用合约中定义的方法来分配遗产,但是我们为了便于学习将自己完成这个调用。 现在,让我们先完成如下代码: 表征合约所有者的变量表征遗产数量的变量表征老爷爷是否还健在的变量设置上述变量初始值的构造函数 第5行代码定义了合约的所有者。当我们在solidity中定义变量时,必须先声明其类型。address是solidity中一种特殊的类型,它表示一个以太坊地址。address类型的变量有一些特殊的方法,我们在后面会进一步了解。 第6行代码定义的fortune变量用来保存老爷爷的遗产数量,它的类型是uint或unsigned int,意思是这个变量是0或正整数。solidity中有很多数据类型,但我们不会在这里一一介绍,你可以在官方文档中深入了解solidity的数据类型。 第7行代码定义的isDeceased变量用来标识老爷爷是否已经去世,这是一个开关量,因此其类型为boolean,可能的值只有两个:true或false,默认值为false。 第9~13行代码是合约的构造函数,这个特殊的函数将在合约部署的时候自动执行。 public关键字被称为可见性修饰符,它的作用是声明被修饰的方法是否允许外部调用。public意味着在合约内部或外部(由其他合约或其他人)都可以调用该方法。 payable关键字是solidity的特色之一,它使得被修饰的方法可以发送或接收以太币。为构造函数声明payable关键字意味着当我们部署合约的时候,可以直接向合约存入以太币,例如,作为遗产的50个以太币。当合约接收到以太币后,这些币就保存在合约地址上了。 在构造函数内部,我们将owner变量的值设置为msg.sender,这是一个以太坊平台预置的全局变量,表示调用合约方法的账号地址,在我们的案例中,这的地址是老爷爷的。 同时我们将fortune变量的值设置为msg.value,这是另一个全局变量,它表示被调用的方法接收到的以太币的数量。 虽然变量isDeceased被自动初始化为默认值false,但为了清晰起见,我们将其显式地设置为false。 5、使用solidity修饰符在solidity中,修饰符(Modifier)可以为函数附加额外的条件逻辑。例如,假设我有一个用来关灯的方法,同时有一个修饰符要求灯开关必须处于on状态,那么我们就可以在方法上附加声明这个修饰符,以便确保只有在灯开关处于on状态时,才可以调用这个方法,否则就抛出异常。 第15行代码定义了onlyOwner修饰符。如果一个方法附加声明了这个修饰符,那么就要求调用方法的账号(msg.sender)必须与owner变量的值一致(别忘了我们在构造函数中设置了owner的值)。这个调用条件有助于遗产的分配,我们将在后面看到这一点。 require关键字的意思是,括号里的表达式的值必须为真(true),否则就会抛出异常,不再继续执行代码。 _;起到占位符的作用,在执行过程中,以太坊虚拟机会用被修饰的方法代码来替换它。 第20行代码定义了mustBeDeceased修饰符。如果一个方法附加声明了这个修饰符,那么就只有在isDeceased变量值为true时,才可以调用该方法,否则就抛出异常。 在上面的代码中,我们使用修饰符来限定方法的执行条件,当然也可以不使用修饰符,而直接在方法实现代码中使用require,不过修饰符看起来更高级一些,也更容易实现代码的复用。 6、设定遗产分配方案现在我们要继续完成遗产在家庭成员之间的分配任务,这需要他们的钱包地址和分配数量。 正如我们之前所述,康莱德将收到20个以太币而丽莎将继承30个。让我们创建一个数组来保存他们的钱包地址,然后写一个方法来分配遗产。 第25行代码定义了一个空数组familyWallets,用来保存所有家庭成员的钱包地址。和其他语言一样,在solidity中数组是顺序存放并且可以使用序号来存取。注意方括号之前的关键字paybale,只有address payable类型的变量,才可以接收以太币,这是0.5版本的solidity与之前版本的区别之一。 第27行代码创建了一个从address类型到uint类型的映射表变量inheritance,用来保存每个钱包地址的遗产数量。这是一个键/值对数据结构,类似于其他语言中的字典或哈希表,可以用键来存取值。 第29行代码定义了一个方法,它的功能是将一个钱包地址添加到familyWallets数组,然后设置该地址在inheritance映射表中的遗产数量。注意附加的onlyOwner修饰符,猜一下为什么我们要在这里声明这个修饰符? 第30行代码将传入方法的钱包地址追加到familyWallets数组的末尾。 第31行代码将传入方法的遗产继承数量设置为映射表inheritance的指定地址(传入方法的另一个参数)的值。 7、实现遗产自动分配让我们总结一下。到目前为止,我们已经学习了全局变量、数据类型、构造函数、特殊的关键字例如payable和public、内置的全局变量例如msg.sender和msg.value、修饰符和require、数组、映射表和方法。我们已经搭好了合约的框架,现在让我们把各部分整合起来最终完成合约。 作为这个教程最后一部分的代码,我们将实现家庭成员遗产的自动分配。 第34行定义了payout()方法,注意private关键字,这个可视性修饰符是public的反义词,它只允许被修饰的方法在合约内部调用,就像在第42行的代码那样。之所以在这里使用private,主要是考虑到安全性,因为我们不希望任何来自合约外部的调用。注意最后的mustBeDeceased修饰符,目前我们依然不能满足这个修饰符要求的条件来执行payout()方法。 第35行代码是一个for循环,用来遍历familyWallets数组。语法如下: 定义一个计数器变量i,声明循环的执行条件每个周期计数器变量i加1第36行代码是整个合约的核心,我们调用address类型的地址对象的transfer()方法,向该地址转账预定的遗产继承数量,inheritance[familyWallets[i]]表示在inheritance映射表中,键familyWallets[i]的值,也就是第i个家庭成员的遗产继承数量。 ...

April 29, 2019 · 1 min · jiezi

在OceanOne上挂单买卖任意ERC20-token

在上一课中,我们介绍了如何在OceanOne交易比特币。OceanOne支持交易任何Mixin Network上的token,包括所有的ERC20和EOS token,不需要任何手续和费用,直接挂单即可。下面介绍如何将将一个ERC20 token挂上OceanOne交易! 此处我们用一个叫做Benz的ERC20 token为例。这个token已经被充值进Mixin Network,你可以在区块链浏览器看到这个token在Mixin Network内部的总数和交易 预备知识:先将Ben币存入你的钱包,然后使用getAssets API读取它的UUID. 取得该币的UUID调用 getAssets API 会返回json数据, 如: asset_id 币的UUID.public_key 该币的当前钱包的地址.symbol 币的名称. 如: Benz.if ( input.equals("aw") ) { MixinAPI mixinApiUser = generateAPI_FromCSV(); JsonArray assets = mixinApiUser.getAssets(); System.out.println("------------------------All Assets Information---------------------------"); System.out.println(assets); assets.forEach((element) -> { JsonObject jsonObj = element.getAsJsonObject(); System.out.println(jsonObj.get("asset_id").getAsString() + " " + jsonObj.get("symbol").getAsString() + " " + jsonObj.get("public_key").getAsString() + " " + jsonObj.get("balance").getAsString() ); }); System.out.println("-----------------------------------------------------------------------");}调用 getAssets API的完整输出如下: ...

April 28, 2019 · 3 min · jiezi

Fabric-Kafka入门

Hyperledger Fabric推荐Kafka用于生产环境。Kafka是一个分布式、具有水平伸缩能力、崩溃容错能力的日志系统。在Hyperledger Fabric区块链中可以有多个Kafka节点,使用zookeeper进行同步管理。本文将介绍Kfaka的基本工作原理,以及在HyperledgerFabric中使用Kafka和zookeeper实现共识的原理,并通过一个实例剖析Hyperledger Farbic中Kafka共识的达成过程。 如果希望快速掌握Fabric区块链的链码及应用开发,建议访问汇智网的在线互动课程: Fabric区块链Java开发详解Fabric区块链NodeJs开发详解一、Kafka工作原理Kafka本质上是一个消息处理系统,它使用的是经典的发布-订阅模型。消息的消费者订阅特定的主题,以便收到新消息的通知,生产者则负责消息的发布。 当主题的数据规模变得越来越大时,可以拆分为多个分区,Kafka保障在一个分区内的消息是按顺序排列的。 Kafka并不跟踪消费者读取了哪些消息,也不会自动删除已经读取的消息。Kafka会保存消息一段时间,例如一天,或者直到数据规模超过一定的阈值。消费者需要轮询新的消息,这是的他们可以根据自己的需求来定位消息,因此可以重放或重新处理事件。消费者处于不同的消费者分组,对应一个或多个消费者进程。每个分区被分贝给单一的消费者进程,因此同样的消息不会被多次读取。 崩溃容错机制是通过在多个Kafka代理之间复制分区来实现的。因此如果一个代理由于软件或硬件故障挂掉,数据也不会丢失。当然接下来还需要一个领导-跟随机制,领导者持有分区,跟随者则进行分区的复制。当领导者挂掉后,会有某个跟随者转变为新的领导者。 如果一个消费者订阅了某个主体,那么它怎么知道从哪个分区领导者来读取订阅的消息? 答案在于zookeeper服务。 zookeeper是一个分布式key-value存储库,通常用于存储元数据及集群机制的实现。zookeeper允许服务(Kafka代理)的客户端订阅变化并获得实时通知。这就是代理如何确定应当使用哪个分区领导者的原因。zookeeper有超强的故障容错能力,因此Kafka的运行严重依赖于它。 在zookeeper中存储的元数据包括: 消费者分组在每个分区的读取偏移量访问控制清单,用于访问授权与限制生产者及消费者配额,每秒最多消息数量分区领导者及健康信息二、Hyperledger Fabric中的Kafka要理解在超级账本Hyperledger Fabric中的Kafka是如何工作的,首先需要理解几个重要的术语: Chain - 指的是一组客户端(通道/channel)可以访问的日志Channel - 一个通道类似于一个主题,授权的对等节点(peer)可以订阅并且成为通道的成员。 只有通道的成员可以在通道上交易,一个通道中的交易在其他通道中看不到。OSN - 即排序服务节点(Ordering Service Node),在Fabric中被称为排序节点。排序节点负责: 进行客户鉴权允许客户端通过一个简单的接口写入或读取通道执行配置交易的过滤与验证,实现通道的重新配置或创建新的通道RPC - 即远程过程调用(Remote Procedure Call),是一种用于调用其他机器上的服务而无需了解 通信与实现细节的通信协议,目的是像调用本地函数一样调用网络中其他机器上的函数广播PRC - 交易提交调用,由排序节点执行分发RPC - 交易分发请求,当交易由kafka代理处理后,分发给请求节点注意,虽然在Hyperledger Fabric中Kafka被称为共识(Consensus),但是其核心是交易排序服务以及额外的崩溃容错能力。 在Hyperledger Fabric中的Kafka实际运行逻辑如下: 对于每一条链,都有一个对应的分区每个链对应一个单一的分区主题排序节点负责将来自特定链的交易(通过广播RPC接收)中继到对应的分区排序节点可以读取分区并获得在所有排序节点间达成一致的排序交易列表一个链中的交易是定时分批处理的,也就是说当一个新的批次的第一个交易进来时,开始计时当交易达到最大数量时或超时后进行批次切分,生成新的区块定时交易是另一个交易,由上面描述的定时器生成每个排序节点为每个链维护一个本地日志,生成的区块保存在本地账本中交易区块通过分发RPC返回客户端当发生崩溃时,可以利用不同的排序节点分发区块,因为所有的排序节点都维护有本地日志 三、Hyperledger Fabric Kafka实例解析考虑下图,假设排序节点OSN0和OSN2时连接到广播客户端,OSN1连接到分发客户端。 OSN0已经有了交易foo,中继到kafka集群此时OSN2将交易baz广播到集群中最后,交易bar由OSN0发送到集群中集群现在有三个交易,可以在图中看到三个交易的在日志中的位置偏移量客户端发送分发请求,在OSN1的本地日志中,上述三个交易在4#区块里。因此OSN1将4#区块返回客户端,处理结束Kakfa的高性能对于Hyperledger Fabric有很大的帮助,多个排序节点通过Kafka实现同步,而Kafka本身并不是排序节点,它只是将排序节点通过流连接起来。虽然Kafka支持崩溃容错,它并不能提供对网络中恶意攻击的保护。需要一种拜占庭容错方案(BFT)才可以对抗恶意的攻击,但是目前在Farbic框架中还有待实现这一机制。 总而言之,在Hyperledger Farbic中,Kafka共识模块是可以用于生产环境的,它可以支持崩溃容错,但无法对抗恶意攻击。 原文:The ABCs of Kafka in Hyperledger Fabric

April 28, 2019 · 1 min · jiezi

Java比特币开发教程Java编程在开放式交易所限价买卖比特币

上一章介绍了Exincore,你可以1秒完成资产的市价买卖。如果你想限定价格买卖,或者买卖一些exincore不支持的资产,你需要OceanOne。 方案二: 挂单Ocean.One交易所Ocean.one是基于Mixin Network的去中心化交易所,它中心化交易所一样友好。你可以在OceanOne上交易任何资产,只需要将你的币转给OceanOne, 将交易信息写在交易的memo里,OceanOne会在市场里列出你的交易需求,交易成功后,会将目标币转入到你的MixinNetwork帐上,它有三大特点与优势: 不需要在OceanOne注册不需要存币到交易所支持所有Mixin Network上能够转账的资产,所有的ERC20 EOS代币。预备知识:你先需要创建一个机器人, 方法在 教程一. 安装依赖包正如教程一里我们介绍过的, 我们需要依赖 mixin-java-sdk, 你应该先安装过它了,zhang/mixin_labs-java-bot/blob/master/README.md). Install required packages第四课, 在上一课中已经安装好了. 充币到 Mixin Network, 并读出它的余额.此处演示用 USDT购买BTC 或者 用BTC购买USDT。交易前,先检查一下钱包地址。完整的步骤如下: 检查比特币或USDT的余额,钱包地址。并记下钱包地址。从第三方交易所或者你的冷钱包中,将币充到上述钱包地址。再检查一下币的余额,看到帐与否。(比特币的到帐时间是5个区块的高度,约100分钟)。比特币与USDT的充值地址是一样的。 private static final String BTC_ASSET_ID = "c6d0c728-2624-429b-8e0d-d9d19b6592fa"; private static final String EOS_ASSET_ID = "6cfe566e-4aad-470b-8c9a-2fd35b49c68d"; private static final String USDT_ASSET_ID = "815b0b1a-2764-3736-8faa-42d694fa620a"; MixinAPI mixinApiUser = generateAPI_FromCSV(); JsonObject asset = mixinApiUser.getAsset(BTC_ASSET_ID); System.out.println(asset); System.out.println("------------------------BTC------Information---------------------------"); System.out.println("The BTC wallet address is " + asset.get("public_key").getAsString()); System.out.println("The BTC wallet balance is " + asset.get("balance").getAsString()); System.out.println("-----------------------------------------------------------------------");取得Ocean.one的市场价格信息如何来查询Ocean.one市场的价格信息呢?你要先了解你交易的基础币是什么,如果你想买比特币,卖出USDT,那么基础货币就是USDT;如果你想买USDT,卖出比特币,那么基础货币就是比特币. ...

April 27, 2019 · 4 min · jiezi

去中心化交易所的意义在哪里

比特币作为一个点对点电子现金系统,却需要一个中心化的交易所来撮合交易。这虽然不符合点对点的精神。但是依然被客户迅速的接受了。 中心化交易所的风险资产安全封闭化运行的交易所的资金安全性高度依赖团队技术能力和信用。 因为内鬼和黑客破坏造成的损失非常多。 隐私安全这些交易所都要求用户提供身份信息。这是一个极大的风险,想象一下交易所如果倒闭,那么里面的身份信息一定会被卖掉。 基于以太坊和EOS的去中心化交易所方案ddex, 鲸交所 交易所无论基于以太坊,还是EOS,本身能交易的资产都太少。不能交易比特币,可是比特币的价值超过整个数字货币的一半,一个不能交易比特币的交易所是很难有价值的。 比特币的进展随着比特币脚本支持HTLC (Hash Time-Locked Contract)。现在已经可以实现比特币与莱特币,量子链的原子交换。原子交换的意思就是交易双方经过协商构造一个交易广播,只有自己把钱真的打给某个地址之后,才能动对方打转过来的币。这里有一个介绍 这个方案可以说是非常安全,而且非常有用。但是这个方案本身只能用于支持比特币脚本的那些语言,莱特币,量子。使用账户体系的以太坊和EOS就很难接入这个技术,导致稳定币也无法进入这个交易所。 合理的交易所应该是什么样子符合比特币精神的交易所应该 不需要注册不需要充值到交易所指定的钱包订单撮合成功后资金应该回到用户自己的钱包里面,而不是需要审批才能提走。但是只有比特币的精神还不够,这个交易所要对人们有用,就还需要两个特性: 支持比特币和主流币种,特别是稳定币。转账速度足够快,不能是以太坊上那个确认速度。还有那些特性是未来一定需要的呢? 自由添加交易对。为什么要填写申请表才能挂一个新的品种呢?不能直接就挂单么?小型社区自己发币自己组成交易市场难道不是很合理么?资产交易对公众可验证,但是匿名。买卖资产的动作被所有人知道难道不是一件很可怕的事情么?那么有这样的交易所么?有。 https://ocean.one, 无需注册,有一个Mixin Networt钱包就能挂单. Mixin Networ现在有很多种钱包,有6种sdk支持创建钱包。不需要充值到交易所账户撮合成功后直接资产到用户的Mixin Network钱包,非常安全。基于Mixin Network支持很多资产:比特币,USDT,ERC20,EOS token基于Mixin Network交易确认极快,挂单1秒钟,撮合1秒钟,打币1秒钟自由添加交易对,几乎可以买卖任何资产,无需审批。基于Mixin Network交易匿名但是可以验证挂单在这个交易所挂单就是把要卖的资产付到交易所地址,然后把要买的资产信息和价格写在付款memo里面。一旦撮合成功,资产原路返回用户钱包。 取消订单取消订单的方式也很直接,把要取消的订单号写在memo里面,然后付一笔足够小的任意资产给交易所就可以了。 这个交易所本身运行在Mixin Network这个公链上。这个主网代码开源而且已经上线了,现在有15个节点,还有5个节点即将加入。主网代码。 你也可以搭建一个交易所这个交易所是开源的的,所以任何人都可以搭建一个自己的交易所,可以设定自己的手续费。 不完美Ocean还不是一个完美的方案, 他的撮合依然是不上链的没有匹配的订单资产依然属于Ocean,目前Ocean是由Mixin 团队来搭建的。由于没有上币审批流程,所以需要在客户端展示交易对的详细信息来提高诈骗难度。一定会出现假BNB token谁能在去中心化交易场景下赚到钱如果只有少数人能赚到钱,那么注定这个模式走不下去。我们猜想一下谁能赚到钱。 建立撮合引擎的人他可以收手续费。但是这个场景下市场是充分开放的,人们换交易所的成本是0,一旦一个交易所性价比降低,人们将逃跑 在中心化交易所和去中心化交易所之间搬砖的人这个场景可以保护个人隐私,而且完成单笔交易无需二次充值提现,所以交易速度更快,因此理论上重视隐私和重视速度的用户会愿意多付一点钱来完成交易。因此此处一定有愿意来赚差价的商人。 钱包开发者由于开源特性,钱包开发者从用户那里可能不太容易赚到钱。 总结:在数字世界保护个人财产和隐私的路上,还有很长的路要走,大家共勉。

April 26, 2019 · 1 min · jiezi