일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 이슈
- 파이썬
- 웹
- 컴퓨터공학
- react
- JavaScript
- 리액트
- 클라우드
- 자바스크립트
- AWS
- 가상화
- 백엔드
- next.js
- 타입스크립트
- 알고리즘
- 블록체인
- 쿠버네티스
- es6
- TypeScript
- k8s
- 이더리움
- docker
- kubernetes
- 백준
- 프론트엔드
- BFS
- CSS
- 솔리디티
- node.js
- HTML
- Today
- Total
목록블록체인 (10)
즐겁게, 코드
이전 글에서 Geth라는 CLI 기반 소프트웨어를 통해 프라이빗 블록체인을 배포해 보았습니다. Geth를 활용한 프라이빗 블록체인 구축 & 마이닝 실습 Geth(Go + Etherium)는 이더리움 기반 블록체인 네트워크를 구성하기 위한 클라이언트 소프트웨어인데요, 오늘은 Geth를 활용해 이더리움 기반 블록체인을 구성하고 블록을 직접 마이닝해 이더를 획 merrily-code.tistory.com 그런데 사실 복잡한 세팅과 명령어로 인해 Geth를 활용하는 방법이 쉽지는 않습니다.. 😂 오늘은 Ganache(가나슈) 라는 툴을 활용해 프라이빗 블록체인을 구축한 다음, 보다 쉽게 스마트 컨트랙트를 배포해보겠습니다! Ganache 사용법 가나슈는 가나슈 공식 홈페이지에서 간단하게 설치할 수 있습니다. Ga..
솔리디티를 활용해 다양한 방법으로 스마트 컨트랙트의 로직을 작성할 수 있음을 알고 계실 것입니다. 그런데 아마 처음 컨트랙트를 작성하게 되면 막막한 점이 한둘이 아닐 것입니다. pragma solidity >= 0.7.0 < 0.8.0; contract CMToken { // 어... 뭐부터 써야 할까... } 토큰의 필수 요소이 누락되는 것을 막고 토큰들이 이더리움 생태계에서 *호환될 수 있도록 하기 위해 이더리움에는 여러 표준 인터페이스가 존재하는데요, 오늘은 그 중 가장 기본적인 ERC-20 인터페이스를 직접 구현해보도록 하겠습니다. (※ 예를 들어 ERC-20 기반으로 구현된 찬민토큰이 있다면, 같은 ERC-20 기반의 펀디엑스(NPXS)와도 호환될 수 있다는 의미입니다.) 1. ERC-20 인터..
Geth(Go + Etherium)는 이더리움 기반 블록체인 네트워크를 구성하기 위한 클라이언트 소프트웨어인데요, 오늘은 Geth를 활용해 이더리움 기반 블록체인을 구성하고 블록을 직접 마이닝해 이더를 획득하는 과정을 소개해보려 합니다. Geth는 geth.ethereum.org/downloads/ 에서 설치할 수 있습니다. (※ MacOS는 이상하게도 Geth 설치 파일이 아닌 실행 스크립트만을 제공하기 때문에, 이곳에서 소개하는 터미널을 통한 설치 방법을 이용하시길 바랍니다.) 1. Private Network 구축하기 먼저 실습을 진행할 폴더를 하나 만들어준 후 아래의 json 파일을 genesis.json 이라는 이름으로 저장해줍니다. (※ chainId는 본인의 ID이므로 원하는 대로 수정해도 ..
1. 가스 - 이더리움 DApp이 사용하는 연료 솔리디티에서는 DApp의 함수를 실행할 때마다 가스라고 불리는 화폐를 지불해야 하는데요, 사용자는 이더(ETH, 이더리움의 화폐)를 이용해서 가스를 사기 때문에 결국 이더를 소모해야만 합니다. 함수를 실행하는 데에 얼마나 많은 가스가 필요한지는 함수가 얼마나 복잡한지에 따라 달라집니다. 각각의 연산은 소모되는 가스 비용(gas cost)이 있고 그 연산을 수행하는 데에 소모되는 컴퓨팅 자원의 양이 비용을 결정하는데요, 예를 들어 storage에 값을 쓰는 것은 두 개의 정수를 더하는 것보다 비용이 높으며 함수의 전체 가스 비용은 함수를 구성하는 개별 연산들의 가스 비용을 모두 합친 것과 같습니다. 이더리움에서 함수를 실행하는 것은 사용자들에게 실제 돈을 쓰..
1. 컨트랙트의 소유권 pragma solidity "^0.4.19"; contract myContract { function sendEther(address _address, uint _amount) external { send(_address, _amount); } } 이더(돈)를 보내는 sendEther 라는 함수가 컨트랙트에 존재하는 상태입니다. 다만 sendEther는 external 로 선언되어 누구나 호출할 수 있는 상태인데요, 컨트랙트의 소유자만 특정 함수에 접근할 수 있도록 하기 위해 Ownable 이라는 라이브러리를 활용합니다. [Ownable.sol 라이브러리 코드 전문] /** * @title Ownable * @dev The Ownable contract has an owner a..
솔리디티는 "계약 지향 프로그래밍 언어" 인데요, 사실 배우다 보면 객체지향 프로그래밍과도 유사한 점이 많습니다. 상속을 통해 "고양이는 동물이다" 처럼 부분집합 관계에 있는 컨트랙트의 논리적 계층구조를 표현할 수 있으며, 동일한 로직을 다수의 클래스로 분할해서 단순히 코드를 정리할 때도 활용할 수 있습니다. 1. 상속 솔리디티에서는 is 키워드를 통해 컨트랙트를 상속받을 수 있습니다. contract Doge { function catchphrase() public returns (string) { return "So Wow CryptoDoge"; } } contract BabyDoge is Doge { function anotherCatchphrase() public returns (string) {..
솔리디티에는 변수를 저장할 수 있는 Storage와 Memory 라는 공간이 존재합니다. Storage는 블록체인 상에 영구적으로 저장되며, Memory는 임시적으로 저장되는 변수로 함수의 외부 호출이 일어날 때마다 초기화됩니다. (비유하자면 Storage는 하드 디스크, Memory는 RAM에 저장되는 것을 의미합니다.) 대부분의 경우에는 솔리디티가 알아서 메모리 영역을 구분해 주는데요, 상태 변수(함수 외부에 선언된 변수)는 storage로 선언되어 블록체인에 영구적으로 저장되는 반면, 함수 내에 선언된 변수는 memory로 선언되어 함수 호출이 종료되면 사라지게 됩니다. 1. storage storage와 memory 키워드는 구조체와 배열을 선언할 때 명시적으로 선언되어야 합니다. contract..