
강의 내용 참고 : https://www.youtube.com/watch?v=PrdgpgoEdoQ
여기 들어가서 지갑 주소 입력하면 Sepolia testnet에서 0.1ETH와 20LINK 토큰을 받을 수 있다.
LINK 토큰은 metamask에서 자동으로 인식해서 불러올 수 없기 때문에,
LINK 토큰을 인식시켜줘야 한다.
https://docs.chain.link/resources/link-token-contracts

마치 메타마스크에서 토큰 불러오기라고 생각하면 된다.

이제 안 보이던 LINK가 보인다, 끝!
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
contract Register {
string private info;
function getInfo() public view returns (string memory) {
return info;
}
function setInfo(string memory _info) public {
info = _info;
}
}
쉬운거 나도 안다. 여기서 주목할 건 딱 하나다.
string private info
private인데 getInfo()를 하면 info가 보이고, setInfo()를 하면 info를 수정할 수 있다.
이게 맞는가? 무슨 private인가 ? (추후 설명)

remix에서 남의 CA만 알면 함수를 실행할 수 있듯이, etherscan에서도 가능하다.
(내가 배포한 컨트랙트가 아니라면 풀 코드와, 정보를 입력해야 verify가 가능하다)

참 쉽죠?
owner, msg.sender, modifier, whiteList를 이용하여 업글 버전을 만들 수 있다.
따로 설명할 거 없이 쉽지만 하드코딩으로 치면서 문법에 익숙해지자.
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
contract RegisterAccess {
string[] private info;
address public owner;
mapping (address => bool) public whiteList;
constructor() {
owner = msg.sender;
whiteList[msg.sender] = true;
}
event InfoChange(string oldInfo, string newInfo);
modifier onlyOwner {
require(msg.sender == owner,"Only owner");
_;
}
modifier onlyWhitelist {
require(whiteList[msg.sender] == true, "Only whitelist");
_;
}
function getInfo(uint index) public view returns (string memory) {
return info[index];
}
function setInfo(uint index, string memory _info) public onlyWhitelist {
emit InfoChange (info[index], _info);
info[index] = _info;
}
function addInfo(string memory _info) public onlyWhitelist returns (uint index) {
info.push (_info);
index = info.length -1;
}
function listInfo() public view returns (string[] memory) {
return info;
}
function addMember (address _member) public onlyOwner {
whiteList[_member] = true;
}
function delMember (address _member) public onlyOwner {
whiteList[_member] = false;
}
}
https://www.openzeppelin.com/contracts

이렇게 너무 쉽게 UI가 이뤄져 커스텀이 가능하다.