区块链开发|给区块链初学者的实验启示(二)
最近对于自己的研究方向有些迷茫,会进入觉得自己做的东西是没有意义的怪圈里。
写完了专利,又陷入了没有方向的境地,于是想想不如好好做点开发的东西吧。
承接上一篇给区块链初学者的实验启示(一)
0x01 Brownie的配置
- 首先新建项目,新建虚拟环境,在虚拟环境中 pip install brownie
- brownie init 新建 brownie 项目,生成框架
- 框架脚手架包括 合约文件夹,编译文件夹build等,测试文件夹 test,脚本文件夹 scripts
具体介绍详见Brownie 官网文档介绍 - 正常顺序应该是brownie console (控制台的意思)连接本地以太坊私链
比如开启你的Ganache控制台 通过 https://127.0.0.1:8045 连接 - 开始编写你的智能合约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操作 却不需要发送交易 因为它不改变区块链智能合约的内容 因此不需要发送交易。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 kitescat' blog!