반응형

 비트코인과 가상자산의 실체라는 책을 한 권 모두를 읽고 각각의 장에서는 무엇이 중점적으로 다뤄진 내용인지 내용적인 측면을 읽고 그림을 보면서 책에 대한 전반적인 내용을 설명하겠다. 또한 이 책을 읽고 많은 지식들이 공유되었으면 하는 바람으로 글을 써봅니다. 책을 읽고 중요한 핵심 내용 이외에 내용들은 빼고 간략하고 그림을 통해 이해하기 쉽게 설명해보도록 하겠다. 

 

1.1장 비트코인과 블록 비교 

 기본적으로 비트코인은 블록과 체인의 합성어로 이해할 수 있다. 과거에 비트코인이 처음 나오고 제네시스 블록(흔히 최초의 비트코인 블록이라고 한다)이 생성되고 2020-05-11년 기준 643000번 블록 기준으로 현재까지 생성되었다. 과거의 최초의 블록을 채굴(블록을 만들었을 때) 최초의 보조금은 50비트코인이고, 643000번째 블록의 보조금은 6.25로 상당한 차이가 있는 것을 볼 수 있다. 블록을 만들면(채굴하면) 그 대가로 만든 이는 대가로 보상금이라는 비트코인을 얻는다. 현재까지 많은 반감기를 거치면서 비트코인의 채굴 보상금(보조금 + 수수료)은 적어진 것을 알 수 있다.

 

1.2장 블록과 체인

 

블록: 동시에 처리하는 논리적 데이터 단위를 의미

비트코인 블록: 거래내역을 기록하는 저장 단위 

 

비트코인 블록은 누구나 만들 수 있지만 아무나 만들 수는 없다. 이유는 해시 퍼즐이라고 부르는 퀴즈를 풀어야 하기때문이다. 또한 많은 자원이 들기 때문에 블록을 만드는 것은 쉽지 않다. 블록을 연결하여 체인처럼 연결하였다고 하여 블록체인이라고 부른다. 

 

1.3장 비트코인 단위 종류

 1.3.1 비트코인 단위 종류

 1. 사토시

 2. 마이크로 - 비트코인

 3. 밀리 - 비트코인

 4. BTC

 

비트코인갯수 BTC 밀리-비트코인 마이크로- 비트코인 사토시
1 1BTC 1밀리-비트코인 1마이크로 - 비트코인 1sat
1 1BTC
(= 1sat)
0.001BTC
(= 100000sat)
0.00001BTC
(= 1000sat)
0.00000001
BTC

 

 1.3.2 비트코인 최대 매장량: 2100만 BTC

비트코인은 오직 블록이 새로 생성될 때만 발행되고 블록을 만든 사람에게 지급한다. 블록 생성은 '채굴'을 통한 보상금을 확보하기 위한 행위이다. 채굴과 블록 만들기는 동의어이다. 블록을 생성하기 위해서는 일정 시간 이상 계산 자원을 소비해야 하는데 이를 작업 증명(Prove-Of-Work)이라고 한다. 작업 증명이란 누군가가 블록을 만들어 주어야 하는데, 블록을 만들려면 많은 자원을 투입할 만한 적절한 동기부여가 필요한데 이것이 바로 보상금 개념이다. 앞서 최초 블록과 함께 탄생한 보조금이 50 btc라고 설명했는데 21만 개의 블록이 만들어질 때마다 보조금이 절반으로 줄어들도록 설계돼 있다. 

 

이 지표는 비트코인의 총 누적 생산량으로 2140년이 되면 모든 비트코인 채굴이 중단 될 것이라고 한다. 또한 2140년 채굴 보상은 단지 1 사토시 밖에 되지 않는다. 

 

1.4장 사이버 펑크 

 

1975년 IBM은 미국국립표준기술국의 요청에 따라 새로운 암호체계인 DES를 연구했고, 이 암호화 기술은 민간에도 공개, 기존의 암호화 기술은 군이나 정부가 독점한 상태로 개인정보 악용, 스팸메일의 난립과 정부에 의한 프라이버시 침해에 환멸을 느낀 사람들이 프라이버시를 보호하고자 하는 움직임이 발생하였다. 이는 사이버펑크의 탄생의 배경이 된다. 

사이버 펑크는 '컴퓨터 네트워크를 사용할 때 특히 정부기관으로부터 프라이버시를 보호하기 위해 암호화 기술을 사용하는 사람'을 일컫는다.

 

* 데이비드 차움 - 암호화 퍼즐 기반 새로운 화폐

* 웨이 다이 - 분산 전자 캐리 시스템 제안

* 닉 사보 - 비트코인 채굴 모델의 기본 개념 제공

* 아담 백 - 작업증명 기반의 해시 캐시 제안

* 할 피니 - 재사용 가능한 작업 증명 R-POW 제시

>> 사이버펑크는 비트코인의 원형이 된 다양한 거래 시스템을 제안하였다. 

 

비트코인의 목적: 비트코인의 명백한 목적은 프라이버시 보호 금융기관을 배제한 어나니머스 방식을 택함, 절대 익명을 의미한다. 

 

1.5장 지급 결제 시스템

 

1. 지급: A가 40만원 송금 의뢰 

2. 청산: 금융 결제원에서 A은행과 D은행 간에 서로 주고받아야 할 계산 

3. 결제: 한국은행에 각은행이 개설해 둔 당좌예금 계좌가 있다면 은행은 금융 결제원이 계산한 최종 청산 금액에 A은행에 당좌 예금이 D은행으로 이동한다. 

 

 

 

책에 대하여 간단하게 1장을 알아보았다. 다음 글에서는 2장에 대해 책을 알아보겠다. 

반응형
반응형

 

비트코인과 블록체인에 대하여 알아보기 위하여 블록체인 책을 사서 읽어보고 다음 글 부턴 책에 대한 리뷰를 하겠습니다. 책을 읽고 설명하면서 블록체인에 대하여 부족했던 지식들을 쌓아 보겠습니다. 

반응형
반응형

자바하고 코틀린의 차이점은 findViewById 함수를 안써도 된다는 점이죠

하지만 xml 파일에 있는 것이 사용이 안되는 경우가 있는데요 

그때는 xml 파일이 임포트가 안된 경우로 xml파일을 임포트하면됩니다.

예를 들어 activity_main.xml에 있는 버튼을 사용하고 싶을때는 아래의 코드를 추가하면 되는데요 

 

import kotlinx.android.synthetic.main.activity_main.*

 

여기서 문제는  kotlinx가 빨간 표시가 나면서 안될때가 있습니다

 

 

 

 

그때 2번째 build.gradle의 plugin에 다음의 코드를 넣으면 sync now 버튼을 클릭하면 해결됩니다.

id 'kotlin-android-extensions'
반응형
반응형

Fragment Actionbar와 기능이 유사한 BottomNavigationview를 공부해봤는데요.

이 요소는 인스타그램 앱등 많은 앱에서 사용될 정도로 사용성이 좋은 요소여서 제가 사용한 예제와 함께 정리해보려 합니다!

 

일단 이 코드를 2번째 bulid.gradle에 추가하고 sync now를 클릭해주세요

//noinspection GradleCompatible
implementation 'com.android.support:design:30.0.0'

 

그리고 BottomNavigationview의 요소가 되는 xml 파일을 만들것인데요

res 폴더 안에 menu폴더를 만들어주신 다음 menu 폴더 안에 menu Resource파일을 추가해주세요!

*전 bottom_navigationview로 이름을 지어서 추가하였습니다!*

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/cat"
        android:icon="@drawable/icon_cat"
        android:title="cat"
        android:enabled="true"/>
    <item
        android:id="@+id/dog"
        android:icon="@drawable/icon_dog"
        android:title="dog"
        android:enabled="true"/>
    <item
        android:id="@+id/horse"
        android:icon="@drawable/icon_horse"
        android:title="horse"
        android:enabled="true"/>
    <item
        android:id="@+id/rabbit"
        android:icon="@drawable/icon_rabbit"
        android:title="rabbit"
        android:enabled="true"/>
</menu>

 

그다음으론 이 BottomNavigationview에 들어갈 요소를 만들었으니 앱의 메인 화면에 BottomNavigationview를 만들어 위의 요소와 연결지으면 됩니다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/main_content"
        android:orientation="vertical"
        />
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigationview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:menu="@menu/bottom_navigationview"
        />
</LinearLayout>

app:menu="@menu/xml 파일 이름" 으로 코드를 써주시면 menu와 연동이 됩니다!

 

이제 각 메뉴가 클릭되었을때 나올 화면을 만들것인데요. new -> activity -> empty activity를 눌러 새로운 kotlin파일과 xml파일을 만들어 주시면됩니다!

class cat_fragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view = LayoutInflater.from(activity).inflate(R.layout.activity_cat_fragment,container,false)
        return view
    }

}

여기서 inflate하는 부분은 당연히 메뉴가 선택했을때 나올 화면을 담은 xml파일이겠죠??

저는 cat,dog,horse,rabbit 다 만들어줬습니다!

 

마지막으로 Mainactivity에 bottomNavigationview를 연결하고 각 메뉴를 눌렀을때 화면이 변경되는 코드를 작성하면됩니다!

 

package kr.ac.kpu.ce2017154024.fragment_practice

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.MenuItem
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.cat ->{
                var catFragment = cat_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,catFragment).commit()
                return true
            }
            R.id.dog ->{
                var dogFragment = dog_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,dogFragment).commit()
                return true
            }
            R.id.horse ->{
                var horseFragment = horse_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,horseFragment).commit()
                return true
            }
            R.id.rabbit ->{
                var rabbitFragment = rabbit_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,rabbitFragment).commit()
                return true
            }


        }
        return false
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navigationview.setOnNavigationItemSelectedListener(this)


    }
}

메뉴가 눌렸을 때 linearlayout인 main_content가 바뀌는 알고리즘을

통해서 만들었습니다

반응형
반응형

  블록체인의 핵심 기술 중 하나인 p2p는 peer-to-peer의 약자로 대등한 자, 동등한 자의 의미를 갖는다. 즉 대등한 관계의 컴퓨터 그룹을 직접 통신을 수행하는, 중심이 없는 네트워크를 의미한다. 과거에 흔히들 알고 있는 비트토렌트나 파일노리 같은 p2p로 이해하면 쉬울 수 있다. 

 

 

1. P2P(Peer-to-Peer) 네트워크

 

클라이언트 서버와 네트워크 서버 

P2P: Peer-to-Peer기반 방식의 분산형 데이터 저장 기술의 일종

: P2P란 기존의 서버와 클라이언트 개념이나 공급자와 소비자 개념에서 벗어나 개인 컴퓨터끼리 직접 연결하고 검색함으로써 참여자가 공급자인 동시에 수요자가 되는 형태

 

즉, 각각의 개인 클라이언트들이 서로 연결되어 있다고 생각하면 된다.

 

클라이언트 서버 장점

* 중앙 서버가 있기때문에 설계나 유지가 쉽다.

 

클라이언트 서버 단점

* 서버에 장애 발생시 서비스 중지

* 다수의 클라이언트가 동시 접속 시 처리에 문제 발생하지 않게 고사양 서버와 큰 네트워크 대역폭 필요 

 

P2P 서버 장점

* 서버를 준비할 필요가 없음

* 노드가 증가해도 서비스르 유지할 수 있는 높은 확장성 가짐.

* 특정 노드에 문제가 발생해도 다른 노드에 영향이 없음. 

 

P2P 서버 단점

* 새로운 기능 추가나 업데이트 어려움

* 네트워크 전송 속도로 인해 노드 간 정보 불일치, 성능 저하 발생

 

 

2. 기존 P2P 방식의 종류 

 

기존 p2p방식

 

 

 

3. 블록체인에서의 P2P네트워크 설계 방식

 

퍼블릭 블록체인

퍼블릭 블록체인: 누구든지 자유롭게 참여 가능한 개방형 블록체인 네트워크 (ex) 이더리움, 블록체인)

 

퍼블릭 블록체인의 특징

1. 전 세계 누구나 거래를 주고 받을 수 있다. 즉 누구나 거래들을 검증할 수 있는 노드가 될 수 있다. 

2. 퍼블릭 블록체인 위에서 발생한 거래내역은 모든 사람이 확인 가능

3. 저장된 데이터 위변조 불가

4. 퍼블릭 블록체인은 많은 사람들의 네트워크 참여에 동기 부여를 위해 특정 암호화폐를 인센티브 또는 보상으로 지급하여 네트워크 유지 

 

프라이빗 블록체인

프라이빗 블록체인: 사적인 블록체인, 허가형 블록체인, 기업형 블록체인으로 불린다. 허가된 참여자 외 거래 내역과 여러 행동에 대한 공유가 되지 않고 추적되지 않는다. 

 

프라이빗 블록체인의 특징

1. 프라이빗 블록체인은 체인 개발자가 정해둔 규칙에 따라 또는 네트워크의 허가를 받은 노드만 참여 가능

2. 거래 내역을 볼 수 있는 권한을 받은 사람만 열람이 가능

3. 믿을 수 있고 많은 거래를 처리할 수 있는 힘을 가지고 있는 소수의 노드들에 의해 블록체인이 운영되기 때문에 싸고 빠른 속도를 자랑한다.

4. 퍼블릭 블록체인은 하드 포크가 아닌 이상 소프트웨어 업데이트가 어렵지만 프라이빗 블록체인에서는 기업들에 법률 규제 및 여러 규제사항에 충족하는 블록체인을 이용할 수 있다.

 

컨소시움 블록체인

컨소시엄 블록체인: 컨소시엄 블록체인은 퍼블릭 블록체인과 프라이빗 블록체인의 중간 형태로 하이브리드 블록체인으로 분류된다중앙 관리자에 의해 승인받은 참여자만이 블록 생성에 참여할 수 있는 프라이빗과 유사한 개념이다. 하지만 프라이빗 블록체인과 달리 목적을 가지고 있는 기관이 하나의 컨소시엄을 구성하여 공정성과 확장성을 확보하였다.제삼자에 대한 거래 수수료를 줄이고 거래 시간을 단축할 수 있다.

 

컨소시엄 블록체인의 특징

1. 컨소시움 블록체인에서는 여러 기관 또는 기업이 하나의 그룹을 이뤄 네트워크를 구성하는 구조를 가지고 있다.

2. 퍼블릭과 프라이빗의 성격을 가진다.

3. 선별된 한 집단의 노드들 만이 합의 과정에 참여하지만, 다른 노드들은 블록을 생성하거나 확인할 수 없다.

 

 

기존의 P2P 방식에서 블록체인의 P2P 방식으로 바뀌는 과정을 알아보았다. 실제로 블록체인에서는 P2P 방식이 가장 중요한 개념으로 자리 잡고 있기 때문에 P2P 방식에 대하여 자세히 알고 있으면 더 좋을 것이다. 다음 글에서는 블록체인 설계 내에 있는 스마트 컨트랙트(스마트 계약) 방식에 대해 알아보겠다. 

 

 

참조: https://velog.io/@chb1828/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%EC%9D%98-%EC%9C%A0%ED%98%95%EB%93%A4\

 

블록체인의 유형들

블록체인의 유형들에 대해서 알아보자 Public Blockchain, Private Blockchain과 Consortium Blockchain

velog.io

 

반응형

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

블록체인 블록의 구조  (0) 2021.09.27
블록체인 용어정리  (0) 2021.07.27
데이터베이스와 분산원장?  (0) 2021.07.08
비트코인과 블록체인  (0) 2021.07.08
블록체인의 시작  (0) 2021.07.07
반응형

해커의 공격으로부터 100%안전한 블록체인 프로젝트란 없다. 스마트 컨트랙트와 Defi에 존재하는 모든 버그를 없애는 것도 현실적으로 불가능하다. 때문에 보안 사고가 나는 경우 보상해주는 보험은 이제 필수다.

 

 

분산형 보험에 대표적인 예로 Nexus Mutual을 들 수 있다. 디파이에 발생한 피해를 분석하는 작업 등은 블록체인과 관련한 전문 지식이 상당 부분 요구되기 때문에 디파이에 적용할 보험 서비스를 개발하는 건 쉽지 않다. 하지만 Nexus Mutual은 처음부터 DAO형태로 개발돼 블록체인 네트워크의 집단 지성을 적극 활용한다. 실제로 Nexus Mutual 커뮤니티에선 누구나 보안 취약점이나 디파이 프로젝트의 잠재적인 리스크를 보고하면서 보험운영에 기여할 수 있다. 사용자는 이에 따른 인센티브를 거버넌스 토큰인 Nexus Mutual코인으로 받게 된다. Nexus Mutual은 이 같은 인센티브를 활용해 보안 전문가나 화이트해커등 업계 전문가의 참여를 독려하고 있다. 다만 이렇게 보고된 사안이 최종적으로 적용외려면 투표에서 70%가 넘는 찬성표를 얻어야 한다.

 

 

위 사진은 Nexus Mutual에서 제공하는 디파이 보험 서비스들이다. 예를 들어 컴파운드를 이용하고 있는 사용자는 약 3달러를 내고 180일 동안 컴파운드 서비스를 보장하는 보험을 구매할 수 있다. 만약 컴파운드 프로젝트에 버그나 공격이 발생해 사용자가 금전적인 손실을 보게 되면 해당 금액을 변상 받을 수 있다.

 

또한 Nexus Mutual에선 보험 상품 자체도 스테이킹 모델로 가능하다. 사용자는 안전한 프로젝트의 보험에 자신이 보유한 토큰을 예치하고 스테이킹 수익을 얻을 수 있다. 다만 프로젝트라 안전한지는 사용자가 직접 판단해야 한다. 예를 들어 어떤 사용자가 아베 프로젝트가 보안상 결함이 없이 안전하다고 생각한다면 아베의 보험 계약에 토큰을 스테이킹하는식이다. 만약 아베가 사고 발생없이 오랜 기간 정상적으로 운영된다면 사용자는 해당 기간만큼 스테이킹 수익을 얻을 수 있다. 반면 사용자가 안전하지 않은 프로젝트의 보험에 스테이킹하면 오히려 손해를 입을 수 있다. 하베스트 파이낸스처럼 해커의 공격으로 자금이 유실되면 해당 보험에 스테이킹한 사용자는 토큰을 모두 잃게되는데 스테이킹으로 예치된 토큰 모두는 보험금 지급을 위해 사용되기 때문이다. Nexus Mutual에선 이 같은 스테이킹 모델을 ‘실드마이닝’ 이라 표현한다.

 

 

출처 : https://www.mk.co.kr/news/economy/view/2020/12/1289506

반응형

+ Recent posts