一、Hello world

一、运行环境

编辑器:https://remix.ethereum.org/ 可以在线编辑,也可以下载到本地,在线编辑适合新手学习solidity代码。

 

二、hello word

Solidity 合约类似于面向对象语言中的类。合约中有用于数据持久化的状态变量,和可以修改状态变量的函数。 调用另一个合约实例中函数时,会切换执行时的上下文,此时前一个合约的状态变量就不能访问了。后面会逐步展开介绍,国际惯例,使用当前语言的 Hello World 作为第一个例子。

1、点击左侧 File explorer,然后点击 Create new file 图标,新建一个HelloWorld.sol文件,  编写如下代码,代码很简单,定义一个状态变量message和函数f1,函数返回状态变量message的值。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Hello {
    //消耗gas费:3467
     string public message = "Hello world";

    //消耗gas费:3473
     function f1() public view returns(string memory) {
         return message;
     } 

    //消耗gas费:715
   function f2() public pure returns(string memory) {
         return "Hello world";
     } 

    //消耗gas费:772
       function f3() public pure returns(string memory) {
         return f2();
     } 

}

 

2、代码写完之后,接下来要编译代码,如下图,先勾上auto Compile自动编译修改的代码,然后点击Compile HelloWorld.sol编译代码,左侧出现绿色图标就说明代码编译成功。

 

 3、编译之后就可以开始部署合约了,点击左侧 Deploy & run transactions 页面,点击黄色按钮 「Depoly」,此时按钮下方区域会出现Deployed Contracts,这里就是刚刚部署出来的合约地址。

4、部署完就可以开始运行合约了,点击运行f1函数,右下方就可以看到函数执行结果,execution cost 表示gas费,decoded input表示函数输入值,decoded output 表示函数返回值。

 

4、解析:

上面的代码获取 message 可以得到 "Hello World",调用 f1()函数,也可以得到 "Hello World"; 这是因为 f1 里面的逻辑是返回 message。通过这个例子可以发现,合约内调用变量并不需要使用 this 之类的关键字,直接使用即可,调用函数也是如此,直接 fnName([x]) 就可以。

通过 Remix 调用详情我们可以发现,他们消耗的 gas 不相同。通常直接获取 message 更省钱,因为message储存在状态变量中,而函数helloWorld是读取了状态变量然后再返回出去。但是在 Remix 中有时候得到的结果却并不相同,不用太相信 Remix 内的 gas。在 Remix 中,代码顺序,变量名/函数名长短的修改都可以大大影响 gas 消耗,不要太相信 Remix 的 ga 消耗。

在编写 solidity 代码时,保证安全的前提下,让合约消耗更少的 gas 是一个重要的优化方向。后面会有专门的一章进行 gas 优化的探讨,这里不再多展开。

 

5、到这里solidity已经算入门了。

 

posted @ 2023-05-17 22:48  shyroke、  阅读(18)  评论(0编辑  收藏  举报
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~