web3入门:编写第一个智能合约

1,603 阅读3分钟

1. 引言

Web3 是下一代互联网,它通过区块链技术实现了去中心化。智能合约是 Web3 的核心组件之一,它们是部署在区块链上的自动化程序,可以执行预定义的操作。本学习笔记旨在介绍智能合约的基本概念、开发与部署步骤,并分享一些常见的问题及解决方案。

2. 基础知识

什么是智能合约?

智能合约是一种在区块链上自动执行的程序,具有以下特点:

  • 自动化执行:无需人工干预,合约条件一旦满足,程序自动执行。
  • 不可篡改:部署到区块链上的合约内容无法被篡改。
  • 透明性:所有交易和代码都是公开的,任何人都可以查看。

关键工具

  • Solidity:用于编写智能合约的编程语言。
  • Remix IDE:在线智能合约开发环境。
  • MetaMask:浏览器插件,用于管理以太坊账户并与区块链交互。
  • Ganache:本地区块链模拟器,用于测试和开发。

3. 智能合约开发

编写第一个智能合约

以下是一个简单的 Solidity 智能合约例子:

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

contract HelloWorld {
    string public greeting;

    constructor() {
        greeting = "Hello, World!";
    }

    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }

    function getGreeting() public view returns (string memory) {
        return greeting;
    }
}

编译合约

使用 Remix IDE 编写和编译上述合约:

  1. 打开 Remix IDE
  2. 新建文件并命名为 HelloWorld.sol
  3. 将上述代码粘贴到文件中。
  4. 选择适当的编译器版本(如 0.8.0),点击编译按钮。

4. 部署环境设置

安装 Node.js 和 npm

sudo apt update
sudo apt install nodejs npm

安装 Truffle 和 Ganache

npm install -g truffle
npm install -g ganache-cli

创建 Truffle 项目

mkdir MySmartContract
cd MySmartContract
truffle init

配置 Truffle

修改 truffle-config.js 文件以使用本地 Ganache 区块链:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  },
  compilers: {
    solc: {
      version: "0.8.0"
    }
  }
};

复制智能合约 HelloWorld.sol

在项目contracts 文件夹中创建一个新的智能合约文件 HelloWorld.sol,将上面智能合约HelloWorld.sol内容复制过来

5. 部署智能合约

启动本地区块链Ganache

ganache-cli

image.png

image.png

编写迁移脚本

在项目migrations 文件夹中创建一个新的迁移脚本 2_deploy_contracts.js

const HelloWorld = artifacts.require("HelloWorld");

module.exports = function(deployer) {
  deployer.deploy(HelloWorld);
};

部署合约

在项目根目录下运行以下命令:

truffle migrate

image.png

6. 互动和验证

连接到已部署的合约

使用 Truffle 控制台与合约互动:

truffle console

在控制台中执行以下命令:

const hello = await HelloWorld.deployed();
let greeting = await hello.getGreeting();
console.log(greeting); // 输出 "Hello, World!"
await hello.setGreeting("Hello, Blockchain!");
greeting = await hello.getGreeting();
console.log(greeting); // 输出 "Hello, Blockchain!"

image.png

7. 常见问题及解决方法

合约部署失败

  • 检查编译器版本:确保 Truffle 配置中的编译器版本与合约代码中使用的版本匹配。
  • 网络设置:确保 Ganache 正在运行且 Truffle 配置中的网络设置正确。

交易被拒绝

  • 账户余额不足:确保用于部署合约的账户有足够的以太币。
  • Gas 限制不足:增加 Gas 限制。

8. 总结

部署 Web3 智能合约需要掌握 Solidity 编程、开发环境设置以及与区块链的交互。通过本学习笔记,您可以了解从编写智能合约到在本地区块链上部署和测试的全过程。随着 Web3 技术的不断发展,掌握这些技能将对未来的区块链应用开发大有裨益。

项目链接地址:github.com/ctq123/web3…