본문 바로가기

:D/block chain

(20)
[Solidity] Private / Public / Internal / External 솔리디티에서 함수는 기본적으로 public으로 선언됨. 즉, 누구나 (혹은 다른 컨트랙트) 컨트랙트의 함수를 호출하고 코드를 실행할 수 있음. 이는 컨트랙트를 공격에 취약하게 만들 수 있음. 그래서 기본적으로 함수를 private로 선언하고 공개할 만한 함수만 public으로 선언 uint[] numbers; function _addToArray(uint _number) private { numbers.push(_number); } private는 컨트랙트 내의 다른 함수들만이 이 함수를 호출하여 numbers 배열로 무언가를 추가할 수 있다는 것을 의미. (함수 인자명과 마찬가지로 private 함수명도 언더바(_)로 시작하는 것이 관례) Internal과 External public과 private ..
[Solidity] 구조체와 배열 활용 Person 구조체 struct Person { uint age; string name; } Person[] public people; 새로운 Person을 생성하고 people 배열에 추가하는 방법 // 새로운 사람을 생성한다: Person satoshi = Person(172, "Satoshi"); // 이 사람을 배열에 추가한다: people.push(satoshi); // 한줄로 표현 people.push(Person(16, "Vitalik")); array.push() - 무언가를 배열의 끝에 추가해서 모든 원소가 순서를 유지하도록 함 uint[] numbers; numbers.push(5); numbers.push(10); numbers.push(15); // numbers 배열은 [5, 10..
[Solidity] 언어 기본 문법 2 (구조체, 배열, 함수) 좀 더 복잡한 자료형이 필요할 경우 구조체(struct) 사용 struct Person { uint age; string name; } 배열 어떤 것의 모음집이 필요할 때 _배열_ 을 사용 솔리디티에는 _정적_배열과 _동적_배열이 있음 // 2개의 원소를 담을 수 있는 고정 길이의 배열: uint[2] fixedArray; // 또다른 고정 배열으로 5개의 스트링을 담을 수 있다: string[5] stringArray; // 동적 배열은 고정된 크기가 없으며 계속 크기가 커질 수 있다: uint[] dynamicArray; 구조체의 배열을 생성하는 것도 가능 Person[] people; // 동적 배열로 원소를 계속해서 추가할 수 있음 // 마치 데이터베이스처럼 컨트랙트에 구조화 된 데이터를 저장하는..
[Solidity] 언어 기본 문법 1 (contract 생성, 변수 저장, 연산) 모든 솔리디티 소스 코드는 "version pragma"로 시작 해당 코드가 이용해야하는 솔리디티 버전을 선언하는 것. pragma solidity ^버전; 새로운 프로젝트를 시작할 때마다 제일 먼저 작성 pragma solidity ^버전; contract HelloWorld { } 상태 변수는 컨트랙트 저장소에 영구적으로 저장 => 이더리움 블록체인에 기록됨을 말함 (데이터베이스에 데이터를 쓰는 것과 같은 것) uint number = 100; uint256 number2 = 100; - uint 자료형은 부호 없는 정수로, 값이 음수가 아니어야 한다는 의미 솔리디티에서 uint는 실제로 uint256 (256비트 부호 없는 정수의 다른 표현) uint8, uint16, uint32 등과 같이 uin..