![](/img/trans.png)
[英]Can my backend call a smart contract function to be executed on a certain date?
[英]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.