从Web3.py

时间:2018-11-17 10:27:59

标签: python ethereum web3 truffle open-zeppelin

我遵循了以创建ICO和众筹(基于我创建的ICO)为中心的教程。

我知道这是一个非常经典的教程,但是现在我将在Web3.py库的Django平台中集成了借助OpenZeppelin和Truffle框架制作的2个合同,并且遇到了问题。 / p>

我已经用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错误:

  

处理事务还原时出错vm异常

有什么想法如何在web3.py中正确部署?


作为参考,下面是使用Truffle框架部署众筹代码的成功代码:

return deployer
    .then(() => {
        return deployer.deploy(GustavoCoin);
    })
    .then(() => {
        return deployer.deploy(
            GustavoCoinCrowdsale,
            openingTime,
            closingTime,
            rate,
            wallet,
            GustavoCoin.address
        );
    });
};

1 个答案:

答案 0 :(得分:0)

发送部署时,请记住设置重要的交易字段。例如,您可以设置用于进行交易签名的帐户。这意味着替换当前行:

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)