WEB3.0:从零开始到智能合约实战(三.Solidity编码及部署)

579 阅读4分钟

不知道有多少同学是从第一章按顺序看到这里来的,终于到了我们的代码上手环节(硬货),话不多说,开搞

首先给大家介绍一下solidity的基础语法结构(默认各位同学至少有js基础)

//是不是很像js的class
contract MyContract { 声明一个合约 合约名字叫  MyContract


    // 状态变量 存储在区块链上的变量
    uint256 public myVariable;
    //Solidity支持多种数据类型,包括布尔型、整型、地址、数组和结构体等。
    bool myBool = true;
    uint256 myUint = 123;
    address myAddress = 0x1234567890123456789012345678901234567890;
    string myString = "Hello, Solidity!";

    if (myBool) {
    // 条件语句
    }

    for (uint256 i = 0; i < 10; i++) {
    // 循环语句
    }
    

    // 构造函数
    constructor(uint256 initialValue) {
        myVariable = initialValue;
    }

    // 函数
    function set(uint256 newValue) public {
        myVariable = newValue;
    }
    
    // 具有返回值的函数
    function get() public view returns (uint256) {
        return myVariable;
    }
}

solidity的基础语法就是这些,是不是很简单 相信有过任何代码基础的同学看一遍都能理解,接下来我们直接开始项目实战,将我们的合约部署在测试网(非测试网需要gas费用,即使是测试网也需要在相关页面通过"水龙头"获取测试代币)

我们将开发一条简单合约:在区块链中写入我们的名字,把这个目标分成三步:

编写代码

打开remix地址

这是一个在线的web3编码测试部署网站,会看到一个类似是vscode的网站

点击"File explorer"

打开contracts->1_Storage.sol

原文代码 注释如下

// SPDX-License-Identifier: GPL-3.0 
定软件许可证类型的标识符  用于明确声明智能合约代码的许可证类型 
pragma solidity >=0.8.2 <0.9.0;
声明 solidity 版本号 


contract Storage { //声明一个合约 合约名称为 Storage

    uint256 number; // 声明一个 int 类型变量

  
    function store(uint256 num) public { // 声明一个函数store 
     
        number = num;
    }
    函数修饰符:
      public 任何人都可以调用这个函数,包括合约内部和外部。
      private 只有合约内部的函数可以调用这个函数,外部的合约或用户无法调用
      internal 只有合约内部和继承自该合约的子合约可以调用这个函数,外部的合约或用户无法调用
      external 只能从合约外部调用,不能从合约内部直接调用。但是可以通过 `this` 关键字在合约内部调用
 
    function retrieve() public view returns (uint256){ 
    //声明一个函数retrieve 返回一个unt 类型的变量
        return number;
    }
    其他函数修饰符:
     view 声明该函数不会修改合约的状态(即不能修改状态变量) 例 retutn name;
     pure 声明该函数既不读取也不修改合约的状态(即不能访问状态变量)  例 retutn 1+2;
     payable   声明该函数可以接收代币 
}

编译代码

  • 点击remix左侧 solidity compiler
  • 点击 compile 1_Storage.sol,等待左侧小图片有一个成功标志

部署代码

  • 点击左侧小图标 Deploy
    • ENVIRONMENT 选择需要部署的网络 实战会详细说明 这里我们默认就好
    • ACCOUNT 选择使用哪个账号进行部署(默认)
    • GAS LIMIT 每笔交易或智能合约调用可以消耗的最大 Gas 量(手续费) 用来控制成本 优秀的合约工人会对gas进行优化(可以理解为web性能优化 web不优化消耗用户流量 gas不优化消耗合约调用者金钱) (默认)
    • value 发送给合约的代币数量(合约也是地址 可以存储代币)
    • Contract 选择要部署的合约
  • 点击 Deploy
    • 下方控制台会给出成功提示,并返回一个合约地址(0xd8b934580fcE35a11B58C6D73aDeE468a2833fa8)及合约其他属性(status transaction hash block hash...)

调试合约

  • 点击左侧下方Deployed/Unpinned Contracts
  • 可以看到有两个按钮 对应我们的两个函数 store 函数需要传参所以右侧会有输入框
  • 每次函数调用控制台都会给出交易哈希,有兴趣的同学可以自行展开查询属性意义

**下期预告:Web3.js与智能合约进行交互**