【区块链】智能合约简介

news2024/11/27 15:34:10

智能合约起源

image-20240507204621675

智能合约这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(NickSzabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下:“一个智能合约是一套以数字形式定义的承诺(promises),且合约参与方可以在上面执行这些承诺的协议。”

但由于缺乏能够支持可编程合约的数字系统和技术,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链可以为智能合约提供可信的执行环境,不仅可以支持可编程合约,而且具有去中心化、不可篡改、过程透明可追踪等优点,天然适合智能合约。至此,智能合约和区块链之间形成了密不可分的联系。

智能合约定义

本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。简单讲,智能合约就是双方在区块链资产上交易时,触发执行的一段代码,这段代码就是智能合约。“智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。”

智能合约特点:

  1. 高度自治:当智能合约上预先编好的条件被触发时,会自动执行合约。
  2. 去中心化:无需中心化服务器的参与,能够降低交易成本,同时也能缓解信任问题。

那么它与传统合约有什么区别呢?对比如下:

image-20240507205413022

  • 传统合约:传统的合同协议,例如由法律专业人员创建的协议,主要以纸张为基础,严重依赖第三方执行。第三方执法不仅非常耗时,而且非常定义模糊。如果事情误入歧途,合同当事方往往必须依靠公共司法系统来纠正这种情况,这可能是非常昂贵和耗时的。
  • 智能合约:智能合约通常由计算机程序员通过智能合约开发工具创建,完全是数字化的,使用编程代码语言(如Solidity,C++,Go,Python,Java)编写。该守则以与传统法律文件相同的方式界定规则和后果,说明在任何不同情况下任何一方可能产生的义务,利益和处罚。然后,该代码可以由分布式分类帐系统自动执行和强制执行。

智能合约原理

一个基于区块链的智能合约需要包括事务处理机制、数据存储机制以及完备的状态机用于接收和处理各种条件。并且事务的触发、处理及数据保存都必须在链上进行。当满足触发条件后,智能合约即会根据预设的逻辑,读取相应数据并进行计算,最后将计算结果永久保存在链式结构中。

image-20240507205646386

智能合约流程如下:

image-20240507210037661

智能合约安全性

因为合约是严肃的事情,传统的合约往往需要专业的律师团队来撰写。古语有云:“术业有专攻”。当前智能合约的开发主要由软件团队从业者来完成,其所编写的智能合约在完备性上可能有所欠缺,因此相比传统合约,更容易产生逻辑上的漏洞。

现有的部分支持智能合约的区块链平台提供了利用如Go语言、Java语言等高级语言编写智能合约的功能,而这类高级语言不乏一些具有“不确定性”的指令,可能会造成执行智能合约节点的某些内部状态发生分歧,从而影响整体系统的一致性。

智能合约应用

智能合约是区块链技术的重要应用之一,它通过自动化执行合约条款,无需第三方干预,实现了高效、透明且不可篡改的交易过程。正是因为智能合约具备这些优点,它在金融、供应链管理、保险、物联网等多个领域展现出广泛的应用前景。从自动股票交易、简化供应链跟踪到去中心化交易所的构建,智能合约正在革新我们的商业和交易模式,促进了资源共享和降低了交易成本,为现代社会带来了前所未有的便利和效率。

这里简单对比传统跨境支付结算与智能合约下的区块链跨境支付结算。从下图可以看到,区块链跨境支付的优势很大。

image-20240507210940701

智能合约示例

目前以太坊上支持三种语言编写智能合约Solidity、Serpent、LLL, 其中最流行而且最稳定的是Solidity,这也是以太坊官方推荐语言,具体用法参照Solidity文档。

Remix是一个开源的Solidity智能合约开发环境,提供基本的编译、部署至本地或测试网路、执行合约等功能。remix-ide是一个浏览器版的solidity开发IDE,你可以使用在线版,也可以下载下来安装到本地。有了它,你就可以自由地编写智能合约,编译部署了!

在线版:https://remix.ethereum.org/

本地:https://github.com/ethereum/remix-ide

image-20240507211329045

以下是一个简单的智能合约示例,使用solidity语言编写。

pragma solidity>=0.8.2<0.9.0; //选择编译器版本

contract Person{
	function age() pure public returns(uint){
		return 22;         //函数固定返回22
	}
	function height(uint _height) pure public returns(uint){
		uint Height=_height;
		return Height;     //函数返回输入的值
	}
	function callheight() pure public returns(uint){
		return height(25); //调用height,返回25
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我独自升级崛起一键下载 我独自升级崛起一键下载安装教程

将于5月8日向全球绽放的《我独自升级&#xff1a;崛起》&#xff0c;标志着动作角色扮演类游戏的新纪元。它深挖同名动漫与网络漫画的丰富底蕴&#xff0c;誓言以无尽的魅力引导玩家涉足一个深广莫测、波澜壮阔的奇幻领域。该游戏巧妙地植根于一个前所未有的赛博武侠天地间&…

19_Scala集合概述

文章目录 集合回顾javaScala集合三大类String & StringBuilderScala集合两大类 集合 回顾java scala与Java有所不同 函数式编程语言更侧重集合本身提供的哪些功能&#xff1b; Scala集合三大类 1.Seq 存储有序数据可重复 类比 List 2.Set 存储无序数据不可重复 3.Map…

拥抱新质生产力,助力新型工业化!CMM电子展暨IARS机器人展5月东莞盛大起航

2024年5月15-17日&#xff0c;东浩兰生会展集团旗下CMM电子展&#xff06;IARS机器人展将在广东现代国际展览中心&#xff08;东莞厚街&#xff09;举办。展会面积达50000平方米&#xff0c;展示品牌700余个&#xff0c;同期论坛峰会30余场&#xff0c;预计专业观众超50000人次…

DI-engine强化学习入门(十又二分之一)如何使用RNN——数据处理、隐藏状态、Burn-in

一、数据处理 用于训练 RNN 的 mini-batch 数据不同于通常的数据。 这些数据通常应按时间序列排列。 对于 DI-engine, 这个处理是在 collector 阶段完成的。 用户需要在配置文件中指定 learn_unroll_len 以确保序列数据的长度与算法匹配。 对于大多数情况&#xff0c; learn_un…

【热门话题】实用Chrome命令:提升前端开发效率的利器

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 实用Chrome命令&#xff1a;提升前端开发效率的利器引言目录1. 快速打开Chrome …

批量将GOID转成GO term名并添加BP,MF,CC分类信息

基因本体论&#xff08;Gene Ontology&#xff0c;GO&#xff0c;https://www.geneontology.org&#xff09;是一个广泛应用于生物信息学领域的知识库&#xff0c;它提供了一套标准化的词汇和分类体系&#xff0c;用于描述基因功能、细胞组分和生物过程。GO旨在统一科研人员对基…

【Delphi7】Access violation at address 0019F7C3. Write of address 0019F7C3.

这里写目录标题 问题基本情况问题描述1、启动Delphi 开发程序 时连续报如下错误2、打开“工程”菜单下的“选项”页面时时连续报如下错误 解决方案1、打开“高级系统设置”2、打开“性能选项”3、添加“数据执行保护”的程序4、选择“数据执行保护”的程序5、应用“数据执行保护…

【免费】虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型【simulink】

目录 主要内容 仿真模型要点 2.1 整体仿真模型 2.2 电压电流双闭环模块 2.3 SVPWM调制策略 2.4 无功电压模块 2.5 自适应控制策略及算法 部分结果 下载链接 主要内容 该模型为simulink仿真模型&#xff0c;主要实现的内容如下&#xff1a; 随着风力发电、光…

数据结构复习/学习9--二叉树

一、堆与完全二叉树 1.堆的逻辑与物理结构 2.父节点与子节点的下标 3.大小根堆 二、堆的实现&#xff08;大根堆为例&#xff09; 注意事项总结&#xff1a; 注意堆中插入与删除数据的位置和方法与维持大根堆有序时的数据上下调整 三、堆排序 1.排升序建大堆效率高 注意事项…

信锐交换机简介及应用说明(1)

交换机关键参数及分类 1.线速 线速是指交换机的端口上每秒钟传输的bit数&#xff0c;单位为bps&#xff08;bit per second&#xff0c;即每秒传输多少bit&#xff0c;一个bit也就是一个二进制数0或者1&#xff09;。以我们常见的例子来说明的话&#xff0c;比如100M的网卡就…

(三)JSP教程——JSP动作标签

JSP动作标签 用户可以使用JSP动作标签向当前输出流输出数据&#xff0c;进行页面定向&#xff0c;也可以通过动作标签使用、修改和创建对象。 <jsp:include>标签 <jsp:include>标签将同一个Web应用中静态或动态资源包含到当前页面中。资源可以是HTML、JSP页面和文…

论文复现丨多车场带货物权重车辆路径问题:改进邻域搜索算法

引言 本系列文章是路径优化问题学习过程中一个完整的学习路线。问题从简单的单车场容量约束CVRP问题到多车场容量约束MDCVRP问题&#xff0c;再到多车场容量时间窗口复杂约束MDCVRPTW问题&#xff0c;复杂度是逐渐提升的。 如果大家想学习某一个算法&#xff0c;建议从最简单…

Xshell打开XFTP提示需要下载

使用xshell无法启动xftp的问题&#xff0c;下载Xftp&#xff1a;百度网盘 请输入提取码 使用方法&#xff1a; 解压以后&#xff0c;右键运行“!)绿化处理.bat”即可。

保姆级教程:从 0 到 1 将项目发布到 Maven 中央仓库【2024年5月】

前言 大家好&#xff0c;我叫阿杆&#xff0c;不叫阿轩 最近写了一个参数校验组件&#xff0c;名字叫 spel-validator&#xff0c;是基于 javax.validation 的一个扩展&#xff0c;目的是简化参数校验。 我把项目开源到了GitHub https://github.com/stick-i/spel-validator …

【C语言】用数组和函数实现扫雷游戏

用数组和函数实现扫雷游戏 游戏界面&#xff1a; 代码如下&#xff1a; game.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #define ROW 9 #define COL 9 #define ROWS ROW2 #define COLS COL2 //初始…

[正则表达式]正则表达式语法与运用(Regular Expression, Regex)

0. 在线工具 RegExr: Learn, Build, & Test RegEx 1. 场景列举 vim Linux命令行 sublime 编辑器 java、python等语言中 ... ... 不同场景、不同版本语法可能不一样 2. 以下示例数据与基本语法 &2024 &As20242024# 2024sA#abdcefgha_bdcefghABASDSADAASDASD…

经常发文章的你是否想过定时发布是咋实现的?

前言 可乐他们团队最近在做一个文章社区平台,由于人手不够,前后端都是由前端同学来写。后端使用 nest 来实现。 某一天周五下午,可乐正在快乐摸鱼,想到周末即将来临,十分开心。然而,产品突然找到了他,说道:可乐,我们要做一个文章定时发布功能。 现在我先为你解释一…

已经做了小20年电商梦的腾讯,终于找到了破局的方向~

我是王路飞。 随着短视频的爆火、抖音电商成功开辟出短视频/直播带货的电商新赛道。 已经做了小20年电商梦的腾讯&#xff0c;终于找到了破局的方向~ 这个方向&#xff0c;就是被腾讯马老板亲口认证为&#xff1a;全村&#xff08;全公司&#xff09;希望所在的视频号。 内…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时&#xff0c;需要在使用open函数时指定好带路径的文件名&#xff08;可以使用相对路径或绝对路径&#xff09;并将文件模式设置为r&#xff08;如果不指定&#xff0c;默认值也是r&#xff09;&#xff0c;然后通过encoding参数指定编码&#xf…

基于FPGA的DDS波形发生器VHDL代码Quartus仿真

名称&#xff1a;基于FPGA的DDS波形发生器VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; DDS波形发生器VHDL 1、可以输出正弦波、方波、三角波 2、可以控制输出波形的频率 DDS波形发生器原理…