以太坊智能合约开发第二篇:理解以太坊相关概念

以太坊虚拟机EVM介绍,智能合约详解 指的是“一套以数字形式指定的承诺,包括合约参与方可以在上面执行这些承诺的协议”。早在1994年,美国计算机科学家尼克·萨博(Nick Szabo)就提出了智能合约概念智能合约是一种基于区块链技术的自动执行合约的计算机程序。它们是一组以代码形式编写的、在区块链上运行的规则和逻辑。智能合约定义了在满足特定条件时应该执行的操作,而无需中介方的干预。以太坊是最为著名的支持智能合约区块链平台之一。在以太坊中,智能合约是用一种称为Solidity的编程语言编写的。 阅读详情

原文发表于:以太坊智能合约开发第二篇:理解以太坊相关概念

很多人都说比特币是区块链1.0,以太坊是区块链2.0。在以太坊平台上,可以开发各种各样的去中心化应用,这些应用构成了以太坊的整个生态。目前,以太坊是区块链世界里生态建设最好的底层公链。本篇将以通俗易懂的方式介绍以太坊开发中涉及到的相关概念,带领大家轻松入门。

以太坊

以太坊(Ethereum)是一个建立在区块链技术之上的、图灵完备的去中心化应用平台。它允许任何人在平台中通过智能合约技术开发、部署和使用去中心化应用。

>  有没有感到和ios、Android平台有点类似?

在以太坊未问世之前,写区块链的应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法、共识机制、网络协议等等。2013、2014年那时候的很多山寨币就是这样,改改比特币代码就造出来一个新币。

以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。

>  目前围绕以太坊已经形成了一个较为完善的开发生态圈:社区支持、开发框架、开发工具等等。

智能合约

网络上关于智能合约的解释都很晦涩。我们可以简单的理解为在区块链上,由事件驱动、以代码形式存在、可执行的特殊交易合同。它是代码、数据的集合。

智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。

目前除数字货币之外,真正落地的应用还不多。和移动互联网刚兴起之时各种各样、各行各业的APP推陈出新一样,去中心化应用的市场在初期肯定有一个红利期。对此有兴趣的开发者,可抓住机会。

Solidity

Solidity是一门和JavaScript类似的编程语言,文件扩展名以 .sol 结尾。它用于智能合约的开发,并能编译成以太坊虚拟机字节码,部署到以太坊底层区块链网络上。

EVM

EVM即以太坊虚拟机,全称是Ethereum Virtual Machine。它是以太坊智能合约的运行环境。

> EVM是由以太坊节点提供。每个以太坊节点中都包含EVM
> Solidity之于EVM,就像Java跟JVM的关系一样
> 以太坊虚拟机是一个隔离的环境,在EVM内部运行的代码不能跟外部有联系

EVM运行在以太坊节点上,当我们把合约部署到以太坊区块链网络上之后,合约就可以在以太坊网络中运行了。

合约编译

以太坊虚拟机上运行的是合约的字节码。这就需要我们在部署之前先对合约进行编译。

推荐使用solc编译器。

以太坊客户端(节点)

一个以太坊客户端就是一个以太坊节点。它提供账户管理、数字资产管理、挖矿、转账、智能合约的部署和执行等等功能。对于我们开发者来说,它就是一个开发者工具。

Geth是典型的以太坊客户端。Geth这个名字是Go Ethereum开源项目的简称。它是基于Go语言开发且实现了Ethereum协议的客户端软件。 Geth提供了一个交互式命令控制台,通过命令来操作以太坊的各种功能(API)。

> Geth是全节点客户端,会一直同步以太坊区块链上的所有数据。目前数据量已经几十G,不久就会上百G。
> 在开发过程中,我们推荐使用以太坊区块链的私有链Ganache,免去同步以太坊全部区块数据的麻烦。在后续的文章中会介绍Ganache。

账户

以太坊中账户分为两类:
* 外部账户(EOA)

该类账户被公钥-私钥对控制(用户),没有关联任何代码
外部账户的地址由公钥衍生而来
* 合约账户(CA)
该类账户为智能合约分配的账户,被合约代码控制且有代码与之关联
智能合约的部署会把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址就是为合约账户

合约账户存储了代码,外部账户则没有。除了这点之外,这两类账户对于EVM来说都是一样的。

合约部署就是将编译好的合约字节码,通过外部账号以发送交易的形式部署到以太坊区块链网络上(由实际矿工出块之后,才会真正部署成功)。

账户

外部账户与外部账户之间交易仅仅是转账。但是外部账户到合约账户,是可以激活各种操作的。

运行

合约部署后,当需要调用这个智能合约的方法时,只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在EVM中执行了。

Gas

Gas即矿工费。以太坊上每笔交易的执行(被矿工打包)都会被收取一定数量的gas。gas的目的是限制执行交易所需的工作量,同时为执行支付费用。当EVM执行交易时,gas将按照特定规则被逐渐消耗,无论执行到什么位置,一旦gas被耗尽,将会触发一个 out of gas 异常。当前调用帧所做的所有状态修改都将被回滚。如果执行结束,还有gas剩余,这些gas将会返还给发送账户。因此,我们需要一个有以太币余额的外部账户,来为发起的交易支付gas。

如果没有这个限制,就会出现无法停止(如:死循环)的合约来阻塞以太坊区块链网络

gas可以认为是一个工作量单位,智能合约越复杂(计算步骤的数量、类型、占用的内存等等),所需的gas就越多。gas的最小单位是wei,1eth=10^18wei=10^9gwei

GasLimit: 愿意支付矿工费的上限

GasPrice: 矿工费单价

gas = GasLimit * GasPrice

gas

去中心化应用(Dapp)

Dapp全称是Decentralized App。以太坊社区把基于智能合约的应用称为去中心化的应用。如果我们把区块链理解为一个不可篡改的分布式账本数据库,智能合约理解为和数据库打交道的程序,那就很容易理解Dapp了。一个Dapp不单单有智能合约,还需要有一个友好的用户界面和其他的业务程序。

Truffle

Truffle是目前最流行的Dapp开发框架,它可以帮我们处理掉很多繁琐的事情,让我们更专注于智能合约的开发,迅速开始编码-编译-部署-测试-打包Dapp的流程。

总结

我们现在来总结一下。以太坊是平台,它让我们方便的使用区块链技术开发去中心化的应用。应用中,我们可以使用Solidity来编写和区块链交互的智能合约,合约编写好后之后,我们通过一个有余额的账户将合约部署到以太坊节点上,并运行合约(使用Truffle框架可以更好的帮助我们做这些事情)。为了开发方便,我们可以用以太坊私有链Ganache来搭建一个测试网络。

注:本文中为了方便大家理解,对一些概念做了类比,有些严格来说不是准确。不过我认为对于初学者,也没有必要把每一个概念掌握的很细致和准确。学习是一个逐步深入的过程,很多时候我们会发现,过一段后,我们会对同一个东西有不一样的理解。

我的小专栏:智能合约
智能合约开发QQ群:753778670
智能合约开发QQ群


目前有几套区块链实践的视频课程(视频+源码),需要的可加我微信(kuangwenjie)私信我(付费):
* 『区块链』从零构建以太坊(Ethereum)智能合约到项目实战
* 基于Ethereum & IPFS的去中心化Ebay区块链项目开发实战
* HyperLedger(超级账本)Fabric


一起学:以太坊智能合约开发 课程介绍 无论在科技圈还是金融圈,“区块链”俨然成了最热的词汇。2016年,区块链写入了国家的十三五规划中;2017年,央行基于区块链技术的数字票据交易平台测试成功;同年,工信部发布了首个区块链参考架构标准。
经过2017年如火如荼的投资盛宴,区块链开始逐渐走向应用落地,业内都在积极探索使用场景。如金融领域的资产贸易、支付系统、金融服务,其他领域的电子商务、社交通讯、游戏娱乐等等。同时,BAT、迅... 阅读详情

相关推荐

深入探索基于以太坊智能合约开发与测试:从基础到实战

智能合约(Smart Contract)是以太坊平台上运行的自主执行代码,类似于传统合同的“自动化”。在以太坊中,智能合约不仅保存状态,还能自动执行逻辑操作。通过以太坊的虚拟机(EVM),智能合约被部署在区块链网络上,所有交易都是公开和不可篡改的。基于以太坊智能合约开发涉及多个方面,包括合约编写、编译、部署、与合约交互以及测试等。在整个开发流程中,开发者必须特别注意智能合约的安全性和性能问题,确保合约的代码无漏洞且逻辑严谨。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1473

以太坊以太坊solidity合约)

Web3.js是以太坊提供的一个Javascript库,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等 (提供了点对点网络交互的API)只需要有个钱包,就可以下载分布式账本里的区块信息,每个账本有区块数据,有合约部署调用,又称分布式数据库,只支持solidity的调用,为什么要学习solidity的原因。一旦部署成功,每个合约会有一个地址,以后可以通过这个地址去调用合约中的函数,或修改合约中的状态。

吾名招财的博客 2074

以太坊开发学习-solidity(一)环境搭建

以太坊是一个去中心化的,运行智能合约区块链平台。智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由NickSzabo首次提出。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。简单地说,智能合约可以理解为一个自执行的协议。智能合约可以自动处理协议的履行、管理、以及支付。

m0_64288219的博客 3656

以太坊开发框架Truffle环境搭建

Truffle是一个用于以太坊开发的框架,它提供了一套工具和库,帮助开发者更轻松地开发、测试和部署智能合约。你可以从Node.js官方网站(https://nodejs.org)下载安装程序,并按照安装向导进行安装。Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,而npm是Node.js的包管理器。你可以从Ganache的官方网站(https://www.trufflesuite.com/ganache)下载适合你操作系统的安装包,并按照安装向导进行安装。

IrOperations的博客 318

一文看懂以太坊智能合约

点击下方“JavaEdge”,选择“设为星标”第一时间关注技术干货!免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」1...

JavaEdge全是干货的技术号 1866

以太坊智能合约:从概念到实操指南

智能合约是一组自动执行预定义规则的代码,类似于我们生活中的自动售货机。当用户选择商品并支付后,售货机会自动释放商品,用户不必担心交易的信任问题,因为售货机按照预设的程序操作。类似地,信用卡的自动还款也是一种实现了智能合约逻辑的机制:在设定自动还款之后,到期时系统会自动扣款。智能合约的这一概念,在数字货币和区块链领域得到了更深入的应用和发展。2008年,一个化名为中本聪的人或团队发表了《比特币:一种点对点的电子现金系统》论文,这标志着比特币的诞生。

Reveone的博客 4879

金融科技:使用Python搭建以太坊智能合约应用(一)

区块链金融:使用Python搭建以太坊智能合约应用(一)自2019年10月,越来越多的行业开始探索区块链项目的应用。其中除了IT行业外,便属金融业最为敏感,许多金融机构都在研究区块链。 本蒟蒻目前在北京一家金融机构的金融科技部门实习,接触到区块链技术,这篇文章整理了本人在学习关于利用Python开发以太坊智能合约的一些简单内容,供自己以后回顾和与大家分享。

蔡金航的博客 6495

以太坊智能合约开发理解以太坊相关概念

想知道更多学习区块链的方法或者区块链知识,请百度【链客区块链技术问答社区】 很多人都说比特币是区块链1.0,以太坊区块链2.0。在以太坊平台上,可以开发各种各样的去中心化应用,这些应用构成了以太坊的整个生态。目前,以太坊区块链世界里生态建设最好的底层公链。本篇将以通俗易懂的方式介绍以太坊开发中涉及...

weixin_33842328的博客 164

区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist

在我研究以太坊技术的过程中,由于相关资料较少,因此走了较多的弯路。所以这里我们不会先介绍Solidity的语法结构,而会在接下来的第一阶段,从实战出发,陆续向大家介绍Geth、Browser-solidity、Mist这三大工具,并在过程中不断讲解以太坊的基本概念。 通过这些工具的实际使用,以及对以太坊的基本概念不断加深理解,对于第二阶段学习solidity语言才能事半功倍(毕竟语言学习是很快的

ethchinese的博客 8892

如何成为以太坊开发?(二)

上一篇文章《如何成为以太坊开发?(二)》中,我们学习到如何使用区块链钱包连接以太坊网络,以及区块链钱包助记词,公私钥,平台币和合约币等概念。有了之前的基础,我们再继续往下学习。

qq_42908175的博客 416

以太坊(3)——智能合约

美链(Beauty Chain)是一个部署在以太坊上的智能合约,有自己的代币BEC。ICO:Initial Coin Offering没有自己的区块链,代币的发行、转账都是通过调用智能合约中的函数来完成的可以自己定义发行规则,每个账户有多少代币也是保存在智能合约的状态变量里ERC 20(Ethereum Request for Comments)是以太坊上发行代币的一个标准,规范了所有发行代币的合约应该实现的功能和遵循的接口。

Hock2023的博客 4813

以太坊开发教程

以太坊开发教程

weixin_44062177的博客 6498

以太坊智能合约是什么?

以太坊是最早提出做智能合约的平台。由于以太坊区块链被普遍接受,因此多数区块链智能合约采取与以太坊相似的设计。本文将详细介绍以太坊智能合约:它是什么?它有什么用?

unber的博客 1737

区块链技术详解:以太坊智能合约开发实战

智能合约是一种部署在区块链上的自动执行程序,它能够在预定条件满足时自动执行指定的操作。以太坊智能合约使用Solidity编程语言编写,并部署在以太坊虚拟机(EVM)上运行。本文详细介绍了以太坊智能合约开发实战技巧,包括开发环境搭建、智能合约编写、编译、部署和测试等方面。通过代码示例和安全性分析,帮助开发者更好地掌握以太坊智能合约开发流程和安全考虑。在实际应用中,开发者应根据具体需求和场景选择合适的工具和方法,并不断优化代码以提高性能和安全性。

shejizuopin的博客 1422

以太坊开发环境

详细讨论了以太坊测试网络和私有网络。在初步介绍了私有网络设置之后,演示了如何使用 Geth 命令行工具执行各种功能,以及如何与以太坊区块链进行交互。还讨论了如何使用 Mist 来部署合约和发送交易。

禅与代码的艺术 2051

合约是什么,以及作用

如果想知道更多区块链技术知识,请百度【链客区块链技术问答社区】进入 什么是合约? 合约是代码和数据的集合,存在于以太坊区块链的特定地址。 合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约依靠被称作以太坊虚拟机 字节代码上的区块链运行。 以太坊高级语言 合约依靠被称作以太坊虚拟机(EVM) 字节代码(以太坊特有的二进制格式)上的区块链运行。然而,合约是很典型地用诸如Solidity等高级语言...

weixin_44172023的博客 3955
上一篇: 以太坊智能合约开发第一篇:IDE对solidity语法的支持
下一篇: 以太坊智能合约开发第四篇:实现Hello World智能合约
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值