区块链笔记:Solidity语言之程序示例、程序结构、数据类型、表达式以及控制结构、异常处理

本文主要是介绍区块链笔记:Solidity语言之程序示例、程序结构、数据类型、表达式以及控制结构、异常处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Solidity程序示例

// 指定编译版本
pragma solidity ^0.4.21;// 指定contract名字
contract MyContract {// 定义合约中的变量uint256 totalQty;enum Colors (WHITE, BLACK, RED, GREEN, PINK)uint[5] eachLine=[1,2,3,4,5];struct StudyInfo {uint height;address voteAddress;}function MyContract(uint256 _initQty) public {totalQty = _initQty;}function changeEachLine(uint _index, uint _value) public {eachLine[_index] = _value;}
}// 合约的继承
contract MySonContract is MyContract{}
  • 这是一份使用Solidity语言编写的以太坊智能合约的源代码
  • 源码第一行指定编译版本,以太坊在发展过程当中升级了很多版本,包括编译器
  • 不同版本的Solidity之间会存在一些差异,需要指定版本
  • 指定这个合约的名字MyContract, 在这个合约中可以定义变量,枚举量,数组,结构体函数等
  • 合约还可以具备继承关系,和我们通常的程序没什么特别的差别和javascript类似

Solidity 程序结构

  • 以contract定义为一个完整的结构
  • 每个contract相当于java的类
  • 里面包含构造函数、方法、变量等元素
  • contract可以集成其他的contract,方笔智能合约的编写
// 指定编译版本
// ^表示兼容之前的版本,最高只能0.4.19
pragma solidity ^0.4.19// 引入其他文件 import 关键字
import "other_file_name"// 指定contract, 并且加入文档注释,语法:/** ... */
/** @MyContract is a test contract */
contract MyContract {// 单行注释/*多行注释多行注释*/// 变量定义// 方法定义}// 合约集成
contract MySonContract is MyContract{}

主要的数据类型

pragma solidity ^0.4.19;
contract MyContract {// 变量定义mapping(address => uint) public balances;uint x;bool y;string myname;int32 quantity;bytes32 hashValue;address myaddress;
}
  • mapping类型,相当于其他语言里面的关联数组或者key-value结构
    • 这里定义了一个mapping类型,address是地址,以太坊里面有账户地址的概念
    • 这里是通过一个地址关联一个uint类型的值,并且这个变量的名称叫balances
  • uint 无符号类型
  • bool 布尔类型
  • string 字符串
  • int32 32位的整数类型
  • bytes32 32位字节大小的值
  • address 地址类型,在以太坊中专有,实际是一个20个字节大小的数据,也就是160位

表达式以及控制结构

pragma solidity ^0.4.19;contract MyContract {// variable definitionmapping(address => uint) public balances;uint appleQty;uint orangeQty;bool isSuccess;// constructor functionfunction MyContract() public {balances[msg.sender] = 1000;appleQty = 10;orangeQty = 20;isSuccess=true;}// additionfunciton Add() public view returns(uint) {uint r = appleQty + orangeQty;if(r > 100) {return r;} else {return 0;}}// cyclecalcfunction cyclecalc() public pure returns(uint) {uint r = 10;while (r >= 0) {r --;}return r;}
}
  • contract定义一个构造方法,和java中类似,没有返回值,名称和合约名称一样
  • 这就是为什么说Solidity中的合约相当于Java中的类
  • public说明这个方法为公共的,外部可以调用
  • 这里的msg.sender说明合约的调用者的地址,是指合约当前调用者地址,不是一个固定的
  • 这里是构造方法,只有合约在部署的时候,才可以执行一次,谁去部署合约,这个地址就是谁的(部署者)
  • Add方法里面有if判断
  • cyclecalc方法里面有循环处理
  • 这是Solidity中的一些基本表达和控制结构

异常处理

  • 数组越界、Gas不足、除0异常
  • 程序中可以手动抛出异常, 基于不同的场景下
pragma solidity ^0.4.19;contract MyContract {function openDoor(uint paramValue) public payable returns(uint) {assert(paramValue > 0);return msg.value + paramValue;}
}
  • 上面程序中有一个参数paramValue, 这个值必须大于0,否则会出现异常
  • 使用assert进行异常捕获,这是一种异常处理的典型应用
  • 当然还有其他方式也可以处理异常
  • 异常处理在编写智能合约中,对条件的检查起到很重要的作用
  • 智能合约部署后不可篡改,另外智能合约会与某些资产发生关系,是关联的
  • 对于条件的校验是非常需要的

这篇关于区块链笔记:Solidity语言之程序示例、程序结构、数据类型、表达式以及控制结构、异常处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950958

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Python中Markdown库的使用示例详解

《Python中Markdown库的使用示例详解》Markdown库是一个用于处理Markdown文本的Python工具,这篇文章主要为大家详细介绍了Markdown库的具体使用,感兴趣的... 目录一、背景二、什么是 Markdown 库三、如何安装这个库四、库函数使用方法1. markdown.mark

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意