从 Web3.py 部署使用 OpenZeppelin 制作的合同
Deploy contract made with OpenZeppelin from Web3.py
我遵循了以创建 ICO 和众筹(基于我创建的 ICO)为中心的教程。
这是一个非常经典的教程,我知道,但是现在我将在 Django 平台中借助 OpenZeppelin 和 Truffle 框架制作的 2 个合约与 Web3.py 库集成,我遇到了一个问题。
我用solc编译了合约源码,得到了abi和bin文件
我在 python
中打开过这样的文件
with open("reservations/contracts/compiled/GustavoCoin.abi") as contract_abi_file_coin:
contract_abi_coin = json.load(contract_abi_file_coin)
with open("reservations/contracts/compiled/GustavoCoin.bin") as contract_bin_file_coin:
contract_bytecode_coin = '0x' + contract_bin_file_coin.read()
with open("reservations/contracts/compiled/GustavoCoin.abi") as contract_abi_file:
contract_abi = json.load(contract_abi_file)
with open("reservations/contracts/compiled/GustavoCoinCrowdsale.bin") as contract_bin_file:
contract_bytecode = '0x' + contract_bin_file.read()
我还在 Ganache 区块链模拟器中初始化了 Coin 合约。
但是现在我不知道如何在区块链中部署Crowdsale合约。
部署币成功代码如下:
contract_coin = w3.eth.contract(abi=contract_abi_coin, bytecode=contract_bytecode_coin)
tx_param = {
'from': w3.eth.accounts[1],
'gasPrice': 2000,
}
tx_hash = contract_coin.deploy(transaction=tx_param)
这是部署众筹合约的失败代码:
construct_crowdsale = contract.constructor(11, 11, 1, w3.eth.accounts[1], tx_receipt.contractAddress)
crowdsale_txn_hash = construct_crowdsale.transact()
此部署生成 ganache 错误:
error vm exception while processing transaction revert
关于如何在 web3.py 中正确部署的任何想法?
作为参考,这里是使用 Truffle 框架部署众筹代码的成功代码:
return deployer
.then(() => {
return deployer.deploy(GustavoCoin);
})
.then(() => {
return deployer.deploy(
GustavoCoinCrowdsale,
openingTime,
closingTime,
rate,
wallet,
GustavoCoin.address
);
});
};
发送部署时,记得设置重要的交易字段。例如,您可以设置交易应该签名的帐户。这意味着替换当前行:
crowdsale_txn_hash = construct_crowdsale.transact()
新行:
tx_param = {
'from': w3.eth.accounts[1],
'gasPrice': 2000,
}
crowdsale_txn_hash = construct_crowdsale.transact(tx_param)
请注意,这类似于在硬币合约中设置发送方的方式(使用较旧的 deploy()
API):
tx_param = {
'from': w3.eth.accounts[1],
'gasPrice': 2000,
}
tx_hash = contract_coin.deploy(transaction=tx_param)
我遵循了以创建 ICO 和众筹(基于我创建的 ICO)为中心的教程。
这是一个非常经典的教程,我知道,但是现在我将在 Django 平台中借助 OpenZeppelin 和 Truffle 框架制作的 2 个合约与 Web3.py 库集成,我遇到了一个问题。
我用solc编译了合约源码,得到了abi和bin文件
我在 python
中打开过这样的文件with open("reservations/contracts/compiled/GustavoCoin.abi") as contract_abi_file_coin:
contract_abi_coin = json.load(contract_abi_file_coin)
with open("reservations/contracts/compiled/GustavoCoin.bin") as contract_bin_file_coin:
contract_bytecode_coin = '0x' + contract_bin_file_coin.read()
with open("reservations/contracts/compiled/GustavoCoin.abi") as contract_abi_file:
contract_abi = json.load(contract_abi_file)
with open("reservations/contracts/compiled/GustavoCoinCrowdsale.bin") as contract_bin_file:
contract_bytecode = '0x' + contract_bin_file.read()
我还在 Ganache 区块链模拟器中初始化了 Coin 合约。
但是现在我不知道如何在区块链中部署Crowdsale合约。
部署币成功代码如下:
contract_coin = w3.eth.contract(abi=contract_abi_coin, bytecode=contract_bytecode_coin)
tx_param = {
'from': w3.eth.accounts[1],
'gasPrice': 2000,
}
tx_hash = contract_coin.deploy(transaction=tx_param)
这是部署众筹合约的失败代码:
construct_crowdsale = contract.constructor(11, 11, 1, w3.eth.accounts[1], tx_receipt.contractAddress)
crowdsale_txn_hash = construct_crowdsale.transact()
此部署生成 ganache 错误:
error vm exception while processing transaction revert
关于如何在 web3.py 中正确部署的任何想法?
作为参考,这里是使用 Truffle 框架部署众筹代码的成功代码:
return deployer
.then(() => {
return deployer.deploy(GustavoCoin);
})
.then(() => {
return deployer.deploy(
GustavoCoinCrowdsale,
openingTime,
closingTime,
rate,
wallet,
GustavoCoin.address
);
});
};
发送部署时,记得设置重要的交易字段。例如,您可以设置交易应该签名的帐户。这意味着替换当前行:
crowdsale_txn_hash = construct_crowdsale.transact()
新行:
tx_param = {
'from': w3.eth.accounts[1],
'gasPrice': 2000,
}
crowdsale_txn_hash = construct_crowdsale.transact(tx_param)
请注意,这类似于在硬币合约中设置发送方的方式(使用较旧的 deploy()
API):
tx_param = {
'from': w3.eth.accounts[1],
'gasPrice': 2000,
}
tx_hash = contract_coin.deploy(transaction=tx_param)