# Solidity学习之接收发送代币 **Published by:** [林夕云](https://paragraph.com/@0xa91ccaeb1206a1fe86c00801555afa1d79fbdd52/) **Published on:** 2022-09-09 **URL:** https://paragraph.com/@0xa91ccaeb1206a1fe86c00801555afa1d79fbdd52/solidity-3 ## Content Solidity学习之函数接收eth 如果要让合约可以接受eth,那么需要payable修饰将要调用的函数,否则函数不能接受eth // SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.7; contract A{ address payable public owner; constructor(){ owner =payable( msg.sender); } function deposit() external payable { } function getBalance() external view returns (uint) { return address(this).balance; } } 合约接收eth 当合约定义了Fallback或者Recieve函数,当你调用合约不存在的函数时,会默认调用他们,data是空的时候会优先调用Fallback,所以只要把这两个函数定义为payable,则合约可以接受eth 发送eth 有三种方式,tansfer,send,call // SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.7; contract A{ constructor() payable { } function transfer(address payable to) external payable { //不返回任何信息,原子化操作 to.transfer(123); } function send(address payable to) external payable{ bool a =to.send(123); //返回是否成功 require(a,"sendfailed"); } function call(address payable to) external payable{ //返回是否成功及msg (bool a,) = to.call{value:123}(""); require(a,"call failed"); } } contract B{ event log(string msg); fallback() external payable { emit log("oh money"); } function balance() external view returns (uint){ return address(this).balance; } } ## Publication Information - [林夕云](https://paragraph.com/@0xa91ccaeb1206a1fe86c00801555afa1d79fbdd52/): Publication homepage - [All Posts](https://paragraph.com/@0xa91ccaeb1206a1fe86c00801555afa1d79fbdd52/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@0xa91ccaeb1206a1fe86c00801555afa1d79fbdd52): Subscribe to updates - [Twitter](https://twitter.com/996icu_ust): Follow on Twitter