Lamden白皮书
Lamden:区块链技术快速开发和部署的框架
白皮书0.2.1版
2018年1月5日
摘要
区块链应用程序开发有些不必要的困难,部分原因是该技术的新颖性,但也因为目前使用区块链的现状受到某些限制。在本文中,我们讨论了当前区块链实现的问题以及这些问题的解决方案。我们将介绍Lamden:一个开发工具软件包,其中包括区块链生成器、社区协作工具和独立的链到链通信,以创建能够跨其传输任何资产的庞大的区块链应用程序网络。
关键词:去中心化,加密货币,分布式系统
1.动机
在过去的几年里,我们看到大量区块链技术涌入市场。这些技术被吹捧为终结集中银行和金融系统的手段。然而,这些区块链依赖于有缺陷的系统,这些系统没有考虑到上述技术在当前基础设施领域的应用。因此,区块链技术被与主流金融体系隔离开来,从而被其最终目标的实现所阻碍。
Lamden项目旨在创建软件开发工具,以增加对区块链技术的大量采用,从而使基础设施能够彻底改革市场系统,并在市场中引起现实的创新。
在这份白皮书中,我们对当前市场状况以及我们计划如何改善这一领域提出了评论。
2.当前区块链实现的问题
区块链体系结构存在许多根本缺陷,阻碍了它成为主流技术。这些缺陷既存在于用户一方,也存在于开发人员/服务提供者一方。下面列出的是我们在此项目中改进当前区块链实现的部分。
交易费用
首先,让我们从最终用户的角度来看一下交易费用的问题。在加密领域取得成功的关键是比特币在国际市场的广泛应用。目前,比特币交易的平均交易费用约为6%。与PayPal、Mastercard和Visa等集中式系统相比,比特币的价格实际上是它们的两倍。
需要注意的是,加密货币的基本原理就是为什么用户觉得这种差异是合理的。所有权分散的本质超过了额外的成本。然而,在宏观经济层面上,成本效率将超过根本吸引力。
“但是以太坊呢?他们的交易费用只有0.3%!”
虽然这是事实,但是以太坊并没有像比特币那样被设计成一个价值转移网络,而是一个智能的合约网络,可以实现无信任和去中心化的软件系统。我们必须记住,用户需要为链上发生的操作的数量付费,并且随着部署越来越复杂的智能合约,操作的数量会继续增加。以太坊的一个主要卖点是能够将智能合约作为“库”添加,其功能与其他软件开发栈中的框架相同,即自动化操作和流程,使用户不必反复重写它们。因此,我们可以有把握地假设,随着时间的推移,随着更复杂的智能合约的建立和更多库的集成,与主以太坊交互的成本将会上升。这种向开发者收取运营费用的机制不利于创新和复杂的智能合约系统,而这正是以太坊所需要的长期成功。
服务名称 | 平均交易费用 | 付费方 |
---|---|---|
比特币 | ~6%(可变) | 发送方 |
PayPal | 2.9%+$0.30 | 接收方 |
Visa | 基于商家类型.公用事业付款最低0.20%,标准商户最高1.50% | 接收方 |
Mastercard | 基于商家类型.公用事业付款最低0.00%+$0.65,标准商户最高2.95%+$0.10 | 接收方 |
Stripe | 2.9%+$0.30 | 接收方 |
表1 各种支付服务及其交易费用
臃肿的链
继续使用以太坊模型,因为帐本是公开的,任何人都可以部署他们想要的任何智能合约。因此,即使区块链只有两年的历史,但一个完整节点的大小已达242GB,甚至比当前一个比特币完整节点的大小(约152GB)还要大。对于那些只想涉足智能合约开发的人来说,安装一个完整的节点,或者至少安装一个还在20Gb左右的轻链,是一个巨大的门槛。
比较同步完全节点所花费的时间与安装Python,Node.js或者任何其他编程环境所花费的时间来开始探索区块链。对大多数开发人员和企业来说,仅仅是不方便和下载大小就难以实施,更不用说仅是对区块链技术感兴趣的普通用户了。
每秒交易数(伸缩性)
现代区块链有一个臭名昭著的吞吐率低问题,导致交易时间缓慢,且会堆积未处理交易。对每天处理数百万交易的当代财政系统来说,这是一个不可接受的替代方法。
例如,比特币的吞吐率为每秒3个交易。同样,以太坊仅拥有每秒15交易数。相比之下,PayPal在2015年5月发布了一个案例研究,他们可以创建一个吞吐率超过每天十亿个交易的系统。这意味着每秒可以处理11600个交易。
这使得企业不愿意在传统高吞吐的数据库结构下牺牲自身能力以换取更强记录维护的好处。
挖矿和资源效率
对大规模采用的另一个障碍是挖矿中的随机哈希函数的工作证明。这些机器占用大量的资源,对标准企业用户来说没有任何意义。虽然这是在主链上分发token和coin的一种方法,但它不会转化为优化资本资源的业务设置。低效的处理对现代商业毫无意义,因此这些类型的哈希函数阻碍了广泛应用。
集成和应用
区块链软件非常新,人力资本资源稀缺。它需要高技术化和专业化的人才来咨询和开发区块链应用程序。相比在企业环境中的其他类型的数据库,建立一个区块链既耗时又昂贵。
而大多数现代数据库系统遵循类似的开发和部署模式,区块链的根本不同之处在于,目前还没有一个解决方案可以将开发过程转换为类似于市场上其他数据库系统的东西。
此外,开发环境、包管理器、测试套件、持续集成环境等几乎存在于现有的所有其他技术堆栈中,区块链软件则不存在。这就阻止了一些组织将这种技术集成到他们当前的工作流中。
迁移、升级和未来验证
对于许多对商业或企业的区块链技术感兴趣的人来说,缺乏将数据迁移到新链或在最适合业务的时候进行升级的能力是一个陷阱。那些对主链和公共账本系统感兴趣的人依赖于基金会来发布新代码,或者是分散的社区,而那里对结果没有什么权威或确定性。此外,尝试不同的系统以了解什么最适合一个组织是很麻烦的。
3.解决方案
Lamden项目提出建立一套开发工具,允许私人区块链系统的快速开发和部署,模仿诸如Node.js或Python等技术堆栈的现代开发过程,以提供大量的易于使用的工具、广泛且健壮的文档以及广受欢迎的社区支持。
项目分为三个部分,Saffron、Flora和Clove,每个部分都添加了一个层,目的是为开发人员提供超性能区块链,供他们在其他区块链系统的网络中进行测试、实验和部署。
Saffron是在内部网络上部署私有链的生成器工具,无需任何麻烦。Flora是智能合约包和模板、私有链命名服务和区块链探索的中心存储库。Clove是一个网络,它处理链之间的支付通道交换过程,并在网络上促进区块链应用程序之间的通信,其方式仍然是无信任和分散的。
Saffron:一种生成器工具
与其使用单一的主网来解决上面提到的问题,不如将区块链分解成单独的用例,并在需要时让它们彼此交互,以低区块链采用率解决许多问题。例如,一个组织将为自己的web应用程序拥有自己的区块链。这使他们能够完全控制自己使用的技术,并将自己的计算资源用于运行区块链,而不是将精力浪费在主链上。此外,在以太坊中,“gas”可以被消除,网络的难度可以被降低到一个更合理的水平,从而允许在应用程序之间进行免费交易。这使得区块链更像web服务器,而不是传统的链,然后可以用于在内部替换和升级现有的数据库结构。
独立共识的动机
让区块链技术发挥作用的是,矿工是独立的参与者,可以验证发生的交易,因此几乎不可能向链中注入错误信息。然而,在传统情况下,矿工从交易费用中获得加密货币奖励。由于在Lamden协议上事务是免费的,因此必须灌输一种不同的奖励机制,以便矿工仍然有动力对交易进行独立验证。
通过使用智能合同,可以创建工作证明(POW)、股权证明(POS)和任何其他奖励计划。通过这种方式,可以调用一个智能合约来计算奖励和接收者,并对链上的任何类型的资产进行奖励。除了链的原生货币(最初是以太坊),ERC20令牌或新的加密资产实现也可以得到奖励,为私有链提供了更多的定制。此外,由于网络上的交易和gas是免费的,举例来说,每次构建区块调用一次合约不会太昂贵。
pragma solidity ^0.4.15;
contract RewardedAsset {
string public constant symbol = "AU";
string public constant name = "Digital Gold";
uint8 public constant decimals = 0;
uint256 _totalSupply = 1000000000;
uint8 public reward = 10;
uint256 lastBlock;
address public owner;
mapping(address => uint256) balances;
mapping(address => mapping (address => uint256)) allowed;
function disperseRewards (bool success) onlyOwner() {
if (lastBlock < block.number) {
_totalSupply += reward;
balances[block.coinbase] += reward;
lastBlock = block.number;
}
}
列表1:一个简单的工作证明契约示例,可以部署到一个链上,以模拟经典的工作证明。
生成器工具
Saffron从其他包管理CLI(命令行界面)工具(如pip、yeoman和npm)中获取设计队列,将私有区块链作为自己的开发项目生成。通过CLI工具进行生成与‘saffron init’一样简单。通过这个CLI应用程序,您将能够通过一个简化的API与链进行交互,该API抽象了区块链技术的大部分复杂性。
我们正在实现的初始区块链技术是以太坊,因此开发人员将能够初始化这些链、创建账户、开采区块,并在geth的子处理实例中部署合约。geth是以太坊在Go中编写的客户端。
通过将geth之外的主要交互组件抽象到CLI工具中,我们就能够为与这些私有链交互提供基于rest的RESTful API服务。RESTful API允许在任何编程语言接口中通过Internet与区块链进行交互。如果一种编程语言支持HTTP请求,它们将能够与Lamden生成的私有链进行交互。这允许集成到任何技术堆栈中,并允许我们为许多现代语言框架创建drop - in库,比如用于iOS开发的Swift、用于Android开发的Java,甚至用于物联网应用程序的嵌入式C。
此外,Saffron将为本地服务器提供一个以太坊区块链浏览器,可以面向公众,以便更广泛的社区可以监视和查看链上发生的活动。
从类似于Parse的图形web界面管理链的web服务也里即可用。最后,堆栈将包含可选择部署的IPFS / IPNS和Tor实例。
部署
在开发私有链之后,组织将希望以一种能够集成到其内部技术堆栈中的方式来打包和部署它。为此,Saffron将导出Docker文件以进行快速部署。
体系结构
除了创建私有链实例外,Saffron还包含接受支付通道事务和与更大的Lamden链交互所需的必要方法。因此,Saffron应该被视为一种接口类型。每个Lamden包装器实例都必须充分遵守一组监视和交互协议,以确保链是无信任的,并且事务可以独立确认。
如果Saffron能够实现这些功能,那么内部区块链驱动程序就不必以以太坊为基础。在未来,Saffron将支持比特币、莱特币、Zcash、Monero、Neo、Tezos、Eos等任意区块链技术,只要它们能够以一种不可信的方式支持支付渠道。甚至支持符合包装器协议的新区块链技术,创建一个完全定制的块链到块链的接口网络。
包装器最终将支持任何区块链技术,只要它遵守特定的规范,以便与Clove交互。这是Lamden系统的未来证明,因此无论未来有什么技术存在,总有一个与之交互的网络。这也解决了区块链迁移的问题,因为商业、企业和应用程序可以升级到最新的区块链项目和技术,因为它们可以在竞争中保持领先。
Flora:去中心化的包管理器和公共存储库
除了简单的区块链生成之外,技术采用的主要驱动因素不是核心技术的基本用例,而是它们构建的周围社区和功能集。你可以在以太坊社区的例子中看到这一点,以及更多正在开始刺激创新的新型智能合约系统。它们的加密货币机制并不是区别于比特币或莱特币的地方。相反,是围绕和开发智能合约应用程序的开发社区提供了更广泛的应用。
类似地,包存储库允许用户从更广泛的社区中提取包,对它们进行评论,甚至为它们开发,从而巩固了智力资本的基础,从而导致项目的成功和该领域的更大创新。
Flora的目的是托管一个分散的包存储库、命名空间系统和发现工具,以便Lamden链的开发人员可以与其他开发人员进行连接,充分利用彼此的创新,从而实现加密货币的更广泛状态。
公共包管理器
pragma solidity ^{{solidity_version}};
contract {{contract_name}} {
string public constant symbol = "{{symbol}}";
string public constant name = "{{asset_name}}";
uint8 public constant decimals = 18;
uint256 _totalSupply = {{total_supply}};
address public owner;
mapping(address => uint256) balances;
mapping(address => mapping (address => uint256)) allowed;
...
{
'solidity_version':'0.4.15',
'contract_name':'Testcoin',
'symbol':'TST',
'asset_name':'Testcoin',
'total_supply':'1000000'
}
列表2:带有相应JSON输入的ERC20标记的实性模板示例。该合约的安装将通过“flora install erc20-args”或Saffron管理面板完成。
与其他开发套件一样,Lamden具有创建智能合约包的能力。使用宏模板系统,我们能够抽象常见的可靠性合同类型如ERC20令牌、Ethereum命名服务、Etherdelta分散的交换,只需要一组参数将它们打包成合约,并允许通过私人链部署,就像从CLI控制台运行“hpm install ens”一样简单,或者通过Saffron中的管理仪表盘发送一个API请求完成同样的操作。这消除了重新部署常用智能合约的麻烦,并允许打包高度复杂的智能应用程序,以便快速分发。
随着更多的区块链被添加到包装器中,对它们的合约语言的支持也将被添加到Hub中。开发者可以上传他们自己的合约来支持社区。与中心的交互将通过星际文件系统(IPFS)进行,以便所有服务保持分布式和去中心化。
命名目录服务
为了执行支付渠道,链之间必须互相沟通。为此,必须实现命名服务。这个命名服务为每个链分配一个公共名称和一个密钥对,以便其他链可以发现它们并向它们签名事务请求。
此外,用户将能够搜索和发现新的区块链应用程序。这些是用Saffron开发的私人链,与Clove相连。这些链接中的每一个都可以注册一个名称,并填写一个关于他们服务的简介,其中可以包括到营销网站的链接,矿工的连接信息,以及其他任何可以引导用户获得关于他们服务的更有价值的信息的内容。该名称将用于通过Clove定位和发送信息,以用于支付事务、与链的交互以及本地Lamden令牌的一般使用。
我们还在探索使用令牌的选项,以便其他开发人员能够注册他们的模块,使用指标可以在开发人员社区成员之间生成令牌流动性。
Clove:允许跨链交互的匿名路由器
Lamden项目的主要技术壮举是它的密码帐本和路由系统,将私有链连接在一起。不是重新创造一个全新的链,而是重点转向分布式私人链,只通过路由基础设施联系在一起,在交互之前的同步需求增加了交易成本,这样我们可以避免区块链膨胀且保证不会过时的技术平台,无论未来对通用区块链技术如何改善都可以持续多年。
路由
Clove是连接私有链的基础设施,通过一个共同的协议,很像电话网络。账本负责所有链之间的交互,并提供了一组通用的接口选项,在计算机编程环境和平台上,这些链可以以同样的方式处理这些接口选项,以进一步集成Flora对象。
Clove的一个主要增值服务是没有交易费用。为了获得与Flora连接的好处,并将一个私有链公开给更广泛的社区,从而增加公众的认可度,私有链为总账本提供了一定的计算能力。因为帐本没有困难的哈希函数,只是作为一个媒介处理链之间的信息包。连接和服务信息的计算负载相当于现代web服务器,而不是标准的区块链矿工。区块链应用程序提供者向IPFS和分布式计算集群公开一个公共入口点,用于传入交易,并连接到公共账本节点用于传出交易。
跨链交易的支付渠道
在保留无信任和去中心化的系统的同时,还需要一个跨链支付系统,以便区块链应用程序可以自由地相互交互。这是Clove的核心。为了做到这一点,本实现了闪电网络启发的支付渠道,提供了一种跨区块链资金交换的安全分散的方法。交易从私人链开始,并利用账本作为公共服务管理安全和有保证的资金从链到链的汇款。
账本是一项公共服务,它将链与链转移所需的智能合约部署和身份验证的工作分发给连接到主网络的参与者。私人链可以自由地实施自己的方式,通过这种方式互相转移资金,但公共账本可以在更广泛的网络上得到参与者的一致共识,从而为跨链交易提供更强的信任感。
支付渠道以在每个私有区块链上运行的纯可靠(Solidity)智能合约代码表示。当用户想要发起交换时,他们会向Clove服务和他们想要交换的链同时发送一个请求,其中列出了他们期望的交换条件。请求由两个链上的发送方和接收方地址以及被交换资产的值组成。例如,一个交易有效负载是这样的:
{
Private-chain-1 : {
Sender-address : 0x000,
Receiver-address: 0x000,
Amount: 100, Token-contract-address (optional): 0x000
}
Private-chain-2 : {
Sender-address : 0x000,
Amount: 1000,
Token-contract-address (optional): 0x000
}
}
表3:支付渠道负载示例
当计算集群接收到这个负载时,集群将把可靠合约代码编译成字节码,字节码必须部署到两个链中的下一个块上。相反的链的字节码互相发送,并使用公共标识密钥签名,这样它们就可以独立地验证正确的合约代码确实部署在链上的下一个块中。
图1:Alice通过向账本发送消息来启动交换。然后,账本获取交换需求,并将它们编译成要部署在两个链上的可靠字节码图2:字节码使用每个链的公钥签名并发送给双方。Alice部署他们的合约。Bob保存了一份副本以便稍后进行验证
图3:Bob同样的操作
图4:假设这是一个双方同意的交换,两个链都部署了合约,并通过检查对方最新块上的字节码来判断是否完成了相同的操作。如果没有发生这种情况,则链不必履行任何义务,交易恢复时不会出现资金损失
如果发起人链未能部署其合同,而收款人链继续执行,则收款人链上的合同将自毁,并将资金汇回其帐户。另一方面,如果发起者建立了一份合约,但收款人不同意合约条款,那么发起者的合约将被销毁,他们将收到锁定的资金。
假设双方都有兴趣进行交换交易,那么他们就必须履行对方链上彼此之间约定的义务,定期执行支付渠道。
为了确保付款以一种及时的方式发送出去,每个链可以调用时间锁来“ping”他们的合约。如果合同超过了约定的时间限制,则假定另一方不打算完成付款渠道,合同被销毁。这促使对方履行他们的义务,因为他们有失去资金的风险。这激励发起人尽快“ping”他们的合同,因为在这样的情况下,发起者在对方链而非自身链上收到了资金,他们可以不把资金发回自身,而在对方链上获得免费资产,因为自身链上的时间锁已经过期,无法确保资产。
图5:Alice最好的经济选择是提交资金并尽快解决他们自己的合同,因为如果Bob在他们之前行动,Alice就会失去资金。相反,如果Bob决定不赎回他们的资金,Alice也可以保护他们。所以尽快解决他们的合同也符合Alice的最大利益图6:因此,对于双方来说,最好的方案是解决对方链上的支付渠道问题,并尽快在自己链上解决合约问题。通过增加这样做的经济激励,网络可以快速完成链到链的转移
4.工作流示例
首先,您将安装专门用于开发区块链的Saron工具。您将在项目目录中运行' saffron init'并生成一个链。从那里,您将使用我们的包管理器Flora来安装应用程序所需的包。假设您想添加一个新的ERC20资产。在项目目录中运行' flora install erc20',将生成一个新的token。要将合约部署到链上,运行“saffron start”,然后“saffron deploy all”。
从那里,如果您想图形化地与区块链交互,可以访问管理仪表板。您可以从这里安装包、添加帐户、查看交易等,非常类似于Etherscan或另一个块资源管理器软件。您还将在这里拥有Remix和其他智能合约开发工具。
从这个后端,您可以将开发的新合约上载到Flora。您还可以将链连接到Clove以与其他区块链应用程序交互。为此,您将启动一个IPFS节点并作为服务器连接到分布式计算集群。然后,您可以作为用户与其他独立的区块链进行交互,或者初始化链到链的交换。您可以与所有区块链的立刻使用的本地Tau令牌进行交换。
现在,您可以将其他软件集成到区块链之上,例如面向公众的用户界面、链之间的自动传输、智能合约交互,甚至与您部署在Clove上的其他链上的定制合约交互。Lamden项目让一切皆有可能。
维护分布式和无信任的系统体系结构
虽然Lamden上的私有链是用Ethereum建立的,这是一种分布式且无信任的协议,但是Lamden系统的其余部分可以使用标准的集中式服务器-客户端体系结构来开发。然而,尽管这可能是一种更简单的执行方法,但标准HTTP协议容易受到DDOS攻击、服务器故障和数据的集中所有权,这些数据会损害项目合作者的权利。
因此,该项目将部署在IPFS协议上,以建立一个真正的对等系统,该系统是分布式的,不可信任的。
Lamden Tau,一个不可知论者的数字资产
虽然跨私有链的支付渠道将有助于促进app-to-app的通信,但除了链主机或开发人员之外,还应该让参与Lamden项目的用户能够方便地参与和使用Flora上的区块链应用程序。因此,我们提出了一种不可知的公用事业资产,称为“Lamden Tau”。Tau是一种数字资产,服务于平台本身的通用资产,系统用户想要使用所有私有链的货币就可以进行交易。对于Lamden用户来说,与Tau链的通信是开箱即用的,因此他们不必与其他私有链形成独立关系,就可以开始相互转移资产。通过这种方式,开发人员可以开始将数字货币市场和交易立即集成到他们的区块链应用程序中。通过向所有Lamden用户开放本地数字货币,Tau增加了私有链的采用率,因为更多的个人能够参与到Lamden社区的应用程序中。
令牌出售(令牌分散事件)
Lamden项目将由Lamden Tau的令牌分发事件(令牌分散)资助。这些Lamden Tau可以在Ethereum主线链上以ERC20 token的形式购买。在一个隆重的仪式上,Lamden Tau可以在Lamden链上进行交换,这标志着Clove链对链通信的里程碑式的成就。
有关令牌散射事件的进一步详细信息包含在组织文档中。
5.结论
Lamden项目的目标是提供一套工具,使区块链的快速开发和部署对一般开发人员来说很容易。通过基于今天开发人员使用的最流行的工具建模我们的工具,我们可以捕获大量热情的开发人员,他们希望参与到区块链中来但是无法克服最初的障碍。
此外,通过提供一个集中的社区,创新可以蓬勃发展,并在此基础上发展,从而导致更新和更先进的技术,加速整个行业的发展。
最后,通过Clove,我们能够将所有这些项目连接到一个单一的路由系统上,以方便交换事务,这样私有链就可以保留自我管理的优势,同时还可以利用更大的应用生态系统。