선릉역 1번 출구

solidity(3) 본문

Language/Solidity

solidity(3)

choideu 2021. 8. 12. 10:06

1. Ownable contract

컨트랙트를 소유 가능하게 만드는 것 -> 컨트랙트를 대상으로 특별한 권리를 가지는 소유자가 있다.

contract Ownable {
    address public owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

*OpenZeppelin은 DApp에서 사용할 수 있는, 안전하고 커뮤니티에서 인증받은 스마트 컨트랙트의 라이브러리다.

- 생성자(Constructior): function Ownable()은 생성자로 컨트랙트와 동일한 이름을 가진, 생략할 수 있는 특별한 함수다.

- 함수 제어자(Function Modifier)-modifier onlyOwner()은 다른 함수에 대한 접근을 제어하기 위해 사용되는 유사함수이다.

+Ownable contract가 기본적으로 하는 일

1. 컨트랙트가 생성되면 컨트랙트의 생성자가 owner에 msg.sender(컨트랙트를 배포한 사람)를 대입한다.

2. 특정한 함수들에 대해서 오직 소유자만 접근할 수 있도록 제한 가능한 onlyOwner 제어자를 추가한다.

3. 새로운 소유자에게 해당 컨트랙트의 소유권을 옮길 수 있게 한다.

 

2. 함수 제어자-onlyOwner

함수 정의부 끝에 해당 함수의 작동 방식을 바꾸도록 제어자의 이름을 붙일 수 있다.

function eatCake() external onlyOwner {
}

eatCake 함수를 호출하면, onlyOwner의 코드가 먼저 실행되고 onlyOwner의 _;부분을  eatCake 함수로 되돌아가 실행하게 된다

 

3. Gas

가스는 이더리움 DApp이 사용하는 연료로 사용량은 함수의 로직이 얼마나 복잡한지에 따라 달라진다.

*가스를 아끼기 위해 구조체 압축

솔리디티에서는 uint의 크기에 상관없이 256bit의 저장 공간을 미리 잡아놓기 때문에 uint를 uint8을 쓰는 것은 아무런 도움이 되지 않지만 struct안에서는 도움이 된다.

 

4. 시간 단위(time units)

솔리디티는 시간을 다룰 수 있는 단위계를 기본적으로 제공한다.

seconds, minutes, hours, days, weeks, years -> 초 단위 unit 숫자로 변환됨 ex) 1minutes -> 60

 

5. 구조체를 인수로 전달하기

(parameters) -> (struct name storage name)

 

6. 인수를 가지는 함수 제어자

말 그대로 함수 제어자도 인수를 가질 수 있다.

 

7. view 함수와 Gas

view 함수는 사용자에 의해 외부에서 호출되었을 때 가스를 전혀 소모하지 않는다. (내부에서는 유료)

->DApp의 가스 사용을 최적화하는 방법임!

 

8. storage

solidity에서 비싼 연산 중 하나이다. memory를 권장함

 

9. for 반복문

javascript 문법과 유사함

 

'Language > Solidity' 카테고리의 다른 글

solidity(2)  (0) 2021.08.12
solidity(1)  (0) 2021.08.10
Comments