如果你在这里,我们假设你是一个受区块链影响的开发者/黑客。 你确信你了解它是如何工作的,现在你很想知道区块链对你和你所掌握的开发者技能的意义。
如果你需要更多的底气,我们建议你先从比特币白皮书和以太坊白皮书开始 。
(比特币白皮书学习资料:http://mp.weixin.qq.com/s/moXzpQSloUOd_ehTFNKmqw)
(以太坊白皮书学习资料:https://mp.weixin.qq.com/s/rc1SklbrZnMdhCEq1fGhBQ)
我们在这篇文章中的目标是:
1)解释区块链开发与现有开发模式的区别
2)为这个领域的机遇和挑战提供背景
3)给你指出资源,这将为你开始在这个新的范式发展奠定基础
互联网应用受益于网络效应,因为它们维护着信息集中的孤岛。 基于共享的开放协议(例如TCP / IP,HTTP),像Yelp,Facebook和Amazon这样的公司可以从一个地方获得所有的用户,最终获得数据。 这样,他们不仅比数据较少的竞争对手更具优势,还能完全控制数据货币化的方式。用加密投资者Joel Monegro 的话来说,目前的互联网范例通过胖应用层来捕获其大部分价值,而精简的基础通信协议则捕获最小的价值。
或者,区块链范例中的值分布可以用胖协议和薄应用层来描述。由于密码令牌的创新,这种模式转换是可能的,USV的Albert Wenger对此有很好的描述:
“从历史上来说,通过协议赚钱的唯一方式就是创建实现它的软件,然后尝试销售这个软件(或者最近的软件)。然而,协议的创建者可以直接使用[密码]令牌”货币化“,而且事实上会受益于其他人在协议之上建立业务。“
以前,互联网开放通信协议的创建者,主要是DARPA的研究人员和非营利性贡献者,无法将财务激励与协议开发结合起来。 相比之下,今天的协议创建者可以发布“代币”,比如比特币和以太坊,代表了分散协议的价值。
Monegro认为 ,这种模式转变影响了开发人员思考其应用程序的方式:“共享开放数据与防止”赢者通吃“市场的激励系统的结合改变了应用程序层的游戏,并创建了一个全新的协议层的商业模式。“
我们已经认识到,在区块链范例中,开发人员可以通过协议创新来获取价值。为了继续我们的讨论,我们回顾了区块链技术是如何发展到最终迎合开发者的。
八年前,比特币被认为是一种虚拟货币,去中心化的金融系统。实际上开发人员最初是通过在区块链本身存储数据来尝试在比特币区块链上构建应用程序,但结果却相当低效(如另一篇Joel文章所述 )。其中一位开发人员Vitalik Buterin对比特币的固定态度和风险规避文化感到沮丧,因此他采用了新的开发友好功能。他建立了自己的平台,以太坊。
虽然比特币最初是作为金融储值的新媒介而发明的,但是以太坊被发明用作图灵完整的开发环境。 在Ethereum中,开发人员使用Solidity编程语言编写智能合约,这些智能合约在Ethereum虚拟机(EVM)中运行。 在这里,我们观察到开发者有机会分叉和实现他们自己的区块链以达到不同的目的。 但是,要做到这一点,需要重新开发现有区块链技术以前实现的开发者支持和网络效应。 今天,建立在像以太坊这样的现有网络的基础上,开发人员不仅能够成为自己的应用程序的利益相关者,而且还能够成为潜在的协议。
今天的区块链开发商经常在现有协议的基础上建立分散的应用程序,以解决特定的市场和最终用户的问题。在这样做的过程中,开发人员可以发出令牌或应用程序硬币,这些令牌用于执行dapp自己的某些“功能”,与Chuck-E-Cheese令牌用于特定目的(如skeeball)不同。 这些“功能”是一种“智能合约”,它保证了dapp的服务以换取数字资产,从而消除了中间人确保交易的需要。换句话说,聪明的合同承诺一个Chuck-E-Cheese令牌可以交换一个skeeball游戏。
随着dapp的功能变得越来越受追捧,应用程序硬币的数量随着供求的增加而增加。换句话说,如果事实证明Chuck-E-Cheese的经验是真正的卓越和高度要求的,那么固定的代币供应就变得更有价值了。这是通知所有ICO(初始硬币产品)的基本原则,在这个原则中,dapp开发者通过提供应用程序硬币来获取资金来为他们的项目提供资金或请求投资。
但是,你可能会问:“为什么不使用现有的令牌,而是先发布自己的,特定于dapp的令牌呢?”Dapp特定的应用程序使得小型经济体可以实现应用程序的目的。 这些令牌作为稀缺资源,可以调整和管理,以更加紧密地与一个dapp的功能对齐。这就是以太坊重新开始的地方 - 开发者可以很容易地使用以太坊来发布自己的令牌。
在了解了dapps的基本机制的基础上,仔细考虑分权将如何使最终用户受益,这一点很重要。为了实现区块链交换关系数据库,我们敦促你考虑分权的好处,而不是跳入一个侧面项目列表。例如,Augur创建预测市场,依靠分散的参与者做出正确的预测,因为他们分享财务激励。
在元级别上,开发者堆栈中也有创新的机会。在互联网早期,许多区块链开发者将区块链工具和框架的成熟度与网络的成熟度进行比较。我们与Stream的 Ben Yu交谈,他把这个形容为开发者的一个新机遇:“让这个领域更容易获得成果,还需要建立大量的技术基础设施,将从1994年就开始实施的区块链带到2017年的互联网。“
随着区块链的创新,许多人认识到有机会建立一个不依赖于中央政府或公司实体的新的分散的网络堆栈。传统的Web栈由TCP / IP,DNS,数据库,Web服务器,身份验证系统和CDN等构建块组成,我们正在使用Ethereum等平台作为基础层复制这些组件。
不幸的是,像JavaScript早期迭代的技术肯定会遇到挑战,其中最明显的是与新协议的不可变性有关。开发人员不能更改底层区块链或更高级别的智能合约,库或合同不容易版本化。 最近锁死了1.5亿美元资金的 Parity漏洞,以及其他许多类似事件,提醒我们迫切需要构建“面向未来的”架构。
0x的工程师布兰登·米尔曼(Brandon Millman)描述了区块链不可变性如何影响他对安全问题的看法:“在这个空间意味着需要更加谨慎,特别是因为人们的钱处于风险中。 区块链范式的好处之一在于,如果你持有私人密钥,人们很难从你那里拿钱,但是很多骗局让你自愿把钱寄到错误的地方而不是从你的钱包里偷钱“。
开发人员,特别是习惯了创业世界快节奏的开发人员,不得不考虑速度和安全性之间的权衡。 正如Stream的Ben Yu所描述的那样,“你必须快速行动,因为这个空间正在快速地发展,但是你不能快速地移动和破坏事物,这是现在传统的发展哲学。如果你破坏东西,你就会损失数亿美元。“
在区块链上构建需要不同级别的计划。开发人员不能再应用热修复或通宵修补,因为他们不再对整个系统进行集中控制。相反,引入系统更改通常涉及硬分叉整个协议,或者在某些情况下为协议参数提供单独的源,而这些参数不直接与区块链绑定。
除了不可变性的挑战之外,开发人员还可能面临以太坊的几个局限。一方面,以太坊无法访问区块链以外的实时数据。开发人员需要依靠可信赖的第三方数据提供商( 称为oracles )来提供与天气、随机数或货币价值等外部信息的智能合约。
此外,Ethereum的规范不支持实时计算。处理大宗交易需要15秒钟(与比特币10分钟相比,闪电般快速)。因此,开发人员需要编写具有前端框架的异步代码,以便相应更新状态(如React)。
通过以太坊,你也可以通过气体转化为以太坊的以太网来支付你的交易。 因此,使用当前版本的Solidity,如果你打算执行的计算过于昂贵(例如在国际象棋游戏中验证同住者),则可以非常可行地发现自己达到了交易限制。结果,链上计算因为在金钱和网络带宽方面变得昂贵,像Truebit这样有趣的替代方案可以执行更密集的计算外链。
一般来说,进入这个领域肯定会感到颠覆性的。这是一个跨学科的领域,跨越经济学领域、博弈论、金融学、计算机科学、数学、密码学等等。 但是,这也意味着有很多贡献的空间。
0x的Brandon建议你潜入有兴趣或有经验的领域,而不是试图一次性学习所有东西:“如果你事先做了JS开发,那么你可以贡献很多JS库。 虽然最终你肯定需要知道(所有的东西如何结合在一起),但是你不需要在最初就学完整个过程。“
本着分享的精神,区块链项目的大部分代码也可以通过开源获得。有一些很好的资源帮助你上手:
1)官方的Solidity文档
(http://solidity.readthedocs.io/en/latest/)是一个很好的开始。
2)Truffle框架
(http://truffleframework.com/)是最可靠的框架之一。
3)了解如何在zeppelinOS库
(https://github.com/OpenZeppelin/zeppelin-solidity)中开发令牌和令牌销售,这是构建dApp最值得信赖的库之一。
4)Blockgeeks还提供了一个深入的以太坊代币指南
(https://blockgeeks.com/guides/ethereum-token/),其中包含代码示例和高级概念。
5)你甚至可以从Crypto Kitties学习,并在区块链上创建自己的数字游戏。
另外,开发人员社区也非常有帮助。 查看:
1)/r/ethereum (reddit群组)(https://www.reddit.com/r/ethereum/)
2)/r/ethdev (reddit群组)(https://www.reddit.com/r/ethdev/)
3)https://blockgeeks.com/
如果你主要通过编写你自己的项目来学习,下面是一些开始的想法:
1)建立自己的钱包。 它可以是一个网络,移动应用程序或桌面应用程序。
2)创建自己的ERC-20令牌并将其部署在测试网上。
3)修改加密小猫(狗,坦克,僵尸…),并将其部署在测试网上。
是的,在目前的情况下,区块链发展是混乱的,没有现代网络开发中存在的类似的干净的框架和工具。 但是为什么不把区块链的新生状态看作是一个影响模式转换技术的机会呢?
在区块链上,你不需要部署任何中央服务器,这意味着没有单点故障。如果你的整个堆栈是分散的,没有可信任的第三方参与,使其审查是抵制的,你的数据库是可公开验证的。由于新模式提供了公开分享数据的机会,因此我们观察到分散数据库的最大优势。这是我们在区块链建设的未来,通过切断中间商系统分配信息和权力。
(本文来源:YC博客,http://blog.ycombinator.com/building-for-the-blockchain/)
以下是我们的社区介绍,欢迎各种合作、交流、学习:)