Truffle
使用 Truffle 部署後保存合約地址
為了自動化我的開發週期,我想保存已部署合約的地址,以便我的 DApp 可以讀取此資訊並知道在我的私有區塊鏈上的哪裡可以找到合約:
例如,這就是我的松露遷移腳本的樣子:
const fs = require('fs'); var FunnyToken = artifacts.require("FunnyToken"); var TokenSale = artifacts.require("TokenSale"); var storage = {}; module.exports = function(deployer, network, accounts) { deployer.deploy(FunnyToken, 1000000000000) .then(function(){ storage.TOKEN_ADDRESS = FunnyToken.address; deployer.deploy(TokenSale, 1, accounts[0], FunnyToken.address).then(function () { storage.SALE_ADDRESS = TokenSale.address; }); }); console.log("adresses:") console.log(storage) fs.writeFileSync('.address.json',JSON.stringify(storage), 'utf-8'); };
但是以
.address.json
這種方式生成的只包含一個空對象:{}
.在 DApp 端,我想連接到合約的地址
web3.eth.contract(address=contract_address, abi=contract_abi)
我還應該提到我正在使用 Python 和 web3.py 來編寫 DApp。因此,理想情況下,地址資訊應該儲存在 Python 應用程序可以讀取的文件中。
推薦的模式是什麼?
Python DApp的程式碼(包括提出的解決方案)
Truffle 在 build/ 目錄中創建 .json 文件。每個合約都有一個文件,它們包含已部署合約的地址。您在
build/contracts/MetaCoin.json
裡面有一個“網路”部分,它是一個將網路 ID 映射到契約地址的字典。您可以使用您選擇的語言來處理這些文件並生成一個包含您想要的地址的配置文件。
另一種選擇是添加一個遷移腳本,該腳本將在所有先前階段之後執行,該腳本會將合約的地址寫入您選擇的配置文件。
在遷移目錄中創建一個名為 9_final_step.js 的文件
var ConvertLib = artifacts.require("./ConvertLib.sol"); var MetaCoin = artifacts.require("./MetaCoin.sol"); module.exports = function(deployer) { // Output to console or a configuration file console.log({ MetaCoin: MetaCoin.address, ConvertLib: ConvertLib.address, }); };