首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Eth,如何从智能合约调用存款函数

Eth,如何从智能合约调用存款函数
EN

Stack Overflow用户
提问于 2020-04-18 02:21:38
回答 1查看 2.9K关注 0票数 2

我在一个项目中工作,我需要从用户发送乙醚到智能合同,并从智能合同发送到用户。这个智能合约是用Solidity编写的代码,我使用python和web3.py与其通信。

我设法这样做:从用户到我的python脚本中的智能合约:

代码语言:javascript
运行
复制
#send transaction to the smart contract
web3.eth.sendTransaction({
    'to': address,
    'from': web3.eth.defaultAccount,
    'value': 10000000000000000000
})

从智能合约到使用此功能的用户:

代码语言:javascript
运行
复制
function sendEther(address payable recipient, int _amount) public payable {
        recipient.transfer(_amout ether);
    }

请注意,可以在智能合约中调用此函数。

但后来我想在我的智能合约中创建一个函数存款(从用户到智能合约):

代码语言:javascript
运行
复制
function deposit(uint256 amount) payable public {
        require(msg.value == amount);
        // nothing else to do!
    }

所以基本上,如果我需要用我的python脚本调用这个函数,我需要这样做:

代码语言:javascript
运行
复制
contract.functions.deposit(10).transac({
        'to': address,
        'from': web3.eth.defaultAccount,
        'value': 10
    })

通过检查智能合约的余额,它可以正确地工作。

但是,如果我想要调用智能合约中的存款函数并进行从用户到智能合约的交易,我需要如何继续?当我调用内部函数时,如何解析智能合约中的“msg.value”?这有可能吗?

非常感谢,Alban

EN

回答 1

Stack Overflow用户

发布于 2020-04-22 16:15:52

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

下面是一个调用约定函数的示例:

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

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

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

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

Github.com/web3mode/web3mode

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61278166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档