반응형
  • 네트워크 프로토콜이 통신하는 구조를 7 계층으로 분리해서 각 계층 간의 상호 동작하는 방식을 표준화한 개념.
  • 계층을 나눈 이유
    • 통신이 일어나는 과정 단계별로 파악 가능.
    • 한 계층에 문제가 발생했을 시 해당 계층만 수정 가능. → 유지보수성

 

OSI 7계층 세부 구조.

물리

  • 데이터 전송 목적
  • 리피터, 케이블, 허브

데이터 링크

  • 물리 계층으로 송수신되는 정보 관리
  • MAC 주소로 통신
    • MAC 주소는 사람의 주민등록번호처럼 통신할 하드웨어의 장비를 식별하는 고유 주소
  • 브리지, 스위치

네트워크

  • 데이터를 목적지까지 전송
  • 라우터(L3 스위치)로 경로를 설정해서 패킷 전달
  • IP
    • 네트워크 연결을 위해 제공되는 논리적인 주소
    • IP를 할당하는 것이 누구인지에 따라 가변적으로 변경.
  • ARP
    • Address Resolution Protocol
    • IP 주소를 이용하여 상대방의 MAC 주소를 알아오는 프로토콜
  • RARP
    • Reverse Address Resolution Protocol
    • MAC주소에 해당하는 IP 주소를 알아오는 프로토콜
  • ICMP
    • 인터넷 제어 메시지 프로토콜
    • 네트워크에 속한 장치가 데이터 전송과 관련된 문제를 전달하기 위해 사용하는 프로토콜

전송

  • 사용자 간 신뢰성 있는 데이터 전송
  • TCP, UDP

세션

  • 통신을 하기 위한 논리적 연결
  • API, 소켓

표현

  • 데이터 변환, 압축, 암호화/복호화
  • JPEG, MPEG

응용(애플리케이션)

  • 최종 목적지
  • 응용프로그램과 연관하여 서비스 수행
  • HTTP, FTP, DNS, SMTP
반응형
반응형

오늘은 솔리디티툴인 REMIX와 OPEZEPELIN을 이용하여 ERC20 표준을 따르는 토큰을 만들어 보자! 

아주 쉽고도 간단하면 누구나 10초만에 코드를 만들 수 있다. 토큰을 만드는 것은 그렇게 어려운 행위가 아니며 이더리움과 여러 체인들에 많은 토큰들이 생겨 나고 있다. ERC20은 그중 EIP20에서 올라온 이더리움 개선 제안을 통해 현재는 STANDARD 즉 토큰 표준으로 사용되고 있다. 아래의 코드를 보고 간단하게 토큰을 개발하며 어떤 의미가 있는지 이해해 보자. 

 

 

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract SnowmenToken is ERC20 {
    uint256 private constant MAX_SUPPLY = 1_000_000_000 * 10 **18;
    constructor() ERC20("Snowmen","SNOW"){
        _mint(msg.sender, MAX_SUPPLY);
    }
}

 

 

1. 솔리디티 버젼을 설정한다.

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

 

2. 오픈제플린의 ERC20 토큰 표준라이브러리를 장착

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

 

3. SnowmenToken을 ERC20 표준을 상속받아서 만드는 컨트랙트 작성

contract SnowmenToken is ERC20 {
    uint256 private constant MAX_SUPPLY = 1_000_000_000 * 10 **18;
    constructor() ERC20("Snowmen","SNOW"){
        _mint(msg.sender, MAX_SUPPLY);
    }
}

 

총 공급량은 10억 개로 설정하고, constructor 생성자에 토큰의 이름인 Snowmen과 티커명인 SNOW를 써주고 민트를 사용하여 msg.sender 즉 민트주체가 총공급량을 소유하게 한다. 이때 민트는 토큰을 주조한다, 만든다 정도로 이해하면 좋다. 아래글에 NFT 민트에 대한 실사용 사례도 있다.

 

https://r-blockchain.tistory.com/18

 

NFT 만들기(민팅하기)

요즘 핫한 NFT를 민팅하는 방법을 알아 보겠다. 민팅이란 동전과 같은 법정화폐를 주조할떄의 '주조'를 뜻하는 영어단어이다. NFT란 디지털화폐로 발행, 주조, 민팅이라는 단어가 적용된다. 쉽게

moneypepe.xyz

 

이렇게 쉽게 이미 만들어진 라이브러리들과 토큰 표준을 이용하여 블록체인 네트워크 상에서 동작할 수 있는 스마트 컨트랙트 즉, 스마트한 계약을 작성함으로 우리가 만든 토큰들을 블록체인 네트워크 상에서 사용할 수 있다.  아래는 실제 ERC20 토큰표준의 EIP 개선제안으로 EIP 읽어주는 남자 세션에서 설명하겠다. 


https://eips.ethereum.org/EIPS/eip-20

 

ERC-20: Token Standard

 

eips.ethereum.org

 

반응형

'블록체인' 카테고리의 다른 글

블록체인 MultiCall  (0) 2023.11.21
블록체인 블록의 구조  (0) 2021.09.27
블록체인 용어정리  (0) 2021.07.27
P2P 네트워크 와 블록체인 네트워크 설계  (0) 2021.07.19
데이터베이스와 분산원장?  (0) 2021.07.08
반응형

목차. 
1. 동등연산자 (==, ===)로 문자열 비교
2. 문자열 크기 비교 (>. < 연산자)
3. 문자열에 어떤 문자열이 포함 되어 있는지 확인 : String.indexOf()
4. 문자열에 어떤 문자열이 포함 되어 있는지 확인 : String.includes()
5. 문자열이 어떤 문자열로 시작하거나 끝나는지 확인 : String.startsWith(), String.endsWith()

 

 

 


1. 동등 연산자 (==, ===) 문자열 비교


    1. == Equality 비교, === Identity 비교 
    2. == 비교하는 객체의 타입이 달라도, 형변환하여 값이 같은면 true를 리턴
    3. === 는 객체 타입이 같곡 값이 같을 때 true 리턴


2. 문자열 크기 비교 (>, < 연산자 )


    1. > , < 연산자에서 문자열의 크기 비교는 ASCII 코드로 결정.
    2. 문자열이 길어도 같은 위치 INDEX의 문자의 알파벳 순서가 작다면 문자열의 크기가 작다고 계산 
    3. 문자열 길이가 짧아서 INDEX에 문자가 없으면 더 작은 문자열 계산 


3. 문자열에 어떤 문자열이 포함되어 있는지 확인 : String.indeOf()


    1. str.indexOf(문자열) ! = -1 : 인자로 전달된  문자열이 안에 존재한다면 그 문자열이 위치한 Index를 리턴
    2. 존재하지 않는다면, -1 리턴. -1이 리턴되는지 여부로 문자열이 포함되었는지 판단.


4. 문자열에 어떤 문자열이 포함되었는지 확인 : String.includes()


    1. String.includes()를 이용하여 문자열에 어떤 문자열이 포함되었는지 확인 가능
    2. 인자로 전달된 문자열이 안에 존재한다면 true가 리턴, 존재하지 않는다면 false 리턴


5. 문자열이 어떤 문자열로 시작하거나 끝나는지 확인: String.startsWith(), Sting.endWith()

 

    1. startWith()는 문자열이 인자로 전달된 문자열로 시작할 때 true 리턴 endWith()는 그 반대.

 

 

 

 

아래글 참고

https://codechacha.com/ko/javascript-compare-strings/

 

JavaScript - 문자열 비교 방법, 5가지

자바스크립트에서 다양한 문자열 비교 방법 5가지를 소개합니다. 동등 연산자(==, ===)로 문자열이 동등한지 비교하거나, >, < 연산자로 문자열의 크기 비교할 수 있습니다. 또는 includes(), indexOf()로

codechacha.com

 

반응형
반응형

SPA (Single Page Application)

Single Page Application의 약자로 단일 페이지로 구성된 웹 애플리케이션. SPA가 등장하기 전에 구성하던 방식인 서버 사이드 렌더링(SSR)의 경우, 화면에 보여질 리소스를 서버로 요청하고, 서버로 부터, 받아온 리소스를 렌더링한다.

SPA의 경우 렌더링의 역할을 서버에 넘기지 않고 브라우저에서 처리하는 방식이다. 모든 정적 리소스를 AWS S3같은 정적 저장소에서 다운로드하고, 이후 새로운 페이즈를 요청하면 요청시 갱신에 필요한 정보만 바꾸어 화면에 띄어주면 된다.

SPA의 장점

  • 새로운 페이지 요청 시 전체를 렌더링하지 않고, 변경되는 부분만 갱신하기 때문에 전체적인 트래픽 감소와 렌더링에서 좋은 효율을 가진다.
  • 새롭게 갱신 되는 부부만 렌더하기 때문에 새로고침이 발생하지 않고 빠른 이동이 가능
  • 번거로운 요청과 응답 없이 정적 파일 내에서 변경된 부분만 렌더하기 때문에 불필요한 트래픽이 감소하고, 속도, 반응성 향상으로 자연스러운 UX 사용자 경험을 제공한다.
  • 모듈화 또는 컴포넌트 개발이 용이.
  • 백엔드와 프론트엔드가 명확하게 구분 가능

SPA 단점

  • 처음 구동할 때 정적리소스를 모두 가져와야 하기 때문에 초기 구동속도가 느리다.
  • SPA 구조 상 데이터 처리를 클라이언트에서 하는 경우가 많은데 JS 코드가 외부에 노출 될 위험이 있다.
  • 검색 엔진이 크롤링할 때 Javascript를 실행하지 않고 어플리케이션이 로드 되기 전의 코드를 크롤링 하기 때문에 인덱싱이 제대로 이루어지지 않아 검색엔진 최적화가 어렵다.

SPA 그림.

 

 

 

 

 

 

아래 종민불님 블로그 참고

 

https://jongminfire.dev/spa-single-page-application-%EB%9E%80

 

SPA(Single Page Application)란?

SPA란? SPA는 'Single Page Application'의 약자로 단일 페이지로 구성된 웹 애플리케이션을 말한다. SPA가 등장하기 전 웹 애플리케이션을 구성하던 방식인 서버 사이드 렌더링(SSR…

jongminfire.dev

 

반응형

'블록체인 개발' 카테고리의 다른 글

블록체인의 이해와 생태계  (0) 2024.03.21
ERC20 / IERC20 개발 세팅  (0) 2024.01.29
Javascript 데이터 할당 방식  (0) 2023.08.03
자바스크립트 클래스 사용해보기  (1) 2023.07.12
고차함수와 재귀함수  (0) 2023.07.11
반응형

 

 

오늘은 MultiCall에 대해 코드예제와 함께 정리해보겠다.

블록체인에서 MultiCall이란 한 번의 트랜잭션으로 여러 스마트 컨트랙트 함수를 호출하여 블록체인 네트워크에 효율적으로 처리할 수 있는 방법을 제공하는 것이다. 이와 같이 블록체인 지갑등에서 자신의 잔고를 확인하거나 체크하는 용도로 많이 쓰이고 있다. 아래 멀티콜 예제를 보면 하나하나 어떤 내용이 있는지 확인해보자.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
}

interface Multicall {
    function aggregate(
        call[] calldata calls
    ) external returns (uint256 blockNumber, bytes[] memory returnData);
}

struct call {
    address target;
    bytes callData;
}

contract UniswapMulticallExample {
    address public uniswapRouter;  // Uniswap Router contract address
    address[] public tokens;       // ERC-20 token addresses

    constructor(address _uniswapRouter, address[] memory _tokens) {
        uniswapRouter = _uniswapRouter;
        tokens = _tokens;
    }

    function getBalances(address user) external view returns (uint256[] memory balances) {
        balances = new uint256[](tokens.length);

        for (uint256 i = 0; i < tokens.length; i++) {
            // Encode the balanceOf function call for the ERC-20 token
            bytes memory data = abi.encodeWithSelector(IERC20(tokens[i]).balanceOf.selector, user);
            
            // Add the call to the Multicall data
            Multicall.call memory tokenBalanceCall = Multicall.call({
                target: tokens[i],
                callData: data
            });

            // Aggregate the results in a single call to Multicall
            (, bytes[] memory results) = Multicall(uniswapRouter).aggregate([tokenBalanceCall]);

            // Decode the result and store the balance
            balances[i] = abi.decode(results[0], (uint256));
        }

        return balances;
    }
}

 

 

  • 코드 해석
    • SPDX-License-Identifier: 컨트랙트의 라이선스를 지정하는 부분
    • pragma solidity ^0.8.0;: Solidity 컴파일러 버전을 지정
    • IERC20 인터페이스: ERC-20 토큰 표준을 따르는 balanceOf 함수를 정의한 인터페이스
    • Multicall 인터페이스: aggregate 함수를 정의한 인터페이스로, 여러 호출을 집계하여 실행
    • function aggregate가 여러 call들을 집계하여 배열형태로 한 번에 처
    • call 구조체: 호출할 대상 주소와 호출할 데이터를 담는 구조체
    • UniswapMulticallExample 컨트랙트: ERC-20 토큰의 잔액을 가져오는 기능을 제공하는 컨트랙트
    • uniswapRoutertokens 변수: Uniswap 라우터 주소와 ERC-20 토큰 주소 배열을 저장
    • constructor: 컨트랙트를 배포할 때 Uniswap 라우터 주소와 ERC-20 토큰 주소 배열을 초기화
    • getBalances 함수: 사용자의 주소를 받아와 각 ERC-20 토큰의 잔액을 조회하는 함수
    • for 루프: tokens 배열의 각 토큰에 대해 잔액을 조회
    • abi.encodeWithSelector: balanceOf 함수를 호출하기 위해 함수 시그니처와 사용자 주소를 인코딩
    • **Multicall**을 사용하여 여러 호출을 집계하고 결과를 얻음
    • abi.decode: 결과를 해석하여 해당 토큰의 잔액을 가져옴
    • return balances;: 각 토큰의 잔액을 반환
    • 부록
      • view 또는 pure 키워드를 사용하면 함수가 스마트 계약의 상태를 변경하지 않고 데이터를 읽기만 하는 데 사용됨을 나타냄. 이러한 함수는 외부로부터 호출되어도 블록체인의 상태를 변경하지 않으므로 가스 비용이 들지 않는다. 이러한 함수의 실행은 로컬 노드에서 처리되며, 블록체인 트랜잭션을 생성하지 않으므로 가스비용이 발생하지 않는다.
      • view 및 pure 함수는 블록체인의 무언가를 기록하거나 변경하지 않고 단순히 데이터를 반환하는 데 사용된다. 이 경우 getBalances 함수가 external view returns를 사용하기 때문에 블록체인 상태를 변경하지 않고 사용자의 잔액을 읽기만 하므로 호출 시 가스비용이 발생하지 않는다.

위와 같이 코드들의 함수를 살펴보면서 각각의 함수들이 어떠한 기능들을 하는지 알아보았다. 멀티콜의 경우 스왑을 하거나 나의 잔고를 모두 가져올 때 많이 사용될 것 같다는 생각이 들었다. 멀티콜 기능을 통해 다음에는 유니스왑 v2를 구현해 보도록 하겠다. 

반응형

'블록체인' 카테고리의 다른 글

토큰을 만들어보자!  (0) 2023.11.24
블록체인 블록의 구조  (0) 2021.09.27
블록체인 용어정리  (0) 2021.07.27
P2P 네트워크 와 블록체인 네트워크 설계  (0) 2021.07.19
데이터베이스와 분산원장?  (0) 2021.07.08
반응형

1. 전역으로 사용자 이름과 이메일 설정하기

git conifg --global user.name "유저네임"
git config --global user.email "이메일주소"

 

2. 프로젝트 생성

자신이 사용할 프로젝트 파일을 init을 통해 초기화

git init

git init 명령어를 사용하면. git 폴더가 생성된다. 이는 숨긴 파일로 되어있기 때문에 window에서 숨긴 파일해제를 해야 볼 수 있다. 

 

3. GIT 설명

.git 은 특정폴더(. git)에 내가 작업한 히스토리를 모두 보관하는 프로그램이다.

이를 버전관리 시스템이라고 한다.

git이라는 폴더를 통해 작성한 코드들들의 시간과 기록을 히스토리로 저장하여 내가 원하는 지점과 작업에 에러가 생긴다면 에러가 나기 전의 시점으로 돌아갈 수 있는 아주 강력한 도구이다.

 

4. GIT 실습

git init을 진행 시킨 폴더에 

development.json 추가

{
    "username": "root",
    "password": "root",
    "database": "board_dev",
    "host": "127.0.0.1",
    "dialect": "mysql"
}

작업한 폴더에 json 파일을 추가한 후

 

깃 현재 상태 확인

git status

명령어 를 사용하면 자신이 추가한 파일이나 폴더를 추적하여 준다.

 

아래와 같이 git status 명령어를 쳤을 때 파일은 추가했지만, Untracked files에 빨간색으로 뜬다면, 워크스페이스 즉, 자신이 작업하던 공간에서 git add test.json 명령어를 통해 stage로 올려줘야 한다. 

 

깃 스테이지에 저장

git add test.json

깃 스테이지에 올라간 파일은  new file : test.json의 형태로 올라가게 되고, 이는 git repository에 올라갈 준비가 되었다. 

이 상태에서 git commit -m 'feat : add file test.json' 을 통해 자신이 기록할 커밋메시지로 커밋을 하게 되면, 자신이 올린 파일이 커밋 메시지와 함께 깃 repository에 올라가게 된다. 

 

깃 레포지토리에 올리기 및 커밋메시지 남기기 

git commit -m 'feat : add file test.json'

커밋 메시지를 남기게 되면 레포지토리에 파일이 올라가면서 커밋메시지를 남기게 된다. 

 

깃 로그 

 

git log

 

깃 로그 명령어를 치게 되면 자신이 작성한 깃 로그를 확인 할 수 있다.

commit 뒤에는 해시값이 나오게 되고 이 해 시값을 통해 자신의 commit에 대해 접근할 수 있다.

Author 에는 자신이 등록했던 유저 네임과 유저 이메일이 뜬다. 

맨 아래에는 feat : add file test.json 이 자신이 기록한 커밋메시지가 남게 된다. 

 

5. 기본적인 깃 사용 정리 

 

1. 전역으로 사용자 이름과 이메일 설정하기

git conifg --global user.name "유저네임"
git config --global user.email "이메일주소"

 

2. 프로젝트 생성

사용할 폴더에 깃 초기화

git init

3. 깃 상태 확인

git status

4.  워크스 페이스에 파일 추가하기 

test.json 파일 추가하기

 

5. 깃 파일 스테이지에 추가하기 

git add test.json

6. 깃 레포지토리에 올리기 및 커밋메시지 남기기 

git commit -m 'feat : add file test.json'

7. 깃 로그로 자신이 남긴 커밋메시지 및 내용확인

git log

 

 

깃 저장소 영역

 

반응형

'블록체인 개발 > GIT' 카테고리의 다른 글

GIT 설치하기  (0) 2023.08.21

+ Recent posts