区块链笔记: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

相关文章

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏