Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >solidity开发2-合约结构

solidity开发2-合约结构

作者头像
SecondWorld
发布于 2022-05-06 07:52:50
发布于 2022-05-06 07:52:50
24600
代码可运行
举报
文章被收录于专栏:Java开发者杂谈Java开发者杂谈
运行总次数:0
代码可运行

合约

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在solidity中的合约可以类比看做java等面向对象语言中的类。合约可以包含状态变量、函数、函数修饰符、事件、错误、结构体、枚举类型等等。
还有一些特殊的合约可以被称作库或者接口
状态变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
状态变量指的是永久存在区块链合约中的变量。

state variables

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;

contract SimpleStorage {
    uint storedData; // State variable
    // ...
}
函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
函数是可执行的代码单元。通常定义在合约内部,也可以定义在合约外部。

functions

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.1 <0.9.0;

contract SimpleAuction {
    function bid() public payable { // Function
        // ...
    }
}

// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {
    return x * 2;
}
函数修饰器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
用来修饰函数,在函数定义的时候增强或者约束函数的语义。
函数修饰器不支持overload(同名不同参数),但是支持override。

Function Modifiers

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;

contract Purchase {
    address public seller;

    modifier onlySeller() { // Modifier  定义modifier
        require(
            msg.sender == seller,
            "Only seller can call this."
        );
        _;
    }

    function abort() public view onlySeller { // Modifier usage  使用modifier
        // ...
    }
}
事件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
事件是一种供EVM日志机制使用的接口

Evnet

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.21 <0.9.0;

contract SimpleAuction {
    event HighestBidIncreased(address bidder, uint amount); // Event

    function bid() public payable {
        // ...
        emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
    }
}
错误
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
有点类似于java中的异常。能够在出现错误的时候提供一种低成本的,更详细的错误描述。

Errors

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;

/// Not enough funds for transfer. Requested `requested`,
/// but only `available` 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;
        // ...
    }
}
结构体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
类似于C中的结构体

Struct

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;

contract Ballot {
    struct Voter { // Struct
        uint weight;
        bool voted;
        address delegate;
        uint vote;
    }
}
枚举类型

Enum

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;

contract Purchase {
    enum State { Created, Locked, Inactive } // Enum
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
免费二级域名怎么弄呢?二级域名怎么关闭?
二级域名是主域名单独分出来的一个域名,虽然它的权重要比主域名低很多,但是它也是单独的一个分支。注册二级域名有很多好处,在日常生活中,我们很多的工作都是需要用到二级域名的。当然了,二级域名申请很多都是要钱的,但是也有免费申请二级域名的方法,很多人不知道免费二级域名怎么弄,那么,免费二级域名怎么弄呢?下面我们一起来简单的了解一下吧。
用户8739990
2021/08/06
32.2K1
免费二级域名怎么弄呢?二级域名怎么关闭?
github搭建个人网站
1. 注册账号: 地址: https://github.com/ 输入账号、邮箱、密码,然后点击注册按钮.  2. 初始设置 注册完成后,选择Free免费账号完成设置。 2.1 验证邮
xiangzhihong
2018/02/01
5.7K0
github搭建个人网站
Github 部署个人网页 | 一键部署
相信不少人最听说过 Github 部署网站,但是我翻找了很多文章基本以实操为主,在 Setting 点一下就没了。
写代码的海怪
2022/03/30
1.4K0
Github 部署个人网页 | 一键部署
新人如何搭建(copy)一个属于自己的博客
对于很多刚学前端的朋友们来说(比如我),在学习的过程中经常会记一些笔记,除了现实中的烂笔头,我们也可以在PC上记笔记、写总结,下面分享一些或多或少会用上的网站或工具。
IMWeb前端团队
2019/12/03
5530
新人如何搭建(copy)一个属于自己的博客
利用Hugo和Github Pages免费创建并永久托管网站
Hugo可以让你轻松生成静态网站,比如个人博客、API文档、公司主页等,你只需要提供markdown格式的文本,它就能帮你渲染成各种你想要的样式,只需要安装想要的主题,写好对应的markdown内容,就能快速编译出一个静态网站。
imroc
2018/09/03
7.3K0
利用Hugo和Github Pages免费创建并永久托管网站
技术人如何搭建自己的技术博客
上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客。原因有很多,有的是懒得写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中。
后端技术探索
2018/10/18
1.5K0
技术人如何搭建自己的技术博客
Gitee 和 GitHub 搭建个人网站博客的方法
gitee.com(码云) 和 github.com ,分别是国内外的代码交流社区,就是把自己写的代码开源给别人,让别人站在巨人(开源者)的肩膀上继续发展。
用户7146828
2021/08/09
2.2K0
新人如何搭建(copy)一个属于自己的博客
对于很多刚学前端的朋友们来说(比如我),在学习的过程中经常会记一些笔记,除了现实中的烂笔头,我们也可以在PC上记笔记、写总结,下面分享一些或多或少会用上的网站或工具。 脑图类:Xmind、百度脑图... 总结类:CSDN、简书、segmentfault、博客园... 当然,也有不少朋友们想拥有一个属于自己的博客,学会走路再学跑步,下面将简单暴力的教你搭建(拷贝)一个博客。我们的准备如下: 拥有一个自己的域名 拥有Git基础知识(不懂没关系,跟着大伙走,学会Github即可) 拥有一个GitHub账号 一款
腾讯NEXT学位
2018/05/14
1.1K0
利用Hexo+github搭建博客,零成本、无需域名、服务器
之前的博客是用wordpress搭建在阿里云的一台虚拟机上,由于出了个意外,造成我在上面写的文章全部丢失了,虽然不多,但是也都是心血。吸取教训我打算换种方式搭建博客,分析了目前比较流行的博客框架ghost、Jekyll、hexo,最终选择了hexo。 hexo虽不如前两者那么火热,但还是很令我喜欢的:
用户2458785
2018/08/29
1.3K0
Hexo + Github Pages博客搭建教程
一直以来自己都有书写文章的习惯,不管是收集资料还是表达自己的个人见解。最开始把资料都放在印象笔记里,但是印象笔记有个不好的点就是书写不方便,而且多设备登录不友好,需要升级账户。后来就搭建了一个WordPress站点,记录自己的点滴。慢慢的接触到了CSDN,也计划着在那里写博客。CSDN的编辑器有markdown版本,接触到了markdown就对其产生了好感。与此同时,我也将我的WordPress站点的编辑器换成了markdown编辑器,一处书写多处同步。 慢慢的,我感受到了WordPress站点的臃肿,由于我的站点原因,做的并不是单独的博客站点,所有的文章展示方面不友好。所以萌生了搭建一个单独的博客的想法。
慕白
2020/01/02
9810
Hexo + Github Pages博客搭建教程
使用github + hexo搭建个人博客
新建一个名为你的用户名.github.io的仓库,比如说,如果你的github用户名是test,那么你就新建test.github.io的仓库(必须是你的用户名,其它名称无效),将来你的网站访问地址就是 http://test.github.io 了,是不是很方便?
秃头哥编程
2019/07/12
1.1K0
使用github + hexo搭建个人博客
GitHub Pages 站点建设
在 repo 下创建 README.md文件,随便写点东西保存。然后,点击 settings选项卡,单机左侧 Pages进行设置,如下图:
甜点cc
2022/08/17
1.4K0
用Hexo+Github Pages搭建私人博客:如何用Github搭建你的第二个博客?
不知大家在新建第一个博客后有木有想建第二个博客的冲动,哈哈,比如一个可以是技术博客,另一个可以是生活博客或者其它的。
小Bob来啦
2020/12/15
1K0
用Hexo+Github Pages搭建私人博客:如何用Github搭建你的第二个博客?
【Butterfly主题】添加二级跳转页
在逛别人的博客的时候,发现了有一种叫go.php的东西,可以经过自己站点的网页再跳转出去,方便SEO优化。但是像Hexo这类静态博客,想要从源HTML修改链接难度有点大,这里我们采用JavaScript动态修改。
pai233
2022/05/04
1.4K0
【Butterfly主题】添加二级跳转页
低成本个人建站系列二 —— 使用 Hexo+GitHub 搭建个人免费博客
GitHub Pages 是由 GitHub 官方提供的一种免费的静态站点托管服务,让我们可以在 GitHub 仓库里托管和发布自己的静态网站页面。
浩Coding
2020/09/10
2.9K0
低成本个人建站系列二 —— 使用 Hexo+GitHub 搭建个人免费博客
GitHub pages配置自定义域名利用Cloudflare全球CDN
GitHub pages是github提供免费静态站点托管服务,并提供域名xxx.github.io,xxx是你GitHub账户的名称。一个账户只能托管一个GitHub pages项目。
六月河
2023/06/26
3.2K0
GitHub pages配置自定义域名利用Cloudflare全球CDN
Hexo 入门指南(一) - 简介 & 准备
Hexo是一个开源的静态博客生成器,用node.js开发,作者是台湾大学生tommy351。
ApacheCN_飞龙
2019/02/15
6710
什么是二级域名 二级域名怎么弄
很多人对一级域名和二级域名的概念不是很清楚。那么什么是二级域名?二级域名怎么弄呢?今天小编就为大家介绍一下关于一级域名和二级域名的相关信息。
用户8739990
2021/07/23
35.7K1
什么是二级域名 二级域名怎么弄
这可能是迄今为止最全的hexo博客搭建教程
这是阮一峰在博客中写到的关于 Blog 的想法,而这里的第三阶段的实现就是利用 GitHub Pages 搭建博客。
程序员小明
2019/10/14
7.6K0
这可能是迄今为止最全的hexo博客搭建教程
基于docsify+github+typora构建个人知识库
​ docsify,一款神奇的文档网站生成器,可以快速生成文档网站。不同于 GitBook、Hexo 的地方是,它不会生成静态的 .html 文件,所有转换工作都是在运行时。如只需要创建一个 index.html 就可以开始编写文档并直接部署在github pages上(小清新的样式,干净简洁)
hahah
2022/08/30
9900
推荐阅读
相关推荐
免费二级域名怎么弄呢?二级域名怎么关闭?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验