ReasonJun

Solidity : deposit code example 본문

Blockchain/Solidity

Solidity : deposit code example

ReasonJun 2023. 10. 18. 22:20
728x90
// SPDX-License-Identifier: MIT
pragma solidity >= 0.7.0 < 0.9.0;

contract Bank0 {
    // 예금자 주소 => 금액
    mapping (address => uint) public balance;
    event log(bytes data);


    function deposit() public payable returns (uint) {
        balance[msg.sender] += msg.value;

        return msg.value;
    }

    function withdrawByCall(address payable _addr, uint _amount) public {
        require(balance[msg.sender] > _amount, "Insufficient Balance");
        balance[msg.sender] -= _amount;

        (bool success, bytes memory data) = _addr.call{value: _amount}("");
        // bytes memory data = abi.encodeWithSignature("abcdefg(address, uint)", _addr, _value);
        // (bool success, bytes memory data) = _addr.call{value: _amount}(data);
        emit log(data);
        require(success, "Transfer Failed"); 
    }

      function withdrawBySend(address payable _addr, uint _amount) public {
        require(balance[msg.sender] > _amount, "Insufficient Balance");
        balance[msg.sender] -= _amount;

        (bool success) = _addr.send(_amount);
      
        require(success, "Transfer Failed");
    }

    function withdrawByTransfer(address payable _addr, uint _amount) public {
        require(balance[msg.sender] > _amount, "Insufficient Balance");
        balance[msg.sender] -= _amount;
        _addr.transfer(_amount);
    }

    function getMyBalance() public view returns(uint) {
        return balance[msg.sender];
    }

}
728x90

'Blockchain > Solidity' 카테고리의 다른 글

Openzeppelin : ERC721PresetMinterPauserAutoId  (0) 2023.10.22
Solidity : sol2uml  (0) 2023.10.20
Solidity : fallback() vs receive()  (0) 2023.10.18
Solidity : receive()  (0) 2023.10.18
Solidity : call() vs delegatecall()  (0) 2023.10.18
Comments