为了更专注于编写合约,发布及更新合约,快速迭代开发,减少合约管理的工作量,我将一些工作进行了脚本管理,使合约开发工作更加简单一些.
solidity合约开发,以太坊及兼容环境下合约开发 发布 更新.
npm 7.21.x node ^12.22.4
$> git clone https://github.com/yinzhiqing/templete-sol.git
$> cd templete-sol
$> npm install
$> curl -L get.web3j.io | sh && source ~/.web3j/source.sh
$> sudo add-apt-repository ppa:ethereum/ethereum
$> sudo apt-get update
$> sudo apt-get install solc
#python -m pip install solc-select
$> python -m pip install --upgrade pip
# 当前solc版本
$> solc --version
solc, the solidity compiler commandline interface
Version: 0.8.6+commit.11564f7e.Linux.g++
# 安装并切换其他版本
$> solc-select install 0.5.0
$> solc-select use 0.5.0
# 查看版本
$> solc --version
solc, the solidity compiler commandline interface
Version: 0.5.0+commit.1d4f565a.Linux.g++
defaultNetwork: "localhost",
//修改 defaultNetwork 可用应用不同的链
//mnemonic, key_infura, key_infura_mainnet 在secrets.json中配置;
defaultNetwork: "internal", // localhost external internal mainnet
networks: {
hardhat: {
mining: {
auto: true,
//interval: [1000, 3000]
}
},
localhost: {
},
external: {
url: `https://kovan.infura.io/v3/${key_infura}`,
accounts :{mnemonic : mnemonic}
},
internal: {
url: `https://kovan.infura.io/v3/${key_infura}`,
accounts :{mnemonic : mnemonic}
},
mainnet: {
url: `https://mainnet.infura.io/v3/${key_infura_mainnet}`,
accounts :{mnemonic : mnemonic}
}
},
{
"mnemonic": 助记词(生成账户用),
"key_infura": INFURA_KEY,
"key_infura_mainnet": INFURA_KEY
}
- 初始化环境
npm install
- 设置secrets.json
- 配置hardhat.config.js
- 添加或编写合约(合约存储路径: ./contracts )
- 执行make 编译合约.
- 生成新的配置文件(只有第一次执行,以后有新合约,需要手动添加).
./generate_conf.sh
- 6中操作将在 ./jsons/contracts 下生成或更新文件 contract_templete.json, 将测文件中的内容拷贝到同目录下的配置文件中(contract_NETWORK.json NETWORK是hardhat.config.js 中应用的defaultNetwork)
- 生成开关文件(make open/close 命令用到), 控制那些合约deploy 或 upgrade.
make init_tokens_script
- 确认合约没有问题.
make
>$ make
npx hardhat clean
npx hardhat compile
Compiling 18 files with 0.8.1
Compilation finished successfully
- 查看可deploy 合约 'make index'
TempleteEx
Templete
...
- 设置需要deploy的合约(upgrade类似)
make open target=deploy index=all
- deploy 合约.
make deploy
- 查看状态.
make show_contracts
(未发布时,因链上没有即地址空,执行失败) 或make show_contracts_conf
表格中 address内容非空或变更 - 生成abi文件到 ./output
make use_solc=true
- 生成java接口文件,保存在 ./javas/
./export_java.sh
, 此操作依赖 .bin 和 .abi 文件
$> make help
$> make run_local_node
$> make open target=deploy
$> make deploy
$> make open target=upgrade
$> make upgrade
$> make show_contracts_conf
$> make show_contracts
$> ./generate_conf.sh
.
|_Makefile //命令执行文件
|_export_java.sh //导出java接口
|_generate_conf.sh //根据合约生成contract_templete.json文件
├── contracts //合约实现文件所在目录
│ └── interfaces //接口文件所在目录
├── javas //合约的java接口文件根目录
├── datas //合约发布、更新历史记录
├── jsons //自定义配置文件所在目录
│ └── contracts //合约管理目录
├── output //solc输出目录及abi bin文件所在目录
└── scripts //功能脚本在此添加
└── switchs //开关相关脚本(勿动)
└── contracts
#版本 v0.1.0 : 初步可用