(우리는 Block에 헤더랑 바디 넣고, BlockHeader추가로 만들어서 거기에 버전이랑 인덱스 넣었음)
최초의 블록(제네시스블록)- 블록체인의 시작. 안의 값은 일일이 넣어주면 됨.
const genesisBlock
블록체인 싹 저장할 배열(javascript in memory 방식으로 저장. 컴끄면 사라짐)
const blockchain= [] //1장에서는 genesisBlock를 넣은 걸봐서 제네시스 블록 넣어서 보려나봄
필요한 함수 만들기
해쉬값계산함수
const calculateHash
다음블록만드는 함수(이전 해쉬 블록 알아야함)
const generateNextBlock
블록의 유효성 검사할 함수
그 조건임
이전 블록보다 인덱스값이 1 클 것.
previousHash값이 이전블록의 hash값일 것.
hash값이 유효한 값일 것. 다음의 코드로 이를 검사할 수 있어요.
const isValidNewBlock = (새블록, 이전블록) => {
1. 만약 이전블록인덱스가 새 블록인덱스보다 길이 더 길면
틀림 뱉어
2. 이전블록해시와 새블록이전해시가 같지 않으면
틀림뱉어
3. 새블록의 해시 계산한것이 새블록해시와 같지 않으면
틀림 뱉어
다 통과하면 맞음 뱉어
}
참고로 나 저기 들어가는 ,"새블록, 이전블록" 이렇게 써놓은 거, 파라미터(매개변수parameter)가 이름 내마음대로 지어줘도 되는건지 몰랐음.. 그래서 req, res도 막 거꾸로 써도 되더라고. 이전에 보내준 값(전달인자 argument)을 여기서 어떤 이름으로 쓸지 변수 정하고 이 함수 안에서 쓰는 것이었다!!!! 이전에 보내준 값이름이랑 이름이 달라도 상관없는 것!..ㅋㅋㅋ그동안 이름같은게 많길래 헷갈렸는데 이렇게 유동적이었다뉘
블록의 구조 검사하는 함수
const isValidBlockStructure {
블록 인덱스 타입은 숫자
블록 해시 타입은 문자열string(왜 끈, 줄이냐면 한글자씩연달아 메모리에 저장되는게 끈같아서..)