
区块链学习笔记之以太坊(三)
直接调用:通过 地址调用:使用 委派调用:通过
发布日期:2021-05-07 15:21:06
浏览次数:27
分类:精选文章
本文共 1211 字,大约阅读时间需要 4 分钟。
以太坊智能合约基础知识
1. 智能合约的本质
智能合约是以太坊生态系统的核心概念,它是一段运行在区块链上、具有自动执行能力的代码。合约账户保存了合约的运行状态,主要包含以下几个关键项:
- balance:当前账户的余额
- nonce:交易次数标识符
- code:合约代码
- storage:存储,采用MPT(内存优化的持久化树)数据结构
2. Solidity语言简介
Solidity是智能合约的首选开发语言,其语法与JavaScript相似。以下是Solidity的关键特性:
- 面向对象编程:类似于C++,合约可以定义类(
contract
)。 - 强类型语言:变量类型明确,
address
类型用于智能合约地址。 - 事件定义:通过
event
记录合约执行日志,如HighestBidIncrease()
和Pay2Beneficiary()
。 - 数组操作:支持动态长度数组,通过
push
和length()
方法管理数组。 - 构造函数:定义合约创建时自动执行的函数,采用
constructor
关键字。
3. 智能合约的调用方式
智能合约的调用可通过以下方式实现:
call
方法直接调用目标合约的函数。call
函数传递目标合约地址和函数签名。delegatecall
方法在当前合约环境下执行目标合约函数。4. 智能合约的功能与支付方式
- payable函数:标注为
payable
的函数可接收外部转账。 - fallback函数:自动调用当未指定目标函数时或目标函数不存在时。
- 汽油费机制:智能合约执行需支付汽油费,用于应对资源消耗和错误处理。
5. 智能合约的创建与运行
- 部署流程:通过转账交易将编译好的合约代码发布到区块链上。
- 虚拟机环境:智能合约在EVM上运行,支持图灵完备计算模型。
- 资源消耗:智能合约操作根据指令复杂度和数据存取收费。
6. 错误处理与状态回滚
- 资源不足:若汽油费不足,交易将回滚,未使用汽油费退还。
- assert/require语句:用于条件判断,违反条件时抛出异常导致回滚。
- 嵌套调用:若直接调用合约失败,仅当前调用回滚,不影响其他调用。
7. 以太坊网络的核心机制
- 全节点验证:全节点独立验证交易,确保系统一致性。
- 三棵树:状态树、交易树和收据树维护账户状态。
- 块头信息:包含区块的总汽油消耗、上限和矿工调整机制。
8. 智能合约的特性与限制
- 确定性执行:智能合约执行结果唯一,依赖输入数据。
- 环境信息有限:无法获取实时环境信息,需通过存储获取状态。
- 无多线程支持:Solidity不支持多线程,需依赖固定的状态结构。
9. 转账方式对比
- transfer:直接转账,支持连锁回滚。
- send:转账不支持连锁回滚,失败仅返回错误。
- call:用于合约调用,可传递剩余汽油费。
通过以上知识点的学习,初步掌握了以太坊智能合约的核心概念和操作流程,为深入学习智能合约开发奠定基础。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月22日 01时51分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
故障公告:IIS应用程序池停止工作造成博客站点无法访问
2019-03-06
【故障公告】极验验证码故障造成无法登录与注册
2019-03-06
上周热点回顾(6.25-7.1)
2019-03-06
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2019-03-06
工作半年的思考
2019-03-06
不可思议的纯 CSS 滚动进度条效果
2019-03-06
【CSS进阶】伪元素的妙用--单标签之美
2019-03-06
开始CN的生活
2019-03-06
惊闻NBC在奥运后放弃使用Silverlight
2019-03-06
IE下尚未实现错误的原因
2019-03-06
Kubernetes 学习系列文章
2019-03-06
创建自己的Docker基础镜像
2019-03-06
使用Jenkins来实现内部的持续集成流程(上)
2019-03-06
HTTP 协议图解
2019-03-06
Python 简明教程 --- 20,Python 类中的属性与方法
2019-03-06
Python 简明教程 --- 21,Python 继承与多态
2019-03-06
KNN 算法-理论篇-如何给电影进行分类
2019-03-06
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2019-03-06
CODING 敏捷实战系列课第三讲:可视化业务分析
2019-03-06
使用 CODING DevOps 全自动部署 Hexo 到 K8S 集群
2019-03-06