새로운 MultiChain 지갑 PlatoBlockchain Data Intelligence를 발표합니다. 수직 검색. 일체 포함.

새로운 멀티 체인 지갑 발표

성능과 확장 성을위한 중요한 발전

XNUMX 개월 간의 집중적 인 개발 및 테스트를 거친 후 완전히 다시 작성된 인 노드 지갑으로 최신 MultiChain 알파를 출시하게 된 것을 자랑스럽게 생각합니다. 이 새로운 지갑은 멀티 체인에서 거래를 생성, 수신 및 저장하는 성능과 확장 성을 변화시킵니다.

세부 사항을 살펴보기 전에 컨텍스트를 제공하겠습니다. MultiChain을 개발하기 시작했을 때, 사용하기로 결정했습니다 비트 코인 코어, 공개 비트 코인 네트워크의 표준 노드. 프로그래밍 용어로, 이는 멀티 체인이 비트 코인 소프트웨어의 "포크"임을 의미합니다. 우리의 주된 추론은 비트 코인이 가장 가치 있고 전투 테스트를 거친 cryptocurrency 생태계였습니다.

또한이 결정은 블록 체인 노드를 처음부터 코딩하는 것과 비교하여 빠르게 시장에 진출하는 데 도움이되었습니다. 퍼블릭 블록 체인과 프라이빗 블록 체인의 많은 차이점에도 불구하고 피어 투 피어 프로토콜, 트랜잭션 및 블록 구조, 디지털 서명 생성 및 확인, 합의 규칙, 키 관리 및 필요성 등 많은 기술적 공통점을 공유합니다. 노드 API. Bitcoin Core의 Forking을 통해 우리는 성숙도를 활용하고 MultiChain이 블록 체인에 추가하는 것, 구성 가능성, 허가 및 기본 자산 지원에 집중할 수있었습니다. 그 결과 개발 시작 2015 개월 만에 6 년 XNUMX 월에 첫 번째 알파를 릴리스 할 수있었습니다.

그러나 이러한 이점과 함께 Bitcoin Core의 일부 측면이 제대로 설계되지 않았다는 사실도 받아 들여야했습니다. 소규모에서도 잘 작동하지만 사용량이 증가함에 따라 성능이 크게 저하됩니다. 퍼블릭 비트 코인 네트워크는 여전히 초당 몇 번의 트랜잭션으로 제한되어 있기 때문에 오랫동안 대부분의 비트 코인 코어 사용자에게는 문제가되지 않습니다. 그러나 초당 수백 또는 수천 건의 트랜잭션을 목표로하는 개인 블록 체인을 사용하면 조만간 이러한 병목 현상을 제거해야한다는 것을 알았습니다.

비트 코인 코어의 지갑

Bitcoin Core의 "지갑"은 항상 이러한 어려움 중 가장 중요했습니다. 그 역할은 소유하고있는 블록 체인 주소 또는 ""과 관련되어 있기 때문에 노드와 특히 관련이있는 트랜잭션을 저장하는 것입니다.시계 만”활동을 추적하는 주소입니다. 예를 들어, 노드로 또는 노드에서 자금을 보내는 모든 거래는 해당 노드의 지갑에 저장되어야합니다. 그리고 노드가 트랜잭션을 생성 할 때마다 새 트랜잭션이 소비 할 이전 월렛 트랜잭션의 하나 이상의 "사용되지 않은 출력"을 검색해야합니다.

Bitcoin Core에서 상속받은 지갑에 어떤 문제가 있습니까? 실제로 세 가지 :

  • 모든 지갑 거래는 메모리에 보관됩니다. 이로 인해 시작 시간이 느려지고 메모리 사용량이 빠르게 증가합니다.
  • 많은 작업에서 기존 또는 신규 지갑에있는 지갑의 모든 트랜잭션에 대해 비효율적 인 "전체 스캔"을 수행합니다.
  • 지갑의 모든 거래는 노드의 관점에서 의미가 없으며 디스크의 블록 체인에 이미 저장되어있는 임의의 "메타 데이터"를 포함하여 완전히 저장됩니다. 이것은 매우 낭비입니다.

결과적으로 약 20,000 개의 트랜잭션이 저장되면 Bitcoin Core의 지갑이 크게 느려집니다. 200,000 정도가 지나면 실제로 중단됩니다. 더 나쁜 것은 멀티 체인 블록 체인이 트랜잭션 당 최대 8MB의 메타 데이터 (비트 코인의 80 바이트에 비해)를 허용하므로 지갑의 메모리 요구 사항은 적은 수의 트랜잭션으로도 빠르게 확장 될 수 있습니다.

이러한 단점은 비트 코인 코어에만 적용된다는 점을 명확히하는 것이 중요합니다 지갑일반 거래 처리 용량이 아니라 다시 말해, 자체 주소와 관련이없는 수백만 건 (또는 수십억 건)의 거래를 메모리가 아닌 디스크에 보관하기 때문에 편안하게 처리하고 저장할 수 있습니다. 예를 들어, 많은 인기있는 비트 코인 거래소와 지갑은 비트 코인 코어를있는 그대로 사용하지만 자체 트랜잭션을 노드 내부가 아닌 외부에 저장합니다.

멀티 체인의 새로운 지갑

노드 외부에 자체 트랜잭션을 저장하기 위해 MultiChain 사용자와 동일한 요구를 할 수있었습니다. 그러나 이는 각 체인 참가자의 설정 및 유지 관리를 크게 복잡하게하므로 올바른 솔루션으로 생각하지 않았습니다. 대신, 우리는 총알을 물고 지갑을 처음부터 다시 썼습니다.

새 지갑은 어떻게 다릅니 까? 데이터베이스에 대한 경험이 있다면 그 대답이 분명 할 수 있습니다.

  • 전자 지갑 트랜잭션을 메모리에 보관하지 않고 적절한 형식으로 디스크에 저장하고 필요할 때 관심있는 트랜잭션을 검색합니다.
  • 전체 지갑 스캔을 수행하는 대신, 특정 기준을 충족하는 트랜잭션을 신속하게 찾을 수 있도록 트랜잭션을 다양한 방식으로 "인덱싱"합니다.
  • 256 바이트보다 큰 트랜잭션 메타 데이터는 월렛에 저장되지 않습니다. 대신 지갑에는 블록 체인 자체에서 해당 메타 데이터의 위치에 대한 포인터가 포함됩니다.

다시 말해서, 우리는 데이터베이스 구동이 제대로되도록 노드 내 지갑을 재 구축했습니다 ( 레벨DB), 효율적으로 검색 할 수없는 순진한 메모리 내 구조에 의존하기보다는 놀랍게도, 차이 (3.4GHz Intel Core i7에서 측정 된)는 다소 극적입니다.

멀티 체인 지갑 거래 처리량

메모리 사용

그래프는 이전 지갑에 250,000 개의 트랜잭션이 포함 된 경우 전송 속도가 3tx / sec로 떨어지고 노드의 메모리 사용량에 600MB를 추가 함을 보여줍니다. 대조적으로, 새로운 지갑은 초당 100tx 이상을 유지하고 90MB 만 추가합니다. 이 시점에서 기존 지갑 테스트를 중단했지만 6-8 백만 건의 저장 트랜잭션이 있어도 새 지갑은 초당 100 tx / 초 이상 전송되며 사용 된 약 250MB의 RAM (데이터베이스 캐싱으로 인해)이 최고입니다.

이러한 테스트는 노드의 지갑에 여러 주소 및 자산 (따라서 많은 미사용 거래 출력)이있는 현실적인 조건에서 수행되었습니다. 이상적인 시나리오 (하나의 주소, 하나의 자산, 적은 UTXO)에서 지속 전송 속도는 400tx / s를 초과했습니다. 어느 쪽이든,이 재 작성의 일환으로, 깔끔한 내부 인터페이스 뒤에 모든 지갑 기능을 올바르게 추상화했습니다. 이를 통해 향후 다른 데이터베이스 엔진을보다 쉽게 ​​지원할 수있어보다 강력한 견고성과 속도를 얻을 수 있습니다.

다시 말하면,이 모든 숫자는 노드가 다른 사람이 만든 트랜잭션 처리 측면에서 처리량이 아니라 로컬 지갑에서 트랜잭션을 생성, 전송 및 저장할 수있는 비율을 나타냅니다. 일반적인 네트워크 처리량을 위해 MultiChain은 현재 실행중인 하드웨어에 따라 초당 200 ~ 800 tx / 초를 처리 할 수 ​​있습니다. 병목 현상은 디지털 서명 확인이므로 수행하는 데 시간이 오래 걸리기 때문에 정규 하드웨어에서 100,000 tx / sec와 같은 유망한 블록 체인 소프트웨어에 회의적입니다. 일반 분산 데이터베이스보다 나아지지 않습니다.)

마무리하기 위해, 나는 멀티 지갑에 오는 다음 주요 기능에 대해 언급하고 싶습니다.이 지갑을 다시 작성해야했습니다. 스트림이라고하는이 기능은 블록 체인의 범용 데이터 스토리지를위한 고급 추상화 및 API를 제공합니다. 분산화, 디지털 서명, 타임 스탬프 및 불변성의 블록 체인 관련 이점이 추가 된 스트림을 시계열 또는 키-값 데이터베이스로 생각할 수 있습니다. 우리는이 기능을 사용할 수있는 많은 블록 체인 사용 사례를 알고 있으며 이미이를 구축하기 위해 노력하고 있습니다. 이 공간을보십시오.

의견을 적어주세요 링크드 인에.

기술 부록

MultiChain alpha 22부터는 현재 실행중인 전자 지갑 버전을 확인할 수 있습니다. walletdbversion 필드 getinfo or getwalletinfo API 호출. 가치 1 원래 Bitcoin Core 지갑을 의미하며 2 새로운 멀티 체인 지갑을 의미합니다.

기존 체인에서 새 버전의 MultiChain을 실행하는 경우 새 지갑으로 즉시 전환되지 않습니다. 노드를 중지 한 후 다시 실행하여 지갑을 업그레이드 할 수 있습니다. multichaind 매개 변수와 함께 -walletdbversion=2 –rescan. 다음을 사용하여 비슷하게 다운 그레이드 할 수 있습니다 –walletdbversion=1 –rescan.

기본적으로 새 체인에서 노드를 시작하면 새 지갑이 자동으로 사용됩니다. 당신은 이것을 실행하여 이것을 변경할 수 있습니다 multichaind 매개 변수를 사용하여 처음으로 –walletdbversion=1.

새로운 지갑으로 멀티 체인 API 이전 트랜잭션 쿼리 API를 제외하고 이전과 정확히 동일한 방식으로 작동 getreceivedbyaddress, listreceivedbyaddresslisttransactions (용도 listwallettransactions or listaddresstransactions 대신). 또한 새로운 지갑은 Bitcoin Core의 잘못 구현되고 곧 폐기 될 예정인 "계정"메커니즘과 관련된 API 호출 및 매개 변수를 지원하지 않으며 MultiChain에서 제대로 지원하지 않습니다. 이러한 호출은 오류 메시지와 함께 안전하게 비활성화됩니다.

출처 : https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

타임 스탬프 :

더보기 멀티 체인