IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 【蚂蚁链】初识蚂蚁链的智能合约(solidity) -> 正文阅读

[区块链]【蚂蚁链】初识蚂蚁链的智能合约(solidity)

1.版本指令和contract关键字

下面将学习什么是合约,并尝试如何创建合约。

合约

智能合约(Smart Contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约实质上是一套以数字形式定义的承诺(Promises),包括合约参与方可以在上面执行这些承诺的协议。

Solidity的代码都包裹在合约里面,所有变量和函数都属于一个合约。contract 关键字用于声明一个合约。

这是一个名为 HelloWorld 的空合约:

contract HelloWorld { 

} 

版本指令

所有的Solidity源码都必须指明版本,用于标明Solidity编译器的版本,这样是为了避免将来新的编译器可能破坏你的代码。pragma 指令用于声明Solidity的版本。

例如: pragma solidity ^0.4.20;

下面就是一个最基本的合约例子:

pragma solidity ^0.4.20; 

contract HelloWorld { 

}

注:Solidity指定版本号的表达式遵循“NPM版本语义”,多数情况下,我们使用 ^ 就可以了。

实战

为了创建我们的小蚂蚁, 让我们先建立一个基础合约,称为 AntFamily。

  1. 在右边的输入框里输入 ^0.4.20,我们的合约基于这个版本的编译器。
  2. 建立一个空合约 AntFamily。
pragma solidity ^0.4.20;

contract AntFamily {
  
}

2.状态变量和整数

在上一个章节,我们已经为我们的合约做了一个外壳,下面将学习Solidity中如何使用变量。

状态变量

状态变量定义在合约内部的,但是不在函数内部的变量,它会永久地保存在合约存储空间中,也就是说它们会被写入区块链中,这就好比数据写入一个数据库中。 下面是一个状态变量的例子:

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

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

无符号整数uint

uint是Solidity支持的基本数据类型之一,意思是无符号整型(unsigned integer),指其值不能是负数,对于有符号的整数存在名为 int 的数据类型。

实战

我们的蚂蚁DNA将由一个十二位数字组成。

  1. 定义 dnaDigits 为 uint 数据类型, 并赋值 12。
pragma solidity ^0.4.20;

contract AntFamily { 
  uint dnaDigits = 12; 
}

3.数学运算

在 Solidity中,数学运算与其它程序设计语言相同:

  • 加法: x + y
  • 减法: x - y
  • 乘法: x * y
  • 除法: x / y
  • 取模: x % y
  • 幂运算:x ** y

下面是一个幂运算的例子:

// 表示6的2次方
uint a = 6 ** 2; 

实战

每只小蚂蚁都有属于他自己的DNA基因,为了保证我们蚂蚁的DNA只含有12个字符,我们先造一个uint数据,让它等于10^12。这样一来以后我们可以用模运算符 % 把一个整数变成12位。

  1. 建立一个uint类型的变量,名字叫dnaModulus, 令其等于 10 的 dnaDigits 次方.
pragma solidity ^0.4.20;

contract AntFamily {
	uint dnaDigits = 12;
	uint dnaModulus = 10 ** dnaDigits;
}

4.结构体

有时你需要更复杂的数据类型,Solidity支持通过结构体来定义新的类型,使用 struct 关键字来定义结构体:

struct Book {
    string name;
    uint page;
}

结构体允许你生成一个更复杂的数据类型,它可以有多个属性。

注:我们刚刚引入了一个新的基本数据类型 string字符串类型用于保存任意长度的UTF-8编码数据。 如: string message = “Hello world”。

实战

在我们的程序中,我们终于要创造出蚂蚁啦,每个蚂蚁将拥有多个属性,所以这是一个展示结构体的完美例子。

  1. 建立一个struct 命名为 Ant。
  2. 我们的 Ant 结构体有两个属性: name (类型为 string), 和 dna (类型为 uint)。
pragma solidity ^0.4.20;

contract AntFamily {
  uint dnaDigits = 12;
  uint dnaModulus = 10 ** dnaDigits;
  
  struct Ant {
    string name;
    uint dna;
  }  
}

5.定义函数

在 Solidity中使用 function 关键字定义一个函数,函数是合约代码的可执行单元,函数定义的基本语法如下:

function buyBook(string _name, uint _count) { 
  
} 

这是一个名为 buyBook 的函数,它有两个参数:一个是string类型,另一个是uint类型。现在函数内部还是空的。

注:习惯上函数里的变量都是以(_)开头 (但不是硬性规定) 以区别全局变量。我们整个教程都会沿用这个习惯。

我们的函数定义如下:

buyBook(“fishBook”, 100);

实战

在我们的应用里,我们要能创建蚂蚁,让我们写一个函数做这件事吧!

  1. 建立一个函数 createAnt。 它有两个参数: _name (类型为string), 和 _dna (类型为uint)。
pragma solidity ^0.4.20;

contract AntFamily {
  
  uint dnaDigits = 12;
  uint dnaModulus = 10 ** dnaDigits;
  
  struct Ant {
    string name;
    uint dna;
  }
  
  function createAnt(string _name, uint _dna) {
    
  }
}
  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:14:38  更:2022-04-06 23:14:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 3:14:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计