티스토리 뷰

Programming Language/Solidity

[Solidity] Contract

SdardewValley 2021. 5. 24. 13:07
반응형

Contract

  • 객체 지향 언어의 클래스와 유사

Creating Contracts

  • contract가 생성되면 생성자(constructor키워드와 선언된 함수)가 한 번 실행됨
  • constructor은 선택 사항 -> default constructor
  • constructor은 하나만 가능(오버로드가 지원되지 않음)
  • constructor가 실행된 후, contract의 최종 코드가 블록체인에 저장됨
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;


contract OwnedToken {
    TokenCreator creator;
    address owner;
    bytes32 name;

    // 생성자
    constructor(bytes32 _name) {
        owner = msg.sender;

        creator = TokenCreator(msg.sender);
        name = _name;
    }

    function changeName(bytes32 newName) public {
        if (msg.sender == address(creator))
            name = newName;
    }

    function transfer(address newOwner) public {
        if (msg.sender != owner) return;

        if (creator.isTokenTransferOK(owner, newOwner))
            owner = newOwner;
    }
}

// constructor가 있지 않음
// default constructor
contract TokenCreator {
    function createToken(bytes32 name)
        public
        returns (OwnedToken tokenAddress)
    {새
        return new OwnedToken(name);
    }

    function changeName(OwnedToken tokenAddress, bytes32 name) public {
        tokenAddress.changeName(name);
    }

    function isTokenTransferOK(address currentOwner, address newOwner)
        public
        pure
        returns (bool ok)
    {
        return keccak256(abi.encodePacked(currentOwner, newOwner))[0] == 0x7f;
    }
}

Visibility and Getters

Solidity의 함수 호출 종류

  • 내부 호출: 실제 EVM 호출을 생성하지 않음
  • 외부 호출: 내부 호출을 실행

Visibility 종류

Fuction State Variable
external O X
public O O
internal O O
private O O
* external:
* public
* internal: 기본. this를 사용하지 않고 내부적으로 접근이 가능
* private

visibility 지정자 위치

  • 상태 변수의 타입 뒤
  • 매개변수 리스트와 리턴 매개변수 리스트 사이
    // SPDX-License-Identifier: GPL-3.0
    pragma solidity >=0.4.16 <0.9.0;
    

contract C {
function f(uint a) private pure returns (uint b) { return a + 1; } // 매개변수 리스트와 리턴 매개변수 리스트 사이
function setData(uint a) internal { data = a; } // 매개변수 리스트와 리턴 매개변수 리스트 사이
uint public data; // 상태 변수 타입 뒤
}
```

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함