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

相关文章

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二