当前位置: 首页 > 编程日记 > 正文

区块链和智能合约的关系

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。
在这里插入图片描述

尽管比特币(Bitcoin)和以太坊(Ethereum)是经常被一起提及的两个词,但实际上,比特币与以太坊有着很大的区别。它们唯一的共同点是,以太坊也是一个在区块链之上运行的加密资产。

与比特币仅仅是一个加密货币不同,以太坊还有很多其他特性。正是这些特性,才使得以太坊成为了一个去中心化的超级电脑。

在理解 以太坊 之前,我们必须要理解区块链是如何工作的。如果你已经了解了区块链,或者读过 理解区块链终极指南,可以直接进入下一节。

什么是区块链?

简单点说,区块链就是一个数据库。它是一个不断增长的数据库,里面存储着特定类型的数据,并且有着一些独特的属性:

一旦数据被存储到数据库中,它就永远也无法再被修改或是删除。区块链上的每一条记录都是永久存在的。

这个数据库,并不是由一个单一的个人或是组织维护,而是由成千上万的人在共同维护,其中的每个人都有着一份数据库的拷贝。

为了理解为什么几个人能够持有一份拷贝,并且能够与其他人进行同步,让我们来假设现在网络里面有 10 个人,每个人的面前都有一个空的文件夹,并且有着一页空的纸。无论何时,网络中任何一个人做了一些事情,比如转账,他们必须要将这件事告诉网络里面的其他人。

每个人都会在纸上记录这件事,直到填满这张纸。这个时候,每个人都必须通过解决一个数学难题来封装这页纸。通过解决数学难题,保证了每个人手中的纸都有着同样的内容,并且无法被修改。谁第一个解出了题,谁就会得到一定数量的加密货币的奖励。

一旦封装完毕,这一页就会被加到文件夹里面,然后拿出新的一页,继续重复上述过程。

随着时间不断增长,这些包含了重要记录(也就是交易,transaction)的页(也就是区块,block)不断地被加入到文件夹(链)里面,最终形成了数据库(区块链)。

区块链存储了什么?

区块链可以用于存储各种类型的数据,它所存储的数据,赋予了区块链价值。比特币区块链存储的是金融交易,因此,看起来像是美元或者英镑这样的货币。除了跟美元所承载的功能以外,比特币没有任何额外的功能。但是,以太坊则不同。

以太坊不仅仅是一个像美元,英镑或者比特币一样的货币。以太坊的目标不仅是成为一个货币,更是成为下图中的事物:

以太坊实际是一个巨型电脑!但是,它是一个非常慢的电脑 – 大概比今天的普通电脑慢上 100 倍,并且非常昂贵。“以太坊电脑” 有着跟 90 年代智能手机 类似的境遇。除了一些非常简单的事情以外,它几乎做不了任何事情。

这听起来好像并不怎么吸引人,那么,为什么以太坊还有这么多人趋之若鹜呢?这是一个非常好的问题。不夸张的说,以太坊正在席卷整个世界,因为它是一个完全去中心化的电脑,分布在世界各地。理解以太坊区块链是如何工作的,就会看出它是如何承担了一个世界电脑的角色。

以太坊是如何工作的?

与其他所有的区块链一样,以太坊需要数以千计的人在他们的个人电脑上运行一个软件来支撑整个网络。网络中的每个节点(电脑),运行一个叫做以太坊虚拟机(Ethereum Virtual Machine, EVM)的东西。可以把 EVM 想象成是一个操作系统,它能够理解并且执行用以太坊上特定的编程语言编写的软件。由 EVM 所执行的软件或者应用叫做 “智能合约(Smart Contract)”。

为了在这台世界电脑上做一些事情,你需要进行付出一定的费用。但是,你并不是付美元或者英镑这样普通的货币。而是通过叫做以太(ether,ETH)的以太坊网络原生的加密货币,来支付相关费用。以太跟比特币几乎一模一样,唯一不同的是它被用于支付在以太坊上执行智能合约的费用。

无论是一个人,还是一个智能合约,都被视作为以太坊上的用户(user)。一个人可以以太坊上做什么,一个智能合约就可以做什么。

智能合约看起来就跟网络的其他任何人一样。它们都可以发送或者是接收以太,就跟其他的货币一样。

但是智能合约又不是完全跟人类相同。跟人类用户不同的是,智能合约也可以执行一个预先定义好的计算机程序来执行各种操作,执行的操作可以根据事件进行触发。为了感受一下智能合约的威力,让我们来考虑一个例子:

智能合约的威力

假设你和我对明天的天气进行打赌,我打赌明天是晴天,但是你打赌是雨天。双方同意输的一方必须给赢的一方 100 美元。那么,我们如何才能够做到这一点,并且确保输的一方不会耍赖呢?我可以想到三种不同的方式:

  1. 信任对方

最简单的方式是信任对方。如果我们是老朋友了,那么信任对方是非常容易的。我知道你住哪儿,你也知道关于我的各种糗事。但是如果我们是完全不认识的陌生人,事情就会变得复杂的多。我没有理由去信任你,你也没有理由去信任我。

  1. 签一个法律协议

另一个貌似可行的方案是,将我们的赌约正式形成一个有法律效力协议。我们双方签署一个定义了赌约所有细节的协议 – 包括如果输的一方违反协议会怎样。

这个协议将会使得我们有义务付给赢的一方,但是它没有任何实用性,因为通过合法途径强制协议执行的成本,要比这个赌约的价值高得多。

  1. 请一个共同的朋友帮忙

我们可以找一个双方都信得过的朋友,然后各给这个朋友 100 美元进行保管。第二天,他会检查天气,然后把全部的 200 美元给打赌赢的一方。非常简单和方便,除了有一点:如果这个双方都信任的朋友把钱卷走了怎么办?

现在,我们有了三种不同的方案来实施赌约,但是每种方案都有缺点:

因为是陌生人,所以我们无法信任彼此。

强制执行一个协议是如此的昂贵,以至于不具有任何实用性。

求助一个共同的朋友同样又会遇到信任的问题。

以太坊的智能合约就是为了解救这个问题。一个智能合约就像是可信赖的共同的朋友,只不过是用代码写的而已。我们可以在以太坊上写一个合约,这个合约从我们双方获得 100 美元的输入,然后在第二天,通过开放的天气 API 来检查天气,并将所有的以太转给赢的一方。

一个合约写好以后,就无法再被编辑或者修改。因此,你可以保证无论合约的内容是什么,它都会无条件执行。

但是,智能合约是如何执行?跟区块链又有什么关系呢?

智能合约是如何与区块链关联的?

无论智能合约何时被执行,它都会在一个区块上被记录为一个交易。概括来讲,一笔以太坊上的交易看起来就像是这样:

除了最后的 Data,其他字段相信大家一眼就能看出来是干什么的。也正是这个 data 字段,才使得以太坊与众不同。data 用于记录智能合约的创建和执行,就像记录交易一样。在以太坊区块链上,任何一个块都可能包含以下三种交易:

  1. 从一个人转移到另一个人的普通交易

这些普通交易,就像是比特币交易。如果你直接发送以太给你的朋友,那么 data 字段就是空的,这样的交易就是普通交易。

  1. 只有发送方却没有接收方

如果一笔交易中没有接收方,这意味着此次交易是用 data 字段的内容在网络中创建一个智能合约。data 字段包含了代码,这些代码就像是网络中的其他用户一样。

  1. 将以太转到一个智能合约

无论何时,只要一个用户(或是一个智能合约)想要执行一个智能合约,他/她/它 都会创建一个智能合约的交易,并在 data 字段放置执行指令。

与其他区块链一样,无论上面提到的三种事件何时发生,都会被公布到网络中,并且网络中的每个人都会对它进行记录。除了记录,每个节点还会执行智能合约,来使得他们的 EVM 状态与网络的其他部分同步。

每个节点都执行软件的一部分,因此,使得整个网络像一个巨大(但是缓慢)的分布式电脑。每次无论多么小的执行,都会被记录到区块链上,永久存在。

等一下,Gas 是什么东西?

如果用户想要使用和执行智能合约,就必须要为执行该智能合约付出一定费用。这笔费用是给了实际花费了内存,存储,计算和电力等资源来执行合约的节点。

为了计算智能合约的费用,合约中的每条语句都有收费标准。比如,如果执行的语句用到了节点的内存,这个语句会有一个价格。如果执行一个语句用到了节点的硬盘存储,这些语句又是另一个价格。在这里,定义成本的单位就叫做 Gas。最终,Gas 会通过汇率转换成以太(ETH)。

无论何时执行一个智能合约,你都必须要定义一个可以花费的 Gas 的最大值。当智能合约执行完成,或是达到了 Gas 的限额,就会停止执行。这是为了避免在智能合约中出现无限循环,防止出现一些反复执行的语句导致程序停滞。

因为程序员的一些错误,很可能会导致这样的事情发生。所以每次重复执行时,都会消耗掉一些分配的 Gas,因此使得不会出现无限循环这样的事情。没有必要因为程序员的错误,导致一个节点在执行时崩溃。使用 Gas 就解决了这个问题。

这就是以太坊

以太坊不仅仅是一个用于交易的加密货币,它的实际价值在于其目的 – 以太坊的目的,是为了让人们使用由几千个节点支撑的分布式世界电脑。

当然,由于每条语句必须被网络的中每个节点所执行,去中心化的分布式电脑会变得很慢,而且很贵。不过,这里所说的慢是跟谁相比较呢?是跟更快,但是由中心化控制的服务器。

为了能够享受中心化电脑带来的低成本,我们交出了我们的控制权。但是如果中心化服务器宕机或是被黑客攻击,那么所有与它连接的客户端都会挂掉。而一个去中心化的分布式电脑,只有在每个节点都停止工作的情况下,才会挂掉。换句话说,这使得它永远不会宕机。无论在哪里,只要有网络,就有以太坊。

相关文章:

repo同步代码_iTOP-4412开发板android4.0代码下载和编译

Android4.0 源码可以从光盘,网盘获取稳定版本,也可以从 GitHub 下载我们的开发版本。GitHub 仅提供源码下载,不提供二进制下载,二进制文件存放在光盘和网盘中。基于迅为4412开发板6.3.1.1 repo 下载android 代码管理不同于 uboot,…

vue项目构建实战基础知识:SPA理解/RESTful接口介绍/static目录配置/axios封装/打包时map文件去除...

一、SPA 不是指水疗。是 single page web application 的缩写。中文翻译为 单页应用程序 或 单页Web应用,更多解释请自行搜索。 所有的前端人员都应该明白我们的页面的 url 构成:http://www.fengcms.com/index.html?namefungleo&old32#mylove/is/wo…

神奇的输入 while(cin....)如何在遇见换行之后进入下一层循环读入

1 cin>>m>>n;2 for(int i1;i<m;i){4 int x0;5 char ch ;6 while(ch!10) //在遇到换行之后进入下一层循环读入。7 {8 x;9 cin>>c[x]; 10 chgetchar(); 11 } 神奇的输入。 get skill&#xff01;转载于:https://www.cnblogs.com/zyker/p/588…

区块链中的“智能合约”有何应用?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 如刺金般闪耀的区块链时代&#xff0c;投资者的热潮还将持续升温&#xff0c;与此同时金融的大佬已经开始注意到区块链应用落地场景的实现&#xff…

米勒罗宾素性测试(Miller–Rabin primality test)

1 #include<iostream> //该程序为哥德巴赫猜&#xff08;想输出所有的组合&#xff09;2 #include<cmath>3 #include<cstdlib>4 #include<ctime>5 #include<cstdio>6 7 using namespace std;8 9 typedef unsigned long long ull; 10 typedef u…

Linux Linux程序练习十一(网络编程大文件发送UDP版)

//网络编程发送端--大文件传输&#xff08;UDP&#xff09; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h>#include <sys/types.h> #include <sys/socket.h> #include <n…

iic通信原理_电子知识之IIC通信原理和协议分享

IIC 的一些特征&#xff1a; 两条总线&#xff1a;串行数据总线(SDA)和串行时钟总线(SCL)真正的多主机总线连接到相同总线的ic数量只受到总线的最大电容400pF限制。串行8位双向数据在标准模式下可达100K bit/s快速模式400K bit/s,高速模式下3.4Mbit/s.数据有效性规定&#xff1…

以太坊核心概念

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 以太坊虚拟机&#xff08;EVM&#xff09; 以太坊虚拟机&#xff08;EVM&#xff09;是以太坊中智能合约的运行环境。它不仅被沙箱封装起来&#…

使用rest_framework写api接口的一些注意事项(axios发送ajax请求)

1. 类继承GenericAPIView&#xff0c;定义queryset 印象深刻的事&#xff1a;由于原来对于继承关系不太清楚&#xff0c;写接口 APIView/泛指GenericAPIView不太关注queryset没有设置渲染器&#xff1a;默认 [JSONRenderer,BrowsableAPIRenderer]BrowsableAPIRenderer&#xff…

iir数字滤波器_手把手教系列之一阶数字滤波器设计实现(附代码)

[导读] 前面分享了 IIR/FIR/mean/梳状数字滤波器的具体设计实现&#xff0c;这几种使用起来或许觉得计算量大&#xff0c;相对复杂。实际工程应用中通常有必要过滤来自传感器或音频流的数据&#xff0c;以抑制不必要的噪声。有的应用场景&#xff0c;可能只需要一个最简单的一阶…

正则表达式中$1,$2 ===算是什么意思

$1,$2...是表示的小括号里的内容 $1是第一个小括号里的 ,$2是第2个小括号里的 比如 /gai([\w]?)over([\d])/ 匹配 gainover123 $1 括号里的 n $2 第2个括号里的 123转载于:https://www.cnblogs.com/vertko/p/5888902.html

为什么以太坊能成为区块链2.0的代表之作?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链的学习进入到第四天&#xff0c;前三天学习比特币&#xff0c;分别从比特币的前世、货币属性和背后的区块链技术学习。 比特币是区块链的1…

(转)搭建企业内部yum仓库(centos6+centos7+epel源)

搭建企业内部yum仓库(centos6centos7epel源) 原文&#xff1a;https://www.cnblogs.com/nulige/p/6081192.html https://www.linuxidc.com/Linux/2017-11/148723.htm---------部署yum仓库与定制rpm包 1. 创建yum仓库目录mkdir -p /data/yum_data/cd /data/yum_data/#可以上传rp…

vs按f5没反应_《死神vs火影》中最受欢迎的游戏角色,仙鸣当之无愧上榜

hello&#xff01;大家好&#xff0c;又到了一日一度的杨某讲游戏环节啦&#xff0c;赶紧系好安全带&#xff0c;准备上车吧。《死神vs火影》作为一款深受广大群众欢迎的街机游戏&#xff0c;自然而然地涌现出了一系列知名游戏角色。那么&#xff0c;大多数人心目中最喜欢&…

IEC61850笔记--IEC61850应用入门(二)

IEC61850标准学习和调试&#xff0c;测试的记录文档&#xff0c;主要参考了IEC61850标准文档&#xff0c;《IEC61850应用入门(第二版)》&#xff0c;开源代码libIEC61850及libIEC61850说明文档。 IEC61850标准内容参考IEC61850标准文档&#xff0c;以及IEC61850标准介绍文档《I…

区块链赚钱的9种方式

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 物联网火了一段时间&#xff0c;人工智能火了一段时间&#xff0c;无人驾驶火了一段时间。现在&#xff0c;通通被区块链的风头盖住了&#xff0c;都…

7、在对象内部尽量直接访问实例变量

本文概要&#xff1a; 1、首先给出结论是&#xff1a;除了几种特殊情况外&#xff0c;在读取实例变量的时候采用直接访问的形式&#xff0c;而在设置实例变量的时候通过属性来做。 2、讲解了使用getter、setter的好处。 3、列举了几种上面提到的特殊情况&#xff1a;有时不能使…

linux python2和python3共存_linux-Centos7安装python3并与python2共存

1.查看是否已经安装PythonCentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5。使用 python -V 命令查看一下是否安装Python然后使用命令 which python 查看一下Python可执行文件的位置可见执行文件在/usr/bin/ 目录下&#xff0c;切换到该目录…

9月20号作业

转载于:https://www.cnblogs.com/kangy123/p/5890515.html

区块链以太坊五大开发工具,你喜欢哪个?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 以太坊&#xff08;Ethereum&#xff09;是运行智能合约的最受欢迎的分布式平台之一。因为虚拟货币近年来的发展&#xff0c;以太坊以区块链为基础引…

sublime text 3 中改变.vue文件的颜色

1、按 CtrlShiftP 2、输入install&#xff0c;选择install Package 3、输入vue&#xff0c;选择 vue syntax hightlight 如果上述方法不起作用&#xff0c;可以选择在下面连接中下载文件&#xff0c;手动安装 如何让你的.vue在sublime text 3 中变成彩色? 转载于:https://www…

nodejs端口被占用。

I had the same issue. I ran: $ ps aux | grep node to get the process id, then: $ sudo kill -9 followed by the process id to kill the process.转载于:https://www.cnblogs.com/facial/p/5893138.html

戴尔电脑管家_2020年笔记本电脑推荐指南:笔记本电脑应该怎么选?什么牌子的笔记本电脑更值得入手?...

笔记本电脑已经成为家家户户必不可少的移动装置了&#xff0c;作为一名互联网行业从业者&#xff0c;无论是居家还是工作也得有一台性价比较高的笔记本&#xff0c;才能满足工作需要了。接下来&#xff0c;跟大家唠一唠笔记本电脑的那些事儿~我将从以下几个方面进行介绍&#x…

行走在区块链上的智能合约

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 我和你打一个赌&#xff0c;我赌明天是雨天&#xff0c;你赌是晴天&#xff0c;赌注100大洋。假设明天是晴天&#xff0c;然后你跑过来管我要100大洋…

安装 telnet

yum install telnet-server yum install telnet service xinetd restart 查询是否正常启动telnet netstat -tnl |grep 23 telnet服务默认使用的23端口 转载于:https://www.cnblogs.com/gaobo543013306/p/8922021.html

python中json dumps_python中json.loads,dumps,jsonify使用

search_info {id:132,user_role:3}print type(search_info) #输出 #转为string用dumpsprint type(json.dumps(search_info)) #输出 #string转 dict用 loads()print type(json.loads(json.dumps(search_info))) #输出 如果前后台通过接口交互时&#xff0c;返回给前台json格式数…

区块链中的智能合约是什么?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 “智能合约是一套以数字形式定义的承诺&#xff0c;承诺控制着数字资产并包含了合约参与者约定的权利和义务&#xff0c;由计算机系统自动执行。”…

Python学习【第七篇】基本数据类型

基本数据类型 bytes数据类型 Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode&#xff0c;由str类型表示&#xff0c;二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes&#xff0c;正是这使得两者的区分特别…

web项目答辩总结_web实战项目遇到问题总结探索

最近在写一个django的web项目&#xff0c;后端代码基本都已经写好了&#xff0c;主要是前端&#xff0c;以前学过一段前端&#xff0c;只是对一些基本的方法知道&#xff0c;但还有很多东西不熟练&#xff0c;问题是在遇到表单数据时候&#xff0c;如何对参数整体打包发送后端接…

iOS----------计算一段代码执行时间

CFAbsoluteTime start CFAbsoluteTimeGetCurrent(); //在这写入要计算时间的代码 // do something CFAbsoluteTime end CFAbsoluteTimeGetCurrent(); NSLog("%f", end - start);转载于:https://www.cnblogs.com/KiVen2015/p/8926265.html