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 的数据类型、函数、合约编写和部署。
相关推荐
编程乐学(Arfan开发工程师)5 小时前
56、原生组件注入-原生注解与Spring方式注入
java·前端·后端·spring·tensorflow·bug·lua
Elcker7 小时前
Springboot+idea热更新
spring boot·后端·intellij-idea
南玖yy9 小时前
深入理解 x86 汇编中的符号扩展指令:从 CBW 到 CDQ 的全解析
开发语言·汇编·arm开发·后端·架构·策略模式
江梦寻10 小时前
软件工程教学评价
开发语言·后端·macos·架构·github·软件工程
美好的事情能不能发生在我身上10 小时前
苍穹外卖Day11代码解析以及深入思考
java·spring boot·后端·spring·架构
不良手残11 小时前
Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
java·spring boot·redis·后端
一线大码11 小时前
SpringBoot 和 MySQL 的事务隔离级别关系
spring boot·后端·mysql
罗政12 小时前
基于 SpringBoot + Vue 在线点餐系统(前后端分离)
vue.js·spring boot·后端
曼岛_12 小时前
[架构之美]深入优化Spring Boot WebFlux应用
spring boot·后端·架构