蚂蚁链学习1初识蚂蚁链的智能合约(solidity)(代码片段)

小天才才 小天才才     2023-03-30     493

关键词:

文章目录

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) 
    
  

0基础学习solidity开发智能合约-初识solidity(代码片段)

本篇课程开始,我们来学习一下如何使用solidity开发智能合约,由于博主对于solidity的学习,也是自学的,所以一些不足或有纰漏之处还望指出,大家共同进步,本系列课程会分很多节课讲述,从入门到... 查看详情

区块链之智能合约solidity踩坑--上篇

...一些坑,做一下总结;介绍主要分一下三个方面:对区块链的简单描述结合业务场景,编写简单智能合约,时遇到的坑(上篇)assembly的使用说明(下篇)正文进入正题之前,我稍微简单介绍一下什么是区块链,区块链干嘛用的(特点)... 查看详情

—solidity中的helloword(代码片段)

...编写空合约练习时间前言本系列教程将从零开始记入笔者学习区块链的过程,欢迎批评指正。一、solidity是什么?Solidity的代码都涵盖在智能合约里面.一个智能合约就是以太坊应用的最小单元,所有的变量和函数都属... 查看详情

区块链开发之solidity智能合约开发(代码片段)

...要有Solidity的开发环境,我将使用Remix来进行Solidity的学习,大家可以访问Remix在线Solidity集成开发环境其界面主要分三部分,左半本分是合约目录,可进行合约编译、发布右上部分是合约的编写框右下部分是合约的... 查看详情

区块链的小细分领域

...如庞氏骗局)3、区块链相关的智能决策人工智能机器学习博弈论4、与计算/通信网络的融合云计算边缘 查看详情

区块链solidity智能合约语言学习笔记(代码片段)

Solidity简介以太坊拥有多种高级语言,可用于编写智能合约,每种语言都受到另一种广泛使用的语言的启发。最流行的一种叫做Solidity,它基于JavaScript。由于Solidity是迄今为止最成熟的以太坊语言,因此它是社区大力鼓励开发人员现在... 查看详情

区块链

... 17年底后区块链迅速成为一个热门的话题,最近在入门学习区块链,在网上和书籍上整理了 查看详情

web3+区块链学习计划

该文转自bilibilihttps://www.bilibili.com/read/cv18404166制定的web3学习计划是这样的:WEEK1:学习区块链的基础知识密码学基础区块链基础学习以太坊原理WEEK2:学习智能合约学习常见的智能合约标准,ERC20学习Solidity语言学习部署和开... 查看详情

区块链实战如何创建一个带参数的智能合约(代码片段)

目录一、简介二、知识点智能合约Solidity公共变量Solidity私有变量以太坊椭圆曲线算法keccak256abi转码智能合约编译,部署和运行三、菜鸟实战四、运行结果1、编译2、部署3、运行4、public参数的查询函数一、简介如何创建一个... 查看详情

solidity零基础入门solidity编写智能合约代码

...6、CMake参数7、版本号字符串详解8、版本信息详情9、实例学习Solidity10、秘密竞价(盲拍)11、安全的远程购买实例12、深入理解Soli 查看详情

区块链技术与应用

...的主要应用领域等角度全面和概要性阐述区块链,使学习者建立区块链的整体知识结构。课时1.1区块链与智能社会1.2区块链概念与体系1.3区块链的哲学基础1.4区块链的社会学意义1.5区块链应用综述02区块链的应用从区块链的... 查看详情

智能合约实战solidity语法学习10[bnb合约解读]附代码

目录1.ether官网搜索BNB2.获取BNB合约源码3.BNB合约源码解读1.ether官网搜索BNBhttps://etherscan.io/address/0xB8c77482e45F1F44dE1745F52C74426C631bDD522.获取BNB合约源码 查看详情

智能合约实战solidity语法学习10[bnb合约解读]附代码

目录1.ether官网搜索BNB2.获取BNB合约源码3.BNB合约源码解读1.ether官网搜索BNBhttps://etherscan.io/address/0xB8c77482e45F1F44dE1745F52C74426C631bDD522.获取BNB合约源码 查看详情

区块链入门truffle项目实战,solidityide,智能合约部署

在上一张我们学习了Truffle项目的创建,部署等相关内容,今天我们就来实战一下.今天我们要做3件事:1)学习搭建一个SolidityIDE(Remix).2)使用这个SolidityIde编写一份智能合约.3)在我们前面第1,2,3章中部署的私有网络节点集群中部署这个合... 查看详情

初识solidityremix与geth节点结合部署智能合约(代码片段)

初识Solidity、Remix与Geth节点结合部署智能合约初识Solidity、Remix与Geth节点结合部署智能合约初识SolidityRemix与Geth节点结合部署智能合约第一步:访问http://remix.ethereum.org/,进入以太坊智能合约在线IDE工具Remix第二步:创... 查看详情

使用browser-solidity在go-ethereum上进行简单的智能合约部署(代码片段)

...在本文讲解之前,先介绍以下几点基本概念。1.1、什么是智能合约?  智能合约是存储在区块链上的一段代码,它们可以被区块链上的交易所触发,触发后,这段代码可以从区块链上读取数据或者向区块链上写入数据。  1.2... 查看详情

初识hyperledgerfabric

参考技术AFabric是联盟链,Peer代表一系列组织,Peers是整个区块链网络的基础,因为它是账本和智能合约的载体。通过智能合约,账本通过不可篡改的方式记录了交易的全过程。对于不能的公司来说,是有不同的业务的,不同的... 查看详情

区块链入门教程

... 17年底后区块链迅速成为一个热门的话题,最近在入门学习区块链,在网上和书籍上整理了一些知识写成文章分享给大家,文章参考书籍《区块链技术指南》机械工程出版社。&n 查看详情