solidity基础语法(以太坊solidity合约)

solidity基础语法(以太坊solidity合约)

  • 1-值类型和取值范围
  • 2-引用类型
  • 3-引用类型高阶
  • 4-固定数组和动态数组

1-值类型和取值范围

https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency

https://learnblockchain.cn/docs/solidity/types.html

在这里插入图片描述

定长数组是值类型,不定长数组是引用类型

String也是引用类型

字符串、不定长数组及结构体都是引用类型

在这里插入图片描述
在这里插入图片描述

当部署出现问题等等,但代码无错时,尝试离开网站,再次进入重新编译部署
在这里插入图片描述

注意solidity版本

值类型修改_a不会影响到_b,只是值的复制

而引用类型则是会影响的

在这里插入图片描述
在这里插入图片描述

Demo1和demo2的合约区分类型unit

pragma solidity >=0.4.0 <0.7.0; // 声明solidity的版本// 创建一个智能合约(合约名第一个字母一般大写)
contract Demo01{uint _a;    //solidity命名规范下划线_a,若直接a,在下面的函数中无法识别变量auint _b;  // 整型属于值类型,赋值的本质是拷贝数据// 函数(无返回值,传入i,赋值给_a、_b)function setAll(uint i) public{_a = _b = i;}//solidity命名规范下划线_afunction setA(uint a) public{_a = a;}// view: 代表当前函数不会修改账本的数据,只读函数,不会修改账本数据,不写也行会有警告// int uint 大小默认是256//returns (uint,uint) 具有返回值function getAB() public view returns (uint,uint){return (_a,_b);}}contract Demo02{uint8 _a;  // 0~255int8 _b;  // 整型属于值类型,赋值的本质是拷贝数据  -128 ~127// 函数function setAll(uint8 a,int8 b) public{_a = a;_b = b;}function setA(uint8 a) public{_a = a;}// view: 代表当前函数不会修改账本的数据// int uint 大小默认是256,可以接受unit8的类型(当输入值300则超出unit界限255,int8 128范围)function getAB() public view returns (uint,int){return (_a,_b);}}

编译成功

值类型修改_a不会影响到_b,只是值的复制

而引用类型则是会影响的

// int uint 大小默认是256

在solidity中unit256,8等等类型

非常多的细微类型,java中硬件便宜,智能合约写的成本很高,所以严格限制写的操作

数据类型大小非常严格

设计使用等非常严格

2-引用类型

https://learnblockchain.cn/docs/solidity/types.html#reference-types

在这里插入图片描述

值类型是不断复制

告诉程序,引用类型是存到内存中作为临时变量还是存在状态中作为永久的变量

之前的合约,参数默认存储memery局部变量

内存memary临时的

存储storyge永久的

现在引用,不同的引用类型数据位置相互赋值

多了数据存储位置的概念在solidity

下方重要

pragma solidity >=0.6.1 <0.7.0;
// 1: solidity: 数据类型:值类型,引用类型 (数组、结构体,映射、字符串(bytes数组)// 2: 值传递是副本,而引用类型既可传递指针,也可传递副本(传递规则受数据位置影响)// 3: 三种位置,先掌握内存与存储变量// 1: 内存,局部变量 --> 函数调用完毕后消失// 2: 状态,全局变量  ---> 随着合约部署到区块链中(以太坊分布式账本) // 3: 调用数据 (暂时理解成内存变量 略)// 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定)// 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针// 注意:在版本0.5.0之前,数据位置可以省略,在0.5.0之后需要指定
contract RefType{function modifyName(string memory name) pure public returns(string memory){// 声明临时string类型的变量// string memory name1 = name;// // string是可变量的,但是可以先强转为字符数组// bytes(name1)[0] = 'J';string memory name1 = name;bytes(name)[0] = 'J';return name1;}
}

在这里插入图片描述

修改name1返回name1,值变了

修改name返回name1则和上面的结果一样

相同的引用类型是指针复制

即传入的string memory name和赋值string memory name1 = name;都是相同的引用类型,是指针赋值

在这里插入图片描述

引用类型必须指定数据存储位置,数据存储位置还会影响引用类型之间的赋值

3-引用类型高阶

如果是引用类型,并且它的数据位置是memary,则其传递的是指针,没有产生相应的副本

pragma solidity >=0.6.1 <0.7.0;//contract RefType{// 状态变量 storage (不能修改为内存变量)(此类变量会随着合约的部署存储到分布式账本,后面的众筹的钱就要存到状态变量中//否则内存变量一旦执行完毕就会消失)string public _name = "solidity";   //加入的public为访问修饰符,若不加,编译部署后,在左下测无此变量。Public任何的属性和函数都可以访问function f() public{modifyName(_name);}// public 函数参数和返回数据类型必须为memory
// internal 受保护的函数,仅仅自身合约或者子合约(支持继承)才能被调用
//pure代表不能对当前变量读写所以去掉,下方在进行读写
//下方传入状态变量
//函数中赋值也为状态变量,数据存储位置相同传递的是指针,即更改某个只会影响到另一个值function modifyName(string storage name) internal{// storage name --> storage name1 传递的是指针//  string storage name1 = name; // storage name --> memory name1 传递的是数据的副本  string memory name1 = name; bytes(name1)[0] = 'S';}
}string public _name = "solidity";   //加入的public为访问修饰符,若不加,编译部署后,在左下测无此变量// 1: solidity: 数据类型:值类型,引用类型 (数组、结构体,映射、字符串(bytes数组)有些合约需要存储到分布式账本,所以在solidity中不但有数据类型还有数据类型所存的位置,存储位置针对引用类型和值类型无关// 2: 值传递是副本,而引用类型既可传递指针,也可传递副本(传递规则受数据位置影响)// 3: 三种位置,先掌握内存与存储变量// 1: 内存,局部变量 --> 函数调用完毕后消失// 2: 状态,全局变量  ---> 随着合约部署到区块链中(以太坊分布式账本) // 3: 调用数据 (暂时理解成内存变量 略)// 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定)// 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针

状态变量默认是storyge存储类型的

4-固定数组和动态数组

pragma solidity >=0.6.0 <0.7.0;// 数组是数据类型, 但更具体的说,它是依赖其它数据类型的数据结构(数组指的是相同类型的数值组)// Solidity中的数组可以是固定数组或者动态数组contract ArrDemo{// 固定数组:声明时预定了大小的数组,而且后期不能修改uint[5] age;
// 动态数组: 声明时没有预定大小的数组,可以新增元素
//后期商品的众筹,但是平台有多少个商品,初始是不知道的,商品是个复杂结构体uint[] age2 =  [uint(10),20,30,40];//构造函数constructor()public{age = [uint(10),20,30,40];//初始化了4个元素,最后第五个元素未初始化默认零}// 通过for + length循环来进行迭代function sum() public view returns(uint){uint total = 0;for(uint i =0;i<age.length;i++){total += age[i];}// 固定数组Length不能修改// age.length = 10;return total;}// 固定数组可以通过index对数组的值进行操作, 但是不能新增function setValue(uint index,uint value)public{age[index] = value;// 静态数组没有push函数// age.push(value);}function sum2() public view returns(uint,uint){uint total = 0;for(uint i =0;i<age2.length;i++){total += age2[i];}// 固定数组Length不能修改// age.length = 10;return (total,age2.length);	//返回多个值需要括号}// 动态数组支持新增操作(length大小是可以扩充的)function addValue(uint val) public{age2.push(val);}}

数组的遍历数组的更新,对动态数组的添加操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3247124.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

WEB前端06-DOM对象

BOM浏览器对象模型 浏览器对象模型&#xff1a;将浏览器的各个组成部分封装成对象。是用于描述浏览器中对象与对象之间层次关系的模型&#xff0c;提供了独立于页面内容、并能够与浏览器窗口进行交互的对象结构。 组成部分 Window&#xff1a;浏览器窗口对象 Navigator&…

Hadoop3:HDFS存储优化之小文件归档

一、情景说明 我们知道&#xff0c;NameNode存储一个文件元数据&#xff0c;默认是150byte大小的内存空间。 那么&#xff0c;如果出现很多的小文件&#xff0c;就会导致NameNode的内存占用。 但注意&#xff0c;存储小文件所需要的磁盘容量和数据块的大小无关。 例如&#x…

电脑压缩视频文件 电脑压缩视频大小的方法

在数字化时代&#xff0c;视频已成为我们记录生活、分享快乐的重要工具。然而&#xff0c;大尺寸的视频文件常常让分享和存储变得棘手。如何在保持视频画质的前提下&#xff0c;轻松减小视频文件大小&#xff1f;今天&#xff0c;就让我们一起探索苹果电脑上的几种高效视频压缩…

iPhone手机怎么识别藏文?藏语翻译通App功能介绍:藏文OCR识别提取文字

在工作学习的过程中&#xff0c;遇到不会的藏文&#xff0c;也不知道怎么把文字打出来&#xff0c;这个时候可以试试《藏语翻译通》App的图片识别功能&#xff0c;支持拍照识别和图片识别&#xff0c;拍一拍就能提取藏文文字&#xff0c;并支持一键翻译和复制分享。 跟着小编的…

数据结构之双向链表(赋源码)

数据结构之双向链表(源码) 线性表 双向链表是线性表链式存储结构的一种&#xff0c;若对链式存储结构进行分类可以分为八种。 带头、不带头&#xff1a;指的是该连链表有无头节点&#xff0c;头节点不存放任何内容&#xff0c;它不一定是链表必备的元素&#xff0c;而一个链…

十五、【机器学习】【监督学习】- 神经网络回归

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

RPA鼠标按键使用技巧

RPA鼠标按键使用技巧 Mouse.MouseAuto.Action命令出错&#xff0c;调用的目标发生了异常&#xff0c;Exception in Mouse.Action元素不可用怎么解决 出现问题 1.想要实现的效果鼠标移动到录屏工具的小球上2.点击开始按钮开始录屏现象&#xff0c;鼠标没有移动痕迹&#xff0c…

C1W4.Assignment.Naive Machine Translation and LSH

理论课&#xff1a;C1W4.Machine Translation and Document Search 文章目录 1. The word embeddings data for English and French words1.1The dataThe subset of dataLoad two dictionaries 1.2 Generate embedding and transform matricesExercise 1: Translating English…

华为的热机备份和流量限制

要求&#xff1a; 12&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW4&#xff0c;生产区和办公区的流量走FW5 13&#xff0c;办公区上网用户限制流量不超过100M&#xff0c;…

智慧博物馆的“眼睛”:视频智能监控技术守护文物安全与智能化管理

近日&#xff0c;位于四川德阳的三星堆博物馆迎来了参观热潮。据新闻报道&#xff0c;三星堆博物馆的日均参观量达1.5万人次。随着暑假旅游高峰期的到来&#xff0c;博物馆作为重要的文化场所&#xff0c;也迎来了大量游客。博物馆作为文化和历史的重要载体&#xff0c;其安全保…

QT应用编程: window下QT程序异常捕获并生成DMP文件、PDB文件

文章目录 main.cpp代码捕获异常 生成dmp文件和pdb文件DebugTest生成错误代码注意 分析软件崩溃&#xff0c;除了需要dmp&#xff0c;还需要这个pdb文件 dmp&#xff0c;文件记录了崩溃的信息&#xff0c;而pdb&#xff08;代码工程数据库&#xff09;&#xff0c;则包含了你写的…

全局 loading

好久不见&#xff01; 做项目中一直想用一个统一的 loading 状态控制全部的接口加载&#xff0c;但是一直不知道怎么处理&#xff0c;最近脑子突然灵光了一下想到了一个办法。 首先设置一个全局的 loading 状态&#xff0c;优先想到的就是 Pinia 然后因为页面会有很多接口会…

AI软件小说推文直接生成漫画短视频,小说推广项目的辅助工具,前端uniapp。

有哪些AI的软件是比较热门的&#xff1f; 以下是一些常用的网页AI软件&#xff0c;可以用于绘图&#xff1a; Canva&#xff1a;Canva是一个非常受欢迎的网页平台&#xff0c;提供各种图形设计和绘图工具。它具有易于使用的界面和大量的模板和元素&#xff0c;可以帮助你创建出…

Qt 使用Installer Framework制作安装包

Qt 使用Installer Framework制作安装包 引言一、下载安装 Qt Installer Framework二、简单使用2.1 创建目录结构 (文件夹结构)2.2 制作程序压缩包2.3 制作程序安装包 引言 Qt Installer Framework (安装程序框架)是一个强大的工具集&#xff0c;用于创建自定义的在线和离线安装…

【网络安全】PostMessage:分析JS实现XSS

未经许可&#xff0c;不得转载。 文章目录 前言示例正文 前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口&#xff08;例如&#xff0c;来自同一域名下的不同页面或者不同域名下的跨域页面&#xff09;进行通信&#xff0c;而无需通过服务器…

【线程系列之五】线程池介绍C语言

一、基本概念 1.1 概念 线程池&#xff08;Thread Pool&#xff09;是一种基于池化技术管理线程的机制&#xff0c;旨在减少线程创建和销毁的开销&#xff0c;提高系统资源的利用率&#xff0c;以及更好地控制系统中同时运行的线程数量。线程池通过预先创建一定数量的线程&am…

Qt模型/视图架构——委托(delegate)

一、为什么需要委托 模型&#xff08;model&#xff09;用来数据存储&#xff0c;视图&#xff08;view&#xff09;用来展示数据。因此&#xff0c;模型/视图架构是一种将数据存储和界面展示分离的编程方法。具体如下图所示&#xff1a; 由图可知&#xff0c;模型向视图提供数…

Python | Leetcode Python题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:length len(nums)# L 和 R 分别表示左右两侧的乘积列表L, R, answer [0]*length, [0]*length, [0]*length# L[i] 为索引 i 左侧所有元素的乘积# 对于索引为…

一文掌握Prometheus实现页面登录认证并集成grafana

一、接入方式 以保护Web站点的访问控制&#xff0c;如HTTP 服务器配置中实现安全的加密通信和身份验证&#xff0c;保护 Web 应用程序和用户数据的安全性。 1.1 加密密码 通过httpd-tools工具包来进行Web站点加密 yum install -y httpd-tools方式一&#xff1a;通过htpasswd生…

人工智能 (AI) 应用:一个异常肺呼吸声辅助诊断系统

关键词&#xff1a;深度学习、肺癌、多标签、轻量级模型设计、异常肺音、音频分类 近年来&#xff0c;流感对人类的危害不断增加&#xff0c;COVID-19疾病的迅速传播加剧了这一问题&#xff0c;导致大多数患者因呼吸系统异常而死亡。在这次流行病爆发之前&#xff0c;呼吸系统…