Solidity 基础知识
Solidity 基础知识
官网:Solidity
版本设置
// SPDX-License-Identifier:MIT 表示身份协议
// ^0.8.7 表示当前代码支持 0.8.7 及以后 solidity 版本
// >=0.8.7 <0.8.12 表示支持该范围的版本
pragma solidity 0.8.7;
基本数据类型
// 基础数据类型:boolean uint(无符号整数) int address bytes
bool sutFlag = true;
// uint 存储空间大小可以设置 最少设置 8(1 bit 占 8 位,以 2 的指数倍设置) 默认是 256 一般都显式定义出来 如果不赋值默认为 0
uint256 public studentNum = 123;
// bytes 一般是 0x 开头接一些随机的数字字母,这里存的字符串 xiao,会自动转成 bytes,最大空间是 32
bytes32 stuName1 = "xiao";
// string 只能用来存字符串
string stuName = "panda";
函数和变量的四种可见标识符
- public
public 外部和内部可见(为存储/状态变量创建一个getter 函数) - private
仅在当前合约中可见 - external
仅在外部可见(仅适用于函数) - 即只能被消息调用(通过this.func) - internal
只在内部可见
不消耗 gas 的两种关键字
- view:标识函数代表只读,不允许在当前函数中修改任何状态
- pure:不允许修改状态,同时不允许读取区块链数据
注意:如果一个要改变区块链状态的函数调用了 view 或者 pure 函数,还是会消耗 gas。
结构体
// 定义
struct People {uint256 num;string name;
}
// 使用
People public person = People({myNum: 2, name: "panda"});
数组
People[] public persons;
function addPeople(string memory _name, uint256 _num) public {// 两种创建数组的方式persons.push(People(_num, _name));People memory person = People({myNum: 2, name: "panda"});persons.push(person);// 映射habbitMap[_name] = _num;
}
映射
mapping(string => uint256) public habbitMap;
EVM 存储
- Stack:栈内存存储
- Memory:变量只存在于临时的,可以再次赋值,且仅用于数组,结构体,映射对象(string 是字节数组)
- Storage:即使在执行的函数外,也存在变量
- Calldata:调用数据,变量只存在于临时的,当变量使用 calldata 定义时,变量不能再次赋值
- Code
- Logs
Solidity 基础知识相关推荐
- 区块链基础知识与关键技术解析
区块链基础 1. 区块链的来龙去脉 1.1 区块链技术起源 1.2 比特币产生背景与现状 1.3 数字货币概念 1.4 比特币技术原理 2. 区块链概念与产业现状 ...
- Solidity 基础(一)
Solidity 官网 github Solidity是一种静态类型的花括号(curly-braces)编程语言,旨在开发运行在以太坊(Ethereum)上的智能合约. Solidity正在迅速发展 ...
- web3.js基础知识简单汇总
使用JavaScript 来开发 DApp时,很多时候需要使用到 web3.js.当然,也可以选择使用ethers.js web3基础知识和社区术语: Web3:web3.js 是一个库集合,可以使用 ...
- 嵌入式Linux的OTA更新,基础知识和实现
嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...
<计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
最新文章
- nodemanager不能正常关闭_在什么情况下不能使用罗茨风机及如何正确关闭罗茨风机...
- 第一课 PHP学习要求
- Type对象获得泛型类型的两个扩展方法
- 项目范围管理:WBS
- 在linux下玩转usb摄像头
- 为什么那么多人要学Java?这三个原因告诉你
- linux 命令分类,常用linux 命令分类整理(篇一)
- linux文件权限报错实例,自定义系统service SELinux权限报错
- Coursera自动驾驶课程第11讲:2D Object Detection
- python后端需要什么基础_【后端开发】python爬虫需要什么基础
- C#LeetCode刷题之#707-设计链表(Design Linked List)
- Elasticsearch(三) 使用kibana 操作ES
- Kafka-集群部署
- 文本分类-TextCNN
- JavaScript小案例------js实现分页插件效果篇
- 微博是一种倒退,而非革命
- Jmeter打开badboy录制的脚本报类元素错误解决方法
- 《应届生求职笔试全攻略》学习笔记(四)——招聘笔试题分类详解
- iOS指纹识别(解锁)
- setTimeout()的返回值