智能合约(Smart contract)

智能合约(Smart contract),第1张

一、简介

概念:是指一份能自动执行本需要手动才能完成任务的协议。智能合约就是任何能自动执行部分功能的协议。例如,一份能自动计算合同当事人待付金额,并安排支付这笔金额的合约。智能合约将减少协议执行过程中的人工干预。

目的:提供优于传统合约的安全方法,并减少与合约相关的其他交易成本交易成本

智能合约概念于1995年由Nick Szabo首次提出。他的定义如下:“一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。”

承诺:一套承诺指的是合约参与方同意的(经常是相互的)权利和义务。这些承诺定义了合约的本质和目的。以一个销售合约为典型例子。卖家承诺发送货物买家买家承诺支付合理的货款。

数字形式:数字形式意味着合约不得不写入计算机计算机可读的代码代码中。这是必须的,因为只要参与方达成协定,智能合约建立的权利和义务,是由一台计算机计算机或者计算机网络执行的。 更进一步地说明:

  (1)达成协定

        智能合约的参与方什么时候达成协定呢?答案取决于特定的智能合约实施。一般而言,当参与方通过在合约宿主平台上安装合约,致力于合约的执行时,合约就被发现了。

  (2)合约执行

        “执行”的真正意思也依赖于实施。一般而言,执行意味着通过技术手段积极实施。

  (3)计算机可读的代码

        另外合约需要的特定“数字形式”非常依赖于参与方同意使用的协议。

协议

  协议是技术实现(technical implementation),在这个基础上,合约承诺被实现,或者合约承诺实现被记录下来。选择哪个协议取决于许多因素,最重要的因素是在合约履行期间,被交易资产的本质。

  再次以销售合约为例。假设,参与方同意货款以比特币支付。选择的协议很明显将会是比特币协议,在此协议上,智能合约被实施。因此,合约必须要用到的“数字形式”就是比特币。比特币脚本语言是一种非图灵完备的、命令式的、基于栈的编程语言,类似于Forth。

二、应用场景

智能合约可以应用在数字身份、记录、证券、贸易金融、衍生产品、财政数据纪律、抵押、土地所有权纪律、供应链、汽车保险、临床试验、癌症研究中。

在这里仅讲述智能合约在区块链中的作用,毕竟作为区块链的核心技术之一,智能合约在数字货币上发挥了巨大的作用。

三、Solidity

智能合约有好几种:

Solidity:有点类似Javascript风格, 文件的后缀名是.sol.。

Serpent:与Python风格类似的Serpent, 文件的后缀名是.se。

LLL:类似Lisp,估计好多人都没听说过这个语言。

不过目前最广泛使用的是:Solidity,这一节就介绍一下Solidity。

3.1、Solidity简介

Solidity是用于实现智能合约的一种面向合约的高级编程语言,Solidity受到C++、Python和JavaScript的影响,被设计为可运行在以太坊虚拟机(EVM)上,所以用户无需担心代码的可移植性和跨平台等问题。

Solidity是一种静态类型的语言,支持继承、库引用等特性,并且用户可自定义复杂的结构类型。

目前尝试 Solidity 编程的最好的方式是使用 Remix (由于是网页IDE可能加载起来需要一定的时间)。Remix 是一个基于 Web 的 IDE,它可以让你编写 Solidity 智能合约,然后部署并运行该智能合约。

3.2、核心语言特性:安全、对智能合约特定业务的支持

安全:

首先交易是真金白银,所以安全是第一位。而区块链是一个环境,智能合约部署之后,修改是非常麻烦的事情,所以智能合约的代码就需要极高的安全性。而JavaScript是弱类型语言,代码的安全性上不够,所以这也是为什么JavaScript添加强类型之后的TypeScript变得更加流行的原因之一。

Solidity是一门静态类型语言,也是强类型语言,对于一些常见错误,开发者可以通过编译迅速捕捉到,从而进行修改,增强了安全性。另外,后端常用的Java、C++等语言的安全性也很高,但是对系统的要求很高,对系统负荷很大。所以在安全性和性能负荷上,Solidity是综合考量后的优势选择。

对智能合约特定业务的支持:

智能合约不一定是一个现实意义的合约,即使一个只打印 Hello World 的程序,只要部署到区块链上,我们也叫它做一个智能合约。但是话说回来,智能合约的很常见的一种作用就是来实现合约,常见的编程语言对于这一点是没有特殊支持的,而 Solidity 就专门对此作了优化,甚至专门添加了一种类型,就叫 contract 。除了对于合约的支持,以太坊之所以迅速火爆,跟它的能够轻松发代币的能力是分不开的,所以 Solidity 之下有专门的数据类型叫做 address ,可以用来在发代币的时候设置铸币人地址。

3.3、学习资源

官网:计算机,有中文版文档

Remix:http://remix.ethereum.org 。这是以太坊官方推出的一个 Solidity 的在线集成开发环境。提供了文件浏览器,带高亮支持的代码编辑器,调试工具,甚至有编译功能。Remix 是每个 Solidity 开发者都在用的项目。

登链社区:登链社区 - 区块链技术爱好者都在这里https://learnblockchain.cn/登链社区 - 区块链技术爱好者都在这里https://learnblockchain.cn/    也有中文版文档以及安装环境等教程

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/1319671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-11
下一篇 2022-06-11

发表评论

登录后才能评论

评论列表(0条)

保存