Solidity 简易教程

本文是Solidity编程语言的简易教程,介绍了合约、状态变量、数学运算、结构体、数组、函数(包括私有和公共函数、返回值、修饰符如view和payable)以及事件。通过示例代码讲解了如何在以太坊区块链上创建和操作智能合约。
摘要由CSDN通过智能技术生成

Solidity是以太坊的主要编程语言,它是一种静态类型的 JavaScript-esque 语言,是面向合约的、为实现智能合约而创建的高级编程语言,设计的目的是能在以太坊虚拟机(EVM)上运行。

本文基于CryptoZombies,教程地址为:https://cryptozombies.io/zh/

合约

Solidity 的代码都包裹在合约里面. 一份合约就是以太应币应用的基本模块, 所有的变量和函数都属于一份合约, 它是你所有应用的起点.

一份名为 HelloWorld 的空合约如下:

contract HelloWorld {
   

}

hello world

首先看一个简单的智能合约。

pragma solidity ^0.4.0;

contract SimpleStorage {
uint storedData; // 声明一个类型为 uint (256位无符号整数)的状态变量,叫做 storedData

function set(uint x) public {
storedData = x; // 状态变量可以直接访问,不需要使用 this. 或者 self. 这样的前缀
}

function get() public view returns (uint) {
return storedData;
}
}

所有的 Solidity 源码都必须冠以 "version pragma" — 标明 Solidity 编译器的版本. 以避免将来新的编译器可能破坏你的代码。

例如: pragma solidity ^0.4.0; (当前 Solidity 的最新版本是 0.4.0).

关键字 pragma 的含义是,一般来说,pragmas(编译指令)是告知编译器如何处理源代码的指令的(例如, pragma once )。

Solidity中合约的含义就是一组代码(它的 *函数* )和数据(它的 *状态* ),它们位于以太坊区块链的一个特定地址上。

该合约能完成的事情并不多:它能允许任何人在合约中存储一个单独的数字,并且这个数字可以被世界上任何人访问,且没有可行的办法阻止你发布这个数字。当然,任何人都可以再次调用 set ,传入不同的值,覆盖你的数字,但是这个数字仍会被存储在区块链的历史记录中。

Solidity 语句以分号(;)结尾

状态变量

状态变量是被永久地保存在合约中。也就是说它们被写入以太币区块链中,想象成写入一个数据库。

contract HelloWorld {
   
// 这个无符号整数将会永久的被保存在区块链中
uint myUnsignedInteger = 100;
}

在上面的例子中,定义 myUnsignedInteger 为 uint 类型,并赋值100。

uint 无符号数据类型, 指其值不能是负数,对于有符号的整数存在名为 int 的数据类型。

Solidity中, uint 实际上是 uint256代名词, 一个256位的无符号整数。

程序有时需要对不同类型的数据进行操作,因为 Solidity 是静态类型语言,对不同类型的数据进行运算会抛出异常,比如:

uint8 a = 5;
uint b = 6;
// 将会抛出错误,因为 a * b 返回 uint, 而不是 uint8:
uint8 c = a * b;

a * b 返回类型是 uint, 但是当我们尝试用 uint8 类型接收时, 就会造成潜在的错误。这时,就需要显式的进行数据类型转换:

// 我们需要将 b 转换为 uint8:
uint8 c = a * uint8(b);

把它的数据类型转换为 uint8, 就可以了,编译器也不会出错。

Solidity 支持多种数据类型,比如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值