Intro to Remix and Solidity

드림보이즈·2023년 5월 3일

강의 내용 참고 : https://www.youtube.com/watch?v=PrdgpgoEdoQ

https://faucets.chain.link/

여기 들어가서 지갑 주소 입력하면 Sepolia testnet에서 0.1ETH와 20LINK 토큰을 받을 수 있다.

LINK 토큰은 metamask에서 자동으로 인식해서 불러올 수 없기 때문에,
LINK 토큰을 인식시켜줘야 한다.

https://docs.chain.link/resources/link-token-contracts

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

이제 안 보이던 LINK가 보인다, 끝!


2. Remix & Solidity

// 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;
        }    
}

OpenZeppelin

https://www.openzeppelin.com/contracts

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

profile
시리즈 클릭하셔서 카테고리 별로 편하게 보세용

0개의 댓글