solidity学习笔记
1、智能合约基础
智能合约关键字
1、状态变量是放在区块链上
2、view修饰的函数,读取和访问状态变量,表示访问状态变量(区块链上的数据),但是不会修改,仅限于访问,不消耗资源
3、pure修饰的函数,不修饰也不读取状态变量(区块链上的数据),不会消耗任何资源
4、不用view,pure等修饰的函数,会修改区块链上的数据,会消耗资源
5、memory是存储方式
solidity 变量,常量,标识符,关键字
状态变量:只要在合约中直接定义的变量
局部变量:除状态变量外,其余全是局部变量
在solidity中,所有需要命名的都是标识符,如合约名称,变量名等
标识符的命名规则
字符,数字,下划线,$组成,不能以数字开头,要见名知意,按照这个函数是什么作用来命名,区分大小写,多个单词组成是要按照驼峰式命名规则。
关键字:不能被当成标识符使用,在remix中所有变颜色的都为关键字,不可使用
数据类型分类-值类型/基本类型-布尔bool、整数型int/uint,地址address,定长字节数组,定长浮点fixed/ufixed,枚举类型enum,函数类型function
int8代表能够用8位存储数据,依此类推int256能够用256位存储数据
设定n
-2n-1 ~~ 2n-1-1
byte <== >bytes1
returns定义一个怎样的返回类型
引用类型-数组array-不定长字节数组bytes,字符串string,结构体struts,映射mapping
引用类型地址拷贝
值类型值拷贝
运算符和表达式
共分为位运算,赋值运算,算术运算,关系运算,逻辑运算
a++ 先加上a的值,再将a+上1
++a 先将a加上1,再使用a的值
除法运算,使用变量运算时,是截断的,但是用整形的常量则不截断
定长不考虑用new的方式
solidity的变长数组写在uint [] x = new uint[](4);
length:长度,获取长度,修改length修改数组的长度,但0.6.0以上的版本无论定长还是变长不能通过length修改数组的长度
push:定长数组不能用push ,变长数组storage可以变,memory不能放。
状态变量默认的位置在stroge,所以uint[] fix,可以用push方法往uint[] fix存放数据
memory定义的变长数组不能使用push
变长数组可以直接赋值也可以push,但是用push只存在于变长数组是存在stroa ge,也就是数据位置在stroge中
返回数组
变长第一次使用push
下标越界是:长度是5的数组,如果下标是从0-4算,到了5就会抛出异常
加不加memroy的前提是:只用引用数据类型才需要定义存储在memroy还是storage中,除此之外的基本数据类型是不用定
byte这样写的数组不会给压缩打包,比较浪费空间,作为参数被外部应用去调用时并不会去压缩打包
solidity中每个汉字占3个字节
定长字节数组bytes1 。。。 bytes2
变长字节数组
定长字节数组如何如何转变长字节数组
实现借助于bytes方法
bytes,byte里面都是字节的方式保存数据,string:utf-8
byte定长字节数组 to string 没有,需要借助bytes,定长转变长,在用string()把bytes转成string格式
如果字符串的长度固定(长度可以确定)情况下,建议使用bytes32,代替string,从消耗gas方面考虑,bytes32gas消耗更少
1、数组字面量
__EOF__

本文链接:https://www.cnblogs.com/zaleswift/p/15973729.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~