본문 바로가기

전체 글

(41)
[Solidity] 함수의 반환값과 함수 제어자 반환값 string greeting = "What's up dog"; function sayHello() public returns (string) { return greeting; } 솔리디티에서 함수 선언은 반환값 종류를 포함 (위의 경우 string) 함수 제어자 위에서 살펴 본 함수 sayHello()는 솔리디티에서 상태를 변화시키지 않음. 즉, 어떤 값을 변경하거나 무언가를 쓰지 않음. 이 경우에는 함수를 view 함수로 선언한다네. 이는 함수가 데이터를 보기만 하고 변경하지 않는다는 뜻 function sayHello() public view returns (string) { 솔리디티는 pure 함수도 가지고 있는데, 이는 함수가 앱에서 어떤 데이터도 접근하지 않는 것을 의미 function ..
[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..
이미지 파일 저장 경로 어느 폴더에서 관리하는 것이 좋은지? 1. public 폴더에 저장하기 - webpack으로 처리되지 않음 ( 파일이 후처리(post-process) 되거나 minify(경량화) 되지 않음. 원본이 build 폴더에 복사됨. 파일 경로를 잘못 입력하거나, 파일이 존재하지 않을 경우 컴파일 단계에서 오류가 발생하지 않음. 사용자가 접근했을 때 404 오류로 나타남. content hash가 포함되지 않기 때문에, 파일이 수정될 때 마다 직접 파일명을 수정하거나 매개변수 쿼리를 추가해야 함.) - 정적파일을 넣는 디렉토리 (CRA 문서에서 다음과 같은 경우에만 public 폴더에서 관리하는 것이 유용하고, 이외에는 src 폴더 관리를 추천) 특정 이름을 가진 파일이 필요할 때 (manifest.webmani..
숫자 함수 / 날짜 관련 함수 1) 숫자 함수 : 입력되는 값이 숫자인 함수들을 말함. ROUND(숫자, 소수점수) (12.345, 2) -> 12.35 TRUNC(숫자, 소수점수) 버려버리는 거 MOD(숫자1, 숫자2) 12, 10 -> 12 % 10 = 2 남는거 CEIL(숫자) 올림 FLOOR(숫자) 내림 POWER(숫자1, 숫자2) 숫자1의 숫자2만큼의 승을 출력 (3, 2) -> 3의 2승 -> 9 2) 날짜 관련 함수 # 날짜 계산 날짜 + 숫자 = 날짜 7월 20일 + 3 = 7월 23일 날짜 - 숫자 = 날짜 날짜 - 날짜 = 숫자 7/20 - 7/15 = 5 #날짜 함수 SYSDATE 시스템의 현재 날짜와 시간 MONTH_BETWEEN 개월수 ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC
sql 함수 - 단일행 문자함수 lower 소문자 / upper 대문자 SELECT substr ('abcde', 3, 3) FROM dual; substr : 문자열 자르기 ('문자열', 3, 3) : ' ' 안에있는 문자열의 내용 중에서 3번째 인덱스의 문자부터 3개만 잘라서 가져오기 a b c d e 3번째 문자인 c 부터 3개 c, d, e 가져옴 1 2 3 4 5 rpad(id, 10, '*') id칼럼의 내용과 문자 *을 합쳐서 길이가 10이 되도록 만들어줌 ex ) id 칼럼의 문자열 길이가 5일 경우 * 을 뒤에 다섯개 붙여줌