区块链智能合约开发

一.区块链的回顾

1.区块链

区块链实质上是一个去中心化、分布式的可进行交易的数据库或账本

特征:

  • 去中心化:简单来说,在网络上一个或多个服务器瘫痪的情况下,应用或服务仍然能够持续地运行,这就是去中心化。服务和应用部署在网络上后,尽管每个服务器都有一份数据和执行程序的副本,但是没有任何一个服务器能够绝对控制数据和程序的执行过程。
  • 分布式:网络上的每个服务器或节点都互相连接在一起,服务器之间是多对多连接,而不是一对一或一对多连接。
  • 数据库:指的是存储持久化数据、用户能够及时从任何地点进行访问的地方。数据库的基本功能是数据存储和检索,同时也提供了一些管理功能,以方便高效地管理数据,如:数据导入和导出,数据备份和恢复。
  • 账本:这是一个会计专业术语。你也可以认为它是一个专门存储和检索数据的地方。账本对银行业而言很有用处。例如,Tom在他的银行账户上存入了100美元,对银行而言,需要在账本上计入一笔贷方金额。未来的某一天,Tom取回了25美元,银行不会直接把100美元修改成75美元,而是在同一个账本上,新增一笔借方金额25美元。从这个例子中可以看出,账本是一种特殊的数据存储方式,它不允许修改历史数据,要改变账户的余额只能通过新增和追加记录来实现。区块链是与账本存在共同特征的数据库,新的数据只能通过追加的方式进行存储,没有任何修改历史数据的可能。
  • 因为不能修改历史记录,所以区块链具有较高的可信任性、透明性和公正性。
  • 区块链是由区块组成的一个链条。这意味着它是由多个区块前后连接在一起的,而交易记录则是保存在每个区块的内部,采用这种方式后,这些交易记录就不可能再被更改。由于去中心化和分布式特性,区块链具有稳定性、健壮性、持久性和高可用性的特点,不存在单点故障的问题。没有单个节点或服务器能控制整个链上的数据,因此人人都能够参与其中,成为区块链社区的参与者。
1.1区块链的用途
  • 信任 :区块链可以用于创建去中 心化应用,实现数据由 人集体控制, 其中的任何一个人都没有权力去更改或删除以前的记录 即使有人确实 做到了,他产生的数据也不会被其 参与者接受
  • 自治性: 对于区块链上的应用来说,没有唯一的所有者 由于没有唯一 的所有者,也就没有人能够单独控制它 ,但是每个人却都可以通过它的 行为来参与治理过程,这就有利于建立 个不能被操控或不易诱发腐败 的解决方
  • 去中介化 :基于 块链的应用能够消除现有流程的中间环节 例如在车 辆登记 、驾照发放等场景 中, 会存 个中间角色,它承担着车辆登记和驾照发放的职 如果 于区块链来设计流程,那么这个中间角 色就没有存在的必要了,因为区块链上的数据在被确认后,驾照就会自 动签发,车辆就会被自动登记 区块链将开启一个新的时代,很多业务 不再需要中间的权威机构进行背书了
2.加密技术
2.1 散列

散列是将输入的数据转换成一个固定长度的随机字符串(散列值)的过程,但是不能从结果反向生成或识别出原始数据,因此,散列也被称为数据指纹。几乎不可能基于其散列值导出输入数据哪怕原始数据发生了一点点的变化,也将产生完全不同的散列值,这样就确保了没有人敢在原始数据上做手脚。散列还有另外一个特征:虽然输入的字符串数据可能长短不同,但产生的散列值长度是固定的。例如,使用SHA256散列算法,不论输入数据的长度大小如何,总会产生一个256个字节的散列值。当数据量很大时,这一点就非常有用了,它总能产生一个256个字节的散列值,这样可以保存下来作为证据。以太坊在很多地方使用了散列技术,它会对每一笔交易进行散列,会对两个交易的散列值进行再次散列,最终为同一区块内的每个交易产生一个根散列值。

散列还有一个重要特征,就是从数学上来看,两个不同的输入数据不会产 生同一个散列值。

在线哈希计算器:在线哈希值计算

2.2数字签名

前面我们介绍了非对称加密,它的一个重要应用就是在数字签名创建和验证时使用非对称密钥。数字签名类似于一个人在纸上手写的签名。与手写签名的作用一样,数字签名有助于识别一个人,还有助于确保信息在传递过程中不被篡改。让我们举个例子来理解数字签名。 Alice准备给Tom发送一条信息。那么问题来了,Tom如何确保收到的信息是由Alice发出来的,如何确保信息在传递过程中没有被篡改过?解决方案就是不能发送原始的信息/交易,Alice首先需要取得发送的信息的散列值,然后用她的私钥对散列值进行加密,最后,她把这个刚产生的数字签名附加在散列值后发送给Tom。Tom收到信息后,他使用Alice的公钥提取出数字签名并解密,找到原始散列值。同时,他从实际接收到的信息中提取散列值,并对两个散列值进行比较,如果两个散列值一致,那么说明信息在传递过程中没有被篡改过。 数字签名通常用于资产或加密数字货币(例如以太币)的所有者对交易进行签名确认。

身份的辨别(公钥和私钥)

确保数字不被篡改(哈希)

3.区块链和以太坊架构 

区块链与智能合约之间的桥梁:以太坊   具体详情请点击旁边以太坊的链接

以太坊是区块链,但不仅仅是区块链,它在区块链的基础上架构了一个虚拟机,可以在这个虚拟机上用以太坊指定的语言运行程序,这个指定的语言是solidty,程序即智能合约。

区块链是一种包含多个组件的体系结构,区块链独特的地方在于这些组件 的功能和相互作用 重要的组件包括 EVM ( Ethereum Virtual Machine 以太坊 虚拟机)、矿工、区块、交易、共识算法、账户、智能合约、挖矿、以太币和 gas  一个区块链网络是由大量的节点构成的,其中 部分是属于矿工的挖矿 节点,另一部分节点不挖矿但会帮助执行智能合约和交易 这些节点统称为 EVM 网络上的各个节点之间互相连接,节点之间通过 P2P 协议进行通信,默 认情况下使用 30303 端口 每个节点都维护着 个账本的实例(副本),包含链上的全部区块 由于网 络上存在大量矿工节点,为了避免节点之间的区块数据存在差异,这些节点会 持续同步区块,确保账本数据一致

以太坊虚拟机EVM是智能合约的运行环境。

以太坊相当于分散在世界各地的节点共同组成的公共电脑

3.1以太币

在以太坊这个公共电脑上运行程序就像是在网吧上网,必须要付费,这个地方不是付人名币而是以太币。以太币采用十进制的计量体系,其最小的单位是 wei 下面列出了一些计 量单位,可 以在网站 https: //g ithub.com/e thereum/we b3.js blob/ 0.15 .O/lib/utils/ utils. js#L40 上查到更多信息。

3.2gas

也可以把以太坊理解成联通全球的道路网,智能合约在上面运行就像是在这个道路上面开车,需要耗费汽油。

3.3以太坊节点

以太坊客户端是一个软件应用程序,它实现了以太坊规范,并通过点对点网络与其他以太坊客户端进行通信。不同的以太坊客户端如果符合参考规范和标准化的通信协议,就可以实现互操作。虽然这些不同的客户端是由不同的团队用不同的编程语言实现的,但它们都 "说 "着相同的协议,遵循相同的规则。因此,它们都可以用来操作和与同一个以太坊网络进行交互一个节点需要运行两种客户端软件:共识客户端和执行客户端。

  • 执行客户端(也称为执行引擎、EL 客户端或旧称“以太坊 1”客户端)侦听网络中广播的新交易,并在以太坊虚拟机中执行它们,并保存所有当前以太坊数据的最新状态和数据库。
  • 共识客户端(也称为信标节点、CL 客户端或旧称“以太坊 2”客户端)实现权益证明共识算法,使网络能够根据来自执行客户端的经验证数据达成一致。 此外还有名为“验证者”的第三种软件,它们可被添加到共识客户端中,使节点能参与保护网络安全。

作用:连接以太坊网络

在区块链和以太坊中,每个区块都连接着另外一个区块 两个区块之间是 对父子的关系,并且是 的关系,这样首尾相接就组成了 个链条 章后面会讲到区块,在接下来这张图中,我 3个区块( 区块1 区块2,区块3 )来示意 区块1 是区块1 的父区块,区块2 是区块3 的父区块 在每个 区块的头部都存储了父区块的散列值,这样就建立了父子关系

区块2 在头部存储了区块 1的散列值,区块 3在头部存储了区块2 的散列 值,以太坊有个创世区块的概念, 它就是第一个区块 这个区块是在链初次发起时·自动创建的 你也可以这样认 为,整个链条是由创世区块(通过 genesis jso 文件来生成)作为第一个区 块而开始启动的,如下图所示

3.4以太坊账户

具体详情请点击上面以太坊账户的链接

帐户是存储以太币之处。 用户可以初始化帐户,将以太币存入帐户,并将自己帐户中的以太币转账给其他用户。 帐户和帐户余额存储在以太坊虚拟机中的一个大表格中,是以太坊虚拟机总体状态的一部分。 

以太坊有两类账户(它们共用同一个地址空间):

  • 外部账户 :由公钥-私钥对(也就是人)控制
  • 合约账户 :由和账户一起存储的代码控制

外部账户的地址是由公钥决定的,而合约账户的地址是在创建合约时确定的

相同点:

每个账户都有一个键值对形式持久化存储,其中key和value的长度都是256位,我们称之为存储

3.5交易 

具体详情请点击上面交易的链接

交易是由帐户发出,带密码学签名的指令。 帐户将发起交易以更新以太坊网络的状态。 最简单的交易是将 ETH 从一个帐户转到另一个帐户。

以太坊交易是指由外部持有帐户发起的行动,换句话说,是指由人管理而不是智能合约管理的帐户。 例如,如果 Bob 发送 Alice 1 ETH,则 Bob 的帐户必须减少 1 ETH,而 Alice 的帐户必须增加 1 ETH。 交易会造成状态的改变。

 

端到端的交易

前面介绍了区块链和以太坊的一些基本知识,接下来我们介绍一个完整的端到端的交易流程,看看交易如何贯穿多个组件并保存到账本中 本例中,Sam打算发送一个数字资产(如:美元)给Mark。首先,Sam新建了一个交易,里面包括了from、to、value等字段数据,然后发送到以太网络上,该交易并没有立即写入到账本中,而是暂存到交易池中。 挖矿节点新建了一个区块,然后按照gas上限标准,从交易池中提取交易(Sam的交易也将被提取),并添加到区块中,网络上的全体矿工都在执行相同的任务。 接下来,矿工们开始争先恐后地去计算难题,在一段时间(或几秒)后,获胜者(第一个解决难题的人)会发出通知,声称他找到了答案,赢得了比赛,需要向区块链写入区块,与此同时,获胜者将答案添加到区块上并发送给其他矿工。其他矿工收到通知后,首先验证这个答案,一旦认定该答案确实有效,就立即停止自己的计算,接收这个包含了Sam的交易的区块,然后添加到他们的本地账本中。这样下来,就在链上产生了一个新的区块,它将一直跨越时间和空间而永久的存在下去。在这期间,双方的账户余额都会得到更新,最后,区块被分发复制到网络上的全部节点。这个过程如下图所示:

以太坊上支持的3 种交易类型:

1. 从一个账户向另外一个账户发送以太币 :这个账户可能是外部账户或者 合约账户

2. 智能合 外部账户在 EVM 上部署合约是通过交易的方式实现的。

使用或借助合约内的函数 如果需要执行合约内的函数去改变一个状态, 就需要一个交易,如果执行函数没有改变任何一个状态,就不需要交易

下面介绍与交易有关的一些重要属性:

  • From 账户属性说明了这个账户是交易的发起方,发送 gas 或以太币 前面 章节我们介绍过以太币和 gas 的概念 From 账户可以是外部账户或合约账户
  • To 账户属性指的是接收以太币或其 收益的账户,它可以是外部账户或合 约账户 如果是部署合约的交易,则To 字段为空
  • Value 账户属性指的是账户之间转移的以太币数量。
  • Input 账户属性指的是合约编译后被部署在 EVM 上的字节码 input 用于保存有关智能合约函数带参调用的信息 下图展示了在典型的以太坊交易 中使用智能合约函数的地方,从这个截图上看,请注意 Input 字段中包含了带 有参数的函数调用
  • BlockHash 账户属性指的是该交易所属的区块的散列值
  • BlockNurnber 账户属性指的是交易所属的区块序号
  • Gas 账户属性指的是交易的发送方支付的 gas
  • GasPrice 账户属性指的是发送方支付的 gas 价格,以 wei 为单位(在本 章前面介绍以太币的 方,提到过 we 的概念) 总的 gas 消耗=gas数量* gas 价格
  • Hash 账户属性指的是交易的散列值
  • Nonce 账户属性指的是交易的编号,它由发送方在当前交易之前产生
  • Transaction nde 账户属性指的是区块中当前交易的流水号
  • Value 账户属性指的用 wei 计算的传递的以太的数量
  • v,r,s属性指的是数字签名和交易的签名
3.6区块 

区块是指一批交易的组合,并且包含链中上一个区块的哈希。 这将区块连接在一起(成为一个链),因为哈希是从区块数据中加密得出的。 这可以防止欺诈,因为以前的任何区块中的任何改变都会使后续所有区块无效,而且所有哈希都会改变,所有运行区块链的人都会注意到。

 

区块有很多属性,为了便于掌握关键内容,下面只介绍一些重要的部分

  • Difficulty 属性指的是矿工为了挖到这个区块而需要面对的计算难度
  • GasLimit 属性指的是区块允许的 gas 总量上限 它决定了区块中能包含 多少个交易
  • Gas Used 属性指的是区块中的交易实际消耗的 gas 数
  • Hash 属性指的是这个区块的散列值
  • Nonce 属性指的是一个数字,它是解决难题的答案
  • Miner 属性指的是矿工的账户,可以用 co in base etherbase 的地址
  • Number 属性指的是该区块在区块链上的序号
  • ParentHash 属性指的是父区块的散列值
  • ReceiptsRoot stateRoot TransactionsRoot 属性指的是在前 面的挖矿流程中提到的 merkle树
  • Transactions 属性指的是区块中的交易组成的 个数组
  • TotalDifficulty 属性指的是区块链的整体难度
3.7存储,内存和栈

以太坊虚拟机有三个区域来存储数据:存储(storage),内存(memory)和栈(stack)

  •  存储:每个账户有一块持久化内存区称为存储。存储是将256位字映射到256位字的键值存储区。在合约中枚举存储是不可能的,且读存储的是相对开销很高,修改存储的开销甚至更高。合约智能读写存储区内属于自己的部分。
  • 内存:合约会试图为每一次信息调用获取一块被重新擦拭干净的内存实例。内存是线性的,可按字节级寻址,但读的长度被限制为256位,而写的长度可以是8位或者256位。当访问(无论是读还是写)之前访问过的内存字(word)时(无论是便宜到该字内的任何位置),内存将按字进行扩展(每个字是256位)。扩容也将消耗一定的gas。随着内存使用量的增长,其费用也会增高(以平方级别)。
  • 栈:所有计算都在一个被称为栈(stack)的区域执行。栈最大1024个元素,每个元素长度是一个字(256位)。对栈的访问只限于其顶端

 二.智能合约的介绍

 1.合约

合约是经过双方或多方同意,约定立即执行或在将来执行一项交易的法律文件。因为合约是法律文件,所以它具有强制性和可执行性。合约应用的场景很多,例如:一个人和保险公司签订合同购买健康险,一个人从另外一个人手里购买一块土地,个公司出售股权给另外一家公司

2.智能合约

具体详情请点击上面智能合约的链接

智能合约只是一个运行在以太坊链上的一个程序。 它是位于以太坊区块链上一个特定地址的一系列代码(函数)和数据(状态)。

智能合约也是一个以太坊帐户,我们称之为合约帐户。 这意味着它们有余额,可以成为交易的对象。 但是,他们无法被人操控,他们是被部署在网络上作为程序运行着。 个人用户可以通过提交交易执行智能合约的某一个函数来与智能合约进行交互。 智能合约能像常规合约一样定义规则,并通过代码自动强制执行。 默认情况下,您无法删除智能合约,与它们的交互是不可逆的。

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

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

相关文章

一款开源.NET WPF界面库介绍

一款开源.NET WPF界面库介绍 这是一个WPF版的Layui前端UI样式库,该控件库参考了Web版本的LayUI风格,利用该控件库可以完成现代化UI客户端程序,让你的客户端看起来更加简洁丰富又不失美感 如何使用 步骤一 : 添加LayUI.Wpf Nuget包; Inst…

物业智能水电抄表管理系统

物业智能水电抄表管理系统是物业管理行业的关键技术之一,其结合了智能化、远程监控和数据分析等功能,为物业管理公司和业主提供了高效、精准的水电抄表管理解决方案。该系统具有多项优势,能够提升物业管理效率,降低成本&#xff0…

苍穹外卖-day12 - 工作台 - Apache POI - 导出运营数据Excel报表

课程内容 工作台 Apache POI 导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系统运营…

当Web3叙事寒冬到来,游戏是否是冬日里的“一把火”?

出品|欧科云链研究院 作者|Jason Jiang 以太坊创始人Vitalik在2019年曾说:金融与游戏会是区块链最先落地的场景。 在DeFi金融创新驱动上个周期后,沉寂近两年的Web3游戏板块,如今似乎也在复苏。无论是频繁获得融资&a…

【推荐算法系列五】DeepFM 模型

文章目录 参考资料Sparse FeaturesDense EmbeddingsFM LayerHidden LayerOutput Units 优缺点DeepFM 的优点DeepFM 自身的缺点。 参考资料 DeepFM 中关于 整个发展过程, FM, PNN, wide&deep 的描述很给力。 所以FM在其中的含义就是low-order, deep 就是所谓的 …

IT廉连看——Uniapp——页面样式与布局

IT廉连看——Uniapp——页面样式与布局 目标: 了解样式与布局的规范 熟记px和rpx的区别 全局样式与index样式的区别 一、查看uniapp框架简介——尺寸单位 px尺寸单位的使用是贯穿始终的。 [IT廉连看] 二、尺寸单位——实操效果 1、打开Hbuilder X并进入in…

type may not be empty [type-empty]

原因是使用了规范commit信息的工具,你的提交信息不符合规范,所以被拒绝了 commit规范工具 commitlinthusky 解决方式一: 修改提交信息, 使其符合规范 git commit -m "feat: 新功能"使用Git Gui的使用以下格式写提交…

每日一题:最小生成树

板子&#xff1a; 最小生成树【模板】最小生成树 - 洛谷 代码实现&#xff1a; 稠密图 #include<bits/stdc.h> using namespace std; const int N510,INF0x3f3f3f3f; int n,m; int g[N][N],dis[N]; bool st[N]; int prim(){memset(dis,0x3f,sizeof dis);int res0;for…

SpringBoot中时间对象区分及相关处理

目录 1 前言 2 常见时间对象的区分 2.2 LocalTime 2.3 LocalDateTime 3 控制类接收参数的细节 4 时间对象间的转化 1 前言 本文主要是目的是让大家能够区分Java中常见时间对象&#xff0c;并熟悉使用细节及它们间的转化。 2 常见时间对象的区分 ​​​​​2.1 LocalDa…

Aethir推出其首次去中心化AI节点售卖

Aethir&#xff0c;去中心化GPU云基础设施领导者&#xff0c;宣布其备受期待的节点销售。Aethir是一家企业级的以AI和游戏为重点的GPU即服务提供商。Aethir的去中心化云计算基础设施使GPU提供商能够与需要NVIDIA的H100芯片提供强大AI/ML任务支持的企业客户相连接。 此外&#x…

YOLOv6-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

SQLPro Studio:数据库管理的革命性工具 mac版

SQLPro Studio是一款强大的数据库管理和开发工具&#xff0c;它旨在提供高效、便捷和安全的数据库操作体验。无论是数据库管理员、开发人员还是数据分析师&#xff0c;SQLPro Studio都能满足他们在数据库管理、查询、设计和维护方面的需求。 SQLPro Studio mac版软件获取 首先…

历史新知网:寄快递寄个电脑显示器要多少钱?

以下文字信息由&#xff08;新史知识网&#xff09;编辑整理发布。 让我们赶紧来看看吧&#xff01; 问题1&#xff1a;快递寄电脑显示器要多少钱&#xff1f; 此物有多重&#xff1f; 顺丰寄就可以了&#xff0c;但是必须是原包装的&#xff0c;不然不好寄。 问题2&#xff1…

爆火的1分钟声音克隆GPT-SoVITS项目 linux系统 ubuntu22.04安装2天踩坑教程

原项目地址&#xff1a;https://github.com/RVC-Boss/GPT-SoVITS 1分钟素材&#xff0c;最后出来的效果确实不错。 1. cuda环境安装 cuda环境准备 根据项目要求在cuda11.8和12.3都测试了通过。我这里是用cuda11.8 cuda11.8安装教程&#xff1a; ubuntu 22.04 cuda多版本和…

vscode——本地配置(C和C++)(1)

本地配置C和C&#xff08;1&#xff09; 什么是vscodevscode和visual studio的区别vscode的本地配置汉化 vscode配置C和C环境创建全局变量安装插件编写C或C程序生成task.json文件生成.exe文件 今天我们来看看一个开发工具——vscode。 什么是vscode 在正式了解vscode之前&…

2024年腾讯云4核8G12M配置的轻量服务器同时支持多大访问量?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

CPU处理器NUMA架构简介

在实际工作中&#xff0c;经常遇到服务器是否开启NUMA、NUMA绑定几颗Core、跨NUMA节点访问的性能下降等等话题。那么NUMA作为非一致性内存访问的多处理器架构&#xff0c;在架构上有什么特性、与SMP架构有哪些不同&#xff0c;调优策略等&#xff0c;本文将作简要介绍。 1、CPU…

一款兼容Win和Mac的iOS设备管理软件iMazing 3 for Windows新功能介绍

iMazing 3 for Windows是一款兼容Win和Mac的iOS设备管理软件。iMazing 3 for Windows能够将音乐、文件、消息和应用等数据从任何 iPhone、iPad 或 iPod 传输到 Mac 或 PC 上。 使用iMazing 3 for Windows独特的 iOS 备份功能保证数据安全:设定自动无线备份时间并支持快照;将备份…

SpringCloud微服务-Ribbon负载均衡

Ribbon负载均衡 文章目录 Ribbon负载均衡1、负载均衡实现原理2、负载均衡策略3、修改负载均衡规则4、饥饿加载 1、负载均衡实现原理 负载均衡实现的流程图&#xff1a; 回到了上个小节所讲述的LoadBalance注解&#xff0c;此注解的含义就是实现对RestTemplate服务的所有操作进…

Windows系统x86机器安装(麒麟、统信)ARM系统详细教程

本次介绍在window系统x86机器上安装国产系统 arm 系统的详细教程。 注:ubuntu 的arm系统安装是一样的流程。 1.安装环境准备。 首先,你得有台电脑,配置别太差,至少4核8G内存,安装window10或者11都行(为啥不能是Window7,你要用也不是不行,你先解决win7补丁更新问题)。…