相关快讯
更多
8分钟前
BlockBeats 消息,9 月 27 日,RPG NFT 游戏 Pixelmon 宣布成立新的领导团队,并发布新的路线图,将原先受 Minecraft 启发的体素模型变成了更加抛光、平滑的 3D 角色,可在即将推出的 Pixelmon 在线游戏和其他元宇宙游戏中使用。 据悉,Pixelmon 的开发已在今年早些时候被 Web3 风投工作室 LiquidX 接管。LiquidX 此前已收购 Pixelmon 项目 60% 的股份,LiquidX 联合创始人 Giulio Xiloyannis 将担任 Pixelmon 的首席执行官。Pixelmon 计划在 2022 年底推出游戏的可玩 alpha 测试版本。 BlockBeats 此前报道,Pixelmon 今年 2 月以荷兰拍的形式发售,起拍价 3 ETH,团队收入高达 7000 万美元。但 NFT 开图后被指实际与预期存在过大差距,引发社区强烈抗议。
20分钟前
BlockBeats 消息,9 月 27 日,据 CoinDesk 报道,万事达卡推出可定制 NFT 主题借记卡,允许部分 NFT 持有者将其艺术品添加至借记卡,包括 CryptoPunks、Moonbirds、Goblintown、BAYC 和 Azuki,允许用户以法定货币、Stablecoin 或其他加密货币进行消费,在 25 个欧洲经济区 (EEA) 国家和英国可用。 据悉,目前「hi.com」平台允许其黄金会员使用其 NFT 个性化借记卡,黄金会员资格是通过持有至少 100,000 个平台的原生 Token hi Dollar (HI) 获得的,约合 4,600 美元。
24分钟前
BlockBeats 消息,9 月 27 日,据相关页面信息,CoinFLEX 重组提案投票结束,98.63% 的债权人同意 CoinFLEX 拟议的重组计划。 BlockBeats 此前报道,9 月 22 日,CoinFLEX 公布重组提案,债权人将拥有公司 65% 的股份。CoinFLEX 团队将以员工股票期权计划(ESOP)的形式分配 15% 股份。B 轮投资者将继续成为重组公司的股东。
36分钟前
BlockBeats 消息,9 月 27 日,据 CoinGecko 数据显示,加密经纪商 Voyager Digital 原生 Token VGX 突破 0.72 美元,现报价 0.7226 美元,24 小时涨幅 6.7%。
Solidity极简入门|第十九讲: 接收ETH receive和fallback
本文介绍了Solidity中的两种特殊函数,receive()和fallback()。
原文标题:《 Solidity 极简入门: 19. 接收 ETH receive 和 fallback 》
原文作者:0xAA 


我最近在重新学 solidity,巩固一下细节,也写一个「Solidity 极简入门」,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。


所有代码和教程开源在 github: github.com/AmazingAng/WTFSolidity


回调函数


Solidity 支持两种特殊的回调函数,receive() 和 fallback(),他们主要在两种情况下被使用:


- 接收 ETH 

- 处理合约中不存在的函数调用(代理合约 proxy contract)


我们这一讲主要介绍接收 ETH 的情况。


接收 ETH 函数 receive


receive() 只用于处理接收 ETH。一个合约最多有一个 receive() 函数,声明方式与一般函数不一样,不需要 function 关键字:receive() external payable { ... }


receive() 函数不能有任何的参数,不能返回任何值,必须包含 external 和 payable。


当合约接收 ETH 的时候,receive() 会被触发。receive() 最好不要执行太多的逻辑因为如果别人用 send 和 transfer 方法发送 ETH 的话,gas 会限制在 2300,receive() 太复杂可能会触发 Out of Gas 报错;如果用 call 就可以自定义 gas 执行更复杂的逻辑(这三种发送 ETH 的方法我们之后会讲到)。


我们可以在 receive() 里发送一个 event,例如:



有些恶意合约,会在 receive() 函数嵌入恶意消耗 gas 的内容,使得一些退款合约不能正常工作:Akutar NFT项目因此被永久锁定了 11539 ETH,接近 2 亿元!因此写包含退款等逻辑的合约时候,一定要注意这种情况。


回退函数 fallback


fallback() 函数会在调用合约不存在的函数时被触发。可用于接收 ETH,也可以用于代理合约 proxy contract。fallback() 声明时不需要 function 关键字,必须由 external 修饰,一般也会用 payable 修饰,用于接收 ETH:fallback() external payable { ... }。


我们定义一个 fallback() 函数,被触发时候会释放 fallbackCalled 事件,并输出 msg.sender,msg.value 和 msg.data:



receive 和 fallback 的区别


receive 和 fallback 都能够用于接收 ETH,他们触发的规则如下:



简单来说,合约接收 ETH 时,msg.data 为空且存在 receive() 时,会触发 receive();msg.data 不为空或不存在 receive() 时,会触发 fallback(),此时 fallback() 必须为 payable。


receive() 和 payable fallback() 均不存在的时候,向合约发送 ETH 将会报错。


总结


这一讲,我介绍了 Solidity 中的两种特殊函数,receive() 和 fallback(),他们主要在两种情况下被使用,他们主要用于处理接收 ETH 和代理合约 proxy contract。


原文链接


律动 BlockBeats 提醒,根据银保监会等五部门于 2018 年 8 月发布《关于防范以「虚拟货币」「区块链」名义进行非法集资的风险提示》的文件,请广大公众理性看待区块链,不要盲目相信天花乱坠的承诺,树立正确的货币观念和投资理念,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。
行业洞察
栏目
从现象看到本质,寻求加密真相