solidity 用brownie搭建和使用项目

news/2024/4/24 2:38:23/文章来源:https://blog.csdn.net/SprintfWater/article/details/129126332

用brownie开发测试 solidity

新建一个brownie项目:

brownie init

新增文件:

requirements-dev.txt

PyYAML==5.4.1
ape-safe==0.2.1
click==8.1.3
eth-abi==2.1.1
eth-brownie==1.19.0
gnosis-py==3.9.5
hexbytes==0.2.2
pytest==6.2.5
python-dotenv==0.16.0
web3==5.29.1
pytest-dotenv==0.5.2

brownie-config.yaml

project_structure:build: buildcontracts: contractsinterfaces: interfacesreports: reportsscripts: scriptstests: testsnetworks:default: developmentdevelopment:gas_limit: maxgas_buffer: 1gas_price: 0max_fee: nullpriority_fee: nullreverting_tx_gas_limit: maxdefault_contract_owner: truecmd_settings: nullcobo-chain-dev:host: http://localhost:8545cobo-chain-sandbox:host: http://cobo_chain_evm.rpc.cobo.onelive:gas_limit: autogas_buffer: 1.1gas_price: automax_fee: nullpriority_fee: nullreverting_tx_gas_limit: falsedefault_contract_owner: falsecompiler:evm_version: istanbulsolc:version: 0.8.14optimizer:enabled: trueruns: 200remappings:- "@openzeppelin=OpenZeppelin/openzeppelin-contracts@4.7.2"vyper:version: nullconsole:show_colors: truecolor_style: monokaiauto_suggest: truecompletions: trueediting_mode: emacsreports:exclude_paths: nullexclude_contracts: nullonly_include_project: truehypothesis:deadline: nullmax_examples: 50report_multiple_bugs: Falsestateful_step_count: 10phases:explicit: truereuse: truegenerate: truetarget: trueshrink: trueautofetch_sources: false
dependencies: null
dev_deployment_artifacts: false

development:- name: Ganache-CLIid: developmentcmd: ganache-clihost: http://127.0.0.1timeout: 120cmd_settings:port: 8545gas_limit: 12000000accounts: 10evm_version: istanbul

命令行 test-chain 本地测试

brownie networks add Ethereum test-local host=http://localhost:8545 chainid=9000

在指定network 环境部署相关factory

brownie run scripts/deploy_factory.py --network test-local

在指定network 环境部署相关router,config等合约(这个命令会有上面的命令打印出来)

brownie run scripts/deploy_module.py deploy_module 0xbd1D2224e65e7Ce89Ea0F8237B4deE38CCBe13Cb 0x65c7225A5E29ef20B974197362b587985077cE95 --network test-chain-local

在指定network 环境 初始化 config 等相关数据(这个命令会有上面的命令打印出来)

brownie run scripts/init_config.py init_config 0x10F05a76659D230ab0E48071f4f3ff4E9daC639c boss_name boss_address --network test-local

在指定network 环境 查询相关配置(这个命令会有上面的命令打印出来)

brownie run scripts/init_config.py get_config 0xac19dAd5060cE759c663710744175c36806e5C08 boss_name --network test-local

其他:

deploy_module.py

import json
import argparse
from brownie.convert import to_bytesfrom brownie import (FlowConfigFactory,FlowConfig
)from .utils import get_account,get_network
from .base import router_bindconfig_module_name = to_bytes("config".encode('utf-8'), type_str="bytes32")def deploy_module(router_factory_address, config_factory_address):router_factory = FlowOrgRouterFactory.at(router_factory_address)config_factory = FlowConfigFactory.at(config_factory_address)accounts = get_account()router_owners = [accounts[9].address, accounts[8].address]rig_creator = accounts[1]router_bind_contract_func="bindModule(bytes32,address)"router_owner9=accounts[9]router_module = router_bind(router_factory, config_factory, router_owners, rig_creator, router_bind_contract_func, router_owner9, config_module_name)print("\n***next step init_config cmd:")print(f"brownie run scripts/init_config.py init_config router_address key value --network network, eg:")print(f"brownie run scripts/init_config.py init_config {router_module.address} boss_name boss_address --network {get_network()}")

deploy_factory.py

import jsonfrom brownie import (FlowConfigFactory,FlowConfig,
)from .utils import get_account,get_networkdef deploy_factory():accounts = get_account()print("<<<<<<<<<<<<<<")test_creator = accounts[0]print(f"test_creator {test_creator}")print("Deploying FlowOrgRouterFactory")router_factory = FlowOrgRouterFactory.deploy({"from": test_creator})print(f"FlowOrgRouterFactory deployed at {router_factory}")print("Deploying FlowConfigFactory")config_factory = FlowConfigFactory.deploy({"from": test_creator})print(f"FlowConfigFactory deployed at {config_factory}")print("\n\n***next step deploy_module cmd:")print(f"brownie run scripts/deploy_module.py deploy_module router_factory_address config_factory_address --network network, eg:")print(f"brownie run scripts/deploy_module.py deploy_module {router_factory} {config_factory} --network {get_network()}")return (router_factory, config_factory)def main():deploy_factory()

init_context.py

import json
import argparsefrom brownie.convert import to_bytesfrom brownie import (FlowContext
)from .utils import get_account,get_networkimport sys
sys.path.append("..")
from tests.utils import (contract_func_build
)config_module_name = to_bytes("config".encode('utf-8'), type_str="bytes32")set_config_contract_func="setConfig(bytes32,string)"def deploy_context():accounts = get_account()print("<<<<<<<<<<<<<<")test_creator = accounts[0]print(f"test_creator {test_creator}")print("Deploying FlowContext")context = FlowContext.deploy({"from": test_creator})print(f"FlowContext deployed at {context}")print("\n\n***next step generate_get_sender_address cmd:")print(f"brownie run scripts/init_context.py generate_get_sender_address context_address --network network, eg:")print(f"brownie run scripts/init_context.py generate_get_sender_address {context} --network {get_network()}")def generate_get_sender_address(context_address):data1 = contract_func_build("getSenderAddress()")#print(f"$expression=call(\\\"{config_address}\\\",\\\"{data1.hex()}\\\")")print(f"$expression=call('{context_address}','0x{data1.hex()}')")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_71704.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何快速、全面、深入地掌握一门编程语言

思考路线 如何快速&#xff1f; 什么样的Demo才能让人觉得你掌握了它&#xff1f; 空 判断&#xff1a;构造一个可以判断所有空的 is_empty 函数 for 循环&#xff1a;i 和 集合迭代两种 时间获取&#xff1a;年/月/日 时分秒 时间戳与时间格式互转 休眠时间函数 字符串处理…

Word控件Spire.Doc 【Table】教程(17):如何在 C#、VB.NET 中删除 Word 表格中的行和列

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

PCB设计中降低噪声与电磁干扰的24个窍门

电子设备的灵敏度越来越高&#xff0c;这要求设备的抗干扰能力也越来越强&#xff0c;因此PCB设计也变得更加困难&#xff0c;如何提高PCB的抗干扰能力成为众多工程师们关注的重点问题之一。本文将介绍PCB设计中降低噪声与电磁干扰的一些小窍门。 下面是经过多年设计总结出来的…

大数据处理学习笔记1.3 使用Scala集成开发环境

文章目录零、本讲学习目标一、搭建Scala的IntelliJ IDEA开发环境&#xff08;一&#xff09;启动IDEA&#xff08;二&#xff09;安装Scala插件&#xff08;三&#xff09;配置IDEA使用的默认JDK&#xff08;四&#xff09;创建Scala项目1、创建Scala项目 - ScalaDemo2、创建Sc…

linux高级命令之死锁

死锁学习目标能够知道产生死锁的原因1. 死锁的概念死锁: 一直等待对方释放锁的情景就是死锁为了更好的理解死锁&#xff0c;来看一个现实生活的效果图:说明:现实社会中&#xff0c;男女双方一直等待对方先道歉的这种行为就好比是死锁。死锁的结果会造成应用程序的停止响应&…

【vue】elemente-ui table toggleRowSelection 默认选择无效[已解决]

项目场景&#xff1a; 点击按钮&#xff0c;弹出一个弹出框&#xff0c;内部出现一个table表&#xff0c;表内数据是动态获取&#xff0c;同时得勾选上几个table表的数据&#xff0c;类似以下的图 问题描述 点击按钮显示弹出框&#xff0c;加载table中的数据&#xff0c;默…

【机器学习】Adaboost

1.什么是Adaboost AdaBoost&#xff08;adapt boost&#xff09;&#xff0c;自适应推进算法&#xff0c;属于Boosting方法的学习机制。是一种通过改变训练样本权重来学习多个弱分类器并进行线性结合的过程。它的自适应在于&#xff1a;被前一个基本分类器误分类的样本的权值会…

springboot整合Chat Generative Pre-trained Transformer

什么是Chat Generative Pre-trained Transformer Chat Generative Pre-trained Transformer&#xff0c;是以人工智能驱动的聊天机器人程序 &#xff0c;已经更新多个版本&#xff0c;很多大厂也都在接入其API。 整合难度 难度一颗星&#xff0c;基本上就是给官方API发请求&am…

在VMware Workstation中配置固定IP、在VMware Fusion中配置固定IP

1、在VMware Workstation中配置固定IP 配置固定IP需要2个大步骤&#xff1a; 1.在VMware Workstation&#xff08;或Fusion&#xff09;中配置IP地址网关和网段&#xff08;IP地址的范围&#xff09; 首先让我们&#xff0c;先进行第一步&#xff0c;跟随图片进行操作 现在进…

基于某业务单登陆场景并发测试实战

文章目录1 测试目的2 测试目标和测试对象3 名词解释4 测试说明5 测试环境和工具5.1 测试工具5.2 测试环境5.3 人力计划6 测试用例6.1 方案设计6.2 接口地址6.3 接口参数6.3.1 header参数6.3.2 请求参数7 脚本设计8 监控数据8.1 虚拟用户并发情况8.2 事务响应时间8.3 每秒点击次…

面试攻略,Java 基础面试 100 问(十二)

如何将字符串转换为基本数据类型&#xff1f; 调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型&#xff1b; 如何将基本数据类型转换为字符串&#xff1f; 一种方法是将基本数据类型与空字符串&#xff08;””&#xff09;连…

微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI RestClient

分布式搜索引擎01-- elasticsearch基础0.学习目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容例如&#xff1a;在GitHub搜索代码…

半年前学习了性能测试涨薪5k, 经验+技术积累+坚持很重要

做测试一年多来&#xff0c;虽然平时的工作都能很好的完成&#xff0c;但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺&#xff0c;所以&#xff0c;在工作之余也做了一些测试方面的知识的补充。不足之处&#xff0c;还请大家多多交流&#xff0c;互相学习。现…

系列三、docker相关指令

一、docker指令 1.1、查看docker详细信息 docker info 1.2、查看docker版本 docker version 1.3、帮助命令 docker --help 二、images指令 2.1、查看本地仓库中有哪些镜像 docker images 2.2、下载新的镜像 # 语法 docker pull 镜像名:版本号# 案例 docker pull mysql…

Node.js安装配置及Angular CLI的安装

NodeJS的安装node.js官网下载地址: https://nodejs.org/en/download/在node.js的官网上面下载适合自己机型的&#xff0c;如果是Windows系统的话&#xff0c;建议下载对应的 Windows Installer (.msi) 。下载完成后&#xff0c;双击打开安装&#xff0c;安装路径最好自定义&…

12款适合小团队协作、任务管理和进度跟踪的在线任务管理的工具推荐?

国内外12款主流任务管理软件测评: 1.开发任务管理PingCode; 2.多合一项目任务管理Worktile;3.个人和小团队项目任务管理Notion; 4.企业任务管理平台SmartTask; 5.小团队任务管理Teambition;6.IT任务追踪管理Jira等。无论是做好工作任务管理还是个人任务管理&#xff0c;从来都不…

Flink-多流转换(Union、Connect、Join)

文章目录多流转换分流基本合流操作联合&#xff08;Union&#xff09;连接&#xff08;Connect&#xff09;基于时间的合流——双流联结&#xff08;Join&#xff09;窗口联结&#xff08;Window Join&#xff09;间隔联结&#xff08;Interval Join&#xff09;窗口同组联结&a…

Git复习

1. 引言 现在要用到Git&#xff0c;复习一下关于Git的指令&#xff0c;知识摘自《Pro Git》 2. 起步 git和其他版本控制软件最大的差别在于git是直接记录某个版本的快照&#xff0c;而不是逐渐地比较差异。 安装: sudo apt install git-all设置用户信息&#xff1a; git c…

Vue3搭建记录

一、初始化项目&#xff1a;项目名称vue3-element-admin npm init vitelatest vue3-element-admin --template vue-ts 二、整合Element-Plus 1.本地安装Element Plus和图标组件 npm install element-plus npm install element-plus/icons-vue 2.全局注册组件 // main.ts imp…

【LeetCode】No.232. 用栈实现队列 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/implement-queue-using-stacks/ 1. 题目介绍&#xff08;232. 用栈实现队列&#xff09; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff…