머클경로 편집하기
최신판 | 당신의 편집 | ||
2번째 줄: | 2번째 줄: | ||
==개요== | ==개요== | ||
− | 머클경로는 [[풀노드]]로부터 정보를 받아 [[해시함수]]에 | + | 머클경로는 [[풀노드]]로부터 정보를 받아 [[해시함수]]에 대입시켜 사용자가 해시 값의 상대값을 알아가면서 계속 해시를 진행해 나갈 수 있게 하는 것이다. |
==머클트리== | ==머클트리== | ||
45번째 줄: | 45번째 줄: | ||
BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2]))); | BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2]))); | ||
} | } | ||
− | // j는 각 트리레벨에 맞춰 | + | // j는 각 트리레벨에 맞춰 삽입해야할 첫번째 위치를 가리킨다. |
j += nSize; | j += nSize; | ||
} | } | ||
60번째 줄: | 60번째 줄: | ||
;머클트리의 증명 | ;머클트리의 증명 | ||
− | 위변조 검사를 할 때 필요한 노드를 추출하는 코드이다. 모든 | + | 위변조 검사를 할 때 필요한 노드를 추출하는 코드이다. 모든 트랜잭션들을 검증할 필요는 없으며, 필요한 트랜잭션 해시들만 선별한다. |
// nIndex로 위변조 여부를 검사할 특정 트랜잭션을 선택하고 머클 트리내의 트랜잭션 해시값과 연관된 | // nIndex로 위변조 여부를 검사할 특정 트랜잭션을 선택하고 머클 트리내의 트랜잭션 해시값과 연관된 | ||
80번째 줄: | 80번째 줄: | ||
} | } | ||
− | 아래는 위변조를 검사하는 코드이다. 해시할 때의 규칙은 짝수에 해당하는 인덱스를 가진 해시는 다음에 해시될 때 좌측에 위치해야 한다는 것이고 홀수에 해당하는 인덱스를 가진 해시는 우측에 위치해야 한다는 것이다. 즉, [[SHA256]](짝수인덱스를 가진 트랜잭션 해시, 홀수인덱스를 가진 트랜잭션 해시) 이렇게 구성된다는 뜻이다. 해시될 때의 순서에 따라 | + | 아래는 위변조를 검사하는 코드이다. 해시할 때의 규칙은 짝수에 해당하는 인덱스를 가진 해시는 다음에 해시될 때 좌측에 위치해야 한다는 것이고 홀수에 해당하는 인덱스를 가진 해시는 우측에 위치해야 한다는 것이다. 즉, [[SHA256]](짝수인덱스를 가진 트랜잭션 해시, 홀수인덱스를 가진 트랜잭션 해시) 이렇게 구성된다는 뜻이다. 해시될 때의 순서에 따라 결과값은 완전 달라지기 때문에 순서 규칙을 지켜주는 것은 중요하다. |
static uint256 CheckMerkleBranch(uint256 hash, const vector<uint256>& vMerkleBranch, int nIndex) | static uint256 CheckMerkleBranch(uint256 hash, const vector<uint256>& vMerkleBranch, int nIndex) |