Solidity

Solidity란 이더리움 스마트 컨트랙트를 구현하기 위해서 만들어진 이더리움 전용 언어.

  • EVMEthereum Virtual Machine에서 구동.

  • 코인이 전달되는 코드이기 때문에 베스트 프랙티스를 참고해서 작성하길 권유.

  • 지원 개발 환경(IDE)

Hello World

// SPDX-License-Identifier: MIT (1)
pragma solidity ^0.8.12; (2)

contract HelloWorld { (3)
    function helloWorld() external pure returns (string memory) { (4)
        return "Hello, World!";
    }
}
1 저작권
2 컴파일러 버전 설정
3 컨트랙트명을 HelloWorld 로 지정
4 `function <함수명>() `

자료형

value types

  • uint: 부호 없는 정수형. 기본적으로 256비트 자료형(uint256). uint32, uint64 선언 가능.

  • int: 정수형

  • bool: 논리 자료형

  • string: UTF-8 인코딩 문자열

  • bytes: 바이트

  • address: 20 바이트 이더리움 주소 값

reference types

  • storage

  • memory

  • 구조체

    struct Zombie {
        string name;
        uint dna;
    }
  • 배열

    uint[4] fixedArray; (1)
    uint[] dynamicArray; (2)
    new uint[](5); (3)
    uint[5] public publicArray; (4)
    1 크기 고정
    2 계속 커질 수 있는 배열
    3 new 키워드 활용한 선언
    4 public 키워드 선언을 통해 다른 컨트랙트에서 조회 가능 (just 조회)

맵핑

mapping(_KeyType => _ValueType) public <name>;
  • _KeyType: 매핑, 동적 크기 배열, 컨트랙트, 열거형, 구조체를 제외한 모든 유형

  • _ValueType: 매핑 타입을 포함한 모든 유형

enum

함수

contract ZombieFactory {

    function createZombie(string _name, uint _dna) { (1)

    }

    function processDna(uint _dna) private { (2)

    }

    function convertDna(uint _dna) public returns (string) { (3)
        return "converted";
    }

    function rollbackDna(uint _dna) private pure returns (string) { (4)
        require(_dna > 0, "message"); (5)
    }
}
1 function 키워드를 통해 선언 가능.
2 public, private 접근자를 통해 외부 컨트랙트의 호출 제한 설정 가능. (default: public)
3 returns (<type>) 키워드를 통해 반환 타입 지정 가능
4 함수 제어자 설정 가능
  • view: 컨트랙트의 변수를 읽기만 할 때.

  • pure: 컨트렉트의 변수를 읽지도, 쓰지도 않을 때 (순수 함수를 의미하는 것 같음)

5 require(<conditional>, <message>) 를 통해 사전 검증 가능
function multiReturn() public pure returns (
    uint a;
    uint b;
    uint c;
) {
    return (10, 20, 30); (1)
}

uint number;
(, , number) = multipleReturn(); (2)
1 한번에 여러 값 반환 가능
2 세번째 값만 사용하고자 할 경우

난수 생성

  • keccak256 해시 함수 제공

    • SHA-3 사용

    • 충돌이 희박함

keccak256("aaa")

References