最近对于自己的研究方向有些迷茫,会进入觉得自己做的东西是没有意义的怪圈里。
写完了专利,又陷入了没有方向的境地,于是想想不如好好做点开发的东西吧。
承接上一篇给区块链初学者的实验启示(一)

0x01 Brownie的配置

  1. 首先新建项目,新建虚拟环境,在虚拟环境中 pip install brownie
  2. brownie init 新建 brownie 项目,生成框架
  3. 框架脚手架包括 合约文件夹,编译文件夹build等,测试文件夹 test,脚本文件夹 scripts
    具体介绍详见Brownie 官网文档介绍
  4. 正常顺序应该是brownie console (控制台的意思)连接本地以太坊私链
    比如开启你的Ganache控制台 通过 https://127.0.0.1:8045 连接
  5. 开始编写你的智能合约solidity文件,再写测试python代码

tips:.env文件的配置 测试网络的配置 infura key或者account的导入,这些对于初学者来说估计都是难点。
一时间无法马上配好,或者经常出错。建议仔仔细细过一下流程,配置好环境依赖。

0x02 智能合约的编写

本项目我们写一个最简单的智能合约,对智能合约变量进行Set和Get操作:
pragma solidity ^0.8.15;//solidity版本号的设置
//simple storage
contract helloworld{
uint storedData;//变量

    function set(uint x) external{//external 表明函数只能被外部合约或账户调用
        storedData = x;
    }

    function get() external view returns (uint retVal) {//view 表明函数可以对外部变量进行简单的读取操作 但不能修改外部变量
        return storedData;
    }

}

0x03 智能合约变量和函数的修饰符

public
private
external
internal
pure
view

值得一提的是 编译器一般会告诉你什么时候该加什么关键词 这是很方便的。

0x04 脚本编写

开头引入helloworld 智能合约和network,accounts等关键词

from brownie import helloworld, network, accounts
# simple storage 简单存储
def deploy():
    print("---------deploy-----------")
    private_key = # 填入你的私钥
    accounts.add(private_key) # 这里对项目添加账户才能执行发送交易等操作
    storage_contract = helloworld.deploy({"from": accounts[0]})
    print(f"storage contract deployed on {network.show_active()} network at : {storage_contract.address}")
    print("---------set 1 和get 1 -----------")
    storage_contract.set(1) # 由deploy() 得到智能合约 .set(1) 表明调用这个智能合约的函数
    print("---------get----------")
    output = storage_contract.get() # 注意独立运行get() 并不会输出任何信息 因为它设置的是return 我们没有print是不会输出的
    print(output)

def main():# main函数为程序的入口
    deploy()

0x05 总结

智能合约简单存取操作还是很容易理解的,注意这里set 会发送一个交易,调用智能合约的set函数。
然而你get操作 却不需要发送交易 因为它不改变区块链智能合约的内容 因此不需要发送交易。