区块链特辑——solidity语言基础(一)
Solidity语法基础学习
一、智能合约的结构:

首先以上是智能合约的结构,包含版权宣告、编译指示、Using for 宣告、错误定义、输入、列举与枚举、常数、合约、函数、注释。第一个注释不同于其他的注释,第一个注释表示为版本宣告,这句话是告诉合约是根据什么版本授权的,SPDX全称为:The Software Package Data Exchange,宣告格式一般为“//SPDX-License-Identifier:Identifier”,其中“Identifier”可以被替换为版式。
接着是告诉编译器源代码所适用的Solidity版本大致格式为“contract ContractName{}”,在这里,“contract”中文为合约,这里不能更改。但后面的ContractName可以自主命名为合约名称。在大括号中即是合约内容。
二、Solidity语言特点:
·静态型态语言(statically typed language)
·所有的变量都需要宣告型态,在编译时就会检查。
·每个型态都有“预设值”,不存在“未定义(Undefined)”或者“没有(Null)”
·主要分为“数值型态(Value Types)”、“参考型态(Reference Types)”、“映射型态(Mapping Types)”
三、数据类型:
布尔值Boolean
Bool VarName = true | false;
·关键字:bool
·宣告一个布尔值
·bool只能有两种值“true”或“false”
·bool的预设值为“false”
代码示例:

整数 Integer
(u)intN VarName = 1234;
·关键字:int,uint,intN,uintN
·int =>宣告一个有号整数(Signed Integer)
·uint =>宣告一个无号整数(Unsigned Integer)
·N =>指定整数的空间大小,N必为8的倍数且落在[8,256]
·预设值为“0”
例:
·int A = -123;
·int8 C =-6;
·uint B =456;
·uint256 D = 123456789;
代码示例:

位移 Address
Address (payable) VarName = 0x……;
·关键字:address
·储存一个以太坊的位址,大小为20Bytes
·关键字:address payable
·payable → 修饰字,允许转移以太该位址
·address X = 0x9A76……;
·address payable Y = payable(0x……)
注:这里的“0x……”这里的为钱包地址。
代码示例:

列举 Enums
Enum Color { Blue,Green }
·关键字:enum EnumName {element1,……}
·建立一个列举型态
·使用:EnumName X = EnumName.element1;
·enum Color { Blue,Green }
·Color C = Color.Blue;
代码示例:

参考型态
Reference Types
·分为三种:
·记忆体(memory)
·当前执行的环境,一旦执行结束以后就会消失。
·储存空间(storage)
·储存在合约的储存空间,在合约被销毁后才会消失。
·呼叫资料(calldata)
·只读(read-only)的特殊资料区
·用以储存函数的参数。
不同位置资源移动
·storage与(memory与calldata)间资料交换,是从暂存到储存,所以需复制一份。
·若从storage移动local storage,也只会建立参考。
·memory到memory,指向参数即可、
·只要是移动到storage,必会发生复制。
代码示例:

位元组 bytes
Bytes VarName = “hi”;
·由于位元组是一种参考型态,因此需要指定存放的位置:memory或storage
·可以取得长度:Var.length;
·可以取得特定位置元素:Var[idx] = ……;
·位元组为存储资料的基本空间
字串 string
string VarName = “hi”;
·由于字符串是一种参考型态,因此需要存放的位置:memory或storage
·目前solidity并不支持原生字符串处理函数:
·无法取得特定的字符串位置,如S[0]。
·比较时需用hash()的方式比较
·keccak256(abi.encodePacked(s1)) == keccak256(abi.encodePacked(s2))
·串接的话则有提供string.concat(s1,s2)
·长度的话要先转换成bytes才能取得:bytes(str).length
·如果是UTF-8的话长度为位元组的长度,而不是单纯的字符串长度。
固定长度阵列 Array
Type[length] memory|storage VarName;
·由于阵列是一种参考型态,因此需要指定存放的位置:memory或storage
·取得长度可透过Var.length
·宣告一个长度为32的int阵列:
·int[32] X;
·X.length会回复32;
动态长度阵列 Array
Type[] memory|storage VarName;
·由于阵列是一种参考型态,因此需要指定存放的位置:memory或storage。
·操作函数:
·Var.length → 回传长度
·Var.pop(x) → 若Var为动态长度阵列或bytes,则将x加入Var的尾端。
·Var.pop() → 若Var为动态长度阵列或bytes,则将最尾端的元素丢弃。
结构 Struct
Struct {……}
·struct S {
·Type Var; //Type 可以是任意型态
·int I;
·address A;
·……
·}
·S s;
·S.I = i;
·s,A = 0x……;
区块链特辑——solidity语言基础(一)的更多相关文章
- 区块链特辑——solidity语言基础(三)
Solidity语法基础学习 五.映射类型: 映射型态 Mapping Type 映射钥匙Key → 真实资料 Value mapping(KeyType → ValueType) VariableN ...
- 区块链特辑——solidity语言基础(六)
Solidity语法基础学习 十.实战项目(二): 1.实战准备: ERC20代币接口 ERC20 Token Interface接口 Interface IName {--} ·关键字:interf ...
- 区块链特辑——solidity语言基础(七)
Solidity语法基础学习 十.实战项目(二): 3.项目实操: ERC20 代币实战 ①转账篇 总发行量函数 totalSupply() return(uint256) ·回传代币的发行总量 ·使 ...
- 比原链CTO James | Go语言成为区块链主流开发语言的四点理由
11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...
- Solidity语言基础 和 Etherum ERC20合约基础
1. 类型只能从第一次赋值中推断出来,因此以下代码中的循环是无限的, 小. for (var i = 0; i < 2000; i++) { ... } --- Solidity Types ...
- 001/Go语言构建区块链(mooc)
1.区块链发展与现状 视频地址:https://www.imooc.com/video/17452 注意: 比特币与以太坊最大的区别在于: 以太坊引入了对图灵完美智能合约的支持,人们可以将任何业务逻辑 ...
- 从Go语言编码角度解释实现简易区块链
区块链技术 人们可以用许多不同的方式解释区块链技术,其中通过加密货币来看区块链一直是主流.大多数人接触区块链技术都是从比特币谈起,但比特币仅仅是众多加密货币的一种. 到底什么是区块链技术? 从金融学相 ...
- 以太坊区块链Java(EthereumJ)学习笔记:概述
本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...
- 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识
给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...
- 区块链火爆,再不知道Golang就晚了
Golang,也叫Go语言,是2009年刚刚被发发布的一门新语言. 区块链,是2019年我国提出的新战略. 一个不争的事实就是,大多数从事区块链开发的小伙伴都是用Golang,大多数招聘区块链技术工作 ...
随机推荐
- jwt-shiro-springsecurity-oauth2对比
1 实现token的方式概述 在cookie\session\token辨析一文已经知道了token这个概念,里面简单说明了token的组成就是数据+签名,给出了token实现身份验证的流程,并且详细 ...
- ABC243
ABC224 D 题目大意 有一个九个点的无向图棋盘,上面有八个棋子,一次操作能将一个棋子沿边移到空点上,问将每个棋子移到与它编号相同的点最少几步. 解题思路 考虑使用 BFS. 用 string 存 ...
- ctfshow 红包题第七弹 .git
.git源码泄露 发现有后们 flag在上级目录里面 直接Letmein=show_source('../flag.txt');就出来了
- 『Python底层原理』--CPython 虚拟机
在 Python 编程的世界里,我们每天都在使用 python 命令运行程序,但你是否曾好奇这背后究竟发生了什么? 本文将初步探究 CPython(Python 中最流行的实现)的一些内部机制,为了更 ...
- Delphi Cxgrid中修改一个单元格,影响另一个单元格的值的实现方法
第一种方法就是使用表格中列的PropertiesValidate方法实现,例如修改单据的数量列,希望重新计算当前行的金额列 //编辑数量时发生 procedure TfrmSkdLr.cxgrdbcl ...
- Apache Amoro数据湖管理和治理工具部署
一.Amoro介绍 2024 年 3 月 11 日,Amoro 项目顺利通过投票,正式进入 Apache 软件基金会(ASF,Apache Software Foundation)的孵化器,成为 AS ...
- NOIp 2024 游记
要是 T3 T4 挂分就寄了. Day-11 运动会上 vp 了 NOIp2023 和 NOIp2022,NOIp2023 被 T2 硬控了一会,最后口胡的做法感觉可以拿 \(100+100+35+1 ...
- DeepSeek模型技术动态引行业关注,企业生产系统API迁移需审慎评估
在当今数字化浪潮中,人工智能技术迅猛发展,各类模型如雨后春笋般涌现,而 DeepSeek 模型凭借其独特的优势,在人工智能领域迅速崭露头角,成为备受瞩目的新星. DeepSeek 模型由杭州深度求索人 ...
- 浅说 c++20 cppcoro (三)
浅说 c++20 cppcoro (三),https://www.cnblogs.com/bbqzsl/p/18679860 接着上一篇浅说 c++20 coroutine (二) ,继续没说完的事. ...
- 在使用HOperatorSet.Draw忘记点击右键结束方法无法关闭窗体问题如何规避
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/17270056.html 可以在离开窗体或者关闭窗体事件中调用HOperatorSet.HIOC ...