Solidity地址支付方法Send、Transfer和Call的使用

news2024/11/27 8:48:53

以上三种转账方式都属于地址的成员属性(members of address)。

参见地址成员类型

Transfer

如果当前合约的余额不够大或者 Ether转账被接收账户拒绝,转账功能将失败。接收方智能合约应定义回退函数,否则转账调用将引发错误。transfer函数在失败时恢复。另外它被硬编码以防止重入攻击(这句话不是很能理解)。

示例1:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract AddressFunction {
    function transfer(address payable _to) public payable {
        _to.transfer(msg.value);
    }
}

测试

  

Send

Send是和Transfer具有同等功能的低级api。如果执行失败,当前合约不会因为异常而停止,但会返回false。

示例2:

    function send(address payable _to) public payable {
        bool isSend = _to.send(msg.value);
        require(isSend, "Send fail");
    }

初看这段代码总会感觉怪怪的,一般思维调send方法不是发送方吗(solidity设计的某些api反人类),其实这里的_to指向的是接收方(包括transfer使用)。

这里为什么要加上payable关键字,它可以修饰地址和函数,使之具有接受和转账以太的功能。

贴一个官方文档的说明;

 测试

send与transfer都有2300gas的限制,msg.value可以为零。官方推荐在收款人取款的模式下,使用transfer更好,因为send需要不断对发送地址余额进行判断。

尝试转移大于发送地址余额的value,此时交易将一直处于pending状态....

transact to AddressFunction.send pending ... 

Call

这是将 ETH 发送到智能合约的推荐方式。空参数触发接收地址的回退功能(fallback function)。

示例3:

 function calls(address payable _to) public payable {

        (bool isSuccess, /* memory data */ ) = _to.call{value: msg.value}("");
        require(isSuccess, "Failure! Ether not send.");
    }

测试

使用call,还可以触发合约中定义的其他功能,并发送固定数量的gas来执行该功能。交易状态作为布尔值发送,返回值在数据变量(bytes memory data)中发送。 

更具体使用的格式如下:

(bool sent, bytes memory data) = _to.call{gas :10000, value: msg.value}("func_signature(uint256 args)");

 2019年,solidity官方已经弃用了send和transfer,推荐call方法进行转账操作,但还是要小心使用官方给出了警告:

 

参考: https://medium.com/coinmonks/solidity-transfer-vs-send-vs-call-function-64c92cfc878a

            Types — Solidity 0.8.17 documentation 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以生态共建促产业发展,点亮HPC新未来

作者 | 曾响铃 文 | 响铃说 作为IT行业的“明珠”&#xff0c;极“硬核”的高性能计算不如云计算、AI、物联网技术备受关注。但不可忽视的是&#xff0c;近年来&#xff0c;高性能计算正在从高精尖科研加速迈向千行百业&#xff0c;成为推动数字经济发展的新引擎。在近日举办…

springboot - 原理初探

自动配置&#xff1a; 1、pom.xml &#xff08;1&#xff09;sping-boot-dependencies&#xff1a;核心依赖在父工程中&#xff01;&#xff01;&#xff01; &#xff08;pom.xml文件中&#xff0c;spring-boot-starter-parent 点进去&#xff0c;然后&#xff0c;spring-…

C51 - 准双向I/O口结构

Contents1> P1口1.1> 写 "0" 过程1.2> 写 "1" 过程1.3> 读引脚”准“双向问题&#xff1a;1.4> 读 寄存器2> P3口3> P0口1> P1口 没画【P1.0/T2】【P1.1/T2EX】第2功能&#xff1b; 1.1> 写 “0” 过程 D触发器FF1&#xff0c;…

ssm+Vue计算机毕业设计校园新闻发布系统(程序+LW文档)

ssmVue计算机毕业设计校园新闻发布系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

微信小程序-视图与逻辑

文章目录1. 页面导航2. 导航传参3. 下拉刷新4. 上拉触底5. 自定义编译模式6.生命周期7. wxs脚本1. 页面导航 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现页面导航的方式有如下两种&#xff1a; 声明式导航 在页面上声明一个<navigator>导航组件通…

java swing(GUI) MySQL实现的学生选课签到考勤系统源码开发教程

今天给大家演示一款由Java swing即GUI和mysql数据库实现的&#xff0c;学生签到考勤信息管理系统&#xff0c;系统采用了MVC的设计模式&#xff0c;结构层次非常清晰&#xff0c;此外&#xff0c;该项目有手把手的开发教程&#xff0c;适合刚入门Java的学生学习&#xff0c;下面…

思科复习实验,含dhcp,三层交换机,ospf

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

协同过滤毕业设计 商品推荐系统

文章目录1 简介2 常见推荐算法2.1 协同过滤2.2 分解矩阵2.3 聚类2.4 深度学习3 协同过滤原理4 系统设计4.1 示例代码(py)5 系统展示5.1 系统界面5.2 推荐效果6 最后1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是学长的毕设系列文章&#xff01; &#x1f525…

JVM面试题详解系列——垃圾回收详解

堆空间的基本结构 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时&#xff0c;Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 Java 堆是垃圾收集器管理的主要区域&#xff0c;因此也被称作 GC 堆&#xff08;Garbage Collected Heap&am…

如何将 Credly 中的数字徽章转成二维码

如何将 Credly 中的数字徽章转成二维码 在 Credly 数字证书 这一篇文章中要说过当完成 AWS Academy Cloud Foundations 课程后&#xff0c;可以申请一个结业证书徽章&#xff0c;已下逐步说明&#xff0c;如何申请结业证书徽章&#xff0c;并转成二维码&#xff0c;可以放在个…

Guitar Pro8电脑版更新下载及主要功能介绍

想成为一名专业甚至著名的音乐人&#xff0c;用到的工具软件非常多&#xff0c;在众多款软件工具中&#xff0c;Guitar Pro 8能满足乐谱创作者、学习者的所有需要。 Guitar Pro 8多达30项功能优化新版本 边听边看&#xff0c;支持添加音频轨道让音乐富有灵魂&#xff0c;精准…

用友U8 cloud,以应用牵引与价值驱动推进信创2.0阶段

经过多年发展的中国信创产业正进入新阶段&#xff0c;无论资本市场还是企业市场&#xff0c;都迎来“大爆发”。 信创的市场空间正在被打开。在今年9月底国家下发的79号文中&#xff0c;全面给出了国资信创产业发展与进度的指导&#xff0c;要求到2027年央企国企100%完成信创替…

IB学校书单合集请收藏好

努力一寒假&#xff0c;开学变学霸&#xff01;阅读是提升学生思维能力的最佳方法&#xff0c;也是提升学习成绩的最有效途径。假期是最棒的阅读机会&#xff0c;然而什么书孩子爱读、读后有效&#xff1f; 小编为大家整理了几所国际学校的推荐书单&#xff0c;快带着孩子一起阅…

Kong 介绍

1 官方&#xff1a;Installing Kong Gateway (Enterprise) on Kubernetes - v2.5.x | Kong Docs 2 github: GitHub - pantsel/konga: More than just another GUI to Kong Admin API 什么是kong API 网关和 API 服务管理层&#xff0c;它基于 Nginx 和 OpenResty 开发的一个具…

自动化运维,国产化信创替代方案

IT国产化体系庞杂&#xff0c;整个产业链涉及网络基础设施、服务器、存储、数据库、中间件、操作系统等众多环节&#xff0c;近年来IT行业各领域国产化技术日趋成熟&#xff0c;但各厂商技术耦合性不高&#xff0c;依然存在兼容适配问题。 北京智和信通技术有限公司作为国产化…

矩阵的等价、相似、合同

文章目录矩阵等价相似合同等价、相似、合同的关系矩阵等价 1.定义&#xff1a;A,B均为mn型矩阵&#xff0c;若r(A)r(B)r(A)r(B)r(A)r(B) &#xff0c;则矩阵A、B等价 【型同&#xff0c;秩等】 相似 1.定义&#xff1a;n阶方阵A,B&#xff0c;若ョ可逆矩阵P&#xff0c;使得 …

如何设计一个安全的对外接口,老司机总结了这几点

博主之前做过恒丰银行代收付系统&#xff08;相当于支付接口&#xff09;&#xff0c;包括现在的oltpapi交易接口和虚拟业务的对外提供数据接口。总之&#xff0c;当你做了很多项目写了很多代码的时候&#xff0c;就需要回过头来&#xff0c;多总结总结&#xff0c;这样你会看到…

企业选择适合的云存储的4个技巧

免费和廉价的个人和小型企业云存储无处不在&#xff0c;因此人们需要选择一种更适合自己的云存储。 而面对越来越多的选择&#xff0c;如何选择更适合自己的云存储产品呢?在以往&#xff0c;大多数人根据所获得的存储量多少而决定&#xff0c;这种方法虽然简单&#xff0c;但无…

C语言作用域与内存布局

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 C语言作用域与内存布局作用域1. 局部变量2. 静态局部变量3. 全局变量4. 静态全局变量5. extern声明全局…

[附源码]Python计算机毕业设计SSM基于RationalRose的教务管理系统开发(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…