State Hash 1 subCacheMerkleRoots에서 stateHash 계산
6298 단어 catapultBlockchainNEM
소개
이제 피하고 있던 것에 손을 대지 않으면
이번에는 subCacheMerkleRoots와 stateHash의 관계에 주목하겠습니다.
State Hash
catapult-service-bootstrap 등을 움직일 때, 표준 출력에 이런 것이 출력된다고 생각합니다.
Height: 1
Generation Hash: 5ABBD9F7894EE7E5D4C3CDA934245396AEFCD1CB0426F265AC81F4F3450AB6DD
Transactions Hash: 111461D150B90EBF58A87AB2FA2493DCB716F83E7EE584369820D6CA10DE5E52
Receipts Hash: A207227B111F4242DE80FC87E722B86077931B483883EA65E06A24340176A047
State Hash: BDCAF08330E29EBC7F18A1A9E6C7C60E4CFF99B100FC583FCDBAFA6F875F5DCF
--- Components (7) ---
+ 779F9E5BCEFB8267C084B14F8C2CB981683E6715BAFF4DC3B39BC133AFBEDD1B
+ 7BA3B37CDF34608C3B98BE572C7A743FEAC8B6909654AF21B8E0F4381EFD9164
+ 5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
이것들은, 블록 체인의 상태 (스테이트)를 나타내는 값으로, Components (7)
의 값은 각각 다음과 같은 스테이트를 나타내고 있습니다.
Finally COW state roots in order:
* account state cache (balances)
* namespace cache
* 모자이크 캐시
* multisig cache
* hash lock cache
* secret lock cache
* property cache
그래서 이러한 값을 대표하는 것이 State Hash
입니다.
계산해보기
대표하고 있다고 뭐라고 하는 것입니다만, 우선 계산해 봅시다.
어떤 체인의 블록 번호 600000의 상태를 살펴 보겠습니다.
stateHash는5A4AB7830E7CE281252ED3CBADC5A7919A5DF82BA0766788186EC32308934B37
subCacheMerkleRoots는
0 "4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE5490"
1 "99DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D"
2 "30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C"
3 "3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E228731715"
4 "0000000000000000000000000000000000000000000000000000000000000000"
5 "0000000000000000000000000000000000000000000000000000000000000000"
6 "A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47"
자, subCacheMerkleRoots
를 모두 문자열 결합하여 sha3 해 보겠습니다.
sha3(4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE549099DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E22873171500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47)
결과는
5A4AB7830E7CE281252ED3CBADC5A7919A5DF82BA0766788186EC32308934B37
stateHash
와 일치합니다.
코드는 이런 느낌이 될까 생각합니다.
const jssha3 = require('js-sha3');
const payload = '4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE549099DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E22873171500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47';
const hasher = jssha3.sha3_256.create();
const hash = hasher.update(Buffer.from(payload, 'hex')).hex().toUpperCase();
console.log(hash);
결론
subCacheMerkleRoots
의 sha3 를 취하면 stateHash
가 되었습니다. stateHash
로부터 subCacheMerkleRoots
는 도출할 수 없습니다만, subCacheMerkleRoots
하지만 1 바이트라도 변경되면, stateHash
의 값이 바뀝니다. 이렇게 하면 예를 들어 stateHash
에만 서명하거나 블록의 데이터로 캡처하여 subCacheMerkleRoots
가 다른 값으로 변경되는 것을 방지할 수 있습니다.
시리즈
State Hash 1 subCacheMerkleRoots에서 stateHash 계산
State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산
State Hash 그 2추기
State Hash 그 3 요소가 2개의 경우의 Patricia Tree
Reference
이 문제에 관하여(State Hash 1 subCacheMerkleRoots에서 stateHash 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/4e411a9b157e723327ee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
catapult-service-bootstrap 등을 움직일 때, 표준 출력에 이런 것이 출력된다고 생각합니다.
Height: 1
Generation Hash: 5ABBD9F7894EE7E5D4C3CDA934245396AEFCD1CB0426F265AC81F4F3450AB6DD
Transactions Hash: 111461D150B90EBF58A87AB2FA2493DCB716F83E7EE584369820D6CA10DE5E52
Receipts Hash: A207227B111F4242DE80FC87E722B86077931B483883EA65E06A24340176A047
State Hash: BDCAF08330E29EBC7F18A1A9E6C7C60E4CFF99B100FC583FCDBAFA6F875F5DCF
--- Components (7) ---
+ 779F9E5BCEFB8267C084B14F8C2CB981683E6715BAFF4DC3B39BC133AFBEDD1B
+ 7BA3B37CDF34608C3B98BE572C7A743FEAC8B6909654AF21B8E0F4381EFD9164
+ 5D8EEAD5907130D297C322698F3D201A78D629CAC87487A0F4F890C1277B250C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
이것들은, 블록 체인의 상태 (스테이트)를 나타내는 값으로,
Components (7)
의 값은 각각 다음과 같은 스테이트를 나타내고 있습니다.Finally COW state roots in order:
* account state cache (balances)
* namespace cache
* 모자이크 캐시
* multisig cache
* hash lock cache
* secret lock cache
* property cache
그래서 이러한 값을 대표하는 것이
State Hash
입니다.계산해보기
대표하고 있다고 뭐라고 하는 것입니다만, 우선 계산해 봅시다.
어떤 체인의 블록 번호 600000의 상태를 살펴 보겠습니다.
stateHash는5A4AB7830E7CE281252ED3CBADC5A7919A5DF82BA0766788186EC32308934B37
subCacheMerkleRoots는
0 "4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE5490"
1 "99DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D"
2 "30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C"
3 "3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E228731715"
4 "0000000000000000000000000000000000000000000000000000000000000000"
5 "0000000000000000000000000000000000000000000000000000000000000000"
6 "A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47"
자, subCacheMerkleRoots
를 모두 문자열 결합하여 sha3 해 보겠습니다.
sha3(4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE549099DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E22873171500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47)
결과는
5A4AB7830E7CE281252ED3CBADC5A7919A5DF82BA0766788186EC32308934B37
stateHash
와 일치합니다.
코드는 이런 느낌이 될까 생각합니다.
const jssha3 = require('js-sha3');
const payload = '4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE549099DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E22873171500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47';
const hasher = jssha3.sha3_256.create();
const hash = hasher.update(Buffer.from(payload, 'hex')).hex().toUpperCase();
console.log(hash);
결론
subCacheMerkleRoots
의 sha3 를 취하면 stateHash
가 되었습니다. stateHash
로부터 subCacheMerkleRoots
는 도출할 수 없습니다만, subCacheMerkleRoots
하지만 1 바이트라도 변경되면, stateHash
의 값이 바뀝니다. 이렇게 하면 예를 들어 stateHash
에만 서명하거나 블록의 데이터로 캡처하여 subCacheMerkleRoots
가 다른 값으로 변경되는 것을 방지할 수 있습니다.
시리즈
State Hash 1 subCacheMerkleRoots에서 stateHash 계산
State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산
State Hash 그 2추기
State Hash 그 3 요소가 2개의 경우의 Patricia Tree
Reference
이 문제에 관하여(State Hash 1 subCacheMerkleRoots에서 stateHash 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/4e411a9b157e723327ee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
0 "4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE5490"
1 "99DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D"
2 "30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C"
3 "3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E228731715"
4 "0000000000000000000000000000000000000000000000000000000000000000"
5 "0000000000000000000000000000000000000000000000000000000000000000"
6 "A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47"
const jssha3 = require('js-sha3');
const payload = '4401DAC79E1CDBB6903BED8F6CE5D6BB29DF9220D65D1093644968C61DCE549099DCAAB775F4D905A43446A54336A7C52C011D0B036D92E3DEA77A6B4806130D30A245258080BA6825F4263AEF2146C2B899FE8891B5E528EFE4C861397FFB8C3BD4B1669FAC87AF68A1DB54AE737A0227A3D0B85AECB3A0FF7240E22873171500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A13E3FB1B22964DC32FE77DAB978617F3CB15B3930371D6D4477BE47C961AE47';
const hasher = jssha3.sha3_256.create();
const hash = hasher.update(Buffer.from(payload, 'hex')).hex().toUpperCase();
console.log(hash);
subCacheMerkleRoots
의 sha3 를 취하면 stateHash
가 되었습니다. stateHash
로부터 subCacheMerkleRoots
는 도출할 수 없습니다만, subCacheMerkleRoots
하지만 1 바이트라도 변경되면, stateHash
의 값이 바뀝니다. 이렇게 하면 예를 들어 stateHash
에만 서명하거나 블록의 데이터로 캡처하여 subCacheMerkleRoots
가 다른 값으로 변경되는 것을 방지할 수 있습니다.시리즈
State Hash 1 subCacheMerkleRoots에서 stateHash 계산
State Hash 두 요소가 하나만있는 경우의 subCacheMerkleRoots 계산
State Hash 그 2추기
State Hash 그 3 요소가 2개의 경우의 Patricia Tree
Reference
이 문제에 관하여(State Hash 1 subCacheMerkleRoots에서 stateHash 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/4e411a9b157e723327ee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(State Hash 1 subCacheMerkleRoots에서 stateHash 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/planethouki/items/4e411a9b157e723327ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)