blockchain | 通过truffle编写合约

发布时间 2023-04-04 18:28:53作者: Mz1

blockchain | 通过truffle编写合约

有了前两篇环境搭建的基础,开始编写智能合约。(虽然部署了geth,但是truffle也有自带的私有链子环境可以用)
参考官方文档:
https://learnblockchain.cn/docs/truffle/quickstart.html#creating-a-project
以及教程:
https://www.qikegu.com/docs/4782

创建一个新目录然后:

truffle init

image

image

truffle-config.js 文件 Truffle项目配置文件,例如可以在里面配置网络。
migrations 目录 迁移文件目录,迁移文件都是javascript脚本,帮助我们把智能合约部署到以太坊。
contracts 目录 智能合约源文件目录。
test 目录 测试代码目录。

然后要添加npm包管理文件:package.json

{
  "name": "ethereum-demo",
  "version": "1.0.0",
  "description": "以太坊demo",
  "main": "truffle-config.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "dev": "lite-server",
    "test": "echo \"Error: no test specified\" && sexit 1"
  },
  "author": "mzi_mzi@163.com",
  "license": "ISC",
  "devDependencies": {
    "@truffle/contract": "^4.0.33",
    "dotenv": "^8.1.0",
    "lite-server": "^2.5.4",
    "truffle-hdwallet-provider": "^1.0.17"
  }
}

添加合约:

// 声明solidity版本
pragma solidity ^0.5.0;

// 声明智能合约MzContract,合约的所有代码都包含在花括号中。
contract MzContract {

    // 声明一个名为value的状态变量
    string value;

    // 合约构造函数,每当将合约部署到网络时都会调用它。
    // 此函数具有public函数修饰符,以确保它对公共接口可用。
    // 在这个函数中,我们将公共变量value的值设置为“myValue”。
    constructor() public {
        value = "hello mz";
    }

    // 本函数读取值状态变量的值。可见性设置为public,以便外部帐户可以访问它。
    // 它还包含view修饰符并指定一个字符串返回值。
    function get() public view returns(string memory ) {
        return value;
    }

    // 本函数设置值状态变量的值。可见性设置为public,以便外部帐户可以访问它。
    function set(string memory _value) public {
        value = _value;
    }
}

然后就是编译:

truffle compile

image

就报错了,应该是版本的问题。

image

image

合约的版本要和项目配置文件里的solc版本一致。

编译通过,在build文件夹中出现json文件:
image

image

教程上是这样说的:
image