[TIL] 2023-05-16 DAY41
GIT 주소 : https://github.com/dowoo303/SOLIDITY
오늘 배운것들
- 다른 컨트랙트에 있는 변수를 변경시키는 것이 목적
1) VISIBILITY
- public
- private
- internal
- external
2) 인스턴스
3) Estate(상속)- TEST4
- TEST3 풀이
각종 팁
회고
- 다음 문제
은행지기: 생성자 이용해서 오너 설정하고 private를 이용해서 오너만 접근이 가능하도록 만들기- 복습할 때는 0번 코드 보고 하기
형태: 컨트랙트이름(아이) is 상속 컨트랙트 이름(부모)
/*
실습가이드
1. DAD의 getAddress() -> 제 지갑 주소
2. MOM의 husbandAddress(), husbandAddress2() -> MOM의 주소
3. CHILD의 fathersAddress(), fathersAddress2() -> 내 지갑 주소
4. CHILD의 daddyGetMsgSender(), daddyGetMsgSender2(), daddyGetMsgSender3() -> CHILD의 주소
*/
contract DAD {
function getAddress() public view returns(address) {
return address(this);
}
}
contract MOM {
DAD husband = new DAD();
function getWallet() public view returns(uint) {
return husband.wallet();
}
function husbandAddress() public view returns(address) {
return address(husband);
}
function husbandAddress2() public view returns(address) {
return husband.getAddress();
}
}
contract CHILD is DAD {
function fathersAddress() public view returns(address) {
return DAD.getAddress();
}
function fathersAddress2() public view returns(address) {
return super.getAddress();
}
DAD daddy = new DAD();
DAD daddy2 = new DAD();
function fathersWallet2() public view returns(uint) {
return daddy.wallet();
}
function getDaddyAddress() public view returns(address) {
return address(daddy);
}
function getDaddyAddress2() public view returns(address) {
return daddy.getAddress();
}
function getDaddy2Address() public view returns(address) {
return address(daddy2);
}
function getDaddy2Address2() public view returns(address) {
return daddy2.getAddress();
}
}
/*
실습가이드
1. DAD의 getMsgSender() -> 제 지갑 주소
2. MOM의 husGetMsgSender() -> MOM의 주소
3. CHILD의 dadGetMsgSender() -> 내 지갑 주소
4. CHILD의 daddyGetMsgSender(), daddyGetMsgSender2() -> CHILD의 주소
*/
contract DAD {
uint a;
uint public wallet=100; // 공개한 지갑 잔액
uint internal crypto=1000; // 메모장에 private key가 있는 크립토 잔액
uint private emergency=10000; // 진짜 비상금
function getMsgSender() public view returns(address) {
return msg.sender; // 현재 내 지갑 주소가 나옴
}
}
contract MOM {
DAD husband = new DAD();
function husGetMsgSender() public view returns(address) {
return husband.getMsgSender(); // 현재 지갑 주소가 아닌 MOM 컨트랙트 주소가 나옴
}
}
contract CHILD is DAD {
function dadGetMsgSender() public view returns(address) {
return super.getMsgSender(); // 현재 내 지갑 주소가 나옴
}
DAD daddy = new DAD();
DAD daddy2 = new DAD();
function daddyGetMsgSender() public view returns(address) {
return daddy.getMsgSender(); // 현재 지갑 주소가 아닌 CHILD 컨트랙트 주소가 나옴
}
}
형태: (컨트랙트이름) (변수명) = new (컨트랙트이름());