solidity中的receive(接收)函数和fallback(回退函数)

这篇具有很好参考价值的文章主要介绍了solidity中的receive(接收)函数和fallback(回退函数)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

1、接收函数(Receive Function)

2、回退函数(Fallback Function)

二、代码示例

1.接收函数(Receive Function)

2.回退函数(Fallback Function)

总结


前言

在Solidity中,接收函数(receive function)和回退函数(fallback function)是两种特殊类型的函数,用于处理合约接收到以太币时的操作。


一、接收函数和回退函数是什么?

1、接收函数(Receive Function)

接收函数是一种特殊的外部函数,用于处理合约接收到以太币时的操作。它具有以下特点:

  • 接收函数的声明形式为 receive() external payable { ... },其中 external 表示只能通过外部调用来触发,payable 表示该函数可以接收以太币。
  • 当合约接收到以太币时,并且没有指定其他函数来处理接收到的以太币时,会调用接收函数。
  • 接收函数不能接受任何参数,因为它只能用于处理接收到的以太币,而没有其他输入。
  • 接收函数通常用于记录合约接收到的以太币数量,执行特定的逻辑操作或触发其他函数。 

    2、回退函数(Fallback Function)

  • 回退函数是一种特殊的外部函数,用于处理以太币发送时没有匹配到其他函数的情况。它具有以下特点:

  • 回退函数的声明形式为 fallback() external payable { ... },其中 external 表示只能通过外部调用来触发,payable 表示该函数可以接收以太币。
  • 当合约接收到以太币,并且没有匹配到其他具体函数来处理时,会调用回退函数。
  • 回退函数可以用于执行一些默认操作,如记录以太币的发送者、更新合约状态或拒绝接收以太币等。

注:在Solidity 0.6.0版本之后,如果合约没有定义任何接收函数,但有定义回退函数,则该合约将被视为不接收以太币的合约。

二、代码示例

1.接收函数(Receive Function)

代码如下(示例):

// 这个智能合约是一个简单的以太币接收器,它可以接收发送到合约地址的以太币,并将接收到的以太币数量存储在 received 变量中。

contract receive_test1{

    // 声明一个uint类型的变量,用于储存一接收到的以太币数量

    uint public  received;

    // 这是一个特殊的solidity函数,称为接收函数,当合约接收到以太币时会调用这个函数

     receive() external payable {

        // 将接收到的以太币数量加到 received 变量中。

        received +=msg.value;

     }

}

接收函数的用处:

 1、接收付款: 当有人向合约地址发送以太币时,接收函数会被调用,合约就能够处理这笔付款。这对于接受捐赠、购买商品或执行其他需要以太币支付的操作非常有用。

 2、处理转账: 如果你想要在合约内部实现转账功能,接收函数可以用于接收来自其他合约或账户的以太币,并在接收到后执行一些逻辑操作,例如记录转账信息或更新合约状态。

3、ICO(首次代币发行): 在初次代币发行期间,接收函数可以用于接收以太币,然后向投资者分配相应的代币。

4、分红支付: 如果你的合约实现了分红功能,接收函数可以用于接收分红池中的以太币,然后按照一定的逻辑将分红支付给合约持有者或其他相关方。

2.回退函数(Fallback Function)

代码如下(示例):

// 个智能合约是一个简单的以太币接收器,它使用回退函数来处理接收到的以太币

contract fallback_test{

// 声明一个uint变量,用于记录接收到的以太币数量。

    uint  fallbackReceived;

// 这是一个回退函数(fallback function),当合约接收到以太币但没有匹配到合约中任何其他函数时,会调用此函数。

     fallback() external payable {

        fallbackReceived+=msg.value;

      }  

}

 回退函数的用处:

1、接收以太币: 当没有与调用合约匹配的函数时,回退函数会被调用,这使得合约能够接收到以太币。

2、处理未知操作: 如果有人发送了一个不被合约所识别的交易,回退函数可以用来处理这种情况,例如拒绝交易或者记录交易信息。

3、增加合约的灵活性: 回退函数使得合约能够处理更多的操作,增加了合约的灵活性和可扩展性。


总结

总之,接收函数和回退函数都是用于处理合约接收到以太币的情况,但它们的触发时机和作用略有不同。接收函数是专门用于接收以太币的函数,而回退函数则是在没有匹配到其他函数时触发的默认处理函数。文章来源地址https://www.toymoban.com/news/detail-852305.html

到了这里,关于solidity中的receive(接收)函数和fallback(回退函数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于STM32使用HAL_UART_Receive()无法接收数据的问题

    一、问题发现         在项目中我想通过阻塞的方式接收一段来自串口的数据,于是使用了HAL_UART_Receive函数,但跑起来发现一直超时接收不到。网上使劲搜但没搜到啥有用的结果,那只能自己捣鼓了。一开始怀疑是硬件的问题,于是用示波器直接连到对应的rx脚上,发现数据

    2024年02月11日
    浏览(39)
  • STM32 串口接收不定长数据 HAL_UART_Receive_IT (帧头帧尾)

    最近使用sw4stm32调试串口时发现串口接收不定长数据很不方便,这里是帧头帧尾的接收方式,欢迎大佬指导。 这里要用串口中断接收的数据帧帧头为0xEB,帧尾为0XBE 这里是其中定义的变量  主函数里打开串口接收中断 然后串口接收处理部分全都写在的回调函数中。

    2024年01月19日
    浏览(36)
  • 【区块链 | Solidity】跟我学 Solidity(7):事件

    如何使用事件记录数据 原文: https://medium.com/better-programming/learn-solidity-events-2801d6a99a92 作者: wissal haji 欢迎订阅《Solidity智能合约零基础开发教程专栏》系列文章。 在今天的文章中,我们将看到如何使用web3.js从区块链中读取事件。 Solidity中的事件就像你习惯于使用其他语

    2024年01月25日
    浏览(42)
  • Google Chrome 插件开发: 无法建立连接, 接收端不存在. Could not establish connection. Receiving end does not exist

    接收端, 也就是说目标页面必须有 chrome.runtime.onMessage 监听消息, 如果 “content-script” 没有注入到页面中, 那么这个页面就无法接收消息 如果你的插件刚刚加载, 并且在一个已经加载完毕的页面中使用它, 则会出这个问题. 因为这个页面已经加载完了, 它并没有被注入脚本, 你需

    2023年04月15日
    浏览(42)
  • 区块链2——Solidity智能合约开发

    区块链 索引目录 智能合约是一种以代码形式编写的自动执行合约,它们运行在区块链上。这些合约定义了在特定条件下发生的事件以及相应的行为。 1.1 智能合约结构 版本声明(Version Declaration): 智能合约通常以声明版本开始,指定合约应该使用的Solidity编译器版本。例如

    2024年02月05日
    浏览(52)
  • 【Python & 机器学习 基础】绘制 sigmoid 函数曲线 | exp:以e为底的指数函数(科普向)| 区块链 面试题:区块链技术中的“区块链浏览器”是什么?有什么作用?

      “谁都了解生存往往比命运还残酷,只是没人愿意认输,我们都在不断赶路,忘记了出路。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域

    2024年02月06日
    浏览(37)
  • 区块链智能合约编程语言 Solidity

    上文介绍了区块链生态发展,我们知道以太坊的到来可以使开发人员基于区块链开发DApp,本文介绍 Solidity 编程语言的使用,然后基于 Solidity 编写一个简单的智能合约。 Solidity 是以太坊开发人员使用的编程语言,用来编写智能合约,运行在以太坊虚拟机(EVM)上。 有开发经

    2024年02月12日
    浏览(44)
  • 【区块链Solidity】开发环境的注册与认证

     往期文章 【区块链Solidity】智能合约与Solidity介绍 目录 工具介绍  百度超级链 目前开发智能合约的IDE,首推还是Remix,而Remix官网,总是由于各种各样的(网络原因)无法使用,我们可以在本地搭建智能合约开发环境remix-ide,除此之外我们还可以使用国内的百度超级链进行

    2024年02月08日
    浏览(26)
  • 【区块链 | Solidity】Solidity开发教程:用Web3.js构建第一个Dapp

    Web3.js 使用的实用介绍 原文 作者:wissal haji 欢迎订阅《Solidity智能合约零基础开发教程专栏》系列文章。 如果你一直在跟着这个系列学习,那么你已经掌握了编写自己的智能合约。 因此,今天给大家介绍一下构建去中心化应用的全貌,并向大家介绍一下web3.js,这是构建da

    2024年01月24日
    浏览(41)
  • 【区块链实战】Solidity 智能合约如何给账户充值

    目录 一、实战场景 二、知识点 智能合约 智能合约函数 智能合约充值 payable 智能合约部署地址 智能合约的运行 合约 this 对象 三、菜鸟实战 四、运行结果 Solidity 智能合约如何给账户充值 1、充值金额 2、充值并查看结果

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包