2

私は、ユーザーからスマート コントラクト、およびスマート コントラクトからユーザーにイーサを送信する必要があるプロジェクトに取り組んでいます。スマート コントラクトは 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' を解析するにはどうすればよいですか? それは可能ですか?

どうもありがとう、アルバン

4

1 に答える 1