본문 바로가기

Solidity

balance 와 msg.sender란?

오늘은 balance와 msg.sender에 대해서 알아봅시다.

 

 

1. balance 

balance는  내가 이더를 총 얼마 가지고 있냐 를 의미합니다.

 

 

2. msg.sender

msg.sender는 스마트 컨트랙트 내에 함수를 호출한 사람의 계좌를 의미합니다

 

 

msg.sender의 말이 너무 어렵죠?  

 

코드를 통해 한번 쉽게 이해를 해봅시다.

 

 

 

contract lecture {

    event SendETH(address _msgSender, uint256 _currentValue);


    function sendEhter(address payable _to) public payable {
        require(msg.sender.balance >= msg.value, "Your Ether is not enough");
        _to.transfer(msg.value);
        emit SendETH(msg.sender, msg.sender.balance);
    }

  

    
}

 

 

먼저 sendEther 함수는 말 그대로 이더리움을 다른 사람 계좌로 보내는 함수입니다.

 

파라미터로 누구한테 보낼지 address 타입이 있고 이더를 보내야 하니 payable 키워드가 있는 걸 확인해 볼 수 있습니다

 

그다음 require 옆에 msg.sender 보이시죠?

 

이 msg.sender는 나중에 배포할 때 이 sendEther를 호출한 사람 즉 이더를 보내는사람의 계좌를 의미합니다.

 

그 다음 msg.sender.balacne가 보이시죠?  msg.sender는 이더를 보내는 사람의 계좌를 의미한다 했습니다

 

balance는 아까 말씀드렸다시피 이더의 총 양을 보여준다했으니 msg.sender.balance는 이더를 보내는 사람 계좌

이더가 얼마나 있는지를 보여주는 코드입니다.

 

즉 msg.sender.balacne >= msg.value는  내가 이더를 1 보내고 싶으면 내 계좌에 1 이더리움 이상이 있어야 다음 코드가 실행되는 

코드입니다.

 

그 다음 _to.transfer(msg.value)가 보이군요 

 

우리 이 코드는 너무나도 익숙합니다.  보내는 사람 계좌한테 얼마만큼의 이더를 보낼 것인지를 의미합니다.

 

바로 한번 배포를 해봅시다.

 

(배포 후)

 

 

현재 두 개의 계좌가 있습니다.

 

첫번째 db계좌와 두 번째 aB계좌에 각각 100 이더씩 있는 걸 볼 수 있습니다.

 

그럼 msg.value를 통해 1이더를 입력해 봅시다.

 

 

1 이더를 입력했으니 이제 보내볼까요?

 

 

 

 

 

계좌를 잘 보시면 마지막 aB게좌에 보낸다라는 게 보입니다.

 

 

(transact 후)

 

 

 

 

db 계좌에 1 이더가 빠지고 aB이더에 1 추가된 것을 볼 수가 있습니다.

 

 

우리 그러면 balance 즉 이더의 총양이 얼마나 있는지도 확인해 봅시다.

 

 

 

 

SendETH 이벤트가 호출되고  그 아래 상세 표시를 함께 확인해 봅시다.

 

_msgSender  : 보내는 사람의 계좌 db를 확인해 볼 수 있고

_currentValue : 보내는 사람 계좌에 총 이더의 양이 얼마나 남았는지 확인해 볼 수 있습니다.

 

 

오늘도 이렇게 balance와 msg.sender를 아주 쉽게 예제를 통해 이해해 봤습니다

 

오늘도 유익한 글이 되셨으면 좋겠습니다.

 

 

Better than yesterday

                        -김태양-

 

'Solidity' 카테고리의 다른 글

call 함수란?  (3) 2023.10.24
Fallback 과 receive함수란?  (1) 2023.10.24
이더를 보내는 함수(send,transfer) feat. (payable,msg.value)  (2) 2023.10.22
Modifier란?  (3) 2023.10.22
에러 핸들러란? (assert, revert, require)  (4) 2023.10.22