Solidity-2-合约结构

在 Solidity 语言中,合约类似于其他面向对象编程语言中的

每个合约中可以包含 状态变量、 函数、 函数 , 事件 Event, 错误(Errors), 结构体 和 枚举类型 的声明,且合约可以从其他合约继承。

还有一些特殊的合约,如: 库 和 接口.

专门的 合约 章节会比本节包含更多的内容,本节用于帮助我们合约包含哪些内容,做一个简单的入门。

状态变量

状态变量是永久地存储在合约存储中的值

pragma solidity >=0.4.0 <0.9.0;contract TinyStorage {uint storedXlbData; // 状态变量// ...
}

函数

函数是代码的可执行单元。函数通常在合约内部定义,但也可以在合约外定义

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.1 <0.9.0;contract TinyAuction {function Mybid() public payable { // 定义函数// ...}
}// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {return x * 2;
}

函数 修改器

函数 修改器 可以用来以声明的方式修改函数语义(参阅合约章节中 函数修改器)。

重载(Overloading), 表示有同样的 修改器 名称但是有不同的参数的情况,这是不允许的。

而例如函数或 修改器 则可以被 重写(overridden)。

pragma solidity >=0.4.22 <0.9.0;contract MyPurchase {address public seller;modifier onlySeller() { // 修改器require(msg.sender == seller,"Only seller can call this.");}function abort() public onlySeller { // 修改器用法// ...}
}

事件 Event

事件是能方便地调用以太坊虚拟机日志功能的接口

pragma solidity >=0.4.21 <0.9.0;
contract TinyAuction {event HighestBidIncreased(address bidder, uint amount); // 事件function bid() public payable {// ...emit HighestBidIncreased(msg.sender, msg.value); // 触发事件}
}

错误(Errors)

Solidity 为应对失败,允许用户定义 error 来描述错误的名称和数据。 错误可以在 revert statements 中使用,

跟用错误字符串相比, error 更便宜并且允许你编码额外的数据,还可以用 NatSpec 为用户去描述错误。

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;/// 没有足够的资金用于转账, 参数 `requested` 表示需要的资金,`available` 表示仅有的资金。
error NotEnoughFunds(uint requested, uint available);contract Token {mapping(address => uint) balances;function transfer(address to, uint amount) public {uint balance = balances[msg.sender];if (balance < amount)revert NotEnoughFunds(amount, balance);balances[msg.sender] -= amount;balances[to] += amount;// ...}
}

结构体

结构体是可以将几个变量分组的自定义类型

pragma solidity >=0.4.0 <0.9.0;contract TinyBallot {struct Voter { // 结构体uint weight;bool voted;address delegate;uint vote;}
}

枚举类型

枚举可用来创建由一定数量的“常量值”构成的自定义类型

pragma solidity >=0.4.0 <0.9.0;contract Upchain {enum State { Created, Locked, InValid } // 枚举
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Dropzone提升开发效率的全方位指南

开发过程中&#xff0c;文件上传、图像处理、脚本执行等任务常常是不可或缺的环节。为了提升开发效率&#xff0c;开发者需要一个强大且灵活的工具。在这方面&#xff0c;Dropzone 是一个非常优秀的选择。本文将介绍如何在各种使用场景下&#xff0c;利用 Dropzone 工具来提高开…

C++复合数据类型:字符数组|读取键盘输入|简单读写文件

文章目录 字符数组&#xff08;C风格字符串&#xff09;读取键盘输入使用输入操作符读取单词读取一行信息getline使用get读取一个字符 读写文件 字符数组&#xff08;C风格字符串&#xff09; 字符串就是一串字符的集合&#xff0c;本质上其实是一个“字符的数组”。 在C中为了…

【数据结构和算法】子数组最大平均数 I

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 滑动窗口含义 2.2 滑动窗口一般解法 2.3 方法一&#xff1a;滑动窗口 三、代码 3.1 方法一&#…

异步编程Promise

文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误&#xff08;error&#xff09;和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中&#xff0c;promise的使…

Easyrecovery2024手机版文件数据恢复软件

Easyrecovery是著名数据恢复厂商Kroll Ontrack推出文件的恢复软件&#xff0c;因病毒、误删、U盘故障等问题导致的word/excel/ppt/照片等文件丢失的情况&#xff0c;Easyrecovery能做到较高的恢复成功率&#xff01;Easyrecovery是全球著名数据恢复厂商Kroll Ontrack推出的文件…

.Net Attribute 什么是特性、预定义特性使用(一)

什么是特性&#xff1f; 特性&#xff08;Attribute&#xff09;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面…

Git报错x509: certificate signed by unknown authority

下载报错&#xff1a; Error downloading object: model-00001-of-00008.safetensors (ed3ac49): Smudge error: Error downloading model-00001-of-00008.safetensors (ed3ac4983f682a999b0e4b6f072aad294c4fd9a7e968e90835ba5c4b466d3c7c): LFS: Get https://cdn-lfs.huggin…

【matlab】绘制横状单组渐变柱状图

% matlab绘制横状渐变柱状图 clear;clc;close all; x1:20; a[1 -1 2 -2 3 -3 4 -4 5 -5 6 -6 7 -7 8 -8 9 -9 10 -10]; close all; b0.8; figure barh(a,b,‘FaceColor’,‘none’) % 颜色包 cmap load(‘D:\matlab_work\函数名为colormore的颜色索引表制作\colormore_txt\colo…

Redis-网络模型

参考资料 &#xff1a;极客时间 Redis&#xff08;亚风&#xff09; 前置知识 系统隔离 为了避免⽤户应⽤导致冲突甚⾄内核崩溃&#xff0c;⽤户应⽤与内核是分离的&#xff1a; 进程的寻址空间会划分为两部分&#xff1a;内核空间、⽤户空间 • ⽤户空间只能执⾏受限的命令&…

Linux笔记---系统信息

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 命令 1. uname - 显示系统信息 2. hostname - 显示或设置系统主机名 3. top - 显示系统资源使用情况 4. df - 显示磁盘空间使用情…

【2023 英特尔On技术创新大会直播 |我与英特尔的初次相遇】—— AIPC探索下一代的物联网时代

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:英特尔技术学习专栏 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 硅谷经济的发展与挑战 Intel开发者云与AI技术的应用 AI压缩技术的发展与应用 英特尔与阿里巴巴在AI领域的合作 AIPC时代的…

基于SSM的宠物医院管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的宠物医院管理系统,java项目。 …

android 的ClassLoader加载dex

子类&#xff1a;BaseDexClassloader 的子类 1 PathClassLoader,》用于android应用程序的类加载器&#xff0c;可以加载制定的dex&#xff0c;以及j a r,zip,apk中的classes。dex 2 inMamemoryDexClassLoader >android 8.0之后添加的&#xff0c;用来加载内存中的 …

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候&#xff0c;有投递简历功能&#xff0c;有投递就会有随之而来的查看简历对吧&#xff0c;我投递过的简历&#xff0c;另存为一个文件夹&#xff0c;就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹&#xff0c;用于存放PDF&#x…

Vue组件间通信(六种方式)

第一种&#xff1a;props 适用场景&#xff1a;父子组件通信 注意事项&#xff1a; 如果父组件给子组件传递数据&#xff08;函数&#xff09;&#xff1a;本质上上是子组件给父组件传递数据 如果父组件给子组件传递的数据&#xff08;非函数&#xff09;&#xff0c;本质上…

重新配置torch1.8 cuda11.1 torchtext0.9.0虚拟Pytorch开发环境

这里写目录标题 起因发现选择安装cuda 11.1核对下自己的显卡是否支持下载该版本的CUDACUDA下载地址CUDA安装过程 在anaconda中创建一个虚拟环境1.以下是环境的配置过程2.查看虚拟环境列表3.激活虚拟环境 安装torch和torchtext包的过程1.输入下面这句代码&#xff0c;就可以直接…

韩语中的一次多用-柯桥基础韩语学习

1.动词&#xff0c;写 일기를 쓰다 写日记 2.动词&#xff0c;戴&#xff08;帽子&#xff0c;眼镜&#xff0c;口罩&#xff09; 안경을 쓰다 戴眼镜 3.动词&#xff0c;使用&#xff08;材料&#xff0c;道具&#xff0c;手段&#xff09; 세제를 쓰다 使用洗剂 4.动词&am…

大创项目推荐 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

Ethernet/IP 之IO 连接简要记录

IO连接 EIP的IO连接提供了在一个生产者和多个消费者之间的特定的通信路径&#xff0c;以达到IO数据在IO连接下传输。 生产者对象产生IO数据通过生产者IO连接管理者对象将连接ID和数据组帧发送给消费者IO连接管理者对象然后将IO数据发送给消费者对象。 显示消息连接 显式消息传…

《信息安全工程师教材》-蒋建春、信息安全完全参考手册-Mark Rhodes Ousley、CISSP官方学习指南第九版、ISO27002学习

文章目录 介绍关系学习顺序重复内容学习方法建议学习时间可能重合的部分更详细的学习计划 介绍 《信息安全工程师教材》- 蒋建春&#xff1a;这本教材可能是针对中国地区信息安全工程师的认证考试而编写的&#xff0c;它可能会涵盖信息安全的基本概念、技术和政策&#xff0c;特…