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__

本文作者zale
本文链接https://www.cnblogs.com/zaleswift/p/15973729.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ZaleSwfit  阅读(248)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示