合约A调用B的方法实现转账, 怎么写func() 扣A的钱

官方合约, A调用B的func() 实现批量转账, 实际花的是A的钱.

合约方法 func(){
 address(addr).send(amount);
 // 实际花的是合约的钱,  怎么写 花 调用方的钱
}

是通过 DELEGATECALL吗? 有方法例子吗.

请先 登录 后评论

最佳答案 2022-09-28 17:18

function test(address payable addr, uint256 num) public payable {
address(addr).call{value: num}("");
}
最后采用这种方式.
用例子理解起来可能更简单点

  function test(address payable addr, uint256 num) public payable  {
          address(addr).call{value: num}(""); // 可以转账给这个addr ,默认花这个合约的钱
        }
        function test2(address payable addr) public payable  {
           address(addr).call{value: msg.value}(""); // 可以转账给这addr ,默认花调用方
        }

后边就是msg.value}("") // 很多知名contract也是这种用法

请先 登录 后评论

其它 3 个回答

Tiny熊
  擅长:智能合约,以太坊

你这里的花的钱是指 手续费还是 批量转账的钱?

手续费只能扣发起者的。

批量转账的话,转token 使用 transferFrom, 转coin (原生币) 使用 payable 方法 + msg.value 控制。

请先 登录 后评论
情非得已

A DELEGATECALL B 这个时候B的msg对象就是A,直接转账就行,扣的是A的钱

请先 登录 后评论
FILAgiao - 法律顾问、冥想专家

三种方法:call、transfer、send三种方法,主要不同就在于三者使用的gas限制,和安全性不一样

请先 登录 后评论
  • 4 关注
  • 0 收藏,2657 浏览
  • nercis 提出于 2022-09-28 11:13