State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산
5122 단어 catapultBlockchainNEM
소개
이제 피하고 있던 것에 손을 대지 않으면
이번에는 요소가 하나만 있는 간단한 Patricia Tree에 대해 살펴보겠습니다.
Patricia Tree
subCacheMerkleRoots는 어디에서 오는가? 그 1에서는, subCacheMerkleRoots는 잔액이나 모자이크등의 스테이트를 나타내고 있다고 하는 것을 썼습니다.
예를 들어 모자이크의 경우 등록된 모자이크의 정보를 기반으로 해야 합니다. 그리고 그 정보를 바탕으로 Patricia Tree라는 구조를 만들고, 그 루트 해시가 모자이크의 subCacheMerkleRoots가 됩니다.
Patricia Tree에 대해서는 다음 기사가 도움이 될 것입니다.
계산해보기
요소가 하나만 있는 경우라는 제목이므로 모자이크가 하나만 등록된 상태를 준비합니다.
모자이크의 정보는 이런 느낌.
block-properties-file.properties[mosaic>cat:currency]
divisibility = 6
duration = 0
supply = 8'999'999'998'000'000
isTransferable = true
isSupplyMutable = false
다음은 모자이크 ID 0x3692'FF95'2D89'DD45
에서만 발행된 네메시스 블록의 다양한 상태 정보입니다.
Height: 1
Generation Hash: 5ABBD9F7894EE7E5D4C3CDA934245396AEFCD1CB0426F265AC81F4F3450AB6DD
Transactions Hash: 111461D150B90EBF58A87AB2FA2493DCB716F83E7EE584369820D6CA10DE5E52
Receipts Hash: A207227B111F4242DE80FC87E722B86077931B483883EA65E06A24340176A047
State Hash: BDCAF08330E29EBC7F18A1A9E6C7C60E4CFF99B100FC583FCDBAFA6F875F5DCF
--- Components (7) ---
+ 779F9E5BCEFB8267C084B14F8C2CB981683E6715BAFF4DC3B39BC133AFBEDD1B
+ 7BA3B37CDF34608C3B98BE572C7A743FEAC8B6909654AF21B8E0F4381EFD9164
+ 5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
subCacheMerkleRoots의 3번째가 모자이크로, 0x3692'FF95'2D89'DD45
의 모자이크 정보로부터 Patricia Tree를 만들면
5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
도출할 수 있어야 합니다.
그럼, Patricia Tree의 요소가 되는 데이터는 어디에 있는가.
이것은 RocksDB에 저장되어있는 것 같습니다.
투석기를 움직일 때 사용할 수 있는 data 폴더가 있습니다.
이 안의 statedb의 MosaicCache 안을 봅니다.
이것은 RocksDB 파일이므로 소프트웨어로 볼 수 있습니다.
FastNoSQL 을 사용해 보았습니다.
key가 문자열화되어 있기 때문에 이해하기 어렵습니다만, 0x3692'FF95'2D89'DD45
의 모자이크 ID라고 생각합니다.
꺼내 보겠습니다.
key: 45dd892d95ff9236
value: 010045dd892d95ff923680fbdbca73f91f000100000000000000db06e6c3f6976324ba215d7d1f2d4c69d7353afe1d6050a606bc61eda13e1c3c01000000020000000000000006000000000000000000000000000000
value는 MosaicEntry라는 형태로 저장되어있는 것 같습니다.
가능한 한 분해해 보았습니다. 0x3692'FF95'2D89'DD45
의 정보와 일치한다고 생각합니다.
0100 ?
45dd892d95ff9236 id
80fbdbca73f91f00 supply
0100000000000000 height
db06e6c3f6976324ba215d7d1f2d4c69d7353afe1d6050a606bc61eda13e1c3c pubkey
01000000 revision
0200000000000000 flag (Transferable)
0600000000000000 divisibility
0000000000000000 duration
여기에서 어떻게 State Hash를 계산하는지 여러가지 듣고 돌아본 결과, 다음과 같이 이해했습니다.
prefix에 대해서입니다만, key가 짝수 니블이고 leaf node의 경우, 0x20이 됩니다.
그리고 leaf node를 sha3하는 방법은 단순히 모두 연결하고 sha3하면 됩니다.
샤3
= 5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
subCacheMerkleRoots의 세 번째와 일치했습니다.
결론
subCacheMerkleRoots에 대해 요소가 하나만있는 경우 모자이크를 파생했습니다. Patricia Tree에 해시 정보 밖에 들어 있지 않기 때문에 스테이트의 저장 장소라고 하는 것보다는 스테이트에 변경이 있을 경우에 고속으로 처리를 할 수 있기 때문이라고 생각합니다. 또, 트리 구조를 사용하고 있기 때문에, 어느 시점에서 확실히 특정의 모자이크나 계정의 잔고가 존재한 것을 증명할 수 있다고 생각합니다.
시리즈
State Hash 1 subCacheMerkleRoots에서 stateHash 계산
State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산
State Hash 그 2추기
State Hash 그 3 요소가 2개의 경우의 Patricia Tree
Reference
이 문제에 관하여(State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/a905c543829dba2331d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
subCacheMerkleRoots는 어디에서 오는가? 그 1에서는, subCacheMerkleRoots는 잔액이나 모자이크등의 스테이트를 나타내고 있다고 하는 것을 썼습니다.
예를 들어 모자이크의 경우 등록된 모자이크의 정보를 기반으로 해야 합니다. 그리고 그 정보를 바탕으로 Patricia Tree라는 구조를 만들고, 그 루트 해시가 모자이크의 subCacheMerkleRoots가 됩니다.
Patricia Tree에 대해서는 다음 기사가 도움이 될 것입니다.
계산해보기
요소가 하나만 있는 경우라는 제목이므로 모자이크가 하나만 등록된 상태를 준비합니다.
모자이크의 정보는 이런 느낌.
block-properties-file.properties[mosaic>cat:currency]
divisibility = 6
duration = 0
supply = 8'999'999'998'000'000
isTransferable = true
isSupplyMutable = false
다음은 모자이크 ID 0x3692'FF95'2D89'DD45
에서만 발행된 네메시스 블록의 다양한 상태 정보입니다.
Height: 1
Generation Hash: 5ABBD9F7894EE7E5D4C3CDA934245396AEFCD1CB0426F265AC81F4F3450AB6DD
Transactions Hash: 111461D150B90EBF58A87AB2FA2493DCB716F83E7EE584369820D6CA10DE5E52
Receipts Hash: A207227B111F4242DE80FC87E722B86077931B483883EA65E06A24340176A047
State Hash: BDCAF08330E29EBC7F18A1A9E6C7C60E4CFF99B100FC583FCDBAFA6F875F5DCF
--- Components (7) ---
+ 779F9E5BCEFB8267C084B14F8C2CB981683E6715BAFF4DC3B39BC133AFBEDD1B
+ 7BA3B37CDF34608C3B98BE572C7A743FEAC8B6909654AF21B8E0F4381EFD9164
+ 5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
subCacheMerkleRoots의 3번째가 모자이크로, 0x3692'FF95'2D89'DD45
의 모자이크 정보로부터 Patricia Tree를 만들면
5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
도출할 수 있어야 합니다.
그럼, Patricia Tree의 요소가 되는 데이터는 어디에 있는가.
이것은 RocksDB에 저장되어있는 것 같습니다.
투석기를 움직일 때 사용할 수 있는 data 폴더가 있습니다.
이 안의 statedb의 MosaicCache 안을 봅니다.
이것은 RocksDB 파일이므로 소프트웨어로 볼 수 있습니다.
FastNoSQL 을 사용해 보았습니다.
key가 문자열화되어 있기 때문에 이해하기 어렵습니다만, 0x3692'FF95'2D89'DD45
의 모자이크 ID라고 생각합니다.
꺼내 보겠습니다.
key: 45dd892d95ff9236
value: 010045dd892d95ff923680fbdbca73f91f000100000000000000db06e6c3f6976324ba215d7d1f2d4c69d7353afe1d6050a606bc61eda13e1c3c01000000020000000000000006000000000000000000000000000000
value는 MosaicEntry라는 형태로 저장되어있는 것 같습니다.
가능한 한 분해해 보았습니다. 0x3692'FF95'2D89'DD45
의 정보와 일치한다고 생각합니다.
0100 ?
45dd892d95ff9236 id
80fbdbca73f91f00 supply
0100000000000000 height
db06e6c3f6976324ba215d7d1f2d4c69d7353afe1d6050a606bc61eda13e1c3c pubkey
01000000 revision
0200000000000000 flag (Transferable)
0600000000000000 divisibility
0000000000000000 duration
여기에서 어떻게 State Hash를 계산하는지 여러가지 듣고 돌아본 결과, 다음과 같이 이해했습니다.
prefix에 대해서입니다만, key가 짝수 니블이고 leaf node의 경우, 0x20이 됩니다.
그리고 leaf node를 sha3하는 방법은 단순히 모두 연결하고 sha3하면 됩니다.
샤3
= 5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
subCacheMerkleRoots의 세 번째와 일치했습니다.
결론
subCacheMerkleRoots에 대해 요소가 하나만있는 경우 모자이크를 파생했습니다. Patricia Tree에 해시 정보 밖에 들어 있지 않기 때문에 스테이트의 저장 장소라고 하는 것보다는 스테이트에 변경이 있을 경우에 고속으로 처리를 할 수 있기 때문이라고 생각합니다. 또, 트리 구조를 사용하고 있기 때문에, 어느 시점에서 확실히 특정의 모자이크나 계정의 잔고가 존재한 것을 증명할 수 있다고 생각합니다.
시리즈
State Hash 1 subCacheMerkleRoots에서 stateHash 계산
State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산
State Hash 그 2추기
State Hash 그 3 요소가 2개의 경우의 Patricia Tree
Reference
이 문제에 관하여(State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/a905c543829dba2331d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[mosaic>cat:currency]
divisibility = 6
duration = 0
supply = 8'999'999'998'000'000
isTransferable = true
isSupplyMutable = false
Height: 1
Generation Hash: 5ABBD9F7894EE7E5D4C3CDA934245396AEFCD1CB0426F265AC81F4F3450AB6DD
Transactions Hash: 111461D150B90EBF58A87AB2FA2493DCB716F83E7EE584369820D6CA10DE5E52
Receipts Hash: A207227B111F4242DE80FC87E722B86077931B483883EA65E06A24340176A047
State Hash: BDCAF08330E29EBC7F18A1A9E6C7C60E4CFF99B100FC583FCDBAFA6F875F5DCF
--- Components (7) ---
+ 779F9E5BCEFB8267C084B14F8C2CB981683E6715BAFF4DC3B39BC133AFBEDD1B
+ 7BA3B37CDF34608C3B98BE572C7A743FEAC8B6909654AF21B8E0F4381EFD9164
+ 5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
0100 ?
45dd892d95ff9236 id
80fbdbca73f91f00 supply
0100000000000000 height
db06e6c3f6976324ba215d7d1f2d4c69d7353afe1d6050a606bc61eda13e1c3c pubkey
01000000 revision
0200000000000000 flag (Transferable)
0600000000000000 divisibility
0000000000000000 duration
subCacheMerkleRoots에 대해 요소가 하나만있는 경우 모자이크를 파생했습니다. Patricia Tree에 해시 정보 밖에 들어 있지 않기 때문에 스테이트의 저장 장소라고 하는 것보다는 스테이트에 변경이 있을 경우에 고속으로 처리를 할 수 있기 때문이라고 생각합니다. 또, 트리 구조를 사용하고 있기 때문에, 어느 시점에서 확실히 특정의 모자이크나 계정의 잔고가 존재한 것을 증명할 수 있다고 생각합니다.
시리즈
State Hash 1 subCacheMerkleRoots에서 stateHash 계산
State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산
State Hash 그 2추기
State Hash 그 3 요소가 2개의 경우의 Patricia Tree
Reference
이 문제에 관하여(State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/a905c543829dba2331d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/planethouki/items/a905c543829dba2331d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)