0

所以我有一个我已经定义然后编译的solidity合约:

voting_contract_compiled = compile_contract('Voting')
voting_deployment_tx_receipt, Voting = deploy_contract(w3, voting_contract_compiled, 10)

当我这样做时,Voting.all_functions()我得到:

[<Function getNumVoters()>,
 <Function getStatus()>,
 <Function getWinner()>,
 <Function isVotingOpen()>,
 <Function totalVotesFor(int256)>,
 <Function validateAndCacheVote()>,
 <Function voteForCandidate(int256)>,
 <Function votesReceived(int256)>]

这是我定义的功能。我现在要做的是与来自默认帐户以外的发件人的这些功能进行交互。我不知道该怎么做。我是否需要编译另一份合同(这似乎不是正确的选择),但似乎每当我这样做时Voting.something,它指的是那里的默认帐户,所以制作新合同是我唯一能想到的,但这似乎也是错误的然后我将实例化一个新合同。

我想做类似的事情:

account1 = {'from': w3.eth.accounts[1], 'value': w3.toWei(1, 'ether')}
Voting.functions.voteForCandidate(1).transact(account1)

但我明白了TransactionFailed: execution reverted: b''

4

1 回答 1

0

事实证明,这样做的方法如下:

transaction = {'from': w3.eth.accounts[6], 'value': w3.toWei(1, 'ether')}

tx_hash = Voting.functions.voteForCandidate(1).transact(transaction)
tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)

wherew3.eth.accounts只是不同帐户名称的列表。

于 2021-03-15T14:46:42.550 回答