前言和注意事项

本文章需要按照要求一步步安装,不能省下任意一个部件,下面文章内容会根据需求告诉你哪些部件可以直接下载,或者你可以选择自行编译。

Solidity,Abigen 都是windows版的,请自行更换版本,都差不多的。

文末有文件下载地址。

以下文章和部件需要你最好处于科学上网的情况,挂着代理才能够政策安装,,否则容易下载失败和下载速度极慢。


步骤

安装Solidity编译器

这里根据文章有两种方法,也有语言的不同。

安装 truffle,进行开发,适用于Nodejs,即使你使用Golang等语言开发也强烈推荐安装。

Golang可以直接先安装Solidity。

去Github下载相应系统的文件,如我是exe则是下载exe文件。

image.png

我下载的solc-windows.exe,然后重命名为solc.exe,放置系统变量环境。

如何防止exe文件到系统变量后终端可以直接使用

  1. 将exe文件放入一个目录
  2. 电脑右键属性->选择高级系统设置->点击环境变量
  3. 选择系统环境变量的Path
  4. 编辑->新建->目录地址
  5. image.pngimage.png


安装Abigen

部分文章是叫你下载go-ethereum并make,这里建议直接go build

go get -t -v github.com/ethereum/go-ethereum

这里建议根据mod和放置到全局进行自主判断

下载完毕后进入目录,Go全局的话则是安装GoSDK地址的bin目录,如:

D:\GO_SDK\bin\src\github.com\ethereum\go-ethereum

模块则是:

$GOPATH/src/github.com/ethereum/go-ethereum/

而后进入:github.com\ethereum\go-ethereum\cmd\abigen 目录

然后 go build

等待下载库和编译的时间,会生成一个exe的文件,然后按照防止solc文件的步骤也放进去。


solc和abigen exe文件的压缩包

点击链接的SolcAndAbigen.zip压缩包进行下载


智能合约编写及编译

contract Store {
    event ItemSet(bytes32 key, bytes32 value);

    string public version;
    mapping(bytes32 => bytes32) public items;

    constructor(string memory _version) {
        version = _version;
    }

    function setItem(bytes32 key, bytes32 value) external {
        items[key] = value;
        emit ItemSet(key, value);
    }
}

注意事项:

**Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: <SPDX-License>" to e
ach source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information.**

解决方法: 第一行注释

// SPDX-License-Identifier: MIT

**Error: Source file requires different compiler version (current compiler is 0.8.17+commit.8df45f5f.Windows.msvc) - note that nightly builds are considered to be str
ictly less than the released version**

解决方法:更改为自己solc的系统版本

image.png

如这里是0.8.17,则是:

pragma solidity ^0.8.17;

Warning: Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient.

解决方法:将方法的public删除,如:

    constructor(string memory _version) public {
        version = _version;
    }

改为:

    constructor(string memory _version) {
        version = _version;
    }

Error: Data location must be "storage" or "memory" for constructor parameter, but none was given.

解决方法:

    constructor(string _version) {
        version = _version;
    }

协议要求需要声明内存,所以需要传参加上memory类型。

    constructor(string memory _version) {
        version = _version;
    }

solc编译bin和abi 文件

solc --abi --bin test.sol 

若是想要输出文件则是:

solc --abi --bin -o ./  test.sol

记住必须进入sol所在的目录


abigen 结合bin和abi编译Golang文件

abigen --bin=Store.bin --abi=Store.abi --pkg=store --out=Store.go

最后修改:2023 年 03 月 26 日
如果觉得我的文章对你有用,请随意赞赏