区块链智能合约入门

What is Smart Contract: Nick Szabo introduced this concept in 1994 and defined a smart contract as “A computerized transaction protocol that executes the terms of a contract”[5]. Nick Szabo suggested translating contractual clauses into code, and embedding them into property that can self-enforce them[6]. However, in blockchain systems, the meaning of smart contracts has evolved. Within the blockchain context, smart contracts are scripts recorded on the blockchain.(They can be thought of as roughly analogous to recorded procedures in relational database management systems[7]. Since they reside on the chain, they have a unique address. We trigger a smart contract by addressing a transaction to it. It then executes independently and automatically in a prescribed manner on every node in the network, according to the data that was included in the triggering transaction[4]. 

什么是智能合约:Nick Szabo在1994年引入了这个概念,并将智能合约定义为“执行合约条款的计算机交易协议”[5]。Nick Szabo建议将合同条款翻译成代码,并将它们嵌入到可以自我执行的财产中,[6]。然而,在区块链系统中,智能合约的含义已经发生了变化。在区块链上下文中,智能合约是区块链上记录的脚本。(可以认为它们大致类似于关系数据库管理系统[7]中的记录过程。因为它们位于链上,所以它们有一个唯一的地址。我们通过寻址一个交易来触发智能合约。然后,根据触发事务[4]中包含的数据,在网络中的每个节点上以规定的方式独立、自动地执行。

Blockchain based smart energy trading platform using smart contract 

区块链智能合约入门_第1张图片

Develop Leave Application using Blockchain Smart Contract

Solidity is a Contract Oriented Language, used for writing smart contracts which can be deployed on EVM. It follows an object-oriented approach and support features like inheritance,complex data types among many. 

solid是一种面向契约的语言,用于编写可部署在EVM上的智能契约。它采用面向对象的方法,并支持继承、复杂数据类型等特性。

Truffle is a development environment and a testing frame-work. This helps in the automatic compilation and deployingof contract on Blockchain without much problem. It also helpswhile making migration in Blockchain. Finally using trufflewe deployed the contract on a private Ethereum Blockchain.Deploying the contract on Blockchain is also a transactionand hence required ether which can be obtained by simplydoing miner.start(1) in your geth console. (Note: Rememberthe difficulty parameter we talked about in Genesis file, thevalue of the parameter should be less or else it will become a pain for you to mine ether).

Truffle是一个开发环境和测试框架。这有助于在区块链上自动编译和部署contract,没有太多问题。它也有助于在区块链中进行迁移。最后,我们使用truffle将合同部署在私有以太坊区块链上。在区块链上部署契约也是一个事务,因此需要ether,可以通过在geth控制台中执行miner.start(1)来获得。(注意:记住我们在Genesis文件中提到的难度参数,参数的值应该更小,否则你挖掘以太会很痛苦)。

Energy Trading Web Platform Based on the Ethereum Smart Contracts and Blockchain  

a .结构区块链的结构实际上是一个按创建时间顺序排列的连接块链(图1)。每个块(除了第一个起源块)都通过哈希码与前一个块连接。

区块链智能合约入门_第2张图片

B.哈希码哈希码是每个块的唯一字符串,包含特定数量的字符。它是由特殊的哈希算法生成的,其中最常用的是SHA-256(安全哈希算法256)。当创建一个新块时,将执行一个散列算法,产生一个反映块字段当前状态的字符串。这将确保不允许对块中初始验证和存储的信息进行进一步更改。为了改变已经存储在块中的部分信息,它必须反映在链中的所有后续块中。

C.信息存储   去中心化技术和区块链的特点是信息存储在多个设备(节点)上。这进一步强调了区块链信息在初始验证后不能在实践中更改的说法。为了改变某些块中的信息,它必须在所有节点上同时发生。

D.共识协议   在所有设备的电路中存储当前信息的相同副本,实现了数据验证的规则,并添加了一个新的块共识协议。最广泛使用的共识协议之一是证明工作。在这个协议中,区块链的所有参与者都是平等的,都有相同的机会去验证并向链中添加一个新的块。当一个节点成功地将一个块添加到它的本地复制链上时,它必须通过P2P网络将新块的信息发送给所有其他参与者。这样,所有节点信息的一致性都保持为[1]。

E.优点和缺点区块链技术的主要优点是交易时不再需要第三方保证人,在实践中信息一旦输入就无法更改。主要的缺点是需要大量的存储设备。

V.  ETHEREUM  
Ethereum is a modern Blockchain based technology for storing information in a decentralized environment. Unlike Bitcoin, Ethereum supports two types of users: EOAs (Externally Owned Accounts) and contract accounts. Both types of accounts are identified by Ethereum addresses. EOAs are user accounts (wallets) that are managed by the outside world through a private key. Contract accounts do not have a private key, which means that they cannot be managed by the outside world, but only by the program contained in them, which runs in EVM (Ethereum Virtual Machine). 

以太坊是一种基于现代区块链的技术,用于在去中心化环境中存储信息。与比特币不同,以太坊支持两种类型的用户:EOAs(外部拥有账户)和合同账户。这两种类型的账户都由以太坊地址标识。EOAs是由外界通过私钥管理的用户帐户(钱包)。合约帐户没有私钥,这意味着它们不能由外部世界管理,而只能由其中包含的程序管理,该程序运行在EVM(以太坊虚拟机)中。

A.智能合约一旦上传,智能合约将无法更改。与传统软件不同,改变它们的唯一方法是重新创建它们。它们具有有限的外部信息,例如来自调用它们的事务的信息,以及存储在最后一个块中的一些信息。它们是用高可靠性的面向对象计算机语言开发的(图2)。

B.以太坊的区块链可以是公共的、财团的或私人的。公共区块链是完全去中心化的,对参与共识协议、交易和获取记录信息没有限制。财团区块链是部分去中心化的,某些节点可以参与共识过程。信息的公开可能是有限的。私人的区块链是集中的,参与必须事先批准[2]。

The architecture of the platform consists of several main parts - client, server and blockchain. The client part is a user SPA (Single-page application), which makes the connection between users and the system. The following technologies and programming languages were used for its development - HTML, CSS and Java Script. The storage of information in the platform is implemented On-chain and Off-chain and is distributed between the server part and the Blockchain part. Information directly related to transactions is stored on the Blockchain (On-chain). Any other secondary information (consumer, historical, etc.) that does not have a direct impact on the transactions themselves is stored Off-chain. The relational database PostgreSQL was used for the implementation of the Off-chain part, and for the Blockchain part - Ganache.

平台体系结构由客户端、服务器端和区块链几个主要部分组成。客户端部分是一个用户SPA(单页面应用程序),它连接用户和系统。开发过程中使用了以下技术和编程语言:HTML、CSS和Java Script。平台中信息的存储实现了链上和链下,分布在服务器部分和区块链部分之间。直接与交易相关的信息存储在区块链(链上)上。任何其他对交易本身没有直接影响的二级信息(消费者、历史信息等)都在链外存储。链下部分的实现使用了关系型数据库PostgreSQL,区块链部分则使用了Ganache。

比特币的出现是区块链技术实施第一阶段的开始,它只与数字货币相关。第一代区块链建立了这些系统的许多核心功能,这些功能一直保留到今天——区块链网络中的高可扩展性、互操作性、可持续性、安全性、成本效益和治理。第二代区块链始于以太网区块链上智能合同的出现[1,2]。智能合同消除了外部强制执行法律协议的需要。它们是运行在区块链顶端的可自我执行的程序代码,用于管理复杂的业务逻辑。但是区块链的主要问题是扩展和事务处理时间。现在有第三代区块链。新的区块链应用程序(私有和公共)正在各个业务领域不断涌现。智能合同可以在不同的区块链平台上开发和部署,如Ethereum、Hyperledger Fabric [3]、Smart、Waves [5]、NXT [6]等。每个平台都提供了开发智能合同的特定功能。

Part 1:区块链相关概念

【哈希值】哈希值又叫“数字指纹”,无论多大的数据,经过一番计算后,都可以得到一个固定长度(例如256比特)的哈希值;数据的内容不同,哈希值必然不同,就像人和人不会有相同的指纹。

【区块链】一系列数据块(即区块)连接而成的链条,连接的方式是:其中第N+1个区块中,包含第N个区块的哈希值。而且这样的数据块的链条,同时被分布广泛、数量巨大的服务器节点所存储和维护,每个服务器节点都拥有一份区块链的完整拷贝(即区块链数据的存储是高度冗余的)。 

【去中心化(服务器)系统】数量巨大的服务器节点彼此平等,靠某种事先达成的协议来保证大家拥有数据是完全相同的拷贝,它们就构成了一个去中心化系统。而在一个中心化系统中,某个中心节点拥有更高的权力,它负责更新数据,所有其它节点从它那里获得更新后的数据。 

【哈希碰撞】计算哈希值的过程是不可逆的,预先给定一个值,如果请你构造出一段数据,希望它的哈希值正好是这个给定值,那么就算你拿最强大的计算机算到天荒地老,也构造不出来。哪怕退一步,只要求你构造一段数据让它的哈希值小于给定值,都需要算很久很久。而且这个构造过程没有任何巧妙的算法可以利用,只能傻傻地去尝试所有可能的数据。这是一个“瞎猫撞到死耗子”的过程,因此被叫做哈希碰撞。 

【工作量证明】区块链上的区块,除了包含上一个区块的哈希值(数字指纹)之外,还至少要包括一串无意义的数字,它被称为nonce。改变nonce的值,就可以改变本区块的哈希值。服务器节点尝试不同nonce的值,碰撞出一个足够小的哈希值,这个过程被称为工作量证明。哈希值有多小,就证明你大致尝试过多少个不同nonce。

【共识协议】维护同一个区块链的服务器数量众多,要维护数据的一致性,它们就必须在“谁来决定下一个区块内容”这一问题上达成共识。目前所广泛采用的共识协议是,谁先给自己的区块找到足够小的哈希值来完成工作量证明,谁的区块就是下一个区块。 

【孤块】由于服务器的数量太多了,彼此通讯的延迟有大有小,有时候会产生区块链的分叉,比如说甲、乙两台服务器几乎同时找到了工作量证明,那么会导致有的服务器把甲的区块追加到自己所存储的区块链上,其它则追加乙的。这个时候,区块链就出现了甲乙两个分支,在两个分支上都有服务器在持续追加块。为了解决这个问题,共识协议约定,以最长的链为准,即经过一段时间之后,如果在甲分支上追加了的区块的数量大于乙分支,就以甲为准,这个时候乙分支上的块,就成为了孤块,不被系统所承认。 

【51%攻击】“以最长链为准”,其合理性在于,最长链上累计的哈希碰撞的工作量最大,相当于服务器之间用哈希碰撞的算力来进行投票,投票选出的链,必然是最长链。只要系统中作恶的坏节点的算力不超过50%,它们就无法累积出最长链。但反过来讲,如果有51%的节点都是坏节点,它们联合起来,能任意决定区块中的内容,破坏整个系统,这就是51%攻击。 

【确认数】某一笔交易被加入区块链的某个区块中,称为得到了一次确认。这个区块之后,区块链每被追加一个区块,就增加了一次确认。确认的数量越多,这笔交易所在的块成为孤块的可能性就越低。 

Part 2: 数字货币(特别是比特币)相关概念

【非对称加密】用户生成一对公私密钥,用公钥加密的数据,只能用私钥才能解密;用私钥加密的数据,用公钥才能解密。用户把自己的公钥公之于众,想给他发送秘密信息的人,只需用公钥把信息加密,就不怕信息传递过程中被窃听。私钥必须严格保护起来,不得泄漏。 

【数字签名】我希望对外发布一个文件,怎样避免这个文件在传输中被篡改?只需把文件的哈希值用私钥加密,和文件一起对外发布即可。接受者用公钥解密,得到了正确的哈希值,就证明文件的确是我所发布的,因为,一、文件一旦改变,哈希值就会变;二、天下只有我拥有私钥。这个被私钥加密的哈希值,称为数字签名。

【比特币】与区块链一同诞生的现金记账系统,区块链的第一个应用。它的区块中的内容,简单但不准确地说,就是一些这样的记录:“我是公钥为X的账户,我把我拥有的Y个比特币,转给公钥为Z的账户”,以及用X对应的私钥为这条记录加上的数字签名。中本聪于2008年发明比特币,2009年完成比特币的开源代码,2010年后逐渐销声匿迹。很多人怀疑中本聪是某个匿名团体的笔名。

【钱包】数字货币让人真正拥有了财富,只要你保存好私钥,任何暴力机关都无法剥夺你拥有的币。但是,一旦丢失了私钥,你就丢失了这个私钥所对应的所有币,而且无法找回。钱包就是帮助你保存私钥的工具,它可以是软件app,也可以是专门的硬件设备。当你需要给其它人支付数字货币时,钱包帮助你生成支付的记录、对应的数字签名,它还帮你把这些信息广播给负责维护区块链的节点们,请他们把这笔交易记录在区块中。 

【挖矿】挖矿是一种发行数字货币的机制,也是对维护区块链的节点们的奖励机制。节点们需要接受用户发送来的交易记录,验证其数字签名,验证用户是否真的有他所声称的币,然后把很多的交易记录打包成一个区块,最后还得进行哈希碰撞以获得工作量证明。它们为系统付出了很多劳动,应该得到奖励。以比特币为例,它开始运作时,每当节点为系统追加一个新的区块(或者说“挖”出了一个新的块),节点就会“凭空”获得50个比特币的奖励,这些币是新发行的或者说新“印刷”出来的。之后,每过大约三年半,奖励就会减半,最终在100多年后会减到0。整个过程中,总共将发行2100个比特币。挖出新块、得到奖励的过程,被形象地称为挖矿。 

【矿池和矿工】挖到新区块的关键在于能不能以很高的并行度来进行哈希碰撞,于是有些服务器节点把哈希碰撞的工作“外包”给专门的矿工,自己只负责“接受交易、验证交易、打包交易”这三项任务,这样的服务器就是矿池。矿工专门负责哈希碰撞,一旦矿池挖到了新块,不论这个块究竟是哪个矿工找到工作量证明的,一律和所有的合作矿工按算力大小成比例地分享新块的收益。 

【矿场】个人矿工用电脑、手机等设备来进行哈希碰撞,效率很差。为了利用规模效益提升效率,在一些电力廉价的地区,有人投资兴建起了专门的矿场,利用专门定制的硬件设备来进行哈希碰撞,并且聘请专门的工程师来管理众多的设备。

Part 3: 区块链2.0 相关概念

比特币以及和它类似的数字货币被称为区块链1.0,以太坊等支持智能合约的数字货币则是区块链2.0,最后介绍一下和区块链2.0相关的概念。 

【智能合约】智能合约类似于数据库中的trigger(触发器),即特定事件出现的时候,自动执行的代码块。通俗地讲,它使得“钱自己会动”。比如说:老公账目上的钱如果超过一定限额,多出来的钱就会流到老婆账目上;公司的员工向某慈善组织捐一定数目的钱,公司会自动捐同样数额的钱。 

【Token】这个词很难翻译,有人把它翻译成“代币”,感觉不是很全面,所以还是保留英文原文。它是某种资源、资产、股份在区块链上的表示。笼统地讲一下它的具体实现方法:资源、资产、股份的拥有者,使用自己的密钥为一些数据片段加上签名,这些数据片段就变成了Token,借助智能合约,Token可以被拆分成很多份,分配给很多个账户,以及在账户之间流动。

【ICO(Initial Coin Offering)】一家公司准备新创一种区块链来改变世界,但它没有钱,于是就号召大家给它捐助数字货币如比特币,以太币。同时承诺说,这些捐助的币,将会按比例折换成这个新创链上的数字代币送给大家,等有朝一日这个新链真的改变世界了,新创链上的币将暴涨,大家一起发财。 

【IFO(Initial Fork Offering)】和ICO很类似,但不是新创一个链,而是说:我们是某个数字货币社区里的用户,我们觉得它不好,现在要分叉这个币、分裂它的社区了!我们分叉很辛苦,因此分叉后的链上,会凭空给我们记录一大笔数字货币的收益。请大家支持我们,支持的方式就是拿比特币,以太币这些硬通货来交换我们手头凭空多出来的收益。

【IMO(Initial Miner Offering)】和ICO很类似,但不是号召大家来换这个新链上的代币,而是号召大家来买这个新链上专用的矿机。大家用矿机挖代币,等代币暴涨,大家就发财了。

【去中心化自治组织】简称DAO(Decentralized Autonomous Organization)。试想,如果在一个组织中,货币、资源、资产、股份都变成了区块链上的Token,被链上的智能合约所管理,那么这个组织就可以不依赖于任何中心化的管理机构来运转。这个区块链的底层源代码即为这个组织的法律,冰冷的机器严格无误地执行法律和合约,实现彻底的法制。

区块链2.0的颠覆不仅仅是“钱自己会动”这么简单,而是:实现了资源、资产、股份在比特世界的确权之后,让它们也“自己会动”了。区块链底层技术保证了Token所有权的唯一,满足了利己的人类对“私有权”深入骨髓的渴望。

前一段时间,以太坊上的“加密猫(CryptoKitties)”应用,推出才不到一周时间,人们在那上面养猫就已经花了相当于1000 多万人民币的以太币了。这个应用同普通的虚拟宠物App有什么本质的区别吗?就在于里面每一只猫都是唯一的而且产权确定的,不能复制,只能买卖。

 

 

 

你可能感兴趣的:(智能合约,区块链,数据库,java)