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 区块链技术起源     1.2 比特币产生背景与现状     1.3 数字货币概念     1.4 比特币技术原理 2. 区块链概念与产业现状   ...

  2. Solidity 基础(一)

    Solidity 官网 github Solidity是一种静态类型的花括号(curly-braces)编程语言,旨在开发运行在以太坊(Ethereum)上的智能合约. Solidity正在迅速发展 ...

  3. web3.js基础知识简单汇总

    使用JavaScript 来开发 DApp时,很多时候需要使用到 web3.js.当然,也可以选择使用ethers.js web3基础知识和社区术语: Web3:web3.js 是一个库集合,可以使用 ...

  4. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...

  5. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  6. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  7. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...

    <计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...

  8. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  9. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

最新文章

  1. nodemanager不能正常关闭_在什么情况下不能使用罗茨风机及如何正确关闭罗茨风机...
  2. 第一课 PHP学习要求
  3. Type对象获得泛型类型的两个扩展方法
  4. 项目范围管理:WBS
  5. 在linux下玩转usb摄像头
  6. 为什么那么多人要学Java?这三个原因告诉你
  7. linux 命令分类,常用linux 命令分类整理(篇一)
  8. linux文件权限报错实例,自定义系统service SELinux权限报错
  9. Coursera自动驾驶课程第11讲:2D Object Detection
  10. python后端需要什么基础_【后端开发】python爬虫需要什么基础
  11. C#LeetCode刷题之#707-设计链表(Design Linked List)
  12. Elasticsearch(三) 使用kibana 操作ES
  13. Kafka-集群部署
  14. 文本分类-TextCNN
  15. JavaScript小案例------js实现分页插件效果篇
  16. 微博是一种倒退,而非革命
  17. Jmeter打开badboy录制的脚本报类元素错误解决方法
  18. 《应届生求职笔试全攻略》学习笔记(四)——招聘笔试题分类详解
  19. iOS指纹识别(解锁)
  20. setTimeout()的返回值

热门文章

  1. MySQL进阶:sql性能分析
  2. 模型融合(集成方法) -投票法
  3. Android初学习
  4. cuda编程以及GPU基本知识
  5. 爬取东方财富网的部分股票信息(2)
  6. 数字孪生智慧医院:构建三维医疗管控系统
  7. 11个简单的Java性能调优技巧
  8. 属性表中的 <空> 空格 和 空白
  9. FPGA 双按键控制LED呼吸灯实现
  10. Python调试器-Pdb的简介及调试命令