本篇课程开始,我们来学习一下如何使用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里的变量类型有哪些

【0基础】学习solidity开发智能合约-初识solidity相关推荐

  1. solidity开发智能合约

    文章目录 1 Solidity与智能合约 2 智能合约概述 3 以太坊简介 4 以太坊交互工具 5 开发环境搭建 5.1 remix在线编译器 5.2 搭建本地网络 5.2.1 安装本地remix-i ...

  2. 0基础学习前端开发,高职web前端开发技能大赛

    零基础学web前端开发要怎么去学? 首先要学习的就是基础知识:html.css和JavaScript.HTML是内容,CSS是表现,JavaScript是行为.前端开发的门槛其实非常低,与服务器端语言 ...

  3. 【区块链Solidity】智能合约与Solidity介绍

    目录 智能合约 Solidity语言简介 Solidity语言特性 智能合约 智能合约的英文是Smart Contract 最早是尼克丶萨博在1995年就提出了智能合约的概念~就是将法律条文写成可执行 ...

  4. 0基础学习ios开发笔记第二天

    C语言的基本结构 c语言的入口函数是main函数. main函数的返回值行业标准是int return 数字:返回值 每条语句最后以分号结尾 注释:行注释.块注释 int main(void) {// ...

  5. solidity语言开发智能合约

    2019独角兽企业重金招聘Python工程师标准>>> 一个简单的智能合约 在Solidity中,一个智能合约由一组代码(合约的函数)和数据(合约的状态)组成.智能合约位于以太坊区块 ...

  6. 以太坊智能合约开发(四):Solidity转账智能合约实验

    以太坊智能合约开发(四):Solidity转账智能合约实验 1 合约编写 2 在线调试 1 合约编写 编写一个分布式转账智能合约,部署合约的人为合约管理员,只有管理员可以为其他用户发放代币,其他用户之 ...

  7. 0基础学python要多久-零基础学习Python开发需要多长时间?

    原标题:零基础学习Python开发需要多长时间? Python开发技术目前可谓是互联网行业编程界的新宠,不少零基础想要进入IT行业的人员都纷纷加入学习Python开发.零基础学习Python开发技术需 ...

  8. 基础、开发者、智能合约……统统都是矩阵元未来的关键词

    现如今,如果你不了解区块链.比特币.以太坊--小伙伴们的表情是这样的: 这些概念都不懂?我们简直无法愉快地玩耍-- 现如今,茶余饭后总会上演一场"揭秘币圈迷局"的热议," ...

  9. 链乔教育在线|智能合约学习——以太坊智能合约学习笔记(四)

    链乔教育在线|智能合约学习--以太坊智能合约学习笔记(四) 本笔记记录的是使用matemask钱包连接以太坊私链,并编写一个基本的提币智能合约部署到以太坊私链上,进行调用. 一.浏览器安装metama ...

最新文章

  1. usb转ttl小板pl2303hx_TTL刷机经验分享,刷机后实现软件随便安装,电视直播免费看...
  2. Zabbix-2.2.4,显示中文语言的选项方法
  3. Jenkins 使用 Kubernetes Plugin 完成持续构建与发布
  4. java socket wex5_WeX5集成ActiveMQ+WebSocket实现消息推送
  5. Redis事件管理(三)
  6. 里公式后面标号怎么对齐_你若会用Word里F4键,又何须加班到半夜?
  7. Java面向对象---重写(Override)与重载(Overload)
  8. php 5.4 安装xcache,安装xcache为你的PHP加速
  9. 投放屏幕upnp协议探究抓包
  10. JavaScript:语言精粹
  11. C/C++[codeup 2018]数列
  12. CANape编程语言CASL之Script的创建与调用
  13. 最全SSH命令 - 11种用法
  14. tube和pipe的区别
  15. 什么是归纳法、数学归纳法
  16. TOP100summit分享实录 | JFrog高欣:Kubernetes is hard!JFrog的Kubernetes实践
  17. Android蓝牙4.0之传输速率的提升
  18. 小程序 设置小程序打开聊天中的素材
  19. 电子邮件营销与MailChimp。它是适合你
  20. 故障修复:mswinsck 加载失败

热门文章

  1. PowerMill C#插件二次开发 截图处理
  2. Sensor Flicker
  3. Eyeshot Ultimate 2021.2 Crack
  4. 弘辽科技:网店卖女装好还是日用百货好?网店有何技巧?
  5. 笔记本 禁用触摸屏 USB鼠标自动禁用触摸板,拔出USB鼠标自动启用触摸板
  6. 信息隐藏原理与技术复习
  7. [附源码]Java计算机毕业设计SSM电影票购票系统
  8. 【http】跨域解决方案
  9. Campus Love 大学生有权谈恋爱吗
  10. npm install 报错:xx/git.EXE ls-remote -h -t ssh://git@github.com/sohee-lee7/Squire.git