Я работаю над проектом, в котором мне нужно отправить эфир от пользователя к умному договору и от умного договора к пользователю. Умный контракт - это код в Solidity, и я использую python и web3.py для связи с ним.
Мне удается сделать это следующим образом: от пользователя до умного контракта в моем python script:
#send transaction to the smart contract
web3.eth.sendTransaction({
'to': address,
'from': web3.eth.defaultAccount,
'value': 10000000000000000000
})
И из смарт-контракта для пользователя, использующего эту функцию:
function sendEther(address payable recipient, int _amount) public payable {
recipient.transfer(_amout ether);
}
Обратите внимание, что эту функцию можно вызывать в смарт-контракте.
Но затем я хотел создать функцию депозита (от пользователя до умного договора) в моем умном договоре:
function deposit(uint256 amount) payable public {
require(msg.value == amount);
// nothing else to do!
}
Итак, если мне нужно вызвать эту функцию с помощью сценария python, мне нужно действуйте так:
contract.functions.deposit(10).transac({
'to': address,
'from': web3.eth.defaultAccount,
'value': 10
})
И, проверив баланс смарт-контракта, он работает правильно.
Но как мне поступить, если я хочу вызвать функцию депозита внутри моего умный контракт и перейти к транзакции от пользователя к умному договору? Как мне проанализировать «msg.value» в моем умном контракте, когда я вызываю функцию внутри? Это вообще возможно?
Большое спасибо, Албан