"마스트"의 두 판 사이의 차이
(→마스트노드) |
|||
17번째 줄: | 17번째 줄: | ||
==구현== | ==구현== | ||
− | |||
===마스트노드=== | ===마스트노드=== | ||
*마스트노드는 문자열 내용과 부모 포인터로 구성된다. | *마스트노드는 문자열 내용과 부모 포인터로 구성된다. | ||
25번째 줄: | 24번째 줄: | ||
마스트의 가지들은 어떤 특정한 순서로 추가될 필요가 없기 때문에, 트리 건설 동안 일관성을 유지하는 것은 번거로울 것이다. 대신, 마스트노드의 해시함수는 트리의 현재 상태를 이용하여 정확한 머클 해시를 계산한다. 그것은 먼저 모든 직계 자식 노드의 이진트리를 형성함으로써 그렇게 한다. 이 트리가 생성되면 해시는 결합되어 이진트리의 각 수준에서 새로운 머클 해시를 생성한다. 이진트리에 노드의 내용을 포함하지 않음으로써, 부모가 자식보다 먼저 실행하는 추상구문트리 스타일 구조를 확립한다.<ref name="제레미 루빈"></ref> | 마스트의 가지들은 어떤 특정한 순서로 추가될 필요가 없기 때문에, 트리 건설 동안 일관성을 유지하는 것은 번거로울 것이다. 대신, 마스트노드의 해시함수는 트리의 현재 상태를 이용하여 정확한 머클 해시를 계산한다. 그것은 먼저 모든 직계 자식 노드의 이진트리를 형성함으로써 그렇게 한다. 이 트리가 생성되면 해시는 결합되어 이진트리의 각 수준에서 새로운 머클 해시를 생성한다. 이진트리에 노드의 내용을 포함하지 않음으로써, 부모가 자식보다 먼저 실행하는 추상구문트리 스타일 구조를 확립한다.<ref name="제레미 루빈"></ref> | ||
+ | |||
+ | ===증명 목록=== | ||
+ | 코드의 무결성을 확인하기 위해 마스트 함수 generateFullProofUpward는 현재 노드에서 주어진 머클 루트 해시에 대한 증명 목록(Proof list)를 생성한다. 트리를 위쪽으로 통과시키고, 머클 해시 목록과 그것이 지나가는 코드 내용을 생성함으로써 그렇게 한다. 머클 해시는 이진트리를 사용하여 계산하기 때문에 논리는 더욱 복잡해진다. 결과적으로 증명 목록 생성기는 분기 머클 루트에 도달할때까지 이 이진트리를 기어올라 목적지 노드에 도달할 때까지 프로세스를 반복한다. 검증 프로세스의 경우, 다른 기계에 마스트 루트 노드의 머클 해시가 있다고 가정한다. 대상 노드가 마스트 루트 해시인 증명 목록을 사용하면, 이 다른 기계는 그것을 반복하여 증명 목록의 코드를 확인할 수 있고, 해시 값을 합쳐서 증멱 목록의 다음 해시 값에 더하는지 확인할 수 있다. 최종 합계가 루트 해시를 산출한다면, 제공된 해시의 순서가 정확하다. 우리는 내용 해시가 표시됨에 따라 증명 목록의 해시에 대한 코드의 물결성을 점검한다. 또한 스크립트는 비트코인 블록체인에서 사용되는 옵코드(opcode)와 호환되는 증명 형식으로 컴파일할 수 있다. 어떠한 마스트도 블록체인 위에 올리지 않고, 우리가 쓴 비트코인 스크립트 해석기를 통해 테스트했다. 이는 우리의 마스트 구현과 비트코인 프로토콜 사이의 호환성을 더욱 강화시키고 이 프로젝트의 잠재적인 장래성을 비트코인 블록체인 내에 통합할 수 있게 해준다. | ||
+ | |||
==평가와 전망== | ==평가와 전망== |
2019년 9월 11일 (수) 14:16 판
마스트(MAST; Merklized Abstract Syntax Trees)는 비트코인에 제안된 추가 기능으로, 더 작은 거래 규모, 더 많은 개인 정보 보호 및 더 큰 스마트 계약을 허용한다. 마스트의 기본 사항을 살펴보고 잠재적 이점을 설명하고 비트코인 프로토콜(Bitcoin Protocol)에 추가하기 위한 현재 제안 중 일부를 요약한다.
소개
현대 암호 시스템의 맥락에서 공통 주제 분산 트러스트 네트워크를 만드는 것이다. 이들 대부분 설계, 계약의 영구 저장이 필요하다. 그러나 영구 스토리지는 주요 성능이 될 수 있다. 비용 병목 현상. 결과적으로 좋은 코드 압축체계는 이러한 계약 기반 암호화 시스템을 확장하는 데 중요한 요소이다. 이 프로젝트를 위해 우리는 공식화하고 Merkelized Abstract Syntax Tree라는 데이터 구조(MAST)는 데이터 무결성과 압축을 모두 해결한다. MAST를 사용하면 원격으로 실행될 계약 프로그램을 간결하게 표현할 수 있다.[1]
데이터 구조
마스트는 머클트리(Merkle Trees) 와 AST(Abstract Syntax Trees)의 특성을 결합하여 프로그램을 간결하고 안전하게 표현한다. 머클 트리는 데이터의 무결성을 효율적으로 검증하는 데 사용 저장, 데이터 블록은 리프 노드에 저장되며 비 리프 노드는 하위 노드의 레이블 해시이다. 비트코인 블록체인에서 머클 트리는 현재 거래 내역을 효율적으로 저장하는 데 사용된다. AST, 반면에, 프로그램의 구문 구조를 나타낸다. 프리미티브는 AST의 리프 노드에 있으며 비 리프 노드는 프로그래밍 작업을 나타내고 제어 흐름 메커니즘 MAST에서 트리의 루트는 다른 모든 노드는 서브 프로그램을 나타낸다. 트리의 각 경로는 다른 실행 분기이다.[1]
거래 지출
비트코인의 지출은 P2SH에서와 많이 비슷하지만, 마스트에서는 비트코인이 머클루트에 잠겨 있는데, 이는 개별적인 조건을 해치고 머클트리에 쌓음으로써 파생된 것이다. 그래서 Merklized address에서 이 비트코인 출력을 사용하려면 스크립트, 스크립트 해시(머클루트), 그리고 동전의 잠금을 풀기 위한 서명과 같은 다른 요구사항들을 생산해야 한다. 하지만, 마스트에서는 전체 스크립트 집합을 포함할 필요가 없고 대신에 실제로 사용되고 있는 스크립트만 만들 수 있다. 비트코인 고객은 머클 증명 기술을 사용하여, 실제 사용중인 스크립트의 해시를 실행하고 생산할 수 있으며, 이는 머클 루트에 대해 검증할 수 있다. 이제 사용중인 조건의 해시와 메르켈 루트가 그 조건이 원래 조건 집합의 일부였는지를 확인하기에 충분하기 때문에, 당신은 이제 작은 거래를 하게 되었다. 그리고 이것이 확인되면 블록체인은 동전이 이 스크립트에만 잠겨 있따는 것을 알게 되고 거래가 성사된다. 이 예상치 못한 스크립트 가지를 숨기는 구조는 각각의 조건이 머클트리의 잎인 복잡한 상황 조건을 가질 수 있게 해준다. 돈을 쓸 때, 다른 정보나 가지를 보여주지 않고 단지 그 가지에 머클트리의 일부였따는 증거를 더하면 된다. 이러한 것을 마스트가 가능하게 만들어 준다.
장점
- 비트코인 스마트 계약의 유연성을 향상시키고, 프라이버시를 증가시키며, 확장성을 크게 돕는다.
- 비트코인을 잠글 때 마스트를 이용해 여러 가지 복잡한 형태의 조건을 표현할 수 있기 때문에, 1000종 중 1종이나 200종 중 20종 같은 멀티시그 계약을 쉽게 할 수 있다.
- 전체 집합 대신 사용하는 트랜잭션에 해당 조건만 포함하도록 요구하므로 데이터 이점이 있다. 이렇게 하면 복잡한 잠금 해제 조건과 동시에 거래 규모가 훨씬 작아진다. 이것은 또한 당신이 P2SH를 사용하는 동안 지불하는 거래 수수료를 줄인다.
- 마스트를 사용하면 추가적인 프라이버시를 얻을 수 있다. 마스트 거래를 보면 관련된 조건이 있다는 것을 짐작할 수 있을 뿐, 그러한 조건들이 무엇인지 혹은 어떤 것인지 결코 알 수 없을 것이다. 그러나 누군가가 마스트를 이용해 프라이버시를 달성하려는 거래를 보면 알 수 있다는 사실은 사생활의 허점이며, 비트코인 개발자들은 비트코인 타프로트라고 알려진 또 다른 기법으로 이 문제를 고 치려 하고 있다.
구현
마스트노드
- 마스트노드는 문자열 내용과 부모 포인터로 구성된다.
- 문자열 내용은 실행할 수있는 코드이며 마스터 노드는 여러 개의 자식을 가질 수 있다.
- 각각은 서로 다른 프로그램 실행 분기를 나타내며 addBr 메소드를 통해 새 분기를 추가 할 수 있다.
- 경로를 따라 각 노드의 모든 문자열 내용 결합 따라서 마스트 에서 하나의 가능한 경로에 대한 코드를 생성한다.
마스트의 가지들은 어떤 특정한 순서로 추가될 필요가 없기 때문에, 트리 건설 동안 일관성을 유지하는 것은 번거로울 것이다. 대신, 마스트노드의 해시함수는 트리의 현재 상태를 이용하여 정확한 머클 해시를 계산한다. 그것은 먼저 모든 직계 자식 노드의 이진트리를 형성함으로써 그렇게 한다. 이 트리가 생성되면 해시는 결합되어 이진트리의 각 수준에서 새로운 머클 해시를 생성한다. 이진트리에 노드의 내용을 포함하지 않음으로써, 부모가 자식보다 먼저 실행하는 추상구문트리 스타일 구조를 확립한다.[1]
증명 목록
코드의 무결성을 확인하기 위해 마스트 함수 generateFullProofUpward는 현재 노드에서 주어진 머클 루트 해시에 대한 증명 목록(Proof list)를 생성한다. 트리를 위쪽으로 통과시키고, 머클 해시 목록과 그것이 지나가는 코드 내용을 생성함으로써 그렇게 한다. 머클 해시는 이진트리를 사용하여 계산하기 때문에 논리는 더욱 복잡해진다. 결과적으로 증명 목록 생성기는 분기 머클 루트에 도달할때까지 이 이진트리를 기어올라 목적지 노드에 도달할 때까지 프로세스를 반복한다. 검증 프로세스의 경우, 다른 기계에 마스트 루트 노드의 머클 해시가 있다고 가정한다. 대상 노드가 마스트 루트 해시인 증명 목록을 사용하면, 이 다른 기계는 그것을 반복하여 증명 목록의 코드를 확인할 수 있고, 해시 값을 합쳐서 증멱 목록의 다음 해시 값에 더하는지 확인할 수 있다. 최종 합계가 루트 해시를 산출한다면, 제공된 해시의 순서가 정확하다. 우리는 내용 해시가 표시됨에 따라 증명 목록의 해시에 대한 코드의 물결성을 점검한다. 또한 스크립트는 비트코인 블록체인에서 사용되는 옵코드(opcode)와 호환되는 증명 형식으로 컴파일할 수 있다. 어떠한 마스트도 블록체인 위에 올리지 않고, 우리가 쓴 비트코인 스크립트 해석기를 통해 테스트했다. 이는 우리의 마스트 구현과 비트코인 프로토콜 사이의 호환성을 더욱 강화시키고 이 프로젝트의 잠재적인 장래성을 비트코인 블록체인 내에 통합할 수 있게 해준다.
평가와 전망
이 프로젝트의 주요 영향은 응용 프로그램에 있다. 계약을 활용 한 기존 환경, 마스트 도입은 기존에 큰 영향을 줄 수 있다. 비트코인 계약에서 네트워크의 분산 노드 사이의 코드 전송에 이르는 문제, 이 마스트 구현에 대한 잠재적 개선 사항은 다음과 같다.
- 분산 구조 및 실행에 대한 더 큰 지원
- 또는 더 큰 확장 성을 허용하는 프레임 워크 추가
- 이 데이터 구조의 사용자에 의해 완벽한 통합
- 비트코인은 저장된 데이터의 양을 줄임
- 블록체인을 통해 더 많은 성과를 거둘 수 있게 될 것
- 우리가 모델링 한 의지와 같은 복잡한 거래[1]
각주
참고자료
- 제레미 루빈,〈마스트〉,《GitHub》
- Sudhir Khatwani,〈Bitcoin's Merkelized Abstract Syntax Tree(MAST) Explained!!〉, 《TheMoneyMongers》, 2019-08-13
같이 보기