在本文中,我们从一个简单的智能合约样例出发,通过对智能合约源文件结构的剖析与介绍,使大家对Solidity语言有一个初步的认识。最后,我们将该智能合约样例在 Remix 合约编译器中编译、部署,观察其执行结果。

开始之前

在开始之前,我们先对Solidity有个初步的了解,即Solidity是什么?

让我们看一下官方的描述:

  1. Solidity是一种面向对象(合约)的,为实现智能合约而创建的高级编程语言;
  2. Solidity是一种针对以太坊虚拟机(EVM)设计的语言,它受到了C++、Python和JavaScript的影响;
  3. Solidity是一种静态类型语言,支持复杂的用户定义编程,支持库和继承。

合约样例

下面是一个简单的合约例子,我们用来演示如何用Solidity编写一个简单的智能合约。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;// 第一个合约
contract HelloWorld {// 状态变量string public str = "Hello World!";// set 函数function set(string memory s) public {str = s;}// get 函数function get() public view returns(string memory) {return str;}
}

合约结构

版权许可

// SPDX-License-Identifier: MIT

版本许可位于源文件中的第1行,用于定义合约的版权许可标识。虽然不是强制的,但我们建议在每个源文件中都应该以这样的代码开始,来说明合约的版权许可证。如果你不想指定一个许可证,或者如果源代码不开源,请使用特殊值 UNLICENSED

版本标识

pragma solidity ^0.8.13;

版本标识位于源文件中的第2行,用于定义Solidity的版本,其中 pragma 是定义版本标识的关键字。

这行代码表示不允许低于 0.8.7 版本的编译器编译,也不允许高于 0.9.0 的编译器编译,即使用的编译器版本介于 0.8.7 与 0.9.0之间。

Solidity编译器版本规范如下:

序号 版本规范 说明
1 ^0.5.1 指定的主版本号下所有更新的版本。即匹配 0.5.1 ~ 0.6.0 之间的版本
2 ~0.5.1 指定的主版本号与次版本号下所有更新的版本。即匹配 0.5.1 ~ 0.5.9 之间的版本
3 >=0.5.1 版本号大于等于0.5.1,匹配 >=0.5.1 的所有版本
4 <=0.5.1 版本号小于等于0.5.1,匹配 <=0.5.1 的所有版本
5 x 匹配所有版本
6 0.5或0.5.x 匹配指定主版本号与次版本号下的所有版本

截止到目前,Solidity的编译器版本已更新到 0.8.15。我们建议在编译部署合约时,应该尽量使用最新版本,因为新版本会有一些新特性以及bug修复。

合约类(对象)

contract HelloWorld {// 函数和数据
}

在Solidity语言中,合约类似于其他面向对象编程语言中的类。contract 是定义合约类的关键字,HelloWorld 是合约名称。我们建议合约名称和本地文件名用同一个名称,且第一个字母大写。

合约还可以从其他合约继承,可以是一些特殊的合约,比如库(library)和接口(interface)。这些知识点我们会在后续的课程中讲解。

状态变量

string public str = "Hello World!";

这段代码中的 str 就是一个状态变量,它是一个永久存储在合约存储中的值。

函数

function set(string memory s) public
function get() public view returns(string memory)

函数是合约代码的可执行单元,函数通常在合约内部定义。函数一般有以下几部分组成:

  • 函数名
  • 参数
  • 返回值

在样例代码中,我们定义了2个函数:

  • set():用于设置状态变量的值;
  • get():用于返回状态变量的值。

注释

合约中的注释有单行注释(//)和多行注释(/*...*/)两种,和C++的注释类似。

// 这是一个单行注释/*这是一个多行注释
*/

合约部署

我们推荐使用Remix来开发简单合约。

Remix 是一个合约开发和编译器,可以在线使用,而无需安装任何东西。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hv3XOyUM-1669021104665)(D:\资料\我的\项目\IT培训项目\区块链\课程\Solidity语言基础教程\images\remix.png)]

我们在Remix中编译、部署和运行这个样例合约。执行结果如下图:

以太坊智能合约开发:Solidity 语言快速入门相关推荐

  1. 以太坊智能合约基础——Solidity语言的计量单位和全局变量

    本文重点介绍 Solidity 语言的计量单位和全局变量,包括以太币单位.时间单位.特殊变量和函数三个类别.本文内容来源于 Solidity 0.8.12 版本. 以太币单位 以太币 Ether 单位 ...

  2. 以太坊智能合约开发(truffle box pet-shop为例)

    开发环境 我在ubuntu环境下开发的,建议装好vscode,nodejs .选用别的编译器也可以. 装好nodejs后装一下truffle. npm install -g truffle truff ...

  3. 以太坊智能合约开发(四):Solidity转账智能合约实验

    以太坊智能合约开发(四):Solidity转账智能合约实验 1 合约编写 2 在线调试 1 合约编写 编写一个分布式转账智能合约,部署合约的人为合约管理员,只有管理员可以为其他用户发放代币,其他用户之 ...

  4. 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    以太坊智能合约开发(五):Solidity成绩录入智能合约实验 1 编写智能合约 1 编写智能合约 每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名.老师部署合约StudentS ...

  5. Python以太坊智能合约开发指南

    在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询"ERC20代币教程",你会发现有关如何做到这一点的大量信息.以编程方式与合约交互完全是另一回事,如果你是一个 ...

  6. 一起学:以太坊智能合约开发

    课程介绍 无论在科技圈还是金融圈,"区块链"俨然成了最热的词汇.2016年,区块链写入了国家的十三五规划中:2017年,央行基于区块链技术的数字票据交易平台测试成功:同年,工信部发 ...

  7. 以太坊智能合约开发 | 一个资深技术专家的心路历程

    原创: 杨镇 一块链习社区 微信号yikuailianxishequ 本文作者杨镇, 以太坊黄皮书中译者,资深以太坊专家.曾独立中译了以太坊 Homestead 官方文档,Solidity 官方文档中 ...

  8. 以太坊智能合约开发-《精通以太坊智能合约开发》学习总结实践

    文章目录 一.初探以太访智能合约 1. remix小demo 2. 写智能合约用的编程语言 二.以太坊核心概念 1. 交易/事务( Transaction ) 2. 区块 3. 共识协议:工作量证明( ...

  9. 基于以太坊智能合约开发

    1.学习solidity语言.官网学习网址,https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts. ...

  10. 以太坊智能合约开发第七篇:智能合约与网页交互

    原文发表于:以太坊智能合约开发第七篇:智能合约与网页交互 上一篇中,我们通过truffle开发框架快速编译部署了合约.本篇,我们将来介绍网页如何与智能合约进行交互. 编写网页 首先我们需要编写一个网页 ...

最新文章

  1. 新生赛(2) problem 2 丁磊养猪
  2. linux jrdmm 命令 局部 编译,Cgminer-4.10.0 Linux 挖矿
  3. Dubbo(二)之SpringBoot nacos集成
  4. angular封装富文本编辑器指令
  5. 转债---Pregel: A System for Large-Scale Graph Processing(译)
  6. 谈谈-Android状态栏的编辑
  7. 田园主义创始人发布致歉声明:测算失误导致热量差异
  8. iPhone 九、十月份在中国销量曝光:真的卖疯了!
  9. RTOS原理与实现10:互斥信号量实现
  10. vue如何获取div的宽度_vue获取dom元素高度的方法
  11. 苹果鸠占鹊巢打败微软 纳德拉欲以其人之道还治其身
  12. JS实现60s倒计时(亲测有效),及span标签如何使用和禁用onclick事件
  13. Luogu2572 [SCOI2010]序列操作
  14. 华为USG6000V防火墙简单配置案例
  15. MSP430初学three
  16. React-native项目中如何使用阿里字体库呢?
  17. 我爱过你吗--我看美丽心灵的永恒阳光
  18. 微信小程序【网易云音乐实战】(第三篇 自定义组件、排行榜的制作、内网穿透、tabBar、个人中心)
  19. react-native-beacons-manager扫描beacons为空数组(android)--工作笔记
  20. 2014522420145238《信息安全系统设计基础》实验一 开发环境的熟悉

热门文章

  1. xposed 的基本使用
  2. 软件测试之用例编写的八大要素
  3. 【接口测试】JMeter测试WebSocket接口
  4. MathType改变字体大小
  5. 面具busybox模块_自定义内核及busybox系统定制
  6. RPC - 如何动手实现一个简单RPC框架 - 学习/实践
  7. Java选择题(二十七)
  8. C语言scramp函数,【C语言】实现strcat
  9. 沃嘉工业机器人及自动化_自动化工业机器人
  10. PLSQL Developer 中文绿色版 免安装 免费下载