Eth,如何从智能合约中调用存款功能

Posted

技术标签:

【中文标题】Eth,如何从智能合约中调用存款功能【英文标题】:Eth, how to call a deposit function from a smart contract 【发布时间】:2020-07-31 08:10:54 【问题描述】:

我正在做一个项目,我需要将以太币从用户发送到智能合约,然后从智能合约发送到用户。智能合约是 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”?这可能吗?

非常感谢, 阿尔班

【问题讨论】:

【参考方案1】:

您需要从 Solidity 编译器创建的 ABI 文件中构造一个 Contract 对象。

这里是一个如何调用合约函数的例子:

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

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

根据您的应用程序,通常用户通过他们的网络浏览器调用合约,他们在其中使用 web3.js 连接了钱包。

这是一个很好的库,如何将你的 dApp 与你的用户钱包连接起来:

github.com/web3modal/web3modal

【讨论】:

以上是关于Eth,如何从智能合约中调用存款功能的主要内容,如果未能解决你的问题,请参考以下文章

如何ETH以太坊智能合约做一个简单的DAPP

智能合约将 eth 转移到地址失败

你如何估计智能合约调用所需的 gas 量?

text 智能合约上的eth调用方法仅适用于web3

有没有办法模拟智能合约调用的输出?

再深刻理解下web3.js中estimateGas如何计算智能合约消耗的gas量