首页 > 其他分享 >Solidity 智能合约文件结构

Solidity 智能合约文件结构

时间:2022-12-04 23:00:23浏览次数:63  
标签:function 0.8 Solidity 函数 uint256 solidity 智能 合约 public

变量

  • 局部变量
  • 在函数内部声明
  • 不存储到链上
  • 状态变量
  • 在函数外部声明
  • 状态变量是永久地存储在链上的值。
  • 全局变量
  • 提供有关区块链的信息
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Variables {
// State variables are stored on the blockchain.
string public text = "Hello";
uint public num = 123;

function doSomething() public {
// Local variables are not saved to the blockchain.
uint i = 456;

// Here are some global variables
uint timestamp = block.timestamp; // Current block timestamp
address sender = msg.sender; // address of the caller
}
}

函数

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

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

contract Storage {
function set() public { // 定义函数
// ...
}
}

function OutsideFunc(uint x) pure returns (uint) {
return x * 2;
}

函数修改器(modifier)

函数 修改器modifier 可以用来以声明的方式修改函数语义。参阅 Solidity 函数章节中 ​​函数修改器​

pragma solidity >=0.8.0 <0.9.0;

contract MyContract {
address public owner;

modifier onlyOwner() { // 修改器
require(
msg.sender == owner,
"is not owner."
);
_;
}

function send() public onlyOwner { // 修改器用法
// ...
}
}

事件 Event

事件是能方便地调用Ethereum虚拟机日志功能的接口。

pragma solidity >=0.8.0 <0.9.0;

contract MyEvents {
event Cardbinded(address caller, string account); // 事件

function bindCard() public payable {
// ...
emit Cardbinded(msg.sender, msg.value); // 触发事件
}
}

具体参阅 ​​Solidity 事件章节​​ 了解如何声明和在 DApp 中使用。

错误 Errors

Solidity 为应对失败,允许用户定义 ​​error​​ 来描述错误的名称和数据。 跟用错误字符串相比, ​​error​​ 更便宜并且允许你编码额外的数据,还可以用 NatSpec 为用户去描述错误。

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;

error NotFoundUser(address account, uint256 uid);

contract Token {
mapping(address => uint256) users;

function getUser(address _account, uint256 _uid) public view {
uint256 uid = users[msg.sender];
if (uid < _uid) {
revert NotFoundUser(_account, _uid);
}
// ...
}
}

结构体

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

pragma solidity >=0.8.0 <0.9.0;

contract Users {
struct User { // 结构体
string nickname;
uint age;
bool state;
}
}

枚举

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

pragma solidity >=0.8.0 <0.9.0;

contract UserState {
enum State { Online, Offline, Unknown } // 枚举
}

接口

和其他编程语言一样,但是它们不能实现任何函数。

pragma solidity >=0.8.0 <0.9.0;

interface PaymentOrder {
function createOrder(string orderId) external returns (uint256);
function payOrder(string orderId) external returns (uint256);
function cancelOrder(string orderId) external returns (uint256);
}

标签:function,0.8,Solidity,函数,uint256,solidity,智能,合约,public
From: https://blog.51cto.com/sleep666/5910108

相关文章

  • 世界杯竞猜项目Dapp-第一章(合约开发)
    前言最近卡塔尔世界杯如火如荼,让我们一起来尝试利用solidity语言做一个世界杯竞猜的Dapp实战项目,本次实战学习主要参考:https://github.com/dukedaily/solidity-expert......
  • AI人工智能-python
    AI概念语音合成可将文字信息转化为声音信息语音识别可将语音识别为文字百度ai平台页面熟悉              创建应用     ......
  • Topaz Video Enhance AI2.0无损智能AI视频处理工具,变4K 8K
    关注微信公众号【工控羊】或者微信号【gksheep】,微信公众号后台输入数字编号【0030】即可获取下载链接。......
  • 无线水分传感器智能传感、无线通信
     无线水分传感器智能传感、无线通信无线水分传感器无线通信实时看数是使用物联网进行土壤水分数据传输的传感器,基于智能传感、无线通信、智能处理与智能控制等物联网技术的......
  • 0、智能座舱学习思路
    1、车载测试的发展现状与前景2、汽车测试工程师的工作职责3、汽车电子系统及常用功能介绍4、汽车Can、Lin、Flexray协议介绍5、Canoe工具的安装步骤6、Canoe......
  • 医学人工智能:用算力与时间赛跑,推动医疗均质化
    “时间就是生命”,没有哪个时刻会比抢救过程更能印证这句话。分秒必争、先行一步……在救护过程中缩短时间、提高诊治效率,有些人的命运或许就会被改变。45岁的王大成是一名社......
  • 智能眼镜抓取log和安装和卸载的一些命令
    安装在智能眼镜里的也是个APK文件因此adb命令都是一样的 adbdevicesadblogcat-vtime>log.txtadbinstall adbuninstallbzh.ama.xperteye.vkadbuninstallbz......
  • 基于边缘计算技术的综合管廊智能化电气设计与应用研究
    罗轩志安科瑞电气股份有限公司 上海嘉定 201801摘要:文章采用物联网技术云、边、端全方面的应用,开发物联网边缘计算控制器和物联网平台,提高管廊感知能力,降低集成难度,从而......
  • 智能洗手液机的缺液检测
    随之智能技术的飞速发展,普通的洗手液机也被智能化。智能洗手液机检测液位是通过水位传感器来实现的。水位传感器利用的光学原理来检测的,内部是由发射器和接收管组成。根据红......
  • 人工智能领域的视频方向
    人工智能领域的视频方向视频增强 VideoEnhance主要功能:(1)增强画面最高可达8K。(2)提升低质量视频的品质。(3)视频降噪与去除色块 视频结构化视频结构化分析采用目标......