深入浅出以太坊和智能合约

2023年 Web3开发学习路线全指南 如果你想在区块链开发上更进一步,此时你需要考虑的就会更多了,例如你可能发现链上交易的Gas费用越来越高,此时你需要考虑优化你的智能合约来降低每笔交易的Gas费用。在你了解的过程中,你还会发现如今区块链生态的繁荣,目前有很多的Dapp不是在以太坊这一条链上运行的了,还有BNB Chain、SOLONA、TRON等众多公链生态。你能够编写安全、规范的智能合约,并且能够将智能合约部署在以太坊网络上,再通过web3.js或ethers.js调用的方式,进行智能合约和Dapp的交互,实现整个Dapp的开发打通。 阅读详情

前言

Eth(以太坊)不知道你有没有听说过,ICO你一定听说过。但你知道ICO其实是借助Eth的智能合约实现的吗?什么是智能合约,Eth为啥这么火?智能合约的特点是什么,我怎么写智能合约?基于智能合约还有Dapp,即分布式app,Dapp又是什么?

本系列文章将全面讲述Ethereum的原理,特点和机制,以及涉及的各种概念。

区块链的运行机制

首先大家必须了解区块链。这里只做一个简单的描述,区块链就是一条全网账单链,链的使用者凭着自己的私钥加密交易内容,然后发送到网络上后,矿工通过比拼算力将内容加密提交到区块链上,同时获得使用者支付的手续费。

由于大家都在竞争加密内容,所以全网的算力都是使用者提交内容的见证人,因此区块链交易有迅速,不可逆的特点。

账户和消息传递

在区块链中的交易就是一个地址往另一个地址转移基本单位,Ethereum在这里将这种行为抽象成消息传递。每一次消息传递有发送者,也有接受者,消息内容可以是一笔交易,也有可能是一段信息。转账,其实就是一个消息传递。

在Ethereum中有两种账户,一种是人操作的正常账户,另一种是智能账户,正常账户中只有当前的Eth钱数,而智能账户中存储了两个东西:状态和代码,每当收到相应的消息时,这些代码就会被执行,从而改变其状态。这些账户也就是所谓的智能合约的载体。

这些智能账户就是智能合约的基础,要了解智能合约是怎么执行的,先要了解EVM。

EVM

前面提到了,真正的计算是在各个矿工的电脑中进行的。Ethereum的改进之处,就是在矿工收集足够消息,准备加密生成一个Block时,必须启动一个运行时环境,也就是EVM,来运行智能账户收到消息时对应的代码。

这个环境包含了一些内置变量,比如当前Block的Number,消息来源的地址等,还会提供一些API,一个stack供智能合约执行时使用。

通过EVM运行代码后,智能账户的状态发生了变化,然后矿工将这些状态同正常账户里的资金变化一起,加密生成新的block,链接到全网账单上。因此一个交易只会在一个Block里出现,并且要得到大多数算力的确认才能挂载,所以可以保证这些code执行的唯一性和正确性。

智能合约的示例

概念有时候比较晦涩,我们举一个募捐的智能合约的例子来帮助理解:

假设我们想向全网用户发起募捐,那就先可以定义一个智能账户,它有三个状态:当前募捐总量,捐款目标和被捐赠人的地址,然后给它定义两个函数:

接收募捐函数

接收募捐函数每次收到发过来的转账请求,先核对下发送者是否有足够多的钱(EVM会提供发送请求者的地址,程序可以通过地址获取到该人当前的区块链财务状况。)然后每次募捐函数调用时,都会比较下当前募捐总量跟捐款目标的比较,如果超过目标,就把当前收到的捐款全部发送到指定的被捐款人地址,否则的话,就只更新当前募捐总量状态值。

捐款函数

将所有捐款发送到保存的被捐赠人地址,并且将当前捐款总量清零。

每一个想要募捐的人,用自己的eth地址向该智能账户发起一笔转账,并且指明了要调用接受其募捐函数。

于是我们就有一个募捐智能合约啦,人们可以往里面捐款,达到限额后钱会自动发送到指定账户,全世界的矿工都在为这个合约进行计算和担保,不再需要人去盯着看有没有被挪用,这就是智能合约的魅力所在。

Ethereum最核心的智能合约机制大概就是这样,其实也并不复杂,接下来我们还会讲一下,ICO是怎么借助智能合约实现的,其实原理非常简单,等你明白了你一定会大吃一惊。

推荐一个适合区块链开发新手入门的教程:以太坊DApp实战开发

区块链的基本理论与实践 一、前言 1.1 叙叙旧 对于区块链的学习,自己是从大四做毕设的时候开始。看到网上的文章,文章质量层次不齐,要么只是讲述理论,要么就是贴几行代码,对于初学者很不友好。由于一些原因,最近再次接触到了区块链,加上有重新开始写博客的打算,就将它作为第一篇文章发布吧。 1.2 文章摘要 这篇文章主要围绕基于以太坊的区块链开发,主要分为两个模块:区块链的理论介绍和相关的学习资料推荐;前端通过JavaScri... 阅读详情

相关推荐

Solidity智能合约开发2

solidity入门讲解 本文主要通过一个简单的案列讲解一下solidity入门相关的知识。 Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下账户行为的程序。 Solidity是一种花括号语言,旨在针对以太坊虚拟机(EVM)。它受到C++、Python和JavaScript的影响。 Solidity是静态类型的,支持继承、库和复杂的用户定义类型等特性。 使用Solidity可以创建用于投票、众筹、盲目拍卖和多重签名钱包等用途的合约。 下面是

2201_76112795的博客 422

ETH智能合约开发手把手入门教程|猿创征文

ETH智能合约开发手把手入门教程|猿创征文,带你进入ETH的世界

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 6513

深入浅出以太坊-中文版%%%Sahd.pdf

深入浅出以太坊.pdf,电子书。针对性的介绍区块链2.0的概念以及开发教程等。

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

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

Reveone的博客 4905

深入浅出以太坊

《深入浅出以太坊V1.0》 by蓝莲花.pdf 区块链技术必学习

以太坊智能合约编程

这篇文章的目的是成为上述资料的补充,同时介绍一些基本的开发者工具,使入门以太坊,智能合约 以及构建 DApps(decentralized apps, 分布式应用)更加容易。我会试图按照我自己(依然是新手)的理解来 解释工作流程中的每一步是在做什么,我也得到了 ConsenSys 酷酷的开发者们的许多帮助。

基于以太坊的智能合约开发Solidity(基础篇)

本文介绍了Solidity智能合约开发的基础知识,主要包括程序结构、数据类型、运算符和映射等核心内容。文章详细讲解了Solidity的基本语法规则,包括版本声明、合约定义、状态变量声明、函数编写规范(view/pure修饰符的作用)以及数据类型转换限制。同时,系统阐述了各种运算符的使用方法,包括关系运算、逻辑运算、算术运算、位运算和复合运算,并特别提醒了整型溢出和非法运算等注意事项。此外,还介绍了固定长度和动态长度字节数组的特性与操作方法,以及mapping映射类型的基本用法和嵌套映射的实现方式。这些知识点

Zevalin的博客 3853

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 423

使用Python开发以太坊智能合约【DApp入门指南】

智能合约概述智能合约是运行在区块链上的自动化合约,能够执行预定的业务逻辑。以太坊是最流行的智能合约平台,提供了强大的开发和运行环境。Solidity基础Solidity是用于编写以太坊智能合约的编程语言,支持面向对象的编程风格。示例包括一个简单的投票合约,演示了如何创建提案、投票以及查询结果。使用Web3.py与以太坊交互Web3.py是一个Python库,允许与以太坊区块链进行交互。示例包括如何部署合约、进行投票以及查询提案。前端集成。

一键难忘的博客 3699

Cortex-M TrustZone实战:从硬件隔离到安全交互的嵌入式开发指南

在嵌入式系统开发中,硬件安全隔离是构建可信执行环境(TEE)的核心技术。其原理是通过处理器硬件机制,将系统资源划分为安全与非安全域,实现内存、外设和代码的强制访问控制。这项技术的核心价值在于,它能在单一芯片上为资源受限的物联网(IoT)设备、智能传感器等提供芯片级的安全基础,无需依赖外置安全元件,从而降低BOM成本并简化设计。典型的应用场景包括保护设备密钥、实现安全启动、构建安全服务(如加密、密钥管理)以供应用程序调用。本文聚焦于Arm Cortex-M系列微控制器上的TrustZone技术实现,针对开发中

weixin_42639246的博客 300

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码)

本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。

kite3的博客 383

第一章:以太坊智能合约的学习

第一章:以太坊的学习第一个智能合约:区块链基础概念交易/事务(Transaction):区块:共识协议:工作量证明(PoW)权益证明(PoS)以太坊虚拟机(EVM)编译合约账户钥匙文件账户状态以太坊钱包交易消息调用费用( gas)思考费用的作用以太坊网络主网(Mainnet)测试网络(Testnet)私有网络、开发者模式模拟环境网络存储、内存和能委托调用和库日志自毁以太坊路线图 学习内容:第一个只能合约与区块链知识 第一个智能合约: 首先我们知道以太坊的编译智能合约的工具是solidity。 pragm

绯色之空丶 1159

能量机关 STM32HAL库开发大疆A板WS2812B彩灯(PWM+DMA)

本文主要目的是为了制作RoboMaster比赛能量机关的灯条控制,模拟比赛场中大符,搭建出类似场地道具,以供视觉测试 使用的是RoboMaster开发板A型,芯片为STM32F427IIH6,使用的灯条为WS2812B。 采用PWM+DMA控制,使用CUBEMX配置底层,keil5编辑烧录代码 实现:一共五片扇叶,每片扇叶均实现流水灯+常亮颜色 参考文章在后面会标记出来

m0_51756449的博客 4292

以太坊代币开发智能合约solidity的奥秘

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!! 在上一章中部署在Geth上的源代码如下: pragma solidity 0.4.9; contract DemoTypes { function f(uint a) returns (uint b) ...

weixin_34303897的博客 121

最终篇——SWAT模型的建立

同理,Soil Data也是同样的方法导入,在Soil Database Options的选项中,选择UserSiol,用同样的方法导入土壤类型,进行重分类。打开窗口后,只定义HRU Thresholdes,其余两个不用设置,设定各数据单元的计算率,这里的10%的意思是计算精度,即分成级HRU计算单元太小,小于平均计算单元的10%,我们就不对这HRU单元进行计算(也就是说太破碎的计算单元不进行计算),若选择0%意味着全部进行计算,需要耗费大量的内存和时间,对计算机要求较高,不建议。

m0_72556434的博客 5623

Triton server的部署、构建、backend插件机制代码梳理、模型加载、自定义C++backend流程

Triton inference server的部署、构建、backend机制代码详细梳理、模型加载过程、自定义C++backend流程.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 474

精通以太坊2:以太坊的基本概念

精通以太坊2:以太坊的基本概念 1.以太币的货币单位 以太坊的货币单位称为ether,也常用ETH或符号 Ξ(这是来自希腊文的字母“Xi",看上去像个大写的E),偶尔也会有人使用◆ 1 ether,或 1 ETH,或 Ξ,或 ◆1 我们可以使用 Unicode字符 U+039E显示 Ξ,使用 U+2666显示◆ 以太币最小单元为 wei. 1 ETH=1x10^18wei (记住:以太坊是区块链...

tlkj6868xds的博客 2660

YOLOv11【第二章:核心模块进阶篇·第3节】LDConv线性可变形卷积改进YOLOv11!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 7441

智能合约入门 案例 专业开发团队

智能合约入门 简单的智能合约 让我们先看一下最基本的例子。现在就算你都不理解也不要紧,后面我们会有更深入的讲解。 存储 pragma solidity ^0.4.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; ...

wangwenyuwork的博客 302

【以太网硬件十九】SGMII到底能不能直接出光模块?

详细解释为什么SGMII可以直接出光模块及其使用限制

highman110的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Solidity 最新 0.5.8 中文文档发布

本文首发于深入浅出区块链社区 热烈祝贺 Solidity 最新 0.5.8 中文文档发布, 这不单是一份 Solidity 速查手册,更是一份深入以太坊智能合约开发宝典。 翻译说明 Solidity 最新 0.5.8 中文文档 根据当前 最新官方版本v0.5.8 进行翻译,本翻译最初 HiBlock 社区发起,后经过 深入浅出区块链社区 社区成员根据最新版本补充翻译。 大部分的译者,都是国内顶尖的...

weixin_30823001的博客 126

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

web3.js

智能合约开发– 使用solidity语言编写代码,部署到区块链。网站或客户端开发– 与区块链中的智能合约进行交互,读写数据。在进行网站或客户端开发时,就需要用到web3.js。以太币转zhang读写智能合约中的数据创建智能合约区块链网络是一个点对点的对等网络,网络由各个节点相互连接构成,智能合约的代码与数据存储在区块链中。使用web3.js可以向区块链网络中某个以太坊节点发出请求,与区块链网络进行交互。..............................

henulmh的博客 3333

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 以太坊私有链DApp开发环境搭建(二)
下一篇: 以太坊智能合约编程入门(一)
落叶无声9
博客等级 码龄12年 443粉丝 343原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值