第146篇 笔记-智能合约介绍

news2025/1/31 3:15:38

定义:当满足某些预定义条件时,智能合约是一种在区块链网络上运行的防篡改程序。

1.什么是智能合约

智能合约是在区块链网络上托管和执行的计算机程序。每个智能合约都包含指定预定条件的代码,这些条件在满足时会触发并产生结果。通过在去中心化区块链而不是集中化服务器上运行,智能合约允许多方以准确、及时和防篡改的方式达成共享结果。‍

智能合约是一种强大的自动执行的基础设施,因为它们不受中央管理员的控制,不易受到恶意实体的单点攻击。当应用于多方数字协议时,智能合约应用程序可以降低交易对手风险、提高效率、降低成本,并为流程提供新的透明度。

2.智能合约的历史

智能合约最早由美国计算机科学家尼克·沙博(Nick Szabo)于1994年创造,他给出了一个广义的智能合约定义如下:“执行合约条款的计算机化交易协议”,其总体目标是“满足共同的合约条件,最小化恶意和意外,并最小化对可信中介的需求。”

虽然智能合约的一般概念可以在自动售货机等系统中看到,但区块链形成了数字、防篡改和无许可的智能合约的基础。2009年比特币区块链的引入支持了第一个协议智能合约,该合约建立了一组必须满足的条件,才能在网络上的用户之间传输比特币。这些条件包括用户使用与其公共地址匹配的正确私钥(类似于链接到特定帐户的密码)签署交易,以及用户拥有足够的资金来支付交易。

2012年,比特币区块链演变为提供另一种主要类型的智能合约,称为多签名交易。多重签名交易需要定义一定数量的人(公钥)使用其私钥签署交易,然后才被认为有效。这通过减少单点故障(如被盗或丢失的私钥)来提高用户资金的安全性。

一个用于比特币区块链上多签名交易的简单框架,需要3个私钥中的2个签署才能使交易被视为有效

在接下来的几年中,区块链开始尝试添加新的编程条件(称为操作码)。然而,2013年Vitalik Buterin发布了以太坊白皮书,这是智能合约的下一个重大飞跃。2015年,以太坊作为可编程智能合约的新型区块链推出。以太坊智能合约区块链提供了一台可以同时运行多个独立智能合约的“世界计算机”,而不是将区块链作为单个智能合约应用程序或提供一些有限的操作码。

3.智能合约工作原理

智能合约是区块链上的防篡改程序,具有以下逻辑:“如果/当x事件发生时,执行y操作。”一个智能合约可以有多个不同的条件,一个应用程序可以有多种不同的智能合约,以支持一组相互连接的流程。还有多种用于编程的智能合约语言,以太坊的Solidity是最受欢迎的。‍

任何开发者都可以创建一个智能合约,并将其部署在公共区块链上,用于他们自己的目的,例如,一个个人收益聚合器,自动将他们的资金转移到最高收益的应用程序。然而,许多智能合约涉及多个独立方,这些独立方可能相互了解,也可能不相互信任。智能合约准确定义了用户如何与之交互,包括谁可以与智能合约交互,在什么时间,什么输入导致什么输出。其结果是多方数字协议从今天的概率状态发展到新的确定性状态,在这种状态下,它们可能会按照期望执行,在这种新的确定性状态下,保证它们能够根据代码执行。

4.智能合约示例

智能合约的一个目的是在不同的实体组之间自动化特定的业务流程。这些实体共同就所有智能合约的条款达成一致,如支付、流程和争议解决。一个简单的全球贸易智能合约示例可能包含以下条款:

  • 条款1:如果货物按时到达,则零售商向供应商全额付款。
  • 条款2:如果货物迟到一天,那么零售商应向供应商支付全额的98%。

其他智能合约支持公共去中心化应用程序(dApp),任何人都可以在不需要任何权限的情况下与之交互。公共dApps通常是开源的,因此世界上的任何人都可以在决定是否与它们交互之前检查它们的功能。公共dApp的一个例子是去中心化借贷市场,它可能有以下术语:

  • 条款1:如果用户将抵押品存入特定的智能合约,他们可以获得高达抵押品价值50%的贷款(即,100美元的存款可以借入高达50美元的贷款)。
  • 条款2:如果用户的抵押比率(抵押物/未偿贷款价值)低于200%,则用户的抵押物将自动清算并转移给贷款人,以确保他们不会亏损。
  • 条款3:贷款人可以将资金存入特定的合同中,其他用户可以按照预定义的抵押比率从该合同中借款,同时贷款人可以获得部分利率付款。

5.智能合约的好处

大多数传统的数字协议都涉及彼此不认识的双方,这会带来其中一方不履行承诺的风险。为了解决交易对手风险,数字协议通常由大型集中机构(如银行)托管和执行,这些机构可以执行合同条款。这些数字合同可以直接在用户和大公司之间进行,也可以让大公司充当两个用户之间的可信中介。尽管这种动态允许许多合同存在,否则这些合同不会承担此类风险,但它也造成了一种情况,即较大的中央集权机构对合同施加不对称的影响。

通过区块链支付与银行系统支付时用户资金处理方式的差异

智能合约在数字协议的基础上提供了一些优势。

  • 安全性——在去中心化区块链基础设施上运行合约,确保没有攻击的中心故障点,没有可贿赂的中央中介,也没有任何一方或中央管理员用来篡改结果的机制。
  • 可靠性–通过分散的节点网络冗余处理和验证合约逻辑,提供了强大的防篡改、正常运行时间和正确性,保证合约将根据其条款按时执行。
  • 公平——使用去中心化网络托管和执行协议条款,降低了营利性中间商利用其特权地位进行寻租和虹吸价值的能力。
  • 效率–自动化协议托管、维护、执行和/或结算的后端流程意味着任何一方都不必等待手动数据输入、交易对手履行其义务或中间人处理交易。

6.智能合约用例

1.权限管理(令牌)

代币智能合约用于创建、跟踪和分配区块链网络上存在的特定数字代币的所有权。代币合约将功能编程到其发行的代币中,为持有者提供dApp(效用代币)中的效用/保险、协议中的投票权(治理代币)、公司股权(安全代币)、对唯一真实世界或数字资产的所有权主张(不可替代代币)等功能。例如,FIL代币用于支付Filecoin的去中心化存储服务,COMP代币允许用户参与Compound协议的治理。

2.金融产品(DeFi)

去中心化金融(DeFi)由应用程序组成,这些应用程序使用智能合约重新创建传统金融产品和服务,如货币市场、期权、稳定币、交易所和资产管理,以及通过无许可组合组合多种服务来创建新的金融原语。智能合约可以将用户的资金托管,并根据预定义的条件在用户之间分配。例如,BarnBridge使用智能合约为希望固定资产暴露于价格对(例如,45%代币a,55%代币B)的用户自动化交易,Aave使用智能合约以无许可和分散的方式促进借贷。

通过使用资产价格来确定用户的借款借款人,并查看贷款是否未充分抵押和是否需要清算,从而支持分散的贷款市场

3.游戏和NFT

基于区块链的游戏使用智能合约来防止游戏内动作的执行。一个例子是PoolTogether,这是一个无损失的储蓄游戏,用户将他们的资金存入一个共享池,然后将其转入货币市场,在那里赚取利息。在预定义的时间段后,游戏结束,获胜者将随机获得所有应计利息,而其他人可以提取他们的原始存款。类似地,限量版NFT可以有公平的分配模型,RPG可以使用随机性支持不可预测的战利品掉落,有助于确保所有用户都有机会获得稀有的数字资产。许多项目使用Chainlink可验证随机函数(VRF)访问随机性,这是一种随机数生成器(RNG),使用密码学来证明其不可篡改,这意味着RNG过程是可公开审核的。

7.智能合约限制

智能合约的一个固有限制是,它们运行的底层区块链是孤立的网络,这意味着区块链没有与外部世界的内置连接。没有外部连接,智能合约无法与外部系统通信以确认真实世界事件的发生,也无法访问成本高效的计算资源。与没有互联网的计算机类似,如果没有真实世界的连接,智能合约是极其有限的。例如,他们无法在执行交易前了解资产的价格,无法在支付作物保险索赔前检查月平均降雨量,也无法在与供应商结算前核实货物是否已到达。‍

因此,区块链行业正在进行的主要演变是可编程智能合约,它与区块链之外的真实世界数据和传统系统连接,扩展了智能合约逻辑中使用的输入和输出。这些混合智能合约使用称为oracle的安全中间件,将链上代码与链下基础设施相结合,例如,使用外部数据触发智能合约,或在传统支付轨道上结算链下合同。

Oracle将输入和输出连接到区块链,以创建混合智能合约

与互联网对计算机的影响类似,oracles是将新兴区块链网络与当今系统连接起来的关键,以实现互连、高效和隐私保护的智能合约,从而保持底层区块链网络的安全性和可靠性。通过启用混合智能合约,oracles极大地扩展和增强了区块链的宝贵属性,从而在更多行业和用例中基于加密真实性达成了卓越的数字协议。

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

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

相关文章

IDEA热部署插件JRebel and XRebel

IDEA热部署插件JRebel and XRebel嘚吧嘚下载安装激活配置使用嘚吧嘚 刚开始用过一段时间的eclipse,其他方面没感觉,但是eclipse的热部署真的是深得我心啊😊。 后来换了IDEA,瞬间就心动了,各个方面真的很好用&#xf…

U3D VideoPlayer播放视频和坑点

最近做的游戏里,需要先播放一段几秒钟的工作室LOGO片头,拿到的视频是AVI格式,以前没在U3D里用到过视频,本以为很简单,没想到都2022年了,U3D播放视频还这么烂。。。 插件最好用的是AVPro,除非你有大量的视频要播放,否则没必要用插件,一个是贵,另一个插件很大。 首先…

Python爬虫从入门到进阶

前言 董伟明,国内某知名Python应用网站高级产品开发工程师,《 Python Web 开发实战》作者,本书目前已经售出 17k 余本,另外也已经在台湾地区上市。在 2012 和 2014 年分别通过 2 个爬虫免试获得 2 个业界知名公司 offer&#xff…

MyBatis缓存机制之一级缓存

MyBatis缓存机制之一级缓存 前言 MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,是我们常见的持久性框架。缓存是在计算机内存中保存的临时数据,读取时无需再从磁盘中读取,从而减少数据库的查询次…

Node.js 入门教程 1 Node.js 简介

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Node.js 入门教程1 Node.js 简介1.1 大量的库1.2 Node.js 应用程序的示例1.3 Node.js框架和工具1 Node.js 简介 Node.js 是一个开源和跨平台…

子矩形计数(冬季每日一题 17)

给定一个长度为 nnn 的数组 aaa 和一个长度为 mmm 的数组 bbb。 两个数组均只包含 000 和 111。 利用两个给定数组生成一个 nmnmnm 的矩阵 ccc,其中 cijaibjc_{ij}a_ib_jcij​ai​bj​。 显然,矩阵 ccc 中也只包含 000 和 111。 请问,矩阵…

期末复习 c

作者:小萌新 专栏:C语言复习 作者简介: 大二学生 希望能和大家一起进步! 本篇博客简介:回顾之前的分支循环以及一些题目博客 [TOC](这里写目录标题分支循环选择switch casegetchar putchar 以及EOF三个C语言练习题总结…

C++智能指针之unique_ptr

C智能指针之unique_ptr前言一、unique_ptr1.1 unique_ptr类的初始化1.2 unique_ptr禁止拷贝和赋值1.3 release、reset函数1.4 向unique_ptr传递删除器1.5 unique_ptr与动态数组的使用总结前言 在C中,动态内存的申请和释放是通过运算符:new 和 delete 进行…

【无线传感器】基于Matlab实现WSN 查找两个节点之间的最短路径并发送数据

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

Linux基础内容(13)—— 进程控制

目录 1.fork函数的进程创建 1.fork返回值 2.fork返回值 3.fork调用失败 2.写时拷贝 3.退出码的知识 4.进程退出 1.退出的情况 2.正常退出 5.进程等待 1.调用系统等待函数杀死僵尸进程 2.僵尸状态与PCB的关系 3.进程阻塞等待与非阻塞等待方式 6.进程程序替换 1.替…

【网络篇】第十八篇——IP协议相关技术

目录 DNS DNS背景 域名的层级关系 域名解析过程 使用dig工具分析DNS过程 ARP DHCP NAT NAT IP转换过程 NAPT NAT技术的缺陷 如何解决NAT潜在问题 ICMP ICMP功能 ICMP协议格式 ping命令 traceroute命令 IGMP 跟IP 协议相关的技术也不少,接下来说说与IP 协议相关的重…

Docker——Prometheus监控服务治理

摘要 Prometheus是继Kubernetes之后,第二个从云原生计算基金会(CNCF)毕业的项目。Prometheus是Google监控系统BorgMon类似实现的开源版,整套系统由监控服务、告警服务、时序数据库等几个部分,及周边生态的各种指标收集…

uniapp vuex正确的打开方式

uniapp vuex正确的打开方式一、vuex与全局变量globalData的区别二、uniapp vuex使用目录结构如下1. 根目录创建vuex目录,创建index.js文件2. 模块化代码3. 在 main.js 中导入store文件4. 调用一、vuex与全局变量globalData的区别 uni-app像小程序一样有globalData&…

项目开发——【流程图】软件工程程序流程图详解《如何正确绘制项目开发流程图》

程序流程图详解 介绍:通过图形符号形象的表示解决问题的步骤和程序。好的流程图,不仅能对我们的程序设计起到作用;在帮助理解时,往往能起到"一张图胜过千言万语"的效果。 一、程序流程图基本控制结构 顺序型&#xf…

如何实现RTS游戏中鼠标在屏幕边缘时移动视角

文章目录🧨 Preface🎏 判断鼠标是否处于屏幕边缘⚽ 获取鼠标处于屏幕边缘时的移动方向🎨 控制相机在x、z轴形成的平面上移动🏓 完整示例代码🧨 Preface 本文简单介绍如何在Unity中实现即时战略游戏中鼠标在屏幕边缘的…

创新赋能合作伙伴,亚马逊云科技re:Invent科技盛宴

北京时间11月29号,亚马逊云科技年度峰会re:Invent 2022将在拉斯维加斯开幕。这场年度最重磅的云计算技术大会不仅是科技盛宴,也是亚马逊云科技与诸多客户交流互鉴的绝佳平台,今天带大家认识一下几位资深云计算用户,以及他们和re:I…

MyBatis ---- 搭建MyBatis

MyBatis ---- 搭建MyBatis1. 开发环境2. 创建maven工程a>打包方式:jarb>引入依赖3. 创建MyBatis的核心配置文件4. 创建mapper接口5. 创建MyBatis的映射文件6. 通过junit测试功能7. 加入log4j日志功能a>加入依赖b>加入log4j的配置文件1. 开发环境 IDE&a…

Linus 文件处理(四)

目录 一、前言 二、高级主题: fcntl和mmap 1、fcntl 2、mmap 3、Using mmap 一、前言 本文将简单介绍Linux文件和目录,以及如何操作它们(如何创建文件、打开、读、写和关闭,程序如何操作目录,如创建、扫描和删除目录等&…

池风水利用工具

引用 这篇文章的目的是介绍一种基于内核态内存的越界写入通用利用技术和相关工具复现. 文章目录引用简介分析调试分析漏洞利用工具使用方法工具使用效果相关引用参与贡献简介 笔者的在原作者池风水利用工具(以下简称工具)基础上进行二次开发,新增了全自动获取内核调试模块符号…

QT-QTableWidget中的cell和item的区别

文章目录QTableWidget中单击一个单元格响应不同的函数:cell和item的区别:单击单元格响应自定义函数我的错误思路:已剪辑自: https://blog.csdn.net/CCLasdfg/article/details/114691478 QTableWidget中单击一个单元格响应不同的函数&#xf…