簡體   English   中英

Eth,如何從智能合約中調用存款 function

[英]Eth, how to call a deposit function from a smart contract

我正在做一個項目,我需要將以太幣從用戶發送到智能合約,再從智能合約發送到用戶。 智能合約是 Solidity 中的代碼,我使用 python 和 web3.py 與其通信。

我設法這樣做:從用戶到我的 python 腳本中的智能合約:

#send transaction to the smart contract
web3.eth.sendTransaction({
    'to': address,
    'from': web3.eth.defaultAccount,
    'value': 10000000000000000000
})

從智能合約到使用這個 function 的用戶:

function sendEther(address payable recipient, int _amount) public payable {
        recipient.transfer(_amout ether);
    }

請注意,這個 function 可以在智能合約中調用。

但后來我想在我的智能合約中創建一個 function 存款(從用戶到智能合約):

function deposit(uint256 amount) payable public {
        require(msg.value == amount);
        // nothing else to do!
    }

所以基本上,如果我需要用我的 python 腳本調用這個 function,我需要這樣進行:

contract.functions.deposit(10).transac({
        'to': address,
        'from': web3.eth.defaultAccount,
        'value': 10
    })

通過檢查智能合約的余額,它可以正常工作。

但是,如果我想在我的智能合約中調用存款 function 並進行從用戶到智能合約的交易,我需要如何進行? 當我在里面調用 function 時,如何解析智能合約中的'msg.value'? 這可能嗎?

非常感謝,阿爾班

您需要從 Solidity 編譯器創建的 ABI 文件中構造一個Contract object。

以下是如何調用合約 function 的示例:

>>> tx_hash = greeter.functions.setGreeting('Nihao').transact()

https://web3py.readthedocs.io/en/stable/contracts.html#contract-deployment-example

根據您的應用程序,通常用戶通過他們的 web 瀏覽器調用合約,他們有一個使用 web3.js 連接的錢包。

這是一個很好的庫,如何將您的 dApp 與您的用戶錢包連接起來:

github.com/web3modal/web3modal

我認為問題出在您的代碼上

function deposit(uint256 amount) payable public {
    require(msg.value == amount);
    // nothing else to do!
}

嘗試改用這個:

function deposit(uint256 amount) payable public {
    require(msg.value != 0);
    // nothing else to do!
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM