전체 글65 [Ethereum] Web3.js 라이브러리 Web3 라이브러리 Web3은 웹과 이더리움 블록체인 네트워크의 연결을 도와주는 라이브러리다. 이더리움 블록체인에 로컬(IPC), 원격(RPC 혹은 HTTP) 모두 접속할 수 있게 도와주는 툴이라고 할 수 있다. JavaScript 로 작성된 모듈로 내장 함수를 사용해 프론트 웹에서 블록체인 네트워크에 쉽게 접근할 수 있다. 본 포스트에서 기본적인 Web3 API 명령어들과 예제코드를 정리해두었다. Web3 명령어 기본적인 web3 명령어 몇 개를 적어놓았다. 어떻게 선언되고 및 사용되는지 참고가 되었으면 좋겠다. 만약 사용하고자 하는 기능이 따로 있다면 공식 홈페이지(https://web3js.readthedocs.io/en/v1.7.1/)에 잘 정리되어 있으니 아래 링크를 잘 활용하자. web3.js.. 2022. 3. 17. [Ethereum] 트렌젝션(Transaction)과 콜(Call) 개요 이더리움 블록체인 네트워크에서는 데이터 읽기(Reading)와 수정(Writing)이 구분된다. 블록체인에서 데이터를 읽어오는 것은 네트워크를 참조하는 것이기 때문에 가스비(Gas)가 소모되지 않지만, 블록 데이터를 업데이트하는 것은 가스비가 발생하기 때문이다. 이러한 관점에서 데이터를 단순히 읽어오는 작업을 콜(Call)이라고 하며, 블록 수정이 필요한 작업을 트렌젝션(Transaction)이라고 한다. 트렌젝션 (Transaction) 트렉젝션이 발생한다는 것은 블록체인 네트워크 상태(State)가 변경된다는 것과 같다(Writing). 이러한 상태 변경은 어카운트(Acount)들 사이의 이더(Ether) 교환, 블록체인 네트워크에 스마트 컨트렉트의 배포(Deploy), 배포된 컨트렉트의 함수에.. 2022. 3. 17. [Solidity] 트러플(Truffle) 설치 및 컨트렉트(Contract) 배포 이번 포스트에서는 트러플(Truffle) 설치 및 트러플 콘솔을 이용한 스마트 컨트렉트 배포에 대해서 다루고자 한다. 트러플의 개념과 설치법, DApp 프로젝트에서 트러플 설정에 대해 알아본 뒤, 터미널에서 트러플 콘솔을 통해 컨트렉트 컴파일과 배포 과정을 공유한다. 트러플(Truffle)이란? 트러플(Truffle)은 이더리움 기반 DApp 개발에 유틸리티 기능을 제공받을 수 있는 일종의 블록체인 프레임워크이다. 작성된 스마트 컨트렉트 코드에 대한 컴파일(Compile), 배포(Deploy), 테스트(Test) 기능을 지원받을 수 있다. 해당 서비스에 대해 공식 문서에서는 "이더리움 가상머신(EVM)을 사용하여 블록체인 개발에 다양한 개발 환경, 테스트, 자산 파이프 라인 기능을 제공한다."고 명시되어.. 2022. 3. 16. [Solidity] Storage와 Memory 솔리디티로 스마트 컨트렉스 작성 시, 변수는 Storage 혹은 Memory 영역에 저장된다. 컴퓨터로 비유를 하면, 데이터가 하드디스크(Disk)에 저장되는 것과 메모리(Ram)에 저장되는 것과 비슷하다. Storage 스마트 컨트렉트에서 스토리지(Storage)라고 하면, 블록체인 네트워크의 블록을 의미한다. 스토리지에 저장되는 데이터는 곧 블록체인에 저장되는 것과 같다. 컨트렉트가 실제로 블록체인 네트워크에 배포되면 해당 데이터는 영구적으로 블록체인 안에 저장된다. 대표적으로 상태 변수(State Variable)의 데이터들이 스토리지 영역을 사용한다. 컨트렉트에 선언된 전역 변수들은 storage로 선언되어 있지 않더라도 스토리지에 저장된다. 만약, 상태 변수가 아닌 변수, 예를 들어 지역 변수(.. 2022. 3. 15. [Solidity] payable 옵션 컨트렉트 코드에는 일반적으로 코인에 대한 전송(transfer) 및 받기(receive)에 대한 코드가 포함되어 있다. 이더(Ether) 혹은 이더 계열 토큰이 주소(address)에서 주소(address)로 이동된다. 그렇지 않을 코드도 있지만 만약 특정 주소에 토큰을 전달하고 싶거나 저장하고 싶다면 payable 옵션이 추가되어야 한다. 바꿔 말하면, payable로 선언되어야만 토큰을 주고 받을 수 있다. payable 사용 예시 아래 예제코드에서는 payable 옵션이 주소(address) 리스트를 선언할 때, 생성자(contructor)를 정의할 때, 함수 파라미터로 address를 지정할 때 사용된다. address 리스트 경우 해당 컨트렉트에서 이 리스트가 모두 토큰을 주고 받는 주소가 되어.. 2022. 3. 15. [Solidity] receive 함수 이전 포스트에서 fallback 함수에 대해 알아보았다. 이번 포스트에서는 fallback 함수와 관련된 receive 함수를 알아보자. Receive 함수 솔리디티 0.6.0 버전 이후 fallback 함수는 fallback과 receive로 나뉘어졌다. 본래 하나였던 기능이 세분화되어 두개로 분리되었다고 이해하면 된다. 해당 버전 이후 fallback 함수는 컨트렉트의 호출 함수가 확인되지 않을 때, 함수에서 이더를 보낼 때(transfer) 디폴트 함수로 동작한다. 그리고 receive 함수는 오직 이더를 받을 때 디폴트 함수로 실행된다. Receive 함수의 특징 receive() external payable { // ... } 해당 함수의 구성은 위와 같으며 특징은 다음과 같다. externa.. 2022. 3. 12. [Solidity] fallback 함수 들어가기 앞서 참고해야할 사항이 있다. Solidity는 0.6.0 버전 이후로 fallback 함수가 receive와 fallback으로 나뉘어졌다. 하나의 기능을 세분화시켜 두가지로 나누어 놓은 것이다. 본문은 0.6.0 이후의 fallback 함수에 대해 소개하는 글임을 알린다. Fallback 함수 컨트렉트에서 fallback 함수란 하나의 디폴트 함수와 같다. 이 함수가 실행되는 케이스는 두 가지가 있다. 첫 번째는 호출한 함수가 컨트렉트 내에서 조회되지 않을 경우다. 외부에서 특정 컨트렉트를 호출했을 때, 해당 호출 주소(function identifier)가 확인되지 않으면 디폴트로 fallback 함수가 실행된다. 두 번째는 이더(ETH, ether)를 보낼 때 자동으로 실행된다. 쉽게 말.. 2022. 3. 12. [Solidity] 솔리디티 코드 연습 - 크립토 좀비 아래 링크는 솔리디티 기본 개념과 예제 코드를 연습하는데 도움받을 수 있는 '크립토 좀비' 웹과 연결되어 있다. 프로그래밍에 어느 정도 익숙한 사람이라면, 솔리디티가 처음이더라도 문제 없을 것 같다. 아직 잘 모르겠다는 사람이라면 먼저 개인 공부를 조금 한 상태에서 예제 풀이나 복습하는 느낌으로 이용하면 딱 좋지 않을까 생각한다. [ 크립토 좀비 ] https://cryptozombies.io/ko/ #1 Solidity Tutorial & Ethereum Blockchain Programming Course | CryptoZombies CryptoZombies is The Most Popular, Interactive Solidity Tutorial That Will Help You Learn Bloc.. 2022. 3. 11. [Solidity] 함수 제어자 view & pure 함수 제어자(State Modifier) view, pure 함수 제어자란 컨트렉트 내에 선언된 변수의 상태를 변경시키는지 그렇지 않는지 나타낸다. view 와 pure 두가지가 있으며, 두 함수 제어자 모두 컨트렉트를 변경시키지 않는 함수 선언에 함께 붙는다. 차이점은 반환하는 데이터가 함수 밖의 상태 변수(State Variable)인지 아닌지에 있다. 아래 예제들을 보며 살펴보자. string greeting = "Hello"; function sayHello() public view returns (string) { return greeting; } 위에서 살펴 본 함수 sayHello()는 솔리디티에서 상태를 변화시키지 않는다. 즉, 어떤 값에 대한 변경이나 수정이 없다. 이 경우에는 함수를 v.. 2022. 3. 11. [Solidity] string memory와 bytes 이번 시간에서 솔리디티 문법 중, 문자열(string)과 바이트(bytes) 코드에 대해 알아보자. 솔리디티 코드에는 가스(Gas)라는 비용이 포함된다. 개발자가 솔리디티 코드를 작성하는 목적은 이더리움 스마트 컨트렉트 구현에 있는데, 스마트 컨트렉트는 곧 블록체인을 수정(Update)하는 것으로 이더리움 네트워크에서 가스(Gas)라는 비용을 청구받게 된다. 달리 표현하면, 솔리디티 코드로 스마트 컨트렉트를 구현할 때, 해당 컨트렉트가 얼마만큼 이더리움 블록체인에 개입하는지에 따라 요금을 내야하는 것이다. (= 트렌젝션(Transaction) 복잡성과 가스(Gas)는 비례한다.) 왜 가스가 발생하는지, 트렌젝션 복잡성은 무엇인지에 대한 설명이 궁금하다면, Ethereum 카테고리를 참고하면 된다. 이번에.. 2022. 3. 10. [Solidity] Scope와 Visibility (Public, Private, External, Internal) 솔리디티로 스마트 컨트렉트 작성 시, 아래와 같은 함수를 볼 수 있다. 내부에 작성된 코드는 생략하고 함수가 선언된 형식에 집중해보자. 여타 프로그래밍 언어와 유사한 부분이 있는 듯 하지만 선언문의 순서라던지 용어에서 차이점을 느낄 수 있을 것이다. 오늘 포스팅에서 집중해서 볼 부분은 스코프(Scope 혹은 Visibility)다. 아래 함수 예제 코드에서 확인할 수 있는 public, priavate, external, internal 등이 이에 해당한다. // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; contract Decalaration { int public numA = 100; int numB = 500; function private.. 2022. 3. 10. [Redis] 레디스 CLI 접근 및 데이터 조회 이번 시간에는 레디스 커멘드라인 인터페이스(redis-cli)에 접근법과 데이터 조회 방법을 소개한다. 레디스 CLI 접근(내부접속, 외부접속) 레디스 접속에는 `내부접속`과 `외부접속` 두가지 방법이 있다. 내부접속은 레디스가 설치된 서버에서 직접 접속하는 방법이다. 매우 간단하다. 패키지 관리 툴(apt)로 redis-server 를 설치하면서 CLI 관련 패키지도 함께 설치가 되어 있기 때문이다. 터미널을 통해 아래 명령어를 입력하면 끝이다. # CLI 접근 명령어 redis-cli 외부접속은 접속하고자 하는 레디스 서버 및 프로세스 포트에 대한 추가적인 입력이 필요하다. 만약, redis.conf 파일에서 비밀번호에 대한 설정을 해두었다면 비밀번호 역시 입력해주어야한다. 또한, 외부접속 역시 re.. 2022. 3. 10. 이전 1 2 3 4 5 6 다음