У меня есть контракт, в котором есть функция выплат с тремя входами:
function payout(uint256[] ids, address[] recipients, uint256[] amounts) public authorized {
require(ids.length == recipients.length && ids.length == amounts.length);
for (uint i = 0; i < recipients.length; i++) {
Payout(ids[i], recipients[i].send(amounts[i]));
}
}
, а в views.py
определена функция, которая вызывает:
q=Question.objects.filter()
ids = []
adds = []
for cur in q:
for a in cur.answer.all():
ids = a.user.id
adds = a.user.user_wallet_address
bounty_for_answering(ids, adds, cur.ether)
return redirect('/')
и bounty_for_answering()
is:
def bounty_for_answering(ids, usersWalletAddress, bountyAmount):
amount_in_wei = w3.toWei(bountyAmount, 'ether')
nonce=w3.eth.getTransactionCount(usersWalletAddress)
txn_dict = contract_instance.functions.payout(ids, usersWalletAddress, bountyAmount).buildTransaction({
'gas': 30000,
'gasPrice': w3.toWei('40', 'gwei'),
'nonce': nonce,
'chainId': 3
})
signed_txn = w3.eth.account.signTransaction(txn_dict, wallet_private_key)
txn_hash = w3.eth.sendRawTransaction(signed_txn.rawTransaction)
txn_receipt = w3.eth.getTransactionReceipt(txn_hash)
count = 0
while tx_receipt is None and (count < 30):
time.sleep(10)
tx_receipt = w3.eth.getTransactionReceipt(txn_hash)
print(tx_receipt)
if tx_receipt is None:
return {'status': 'failed', 'error': 'timeout'}
, который user_wallet_address
является адресом кошелька MetaMask.
Проблема в том, что я не знаю, как передать входные аргументы в bounty_for_answering
, и я получаю эту ошибку:
Не удалось определить предполагаемую функцию с именем payout
, позиционным аргументом (ами) типа (<class 'list'>, <class 'list'>, <class 'set'>)
и ключевым аргументом (ами) типа {}
.Найдено 1 функция (ей) с именем payout
: ['payout (uint256 [], address [], uint256 [])'] Ошибка вызова функции из-за отсутствия соответствующих типов аргументов.