솔리디티에는 모든 함수에서 이용 가능한 특정 전역 변수들이 있음.
참고 (https://solidity-kr.readthedocs.io/ko/latest/units-and-global-variables.html#)
그 중 하나가 현재 함수를 호출한 사람 (혹은 스마트 컨트랙트)의 주소를 가리키는 msg.sender
(솔리디티에서 함수 실행은 항상 외부 호출자가 시작. 컨트랙트는 누군가가 컨트랙트의 함수를 호출할 때까지 블록체인 상에서 아무것도 안 하고 있기 때문에 항상 msg.sender가 있어야 함.)
msg.sender를 이용하고 mapping을 업데이트하는 예시
mapping (address => uint) favoriteNumber;
function setMyNumber(uint _myNumber) public {
// `msg.sender`에 대해 `_myNumber`가 저장되도록 `favoriteNumber` 매핑을 업데이트한다 `
favoriteNumber[msg.sender] = _myNumber;
// ^ 데이터를 저장하는 구문은 배열로 데이터를 저장할 떄와 동일하다
}
function whatIsMyNumber() public view returns (uint) {
// sender의 주소에 저장된 값을 불러온다
// sender가 `setMyNumber`을 아직 호출하지 않았다면 반환값은 `0`이 될 것이다
return favoriteNumber[msg.sender];
}
setMyNumber을 호출하여 본인의 주소와 연결된 우리 컨트랙트 내에 uint를 저장할 수 있음
msg.sender를 활용하면 자네는 이더리움 블록체인의 보안성을 이용할 수 있게 됨
즉, 누군가 다른 사람의 데이터를 변경하려면 해당 이더리움 주소와 관련된 개인키를 훔치는 것 밖에는 다른 방법이 없다는 것.
' :D > block chain' 카테고리의 다른 글
[Solidity] 상속 (0) | 2022.02.15 |
---|---|
[Solidity] Require (0) | 2022.02.15 |
[Solidity] Mapping 과 Address (0) | 2022.02.15 |
[Solidity] Keccak256과 형 변환 (0) | 2022.02.15 |
[Solidity] 함수의 반환값과 함수 제어자 (0) | 2022.02.15 |