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语言基础(一)的更多相关文章

  1. 区块链特辑——solidity语言基础(三)

    Solidity语法基础学习 五.映射类型: 映射型态 Mapping Type 映射钥匙Key → 真实资料 Value mapping(KeyType → ValueType) VariableN ...

  2. 区块链特辑——solidity语言基础(六)

    Solidity语法基础学习 十.实战项目(二): 1.实战准备: ERC20代币接口 ERC20 Token Interface接口 Interface IName {--} ·关键字:interf ...

  3. 区块链特辑——solidity语言基础(七)

    Solidity语法基础学习 十.实战项目(二): 3.项目实操: ERC20 代币实战 ①转账篇 总发行量函数 totalSupply() return(uint256) ·回传代币的发行总量 ·使 ...

  4. 比原链CTO James | Go语言成为区块链主流开发语言的四点理由

    11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...

  5. Solidity语言基础 和 Etherum ERC20合约基础

    1. 类型只能从第一次赋值中推断出来,因此以下代码中的循环是无限的,  小. for (var i = 0; i < 2000; i++) { ... } --- Solidity Types ...

  6. 001/Go语言构建区块链(mooc)

    1.区块链发展与现状 视频地址:https://www.imooc.com/video/17452 注意: 比特币与以太坊最大的区别在于: 以太坊引入了对图灵完美智能合约的支持,人们可以将任何业务逻辑 ...

  7. 从Go语言编码角度解释实现简易区块链

    区块链技术 人们可以用许多不同的方式解释区块链技术,其中通过加密货币来看区块链一直是主流.大多数人接触区块链技术都是从比特币谈起,但比特币仅仅是众多加密货币的一种. 到底什么是区块链技术? 从金融学相 ...

  8. 以太坊区块链Java(EthereumJ)学习笔记:概述

    本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...

  9. 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识

    给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...

  10. 区块链火爆,再不知道Golang就晚了

    Golang,也叫Go语言,是2009年刚刚被发发布的一门新语言. 区块链,是2019年我国提出的新战略. 一个不争的事实就是,大多数从事区块链开发的小伙伴都是用Golang,大多数招聘区块链技术工作 ...

随机推荐

  1. 概率图模型&机器学习 -- 精确推断方法 -- 变量消去(Variable Elimination)和信念传播(Belief Propagation)

    参考资料 西瓜书 An introduction to hidden Markov model -- Rabiner, Juang [机器学习][白板推导系列][合集 1-33]_哔哩哔哩_bilib ...

  2. DVWA靶场Insecure CAPTCHA(不安全验证)漏洞所有级别通关教程及源码审计

    Insecure CAPTCHA(不安全验证) Insecure CAPTCHA(不安全验证)漏洞指的是在实现 CAPTCHA(完全自动化公共图灵测试区分计算机和人类)机制时,未能有效保护用户输入的验 ...

  3. 前端之canvas实现电子签约完成线上签署功能

    最近发现现在租房还是签合同,越来越多采用电子签约的方式进行,好处不用多说节约成本,节约时间.抱着好奇的心理,尝试自己动手实现一个电子签.原来并不复杂主要通过了canvas绘画能力进行实现的. 主要功能 ...

  4. Pulsar客户端如何控制内存使用

    摘要 本文围绕一个常见的使用场景深入分析在高吞吐场景下,使用Pulsar客户端收发消息可能会遇到的若干问题.并以此为切入点,梳理一下Pulsar客户端在内存控制上所做的优化改进. 使用场景 假设这样一 ...

  5. .NET8.0多线程编码结合异步编码示例

    1.创建一个.NET8.0控制台项目来演示多线程的应用 2.快速创建一个线程 3.多次运行程序,可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时,它们的具体执行顺序是不确定的,除非我们使 ...

  6. 学Shiro完结版-1

    第一章 Shiro简介--<跟我学Shiro> 1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spr ...

  7. 原生JS实现一个日期选择器(DatePicker)组件

    这是通过原生HTML/CSS/JavaScript完成一个日期选择器(datepicker)组件,一个纯手搓的组件的开发.主要包括datepicker静态结构的编写.日历数据的计划获取.组件的渲染以及 ...

  8. 2025 最佳免费商用文本转语音模型: Kokoro TTS

    在文本转语音(TTS)技术领域,一项突破性的进展引起了广泛关注--Kokoro TTS 模型凭借其卓越性能和完全免费的商用许可,成为目前最出色的 TTS 解决方案之一.基于广受欢迎的开源框架 Styl ...

  9. SSH 跳板机原理与配置:实现无缝跳板连接,一步直达目标主机

    前言 在日常运维或开发工作中,我们常常需要访问部署在内网的服务器.然而出于安全策略或网络拓扑的限制,内网服务器并不会直接向外部暴露端口,导致我们无法"直连"它们.此时,跳板机(Ju ...

  10. 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。

    这是一座专属你的知识宝库,它依托 DeepSeek R1 满血版大模型构建而成.在这里,每一次回答都源自对你专属文件的深度学习,精准匹配你的知识需求,为你输出最贴合文件内容的答案 . 使用 Cherr ...