智能合约开发基础知识:最小信任机制、智能合约、EVM

 

 苏泽

大家好 这里是苏泽 一个钟爱区块链技术的后端开发者

本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~


专栏的前面几篇详细了介绍了区块链的核心基础知识 有兴趣学习的小伙伴可以看看http://t.csdnimg.cn/fCD5E关于区块链的基本组成、加密原理、共识机制都用最通俗易懂的方式讲解了 希望能够帮助大家学习

下面是本文的正片

智能合约

简而言之 合约 也就是“约定” 既然谈到了 约定 很显然就想到了“信任”  我们不可能跟一个言而无信的人进行约定 人是如此 计算机也是如此 区块链更是如此

提到了信任 就不得不提前  最小信任机制

最小信任机制

这里有以太坊对最小信任机制的官方描述 可以在油管子里看看视频 当然了要是进不去或者嫌麻烦 这里用最简单的方式让你理解

在一个正常运行的社会中,人与人之间拥有足够的信任,可以支撑有效的社会和经济活动。然而,社会的信任水平不一定与事实划等号。一旦人们发现自己对社会运行机制的认知与事实存在偏差,信任就会出现裂痕,并且不可避免地导致更大的分歧,人们最终也会要求彻底改变整个运行机制。

当前社会正处于这样一场危机中,用户和机构之间的实际关系与用户认知存在偏差,比如人们对合约中法律责任的认知存在偏差,以及机构对外声称的情况与实际情况存在偏差。

这是什么意思呢  最简单我们举个现实的例子 那就是银行 啊不对 是老王办的某家投资公司 老王是个奸商,他对外宣称“把钱投给我 我让你躺着赚钱”  但事实上 他拿着客户给他的钱去巴厘岛度假了  只留下一堆包装工厂在原地风中萧瑟    

上述的例子就很直白的表述出用户和机构之间的实际关系与用户认知存在偏差 那这样的事情怎么避免呢?

很简单。由于代码执行和验证不依赖对陌生人的信任或不可控的变量,因此代码可以严丝合缝地执行。区块链采用加密技术实现信任最小化, 简单来说 就是让代码站在 用户与用户之间、 或是用户与机构 、机构与机构之间。这样就能很好的实现最小信任机制

最小信任机制的关键是将信任分散到多个参与者之间,以减少对单一实体的依赖。 简单来说就是找一堆人盯着老王 不让他卷你的钱跑路 以此提高你和老王之间 交易的可靠性  而这里的“很多”则恰好体现了 分布式的应用

好了,既然这个最小信任机制那么高级 也那么有价值 他应该靠什么实现呢?

很好 那就是智能合约

智能合约

智能合约(Smart Contract)是一种基于区块链技术的自动化合约。它是一段程序代码,可以在区块链上执行、验证和执行合约的条款和条件。

智能合约的执行过程:

  1. 创建合约:首先,有一个人(创建者)使用一笔特殊的交易(称为合约创建交易)来部署合约。这笔交易包含了合约的字节码(即合约的编译后代码)和其他必要参数。在这笔交易中,创建者向合约地址发送以太币(ETH),作为合约的初始资金。

  2. 合约创建交易:合约创建交易被广播到整个以太坊网络,并被矿工包含在一个区块中。

  3. 区块链确认:矿工通过执行交易中的合约字节码创建新的区块。这是合约在以太坊网络中的创建过程。

  4. 触发合约:一旦合约被创建,任何人都可以通过向合约地址发送交易来调用合约。这笔交易包含了调用合约的数据,即要执行的合约函数及其参数。

  5. 合约执行:当这笔交易被矿工打包并写入区块链后,以太坊网络中的每个节点都会执行合约的字节码,模拟合约的执行过程。这确保所有节点达成相同结果。

作为合约 其实本质上就是代码 既然是代码 他就有许多种编程语言可以选择

  • Solidity:目前 DeFi TVL (DeFi 锁定的通证价值)占比最大的语言。是一种高级语言,类似于 JavaScript。
  • Vyper:目前 DeFi TVL 排名第二的语言。也是一种高级语言,类似于 Python。
  • Huff:一种类似于汇编的底层语言。
  • Yul:一种类似于汇编的底层语言,内置于 Solidity

你可以选择自己喜欢的  但如果你是面向市场 建议还是选solidity(同时也是本篇专栏的重点)根据 DefiLlama 的数据,截至目前,在 DeFi 领域,Solidity 智能合约获得了 87% 的 TVL 

因为Solidity 是一种面向对象的编程语言,用于在以太坊和其他区块链上来编写智能合约。 Solidity 深受Java、 C++、Python 和 JavaScript 的影响,并且专为 EVM (待会会详细说这个)而设计。

  

按照上面的思路 我们开心的学完solidity 就能愉快的编写合约啦  但是 我们需要什么来执行?

EVM 

EVM是一个计算引擎,有助于智能合约的部署和操作。没有EVM,就不可能在以太坊协议上执行软件程序。因此,EVM是以太坊核心架构的关键部分。

  

简而言之就是执行合约代码的地方

EVM是图灵完备的,因为它可以用于执行各种复杂度的计算。这就是以太坊与比特币的区别,因为比特币是图灵不完整的,限制了其功能。

比特币的主要功能是“分布式账本”,它规定了价值转移的规则。除了处理价值转移,以太坊(通过EVM)还支持智能合约的部署。因此,以太坊被描述为“分布式状态机”。

“State”(状态)是指在任何时间点有关系统的信息。在以太坊中,状态指的是特定时刻存在的地址、账户余额和智能合约代码。每个事务都会导致以太坊的状态发生变化(状态转换),这种变化会反映在整个网络中。

到了这里我们发现我们可以跟在我们自己部署的区块链上面执行代码了 但这场游戏显得不那么有趣  因为这是一场单机游戏  我们发现如果只到了这里 我们仅仅只是换了个编程语言 并没有做什么实际的事情

所以就有了预言机

Chainlink预言机

区块链为什么需要预言机?

区块链上的智能合约和去中心化应用(Dapp)对外界数据拥有交互需求。也就是说 区块链需要跟现实世界进行交互 就必须经过 预言机的处理

预言机就是一种单向的数字代理,可以查找和验证真实世界的数据,并以加密的方式将信息提交给智能合约。预言机就好比区块链与现实世界的桥梁。

  

预言机的原理

  1. 数据获取过程:预言机的数据获取过程通常包括以下步骤:

    • 智能合约发起数据请求:智能合约向预言机发送数据请求,指定需要获取的数据类型和参数。
    • 预言机获取数据:预言机根据智能合约的请求,从外部数据源中获取相应的数据。
    • 数据验证和处理:预言机对获取的数据进行验证和处理,确保数据的准确性和完整性。
    • 数据提交到区块链:预言机将处理后的数据通过提交事务/交易的方式,将数据提交到区块链上,供智能合约使用。

那Chainlink是什么?

Chainlink 是一个较为完美的去中心化预言机项目 下一篇文介绍预言机的 详细介绍及其入门

http://t.csdnimg.cn/bP87E

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏便携式EL检测仪是什么?—科技助农

光伏便携式EL监测仪是一种专门用于检测光伏电池组件性能的高效、实用的设备。它利用电致发光(Electroluminescence,EL)原理,通过检测光伏板在受到光照后产生的电流所激发出的光线,来评估光伏板的性能。这种设备通常具有…

Linux搭建我的世界(MC)整合包服务器,All the Mods 9(ATM9)整合包开服教程

Linux使用MCSM面板搭建我的世界(Minecraft)整合包服务器,MC开服教程,All the Mods 9(ATM9)整合包搭建服务器的教程。 本教程使用Docker来运行mc服,可以方便切换不同Java版本,方便安装多个mc服版本。 视频教程:https:…

算法的渐进时间复杂度

T(n) = O(F(n)) T(n):Time 渐进时间复杂度 O:正比例关系 F(n):代码执行次数 只要代码执行的次数越来越多 所耗费的时间也就越来越高 常见的5种: O(n^2) O(n logn) O(n) O(logn) O(1):不管重复多少次1次也是这个时间,10次也是这个时间。 时间复杂度排序:由小到…

C语言指针与数组(不适合初学者版):一篇文章带你深入了解指针与数组!

🎈个人主页:JAMES别扣了 💕在校大学生一枚。对IT有着极其浓厚的兴趣 ✨系列专栏目前为C语言初阶、后续会更新c语言的学习方法以及c题目分享. 😍希望我的文章对大家有着不一样的帮助,欢迎大家关注我,我也会回…

我记不住的那些命令-xxdod

背景: 这里记录一下具体的xxd和od命令参数和使用方法,我想我肯定是记不住这些参数的。 零、文件 我们这里有一个示例文件README.txt,内容如下图所示: 一、xxd(查看、编辑二进制文件) 1. 十六进制显示(默认) 我们发现上面的显…

使用代理ip后访问网站仍然被拒该怎么办

目录 前言 一、代理IP被网站封锁 二、代理IP的质量不佳 三、代理设置不正确 总结 前言 在使用代理IP之后仍然被网站拒绝访问可能是由于多种原因引起的。这些原因包括代理IP被网站封锁、代理IP的质量不佳、代理设置不正确等。下面将详细介绍如何解决这些问题。 一、代理I…

代码学习记录16

随想录日记part16 t i m e : time: time: 2024.03.11 主要内容:今天的主要内容是二叉树的第五部分,主要涉及最大二叉树;合并二叉树;二叉搜索树的搜索;验证二叉搜索树。 654.最大二叉…

使用docker-compose部署Redis集群

一、部署三主三从的Redis集群 分别为6个节点建立挂载目录,每个目录下建立数据、配置、日志文件夹。 docker-compose内容如下: version: 3 services:redis1:image: redis:6.2.3restart: alwaysports:- "6379:6379"- "16379:16379"v…

Spring揭秘:ClassPathScanningProvider接口应用场景及实现原理!

技术应用场景 ClassPathScanningCandidateComponentProvider是Spring框架中一个非常核心的类,它主要用于在类路径下扫描并发现带有特定注解的组件,支持诸如ComponentScan、Component、Service、Repository和Controller等注解的自动扫描和注册。 ClassP…

.NET开源快速、强大、免费的电子表格组件

今天大姚给大家分享一个.NET开源(MIT License)、快速、强大、免费的电子表格组件,支持数据格式、冻结、大纲、公式计算、图表、脚本执行等。兼容 Excel 2007 (.xlsx) 格式,支持WinForm、WPF和Android平台:ReoGrid。 项…

普发Pfeiffer TPG256A MaxiGauge 真空计控制器接口通讯针脚等详情见图目录

普发Pfeiffer TPG256A MaxiGauge 真空计控制器接口通讯针脚等详情见图目录

强化学习中SARSA(State-Action-Reward-State-Action)和Q-learning的区别

SARSA(State-Action-Reward-State-Action)和Q-learning是两种经典的强化学习算法,它们都用于学习最优策略以使智能体在一个环境中获得最大的累积奖励。它们之间的主要区别在于它们更新动作值函数(Q值函数)的方式以及其…

SwiftUI组件-DatePicker

SwiftUI组件-DatePicker 本文记录一下SwiftUI组件-DatePicker import SwiftUIstruct DatePickerBootCamp: View {State var selectedDate: Date Date()var dateFormatter: DateFormatter {let formatter DateFormatter()formatter.dateStyle .shortformatter.timeStyle .…

使用kill()函数向进程发送信号

本片文章的学习记录总结来源于:https://www.bilibili.com/cheese/play/ep182660?csourcecommon_hp_history_null&t11&spm_id_from333.1007.top_right_bar_window_history.content.click 通常在Linux系统中,可以使用 kill or killall 命令向指定…

OpenCASCADE开发指南<十二>:OCC创建三维瓶子模型

在OpenCASCADE有一个例程,在 官方帮助网站中可以找到。程将教你如何使OpenCASCADE的API来进行三维建模。教程的目的不是描述所有的类,而是帮助你思考如何将OpenCASCADE作为一种工具。 1 概述 利用OpenCASCADE的API创建一个三维瓶子,形状如下…

如何在Linux部署DataEase数据分析服务并实现无公网IP远程分析内网数据信息

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

IBM:《2024年消费者调研:无处不在的人工智能彻底变革零售业》

1月17日,IBM商业价值研究院最近发布了第三份两年一度的消费者调研报告。 这项名为《无处不在的人工智能彻底改变零售业:客户不会等待》的报告,对包含中国在内的全球近20000名消费者进行了调研,相关结果反映了消费者对零售体验的普…

【Python】进阶学习:一文了解NotImplementedError的作用

【Python】进阶学习:一文了解NotImplementedError的作用 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望…

2020-11-08 字符串指定位置倒序输出

缘由https://bbs.csdn.net/topics/398165677 //字符串指定位置倒序输出缘由https://bbs.csdn.net/topics/398165677char aa[] "abcABCabc\n";int a 3, b 5, c 0, d b;while (aa[c] ! \n)if (c < a || c > b)cout << aa[c]; else if(d > a) cout …

目标检测——YOLOv4算法解读

论文&#xff1a;YOLOv4&#xff1a;Optimal Speed and Accuracy of Object Detection 作者&#xff1a;Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/pdf/2004.10934.pdf 代码&#xff1a;https://github.com/AlexeyAB/darkne…