![react](https://tistory1.daumcdn.net/tistory/4365896/skin/images/react-logo.png)
목록📖 전체보기 (254)
즐겁게, 코드
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/P8IOD/btq2MlobLf7/SXNJeO9aN5HtBBgkXaIvB1/img.png)
솔리디티는 "계약 지향 프로그래밍 언어" 인데요, 사실 배우다 보면 객체지향 프로그래밍과도 유사한 점이 많습니다. 상속을 통해 "고양이는 동물이다" 처럼 부분집합 관계에 있는 컨트랙트의 논리적 계층구조를 표현할 수 있으며, 동일한 로직을 다수의 클래스로 분할해서 단순히 코드를 정리할 때도 활용할 수 있습니다. 1. 상속 솔리디티에서는 is 키워드를 통해 컨트랙트를 상속받을 수 있습니다. contract Doge { function catchphrase() public returns (string) { return "So Wow CryptoDoge"; } } contract BabyDoge is Doge { function anotherCatchphrase() public returns (string) {..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c5l8JE/btq2JkJPi5c/kGErKrp9ESOkiqL6rbB6Bk/img.png)
솔리디티에는 변수를 저장할 수 있는 Storage와 Memory 라는 공간이 존재합니다. Storage는 블록체인 상에 영구적으로 저장되며, Memory는 임시적으로 저장되는 변수로 함수의 외부 호출이 일어날 때마다 초기화됩니다. (비유하자면 Storage는 하드 디스크, Memory는 RAM에 저장되는 것을 의미합니다.) 대부분의 경우에는 솔리디티가 알아서 메모리 영역을 구분해 주는데요, 상태 변수(함수 외부에 선언된 변수)는 storage로 선언되어 블록체인에 영구적으로 저장되는 반면, 함수 내에 선언된 변수는 memory로 선언되어 함수 호출이 종료되면 사라지게 됩니다. 1. storage storage와 memory 키워드는 구조체와 배열을 선언할 때 명시적으로 선언되어야 합니다. contract..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cCuBg3/btq2MoK2RkG/vkjfTs1BbxDBHGVirT8Ug0/img.png)
1. 매핑 매핑(mapping) 은 "키 - 값" 구조로 데이터를 저장할 때 활용되는 타입입니다. (자바스크립트의 Object 나 파이썬의 딕셔너리를 생각하시면 됩니다) // key: uint 형, value: address 형 mapping(uint => address) public zombieToOwner; // key: address 형, value: uint 형 mapping(address => uint) ownerZombieCount; 매핑값을 읽고 쓰기 위해서는 (매핑 이름)[키] 의 형태로 접근할 수 있습니다. mapping(uint => address) public zombieToOwner; // uint형 키 0에 호출한 사람의 주소(address)가 할당된 모습입니다. zombieToO..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d6I483/btq2HIjIksx/bKkv2ErkIyvL7cosKevmQ1/img.png)
솔리디티는 DAPP(탈중앙화 어플리케이션)의 로직을 담당하는데요, 어떻게 트랜잭션 내역과 계약 내용을 화면에 보여줄까요? 맞습니다! 바로 프론트엔드단이 별도로 필요한데요, 프론트엔드에 데이터를 넘겨주기 위해 이벤트를 활용합니다. 이벤트는 event 키워드로 선언할 수 있으며, 이벤트는 자바의 인터페이스처럼 본문을 구현하지 않습니다. [솔리디티 예시 코드] // onNewTransaction 이라는 이벤트를 정의합니다. event onNewTransaction(uint id, uint data); function add(uint id, uint data) public returns (uint) { // add 함수가 실행되면 onNewTransaction 이벤트가 호출됩니다. onNewTransaction..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bUsAIO/btq2DtACho0/WachiVibfmZvyoG14HSmr0/img.png)
블럭체인에서 보안은 매우 중요한 문제입니다. 따라서 솔리디티는 keccak256 이라는 강력한 해시 함수를 내장하고 있는데요, 한번 예를 들어 보겠습니다. (Git의 커밋번호를 생성할 때 쓰는 해시 알고리즘이 SHA-1인데, keccak256은 SHA-3을 사용합니다.) keccak256("aaaab"); //6e91ec6b618bb462a4a6ee5aa2cb0e9cf30f7a052bb467b0ba58b8748c00d2e5 keccak256("aaaac"); //b1f078126895a1424524de5321b339ab00408010b7cf0e6ed451514981e58aa9 단순히 입력으로 주어진 문자열의 한 문자를 b에서 c로 바꿨을 뿐인데 해시값이 완전히 달라진 모습입니다. C++ 등 다른 프로그래..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bNTXab/btq2HxaW3Sv/p9HZsKi122spGOdtoUSGB1/img.png)
1. 함수 솔리디티에서는 function 키워드를 활용해 함수를 만들 수 있습니다. (솔리디티는 ECMAScript, 즉 자바스크립트 문법을 기반으로 설계되었다고 하는데, 아마 그 흔적 중 일부가 아닐까 싶습니다.) pragma solidity ^0.4.19; contract ZombieFactory { uint a = 16; uint b = a ** 10 struct Zombie { string name; uint dna; } Zombie[5] public zombies; function createZombie(string _name, uint _dna) { } } 함수의 접근자 지정하기 1 : private & public 함수에는 private & public 속성의 접근자를 지정할 수가 있습니다...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rN3l8/btq2Ihlbeeo/TZBjkZpk67lczMgfgr9rWK/img.png)
솔리디티(Solidity)는 *계약 지향 프로그래밍 언어로, 다양한 블록체인 플랫폼의 스마트 계약 로직을 작성할 때 사용됩니다. (쉽게 설명하면 이더리움 계열의 블록체인은 솔리디티로 작성됐다고 보면 됩니다.) ✅ TIP - 솔리디티를 처음 학습하는 입장이라면 이 "계약 지향" 이라는 말이 굉장히 생소하게 느껴질 수 있는데요, 보면서 느끼시겠지만 계약(contract)은 문법상 자바 등의 "클래스" 와 굉장히 유사한 구조입니다. 따라서, 앞으로 나올 "컨트랙트" 라는 말이 어색하다면 "클래스" 와 비슷한 개념이라고 어렴풋이 이해하고 계셔도 될 듯 합니다. 솔리디티의 큰 특징은 다음과 같습니다. 정적 타입 언어 Ethereum Virtual Machine (EVM) 위에서 실행됨 문장의 끝을 반드시 세미콜론..