zoukankan      html  css  js  c++  java
  • Solidity的三种转账方式与比较

    转账的3种方式

    1
    2
    3
    address.transfer()
    address.send()
    address.call.value().gas()()

    转账transfer

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function transfer(address _address) public payable{

        _address.transfer(msg.value);

    }

     function transfer2(address _address) public payable{
        _address.transfer(10 * 10**18);

    }

    转账send

    1
    2
    3
    function transfer4(address _address) public payable {
          _address.send(10 ether);
    }

    转账call

    1
    2
    3
    function transfer5(address _address) public payable returns(bool){
       return  _address.call.value(10 ether)();
    }

    对比总结

    1
    2
    3
    4
    5
    6
    transfer与send相似,都为转账操作
    transfer出错抛出异常
    send、call出错不抛出异常,返回true或false
    tansfer相对send更安全
    send、call即便转账失败也会执行其后的代码
    慎用call函数转账,容易发生重入攻击。

    address.transfer()

    • throws on failure
    • forwards 2,300 gas stipend (not adjustable), safe against reentrancy
    • should be used in most cases as it's the safest way to send ether

    address.send()

    • returns false on failure
    • forwards 2,300 gas stipend (not adjustable), safe against reentrancy
    • should be used in rare cases when you want to handle failure in the contract

    address.call.value().gas()()

    • returns false on failure
    • forwards all available gas (adjustable), not safe against reentrancy
    • should be used when you need to control how much gas to forward when sending ether or to call a function of another contract
  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/x-poior/p/10511583.html
Copyright © 2011-2022 走看看