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

听见向日葵的微笑 听见向日葵的微笑     2023-04-08     663

关键词:

本篇课程开始,我们来学习一下如何使用solidity开发智能合约,由于博主对于solidity的学习,也是自学的,所以一些不足或有纰漏之处还望指出,大家共同进步,本系列课程会分很多节课讲述,从入门到进阶、实战,在课程最后,我们会通过所学知识来搭建几个不同类型的智能合约如Token合约、NFT合约等等,感兴趣的小伙伴加个关注吧。

一、什么是智能合约

这里引用一段摘自网络的话语来解释一下 

智能合约是区块链中四大核心技术之一,这个概念最开始是在1994年,由知名密码学家尼克·萨博提出的,可由于技术以及其他的一些原因一直都没有落地,哪怕到了今天,智能合约已经在互联网中很多的应用,比如自动还款,无人机售货等等,也多是局限在个人和机构之间的智能合约,个人和个人之间的智能合约几乎没有,原因就在于“信任”问题,我们会发现,只要谈起合约,大多数都是陌生人跟陌生人之间有这种需求,而且还跟钱有关系,如果在没有第三方做担保的情况下我们之间做了个约定,我把钱打给你,结果你毁约了,不承认怎么办?所以智能合约一直没办法在个人与个人之间普及,后来随着区块链的出现,人们发现,区块链与智能合约十分的契合,因为区块链的很多特点,比如去中心化,数据的不可篡改等,可以从技术的角度,去解决陌生人之间的信任问题,这才使智能合约大规模的应用成为可能,这一阶段的开始以以太坊的诞生为标志。在区块链的基础上,以太坊应用了智能合约技术。智能合约使得以太坊可以实现更多功能,智能合约是一个非常重要的应用,于是,慢慢的,智能合约就成了区块链的核心技术之一。 

总结来说,智能合约就是一个写好的程序脚本,它会在一个虚拟机上运行,且不受外界的干扰,所以能保证最大化的公平、公正、公开性。

以太坊作为区块链2.0的代表,它的设计理念和底层系统设计,让它逐渐被大众所认可,从现在开始我们就准备在以太坊上进行智能合约的开发(你可能听过bsc、trc、matic 等等区块链,它们都是基于以太坊虚拟机EVM开发的区块链网络,所以在以太坊上编写的智能合约,在这些网络上均可以使用)

二、什么是solidity

solidity是用于实现智能合约的一种面向合约的高级编程语言,solidity受到C++、Python和JavaScript的影响,被设计为可运行在以太坊虚拟机(EVM)上,所以用户无需担心代码的可移植性和跨平台等问题。solidity是一种静态类型的语言,支持继承、库引用等特性,并且用户可自定义复杂的结构类型。

 三、合约文件

一个简单的合约文件大概如下图所示:

我们来看一段示例代码,里面有一些简单的注释,可以结合着查看

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;  //solidity编译版本声明

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";  //第三方文件引入

//合约声明
contract DemoToken is ERC20 
    address owner; //地址变量
    uint256 total = 5000000 * 10**18; //数字变量

    //构造器
    constructor() ERC20("demoToken", "DT") 
        owner = msg.sender;
        _mint(msg.sender, total);
    

    //方法
    function getTotal() public view onlyOwner returns (uint256) 
        return total;
    

    //修饰符
    modifier onlyOwner() 
        require(msg.sender == owner);
        _;
    

  • 首先,第一行表示代码许可说明,可选项很多,大家可以自行查询
// SPDX-License-Identifier: MIT
  •  第二行声明了我们编译合约代码的solidity版本,其中^表示最低版本为0.8.17,当前该合约也不会被0.9.0以上版本编译
pragma solidity ^0.8.17;  //solidity编译版本声明
  • 第三行,我们引入了一个其他合约文件,solidity里允许我们引用其他的合约文件,这个暂时先不展开讲解,后面课程里我们会具体说明,大家先有个印象即可
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";  //第三方文件引入
  •  第四行,我们声明了一个合约对象,它是以 contract开头的结构 (is ERC20 表示继承了ERC20合约,后面详细讲解)
contract DemoToken is ERC20 
  • 第五、六行,我们定义了两个变量,关于solidity的变量类型,下一章我们会仔细讲解
    address owner; //地址变量
    uint256 total = 5000000 * 10**18; //数字变量
  • 然后我们声明了一个结构体,它在合约部署的时候会调用,我们可以在里面写一些初始化逻辑,如变量赋值、方法调用等
constructor() ERC20("demoToken", "DT") 
        owner = msg.sender;
        _mint(msg.sender, total);
    
  •  接着,我们声明了一个函数,仔细看它的声明语法有点类似JavaScript,但是后面一些地方却与JavaScript又有一些不同,它多了一些 public、view 等字段(关于这些多出来的字段,后面也会进行详细介绍)
 //方法
    function getTotal() public view onlyOwner returns (uint256) 
        return total;
    
  •  最后,我们定义了一个修饰符,它在合约里可以说是有着举足轻重的地位,在这里大家有个印象即可,在后面的课程里都会一一介绍
  //修饰符
    modifier onlyOwner() 
        require(msg.sender == owner);
        _;
    

通过本节课程的学习,我们先是简单了解了智能合约的概念,接着又对一个智能合约的组成部分进行了简单的分析,让我们对智能合约有了一个基本的概念,下一节课,我们将要学习一下solidity里的变量类型有哪些

 

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

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

智能合约实战solidity语法学习02[spdxremix控制台介绍](代码片段)

...发过程中可同时使用remix和vscode,两者各有互补。如语法学习01中使用vscode编程时,因本地编译环境为0.6.12,remix使用的0.5.1同样的代码vscode会有SPDX警告,需要因为soliidity0.6.8引入了SPDX,使用时要在文件第一句加上SPDX-License-Identifi... 查看详情

区块链开发之solidity编程基础(代码片段)

Solidy是当前编写智能合约的主流语言概要sol文件结构编译开发引入其他文件注释代码注释文档注释合约状态变量类型值类型概要由ETH为代表的第二代区块链技术,相比于第一代区块链技术而言,最大的特点就是智能合约... 查看详情

solidity智能合约开发—1-以太坊开发工具和部署(代码片段)

...c;创建一个hello_world.sol文件如下:我们拆开分析,学习solidity代码源文件的结构,需要注意的地方:第1行是注释,会写一下这个代码所用的软件许可(license)。如果不写许可,编译时会警告(warning&#x... 查看详情

智能合约学习笔记——solidity语法(代码片段)

...#xff0c;拍卖,多重签名钱包等各种功能。有一定的编程基础非常好入门测试可以直接在在线网址https://remix.ethereum.org上CryptoZombies是一个很有趣的学习网址注意solidity在后续版本0.5.0之后有较大变革,但下面学习内容依旧是根... 查看详情

solidity学习(代码片段)

这里写自定义目录标题Solidity与智能合约Solidity基础语法Solidity编译工具函数的关键字注释HelloWorld.sol数据类型函数简介变量只读函数默认值常量If-ElseForAndWhileError构造函数返回值Solidity与智能合约Solidity是一门面向合约,为实... 查看详情

用go来做以太坊开发④智能合约

...安装abigen工具。我们将创建一个简单的智能合约来测试。学习更复杂的智能合约,或者智能合约的开发的内容则超出了本书的范围。我强烈建议您查看truffleframework来学习开发和测试智能合约。这里只是一个简单的合约,就是一... 查看详情

智能合约学习笔记一——solidity语言详解——(1—2)小练习(代码片段)

1.要求:1.根据提示,在指定位置写出编译版本,要求使用^符号,版本要求在0.6.0及以上。2.根据提示,在指定位置写出所定义的合约名称。3.为了查看程序的效果,我们使用在线Solidity开发工具RemixIDE编译和... 查看详情

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

如果你有其他语言基础,可以很快入门,如果新手建议了解即可,以下是课程目录:1、智能合约概述2、区块链基础3、以太坊虚拟机4、安装Solidity编译器5、从源代码编译6、CMake参数7、版本号字符串详解8、版本信... 查看详情

solidity开发以太坊代币智能合约(代码片段)

...将介绍智能合约的开发语言solidity。让我们先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节。cont 查看详情

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

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

solidity0.5.7简明教程(代码片段)

...货币,它更是功能完备的智能合约平台,solidity就是用来开发以太坊上的智能合约的原生开发语言。solidity最早发布于2015年,它是第一种图灵完备的智能合约专用开发语言。目前除了以太坊之外,在其他区块链中也逐渐开始支持s... 查看详情

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

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

基于以太坊的智能合约开发教程solidity合约的销毁(代码片段)

基于以太坊的智能合约开发教程Solidity合约的销毁pragmasolidity^0.4.0;contractdestoryuintpublicmoney=100;addresspublicowner;constructor()publicowner=msg.sender;functionincreaseMoney()publicmoney+=100;modifieronlyOwner//判断合约的调用者是否等于合约的拥... 查看详情

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

如果你有其他语言基础,可以很快入门,如果新手建议了解即可,以下是课程目录:1、智能合约概述2、区块链基础3、以太坊虚拟机4、安装Solidity编译器5、从源代码编译6、CMake参数7、版本号字符串详解8、版本信... 查看详情

智能合约开发环境搭建及helloworld合约

...会假设你已经知道这些概念),建议先阅读入门篇。就先学习任何编程语言一样,入门的第一个程序都是HelloWorld。今天我们来一步一步从搭建以太坊智能合约开发环境开始,讲解智能合约的HelloWorld如何编写。开发环境搭建Solidit... 查看详情

solidity实现简单的智能合约

...太坊虚拟机上。solidity语法与JavaScript很相似,有编程基础的开发者可以轻松上手,智能合约一旦部署就无法修改。首先介绍我们的编译工具:Remixremix是一款非常好用的在线 查看详情

区块链开发之solidity编程基础(代码片段)

Solidy是当前编写智能合约的主流语言概要sol文件结构编译开发引入其他文件注释代码注释文档注释合约状态变量类型值类型1、布尔类型2、整型3、地址4、定长字节数组5、有理数和整型字面量6、枚举类型7、函数类型引用类型1、... 查看详情