私は、ユーザーからスマート コントラクト、およびスマート コントラクトからユーザーにイーサを送信する必要があるプロジェクトに取り組んでいます。スマート コントラクトは Solidity のコードであり、python と web3.py を使用して通信しています。
私はこのようにそれを行うことができます: ユーザーから私の python スクリプトのスマート コントラクトまで:
#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' を解析するにはどうすればよいですか? それは可能ですか?
どうもありがとう、アルバン