TIL 21 - 분산원장과 다양한 기술들

프동프동·2023년 2월 10일
0

TIL

목록 보기
21/46
post-thumbnail

분산 데이터베이스


하나의 데이터베이스 관리 시스템(DBMS, Database Management System)으로 여러 CPU에 연결된 저장장치를 제어하는 형태의 데이터베이스

물리적으로는 분산되어 있지만 논리적으로는 하나인 것처럼 사용하는 데이터베이스

  • 각 노드들은 네트워크를 통해 연결된다.
  • 각 노드들은 투명성 확보가 중요하다.
    • 병행 : 다수의 트랜잭션 수행 시 결과가 일관성 유지
      • 자원처리 양 및 속도 개선
    • 장애 : 장애 발생시 All or Nothing 유지(원자성 유지)
      • 데이터 일관성
    • 지역사상 : 개별 지역의 물리적 이름과 관계없이 접근 가능
      • 확장성 확보
    • 위치 : 데이터를 물리적 저장 위치가 아닌 논리적 입장에서 접근
      • 생산성, 활용성 강화
    • 중복 : 데이터를 지역별로 중복 저장하여도 데이터 처리 가능
      • 병목현상 해소
    • 분할 : 물리적 구조가 여러 단편으로 분할 저장되어 논리적 사용
      • 성능 향상

데이터베이스를 물리적으로 여러 개로 만들고 관리하기 위한 대표적인 기술 3가지

  • 일반적인 데이터 베이스
    • 데이터 요청을 처리하는 서버
    • 실제 데이터를 저장하는 스토리지 각 1개씩 있다.

클러스터링(Clustering)

  • 배경
    • 데이터베이스 서버가 죽었을 경우를 해결 하기 위함
      • 서버를 여러대 만드는 것으로 해결
  • 방식
    • Active - Active : 클러스터를 항상 가동할 수 있는 상태로 두는 구성 방식
    • Active - Standby : 일부 클러스터는 가동하고, 일부 클러스터는 대기 상태로 구성
  • 장점
    • 데이터베이스 서버가 하나가 죽어도 다른 서버가 역할을 대신함으로 지속 서비스 제공 가능
    • 서버가 여러 대이기 때문에 성능적으로 유리
  • 단점
    • 데이터베이스 스토리지는 1개이기에 병목이 생길 수 있다.
    • 서버 여러대를 동시에 운영하기 때문에 비용이 많이 들어간다.

레플리케이션(Replication)

  • 배경
    • 저장된 데이터베이스 스토리지가 손실될 경우를 해결 하기 위함
      • 데이터베이스 스토리지 또한 여러대 만드는 것으로 해결
  • 방식
    • 단순 백업 방식
    • 부하 분산 방식
      • User는 Master DB에 Insert, Update, Delete를 하고 Slave에서는 Read만 가능하도록 한다.
  • 장점
    • 데이터 베이스 Read(Select) 성능을 높일 수 있다.
    • 비동기 방식으로 운영되어 지연시간이 거의 없다.
  • 단점
    • 각 노드 간의 데이터 동기화 보장이 어렵다.
    • Master 노드가 다운되면 복구 및 대처가 어렵다.

샤딩(Sharding)

  • 배경
    • 데이터가 너무 많아 검색 성능이 좋지 않을 경우 빠르게 하기 위함
      • 테이블을 나누어 저장하여 해결
  • 방식
    • 테이블을 로우 단위로 나누어 각각의 샤드로 저장
  • 장점
    • 서버의 수평적 확장이 가능
    • 스캔 범위를 줄여주기 때문에 쿼리 반응 속도가 빨라진다.
  • 단점
    • 데이터를 적절히 분리하지 않으면 샤딩 전보다 비효율적일 수 있다.
    • 한 번 분할되면 다시 합치기가 어렵다.
      • 데이터를 잘 분산시키는 것이 중요. Shard key를 통해 나눠진 샤드 중 어떤 샤드를 결정할지에 대해 정한다.
  • Shard key 결정 방식에 따라 샤딩방식이 나뉜다.
    • 방식
      • 해시 샤딩
        • 장점
          • 샤드의 수만큼 해싱하면 되기에 구현이 간단
        • 단점
          • 샤드가 늘어나면 해시 함수가 달라져야 하기에 확장성이 떨어진다
          • 단순한 해시 함수를 통해 나누기에 각 샤드별 공간에 대한 효율을 고려하지 않는다.
      • 다이나믹 샤딩
        • Locator Service라는 테이블 구성 요소를 통해 Shard Key 구성
        • 장점
          • 샤드가 하나 더 추가되면 Locator service에 Shard key를 추가하는 방식으로 확장성이 유연
        • 단점
          • 데이터를 재배치 시 Locator service 역시 동기화가 요구된다.
          • Locator service에 의존적이라 해당 테이블에 문제가 생기면 데이터베이스에도 문제가 전이된다.
      • 엔티티 그룹 샤딩
        • 관계 되어 있는 엔티티끼리 같은 샤드 내에서 공유된다.
        • 장점
          • 단일 샤드 내에서 쿼리가 효율적이다.
          • 단일 샤드 내에서 강한 응집도를 가진다.
        • 단점
          • 다른 샤드의 엔티티와 연관이 되는 쿼리의 경우 실행 효율이 떨어진다.

분산 데이터베이스의 장단점

  • 투명한 분산
    • 논리적으로는 하나처럼 사용하도록 구현해야 하므로 구현방법이 복잡하다.
  • 투명한 트랜잭션
    • 각 트랜잭션은 다중 데이터베이스에 걸쳐 일관성을 보장해야한다.
      • 트랜잭션은 여러 하위 트랜잭션으로 분리된 개별 서브 트랜잭션이 하나의 데이터베이스에 대응한다.
  • 위 두가지 특징으로 인한 장단점
    • 장점
      • 시스템의 가용성 확보
      • 지역 업무에 특화된 서비스 제공
      • 시스템 확장 및 적응성
      • 장애에 대한 신뢰성 증진
      • 지역별 자원 활용 및 확장성 용이
    • 단점
      • 트랜잭션에 대한 처리 알고리즘이 복잡
      • 관리가 복잡하여 비용 증대
      • 통신망 장애 시 부가적 피해 가능성
      • 잠재적 오류 내재 가능성
      • 설계 및 구현이 어려움

분산 데이터베이스와 블록체인의 차이점

  • 블록체인
    1. 악의적인 사용자를 전제하고 만들어진 시스템(합의 알고리즘)
      • 악의적인 사용자가 존재할 것이라는 가정에 새로운 블록의 순서와 자격을 결정하는 과정을 합의 알고리즘을 통해 해결한다.
    2. 운영 주체가 사라져도 시스템 유지 가능(거버넌스)

분산원장기술(DLT, Distributed Ledger Technology)


여러 위치, 여러 사람에 의해 복제, 공유 또는 동기화된 데이터베이스를 어떻게 합의할 것이냐에 대한 기술

블록체인은 분산원장 기술의 한 종류이다.

중앙집중형 원장(Centralized Ledger)방식

  • 자산에 대한 소유권은 실물 보관 여부와 무관하게 특정한 기관에서 관리하는 원장(Ledger)에 기록된 것에 따라 결정된다.
  • 장점
    • 자산을 직접 보관하는 방식과 비교했을 때 비용을 절감하고 소유권을 명확히 할 수 있다.
  • 단점
    • 원장 기록을 관리하는 권한과 책임이 특정 기관에 집중되어 해당 기관에 대한 신뢰에 크게 의존할 수 밖에 없는 한계
    • 신뢰할 수 있는 제3의 기관을 설립하고 운영하는데 많은 비용이 소모된다.

분산원장기술

  • 거래 정보를 기록한 원장을 특정 기관의 중앙 서버가 아닌 P2P 네트워크에 분산하여 참가자가 공동으로 저장하고 기록하는 기술
    • 분산 데이터베이스의 한 종류라고도 볼 수 있다.
  • 장점
    • 효율성
      • 신뢰할 수 있는 제3의 기관을 설립,운영하기 위한 비용이 소모되지 않는다.
      • 해킹 보안사고를 방지하기 위한 인프라 투자 비용도 절감할 수 있다.
    • 보안성
      • 중앙 서버가 없다. 내,외부의 악의적인 공격으로 부터 안전하다.
      • 원장이 모든 참가자에게 공개되기 때문에 원칙적으로 정보 유출 소지가 없다.
    • 시스템 안정성
      • 단일 실패점(Single Point of Failure)이 존재하지 않으므로 일부 참가 시스템에 성능저하나 오류가 발생하더라도 전체 네트워크에 미치는 영향이 미미하다.
    • 투명성
      • 모든 기록을 공개하기 때문에 높은 투명성을 가진다.
  • 단점
    • 신뢰를 담보해 줄 외부 기관 등이 존재하지 않기 때문에 시스템 자체에서 신뢰를 형성하는 메커니즘을 설계해야한다.

블록체인 도입을 위한 기술적 해결 과제

  • 소유자와 합의된 관리자만 거래 내역에 접근이 가능해야한다 → 프라이빗 블록체인
  • 신뢰와 보안 유지를 위해 퍼블릭 블록체인을 도입하는 것도 고려해야한다.
  • 초당 3000건 이상의 트랜잭션을 처리할 수 있는 성능을 보유해야한다.

공개 범위에 따른 블록체인

  • 퍼블릭 블록체인
    • 개방형 블록체인
    • 누구나 트랜잭션을 생성하고 볼 수있다.
  • 프라이빗 블록체인
    • 서비스 제공자의 승인을 받아야 참여가 가능하다.
  • 컨소시엄 블록체인
    • 컨소시엄 참여자의 승인을 받아야만 참여할 수 있다.
  • 하이브리드 블록체인
    • 퍼블릭과 하이브리드를 섞은 형태

머클 트리


여러 데이터에 대해 단계적으로 해시함수를 적용하여 하나의 해시값으로 나타내는 데이터 구조

  • 데이터의 위변조를 방지
  • 데이터가 변하지 않았음을 보장

머클트리의 동작 방식

  • 여러개의 데이터를 여러 단계를 거쳐 하나의 해시값으로 만드는 트리.
    • 이렇게 만들어진 하나의 해시값을 “머클 루트(Merkle Root)”라고 한다.

머클트리가 무결성을 보장하는 방법(소스코드 포함)

  • 소스 코드
    • main.go
      package main
      
      import (
      	"coin/exam05/blockchain"
      	"fmt"
      )
      
      func main() {
      	chain := blockchain.GetBlockchain()
      	chain.AddBlock("Second Block")
      	chain.AddBlock("Third Block")
      	chain.AddBlock("Fourth Block")
      	for _, block := range chain.AllBlocks() {
      		fmt.Printf("Data: %s\n", block.Data)
      		fmt.Printf("Hash: %s\n", block.Hash)
      		fmt.Printf("Prev Hash: %s\n", block.PrevHash)
      	}
      }
    • blockchain.go
      package blockchain
      
      import (
      	"crypto/sha256"
      	"fmt"
      	"sync"
      )
      
      type block struct {
      	Data     string
      	Hash     string
      	PrevHash string
      }
      type blockchain struct {
      	blocks []*block
      }
      
      var b *blockchain
      
      var once sync.Once
      
      func (b *block) calculateHash() {
      	hash := sha256.Sum256([]byte(b.Data + b.PrevHash))
      	b.Hash = fmt.Sprintf("%x", hash)
      }
      
      func getLastHash() string {
      	totalBlocks := len(GetBlockchain().blocks)
      	if totalBlocks == 0 {
      		return ""
      	}
      	return GetBlockchain().blocks[totalBlocks-1].Hash
      }
      
      func createBlock(data string) *block {
      	newBlock := block{data, "", getLastHash()}
      	newBlock.calculateHash()
      	return &newBlock
      }
      
      // export 함수
      func (b *blockchain) AddBlock(data string) {
      	b.blocks = append(b.blocks, createBlock(data))
      }
      
      func GetBlockchain() *blockchain {
      	if b == nil {
      		once.Do(func() {
      			b = &blockchain{}
      			b.AddBlock("Genesis Block")
      		})
      	}
      	return b
      }
      
      func (b *blockchain) AllBlocks() []*block {
      	return b.blocks
      	// return GetBlockchain().blocks
      }

실행 결과

Data: Genesis Block
Hash: 89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3
Prev Hash: 

Data: Second Block
Hash: ec6f43cf27c78760cc38a4855b36e83a7f054f5205a751628591d3f505599c08
Prev Hash: 89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3

Data: Third Block
Hash: d90e93ce55d3ef3b137b01112c8aad9f304efde1f970c41035c9c7658ad5e8dd
Prev Hash: ec6f43cf27c78760cc38a4855b36e83a7f054f5205a751628591d3f505599c08

Data: Fourth Block
Hash: 02b9c07819daa7fa24e7d35c435db236d7262fedc2ab64f9e748c4644b73e546
Prev Hash: d90e93ce55d3ef3b137b01112c8aad9f304efde1f970c41035c9c7658ad5e8dd

앞의 해시값과 데이터를 가지고 현재 블록의 해시값을 생성하는 소스코드이다.

Second Block의 데이터가 수정되면 Third, Fourth Block의 해시값이 모두 변경된다.

  • 머클트리는 해시 함수의 충돌 저항성을 활용하여 여러 데이터의 집합 중 단 하나라도 변경되었는지 찾을 수 있다.

블록체인에서 머클트리를 사용하는 방법


블록체인의 블록 구조

Header
이전 블록의 Hash버전난이도머클루트TimeNonce
Transaction
Transaction 1Transaction 2Transaction 3Transaction 4Transaction N
  • 헤더
    • 이전 블록의 해시값
    • 버전
    • 난이도
    • 머클루트
    • 블록 생성 시간
    • 논스 등
  • 블록 헤더의 머클 루트는 트랜잭션을 사용해 머클 트리를 만들고 그 결과로 나온 머클 루트 값이다.
  • 머클 루트를 변경하면 블록헤더의 모든 값을 연결하여 해싱한 값인 블록 해시값 역시 변경된다.
  • 특정 블록에 들어있는 트랜잭션을 하나라도 변경하는 경우, 블록은 체인처럼 모두 연결되어 있기 때문에 해당 블록 이후에 연결된 블록을 모두 수정해야한다.
    • 블록의 논스값을 찾는 데 10분정도 걸리기 때문에 트랜잭션을 하나 수정하기 위해서 연결된 모든 블록의 논스 값을 다시 찾는 것은 비용이 많이든다.

더 공부하기

  • 머클 트리와 머클 패트리샤 트리에는 어떤 차이가 있을까요?
  • 이더리움에서는 머클 패트리샤 트리를 왜 사용하나요?
  • 머클 패트리샤 트리는 어떻게 동작하나요?
  • 이더리움 내 State Tree, Storage Tree, Transactions Tree, Receipts Tree는 각각 무엇을 담고 있나요?

블룸 필터(Bloom Filter)


특정 원소가 집합에 속하는지 검사하는 데 사용되는 확률형 자료구조

  • 특성
    • 어떤 원소가 집합에 속한다고 판단된 경우 실제로는 원소가 집합에 속하지 않는 긍정 오류가 발생하는 것은 가능하지만, 반대로 원소가 집합에 속하지 않는 것으로 판단되었는데 실제로는 원소가 집합에 속하는 부정 오류는 절대로 발생하지 않는다.
    • 통계적 특성을 가지고 있다.
    • 많은 양의 데이터를 줄여서 공간 효율적으로 빠르게 검색할 수 있다.
    • 프라이버시를 보호하면서 검색 패턴을 구현하기 위한 효율적인 방법을 제공한다.
    • 비트코인 언리미티드 팀이 노드에 알려지지 않은 거래를 식별하는데 도움을 주고 있다.

SPV

  • Bitcoin Blockchain Size가 커짐에 따라 이를 저장하기 힘든 Light-Weight 노드 IoT기기, 스마트폰에 Node 설치를 위해 나온 Node 운영 방안
  • Full Node로 부터 Merkle Tree와 Block Header만을 전송 받아 Transaction을 검증한다.
    • 항상 Full Node에 연결되어야만 트랜잭션을 검증할 수 있다.
  • 비트코인 네트워크에 참여하고는 있지만 안전하게 기능을 수행하고 있지는 않다

Merkle Pass

  • SPV는 블록헤더에 Merkel Root 밖에 없다
  • Merkel Root만으로 트랜잭션을 검증할 수 없다.
  • 검증할 트랜잭션을 Full Node로 보내 Full Node의 Merkle Root를 구해 검증을 한다
    • 이때 SPV는 Full Node에서 연산에 필요한 값만 사용하여 Full Node의 Merkle Root와 자신의 Merkle Root를 비교하여 검증한 트랜잭션의 위변조를 확인한다.

Bloom Filter

SPV 노드가 Bitcoin Full Node에게 관심있는 Transaction을 전달할 때 내가 관심있는 Transaction을 숨기고 정보를 전달 받는 방법을 위한 기법(개인 프라이버시를 보호받을 수 있다)

  • SPV 노드가 트랜잭션의 Hash값으로 계산된 비트맵을 만들어 Full Node에게 보낸다
  • Full Node는 SPV에서 전달받은 비트맵을 통해 트랜잭션들을 비트맵으로 만들어 비교를 진행한다.
  • Full Node가 SPV에서 원하는 트랜잭션을 찾았을 경우 SPV에게 해당 트랜잭션을 찾아준다.

Bloom Filter는 False Positive 통해 관심이 없는 Transaction을 Client에서 제외시킬 수 있는 기능이다.

  • False Positive
    • 부정은 무조건 맞다
    • 관심이 없는 트랜잭션은 사용자에게 전달될 수 없다라는 것을 보장한다

암호화폐에서의 DAG


암호화폐 플랫폼에서는 데이터 구조로 블록체인을 사용하지만, 블록체인 대신 DAG를 사용하는 경우도 있습니다.

DAG의 특징

트랜잭션 처리 속도

  • 비트코인의 기준 블록 생성이 10분에 한 번씩 이루어지기 때문에 트랜잭션이 체인에 올라가기까지 약 10분이 소요되며 완전히 처리되기까지에는 1시간이 걸린다.
  • DAG는 블록 개념이 없고, 트랜잭션이 선형적으로 처리되는 것이 아니라, 병렬적으로 처리되기 때문에 블록체인과 비교했을 때 빠른 속도로 트랜잭션이 처리된다.

채굴이 없다

  • 채굴 과정 자체가 없다
    • 채굴자에게 낼 수수료가 없다
  • 작업 증명으로 인한 과도한 에너지 사용도 없기 때문에 환경 친화적이다.

확장성 문제에서 비교적 자유로움

  • DAG는 트랜잭션이 늘어날수록 새로운 트랜잭션들이 이전 트랜잭션을 많이 검증할 수 있기 때문에 확장성 문제에서 자유롭다.

더 알아보기 - DAG를 사용한 플랫폼

DAG를 사용하는 암호화폐 플랫폼에는 대표적으로 IOTA와 ByteBall이 있습니다.

  • IOTA와 ByteBall은 어떤 목적으로 만들어졌나요?
  • IOTA와 ByteBall은 DAG를 어떻게 적용하고 있나요?
  • IOTA와 ByteBall은 기존 블록체인 플랫폼과 어떤 점이 다른가요?

DHT


DHT(분산 해시테이블)는 해시 테이블을 활용해, 키-값 쌍 방식으로 데이터를 검색하는 분산형 데이터베이스다

Peer to Peer 환경에서 데이터를 분산하여 저장할 때 사용한다.

Hash Table

  • 키를 입력값으로 해시 함수를 사용하여 변환한 해시 값을 색인으로 삼아 키와 데이터를 저장하는 자료구조
  • 필요한 데이터의 키(Key)는 해시함수를 사용해 별도의 해시(Hash)로 바꿔주고, 해당하는 데이터를 함께 저장하는 자료구조

Hash Table 구조

  • 키(Key) : 고유한 값으로 해시 함수의 입력 값
  • 해시 함수(Hash Function) : 키(Key)를 해시(Hash)로 바꿔주는 역할
    • 서로 다른 키(Key)가 같은 해시(Hash)를 가지는 경우를 해시 충돌(Hash Collision)이라고 한다.
  • 해시(Hash) : 해시 함수를 사용하여 만들어진 결과물로, 저장소에서 데이터(value)와 매칭되어 저장된다.
    • 변환된 값을 배열의 색인(index)과 같이 사용한다.
  • 데이터(value) : 저장소에 최종적으로 저장되는 값으로 색인(index)과 매칭되어 저장된다.

Hash Table 특징

  • 저장, 삭제, 검색 과정은 모두 평균적으로 O(1)의 시간 복잡도를 가지고 있다.
    • 해시함수를 거쳐 해시 값을 찾아내는데 걸리는 과정은 고려하지 않는다.
    • 해싱 충돌이 발생할 경우 저장소의 모든 색인(삽입) 혹은 데이터(삭제, 검색)를 찾아봐야 하므로 O(n)이 된다.
  • 해시 충돌이 발생할 수 있다
  • 데이터가 저장되기 전에 저장공간을 미리 확보해야해서 공간 효율성이 떨어진다.
  • 해시 함수의 의존도가 높다.
    • 해시 함수가 복잡해지면 해시 값을 만들어내는 데 많은 시간이 소요된다.

대표적인 해시 알고리즘

  • Division Method : Number Type의 키를 저장소의 크기로 나누어 나머지를 색인으로 사용하는 방법
    • 저장소의 크기를 소수로 정하고 2의 제곱수와 먼 값을 사용하는 것이 효과가 좋다
      • ex. key값이 23일 때 테이블의 크기가 7이라면 index는 2가된다.
  • Digit Foding : 키의 문자열을 ASCII 코드로 바꾸고 그 값을 합해 저장소에서 색인으로 사용하는 방법
    • 이때 색인이 저장소의 크기를 넘어간다면 Division Method를 적용할 수 있다.
  • Multiplication Method : 소수로 된 Key 값 K와 0과 1의 사이의 실수 A, 보통 2의 제곱수인 m을 사용하여 다음과 같이 계산한 값을 사용한다.
    • index = (KA mod 1)m
  • Universal Hashing : 다수의 해시함수를 만들어 특정한 장소에 넣어두고, 무작위로 해시함수를 선택해 해시(Hash)값을 만드는 기법

해시 충돌을 해결하는 방법

  • 개방 연결법
    • Linear Probing
    • Quadratic Probing
    • Double Hashing Probing
  • 분리 연결법

세그윗이란


속도와 확장성 개선을 위한 시도 중 하나

  • 속도와 확장성을 개선하기 위한 방법
    • 블록의 용량 증대
    • 블록체인 내 기술 도입
      • 샤딩 등
    • 블록체인 외부와 연계
    • 합의 알고리즘 재설계

세그윗은 1.블록의 용량 증대를 통한 개선 방법 중하나

세그윗(SegWit) 이란 Segregated Witness의 약자로서, 비트코인의 블록에서 디지털 서명 부분을 분리함으로써 블록당 저장 용량을 늘리는 소프트웨어 업그레이드를 말한다.

고정된 블록의 가용 공간을 늘려서 속도를 개선하는 것이 핵심

기존 비트코인의 경우 블록 구조의 75%가 디지털 서명 데이터이다.

  • 디지털 서명 데이터를 별도의 공간에 저장하고, 대신 블록에 더 많은 트랜잭션을 담자는 세그윗 제안이 나왔다.

세그윗의 특징

  • 거래 속도의 확장성을 해결
    • 서명란에 실제 서명 데이터가 차지하는 크기는 크지 않지만, 서명란 자체가 차지하는 부피가 크다.
    • 블록의 크기를 늘리는 방법도 있으나 블록의 크기가 더 커지면 더 많은 해시파워를 요구한다.
    • 세크윗은 서명 부분을 따로 Witness라는 데이터 영역으로 분리해 더 많은 거래를 처리할 수 있도록 업데이트한다.
  • 거래 가변성 문제(Transaction Malleability)를 해결 → 서명 조작 불가
    • 모든 비트코인 거래는 해당 거래를 식별할 수 있는 TXID(Transaction ID)를 포함한다.
    • TXID가 ID라면 디지털 서명은 비밀번호다
    • 거래 가변성은 실질적인 거래 내용에는 변화가 없지만, 거래 ID만 변경하여 새로운 거래를 만들어낼 수 있는 일종의 버그
  • 버전 호환
    • 세그윗은 하드포크가 아닌 소프트포크이다.
      • 세그윗2x는 하드포크가 필요하다.

탭 루트(Tap Root)


슈노르 서명(Schnorr Signatures)과 많은 기대를 모으고 있는 비트코인의 기술적 업그레이드

탭 루트 적용 시 여러개의 트랜잭션이 하나의 트랜잭션으로 보인다. 이는 모든 사람이 보기 때문에 프라이버시 측면에서는 단점이었다.

비트코인의 스크립트를 개선하여 프라이버시를 향상시키고 복잡한 트랜잭션과 관련된 요소를 개선하기 위한 소프트 포크

  • 특징
    • 프라이버시, 확장성, 보안을 강화하기 위해 비트코인 스크립트 작동 방식에 변화를 주는 것

슈노르 서명

슈노르 서명의 주된 특징은 복잡한 비트코인 트랜잭션 내에 다수의 키를 포함할 수 있고, 단일하고 고유한 서명을 생성할 수 있다는 것이다. 즉, 트랜잭션에 포함된 다수의 주체가 진행한 서명이 단일한 슈노르 서명으로 통합된다. 다른 말로는 서명 통합(signature aggregation)이라고도 한다.

profile
좋은 개발자가 되고싶은

0개의 댓글