2. Solidity 基础:hello world- remix 编辑器

非商用声明: 本文来自 B 站 'chainlink 预言机' UP 主所发布的课程学习笔记,如侵权请及时联系本文作者。

一、本章将要学习的内容

  • 智能合约的编程语言 Solidity :语法和数据结构
  • 代码仓库地址:github.com/smartcontra...
  • 有问题可以在 discussions 板块进行讨论:需要用英文提问
  • Stackoverflow 或者加入 Chainlink 开发者社区:
  • Remix 和 code along(一起写代码)

二、Solidity 的编辑器 - Remix

2.1 Remix 基本功能

由以太坊基金会提供的在线 IDE ,无需安装。可以在线编写合约进行验证,很简单。

2.1.1 workspace

workspce 是一个项目的概念,是文件夹和文件的父级目录,通过这个小菜单新建 workspace

然后新建的时候有两种:空白的和带模板的,这些模板是指定的合约类型的。

这两个按钮的作用是当你在线下完成合约代码的开发后需要上传到 remix,由 remix 帮你进行调试和测试的时候使用(不常用)

下面这两个常用的功能:

2.1.2 Solidity Compiler

下图的所示的是 编译器的版本,注意 solidity 的编译器版本是向前兼容的的,即按照古早的编译器版本编写的代码是可以被现代编译器编译的。compiler 编译后产生字节码。

本课程选择 0.8.x 版本号,可以被今天的编译器编译。

高级配置:advanced configuration

  • 语言:remix 支持 Solidity ,同时也支持了其他语言,例如 Yul。但是 Solidity 的生态会更完善,且在日常开发中应用最广泛。如果想做 web3 的工作,还是要学 Solidity 的。Solidity 也是最全面的。其他语言可能在某些方面有所长,但是就成熟度和生态友好情况而言,是比不上的。

  • EVM version: 由一组城市名字表示的以太坊 VM 版本,这个升级表示整个区块链的一次升级。升级了代码执行的 VM。EVM 是执行上面的 Etherem Compiler 产出的字节码的(byte code)的。

solidity 复制代码
uint256 a = 1 + 1
uint256 a = a.add(1)
uint256 a = add(1, 1)

// compiler -> compile(uint256 a = 1 + 1;) -> 01000000101 byte code

// 不同的版本支持的指令集不一样,例如 EVM 1.0 add divde (举例)
uint256  1 = 1 + 1; -> bytecode;
uint256 a = 10 /; 10; 10.divide(1)

// 为啥要设置这个,主要是因为,如果你的代码是在不同的较新版的 EVM 开发的,但是你部署到了低版本的 EVM 的链上,很可能会出问题;例如:

// Paris -> Shanghai 的版本升级中,支持了一个 push(0) 的指令
push(0); // 此时 Paris 的就不能部署,此时需要上网上查询 chain 上面的 EVM 版本是什么。需要把你开发时候的版本调成和链上相同的版本_

为啥要设置这个,主要是因为,如果你的代码是在不同的较新版的 EVM 开发的,但是你部署到了低版本的 EVM 的链上,很可能会出问题;例如:

// Paris -> Shanghai 的版本升级中,支持了一个 push(0) 的指令 push(0); // 此时 Paris 的就不能部署,此时需要上网上查询 chain 上面的 EVM 版本是什么。需要把你开发时候的版本调成和链上相同的版本_

2.1.3 部署

部署动作就是把智能合约部署到区块链上,和传统的 web2 的开发不同的是,web3 没有中心服务器,部署就是把智能合约部署到区块链上,或者也可以说区块链就是服务器。部署之后会得到一个地址(合约地址),其他人就可以通过地址调用合约的函数、获取合约中的数据。(这玩意儿感觉就是换汤不换药呢?这玩意不就是个服务么??)

重要的选项:

  1. ENVIRONMENT: Remix VM 即 remix 本地的 EVM 上。城市名表示 EVM 版本号。

如图所示,Remix VM(Cancun) 表示并没有部署到真正的区块链上,而是部署到了本地的开发 VM 上。此时任何人除了开发者本人外,任何人都无法调用这个合约。因为并没有部署到真正的区块链上。

这个列表上会用到两个值:

  • Injected Provider -Metamask: 这个会自动根据你在 matamask 中所定义的网络环境自动部署和调用你在 Remix 中开发的合约。如果你在 Metamask 中选择的是 Etherem Mainnet 就会把合约部署到主网,如果你选择的是 Polygon 的测试完,就会自动把你的合约部署到这个测试网络。(这就是个远程的 process.env)
  • Remix VIM(Cancun/Shanghai): 课程选择的是 shanghai。先在测试网络调试,然后再部署到真实的环境上。
  1. Account: 这里面提供了很多的测试账户,里面由 100个 eth 供开发者测试。
  1. GAS LIMIT: 和前面的可冲中是一样的,就是能消耗的最大的运算单元 GAS 数量。

  2. VALUE:有些函数调用需要花费ETH,这里需要设置上,后面的是单位。

2.2 开源协议

按下 Cmd + S 保存已经编写的代码,会自动出发 Remix 的自动编译。如果没有快捷键的话,可以去 Compiler 下面手动点击编译。

编译时会遇到一个 warning:

这个警告表示你的项目代码第一行没有声明任何的开源协议,这个和web2 应用一样。一般常用 MIT 协议。如果你要发布一个长期维护的项目,需要仔细阅读协议内容或者请教专业人士选择协议:

spdx: 网站 spdx.org/licenses

改法:在你的代码开头加上协议声明:如图所示

在你的代码开头加上协议注释:

arduino 复制代码
// SPDX-License-Identifier: MIT

2.3 编译器版本:

第二个警告中说我们没有在源文件中制定编译器版本,警告如图:

修改方式: 向代码开源协议注释后面添加版本声明:

版本号前面可以加 ^ 这个符号,和 package.json 文件中的版本含义相同,表示高于此版本。但是在 solidity 中表示,高于此版本号的编译器均可编译我的代码,低于此编译器版本时不可编译我的代码。

三、总结

这里我们学习了 remix 编辑器和的一些基础知识:

  • workspace
  • compiler
  • deplopy: 下一章我们学习Solidity 的数据类型、函数、合约编写和部署。
相关推荐
做运维的阿瑞3 小时前
Python零基础入门:30分钟掌握核心语法与实战应用
开发语言·后端·python·算法·系统架构
猿究院-陆昱泽4 小时前
Redis 五大核心数据结构知识点梳理
redis·后端·中间件
yuriy.wang4 小时前
Spring IOC源码篇五 核心方法obtainFreshBeanFactory.doLoadBeanDefinitions
java·后端·spring
咖啡教室6 小时前
程序员应该掌握的网络命令telnet、ping和curl
运维·后端
你的人类朋友7 小时前
Let‘s Encrypt 免费获取 SSL、TLS 证书的原理
后端
老葱头蒸鸡7 小时前
(14)ASP.NET Core2.2 中的日志记录
后端·asp.net
李昊哲小课8 小时前
Spring Boot 基础教程
java·大数据·spring boot·后端
码事漫谈8 小时前
C++内存越界的幽灵:为什么代码运行正常,free时却崩溃了?
后端
Swift社区8 小时前
Spring Boot 3.x + Security + OpenFeign:如何避免内部服务调用被重复拦截?
java·spring boot·后端
90后的晨仔8 小时前
Mac 上配置多个 Gitee 账号的完整教程
前端·后端