transactions - Eth,如何从智能合约中调用存款功能
问题描述
我正在做一个项目,我需要将以太币从用户发送到智能合约,然后从智能合约发送到用户。智能合约是 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”?这甚至可能吗?
非常感谢, 阿尔班
解决方案
您需要Contract
从 Solidity 编译器创建的 ABI 文件中构造一个对象。
以下是如何调用合约函数的示例:
>>> 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
推荐阅读
- python - Flask / Python - 如果选中 HTML 中的某些复选框,我该如何计算?
- python - 如何从 tkinter python 中的特定条目外部单击鼠标左键销毁小部件
- visual-studio-code - 使用 Visual Studio Code 'Makefile' 扩展时如何启用漂亮打印
- html - HTML CSS 不起作用
- azure-active-directory - Azure B2C 自定义策略外部数据源身份验证
- c - 如何检查输入是否是C中的整数?
- c++ - 如何在虚幻引擎 5 中将 Rotation 转换为 FVector?
- r - 带有管道的 if 语句
- r - 第n组标签(仅计算新组的毕业生)
- laravel-livewire - 在编辑模式下打开页面时如何填充状态/区域/子区域选择?