지난 몇 년간의 추세를 살펴보면 블록체인에 대해 항상 들었지만 구체적인 내용은 많지 않았습니다.
우리 모두는 Bitcoin, Ethereum, Dogecoin, Matic 등과 같은 암호화폐가 블록체인 기술에 의존한다는 것을 알고 있습니다. 블록체인은 2021년 수많은 산업을 혁신하고 새로운 성과를 위한 길을 닦은 중요한 사건을 주도했습니다.
블록체인은 편집, 해킹, 사기가 어렵거나 불가능한 방식으로 데이터를 저장하는 수단입니다. 블록체인의 전체 컴퓨터 시스템 네트워크에 복제되고 분산되는 트랜잭션의 디지털 원장입니다.
거의 모든 암호화폐를 지원하는 획기적인 데이터베이스 기술입니다. 블록체인은 전체 네트워크에 동일한 데이터베이스 사본을 분산시켜 시스템을 해킹하거나 속이는 것을 매우 어렵게 만듭니다.
비트코인은 이제 블록체인의 가장 두드러진 용도이지만 이 기술은 매우 다양한 응용 프로그램에 사용할 수 있습니다.
암호화폐와 블록체인은 최근 몇 년 동안 점점 더 인기를 얻고 있으며 이러한 추세는 계속될 것으로 예상됩니다.
이 튜토리얼에서는 JavaScript로 간단한 블록체인을 만들 것입니다. 블록체인이 작동하는 방식에 대한 기본적인 이해를 제공합니다.
그것을 MelodyCoin이라고 부르고 행동에 바로 들어가자!
블록 만들기
시작하려면 모든 코드를 배치할 새 JavaScript 파일을 만듭니다.
그것을 main.js라고 부르고 블록체인과 블록이 어떻게 보여야 하는지에 대한 설명으로 시작합시다.
Block 클래스를 생성하고 Object() { [네이티브 코드] } 함수를 제공하여 시작합니다.
새 블록을 생성할 때 날짜와 이전 블록의 해시를 제공해야 합니다.
다음은 각 속성에 대한 정의입니다.
- 타임스탬프는 블록이 만들어진 시기를 나타냅니다. 어떤 형식을 선택하든 사용할 수 있습니다(이 경우 UNIX 타임스탬프).
- 이 블록에 연결하려는 모든 형태의 데이터는 데이터 매개변수에 포함될 수 있습니다. 암호화폐를 생성하고자 하는 경우 송금인/수취인 및 이동된 금액과 같은 거래 데이터를 여기에 보관할 수 있습니다.
- previousHash는 이전 블록의 해시를 보유하는 문자열입니다. 이것은 나중에 블록체인의 무결성을 제공하는 데 중요한 블록 체인을 생성할 것입니다.
해시 생성
각 블록은 이전 블록(따라서 previousHash 속성)에 연결됩니다. 즉, 각 블록에는 해시가 필요합니다. 해시는 지문과 유사합니다. 블록마다 다릅니다.
블록의 해시는 해시 함수를 통해 모든 콘텐츠를 전달하여 계산할 수 있습니다.
따라서 현재 블록의 해시를 계산하는 함수를 구현하는 것으로 시작하겠습니다.
따라서 Block 클래스 아래에서 calculateHash 함수를 정의합니다.
그러나 SHA256 해시는 JavaScript에서 지원되지 않으며 외부 라이브러리에서 가져와야 합니다.
Crypto-js는 여러 해시 알고리즘의 안전한 구현을 포함하는 환상적인 패키지입니다.
그런 다음 main.js 코드로 가져올 수 있습니다.
이제 calculateHash() 함수가 있으므로 Block의 함수에서 사용하도록 하겠습니다.
블록의 모양을 설명한 후 블록체인의 모양을 정의할 수 있습니다. 그럼 새로운 클래스를 만들어 봅시다.
이 시나리오에서 블록체인은 속성 체인이 있는 매우 단순한 개체입니다. 이것은 체인의 모든 블록을 포함하는 배열입니다.
블록을 추가하기 전에 먼저 "제네시스 블록"이라고 알려진 것을 만들어야 합니다. 이것은 체인의 첫 번째 블록이며 이전 블록을 가리킬 수 없다는 점에서 고유합니다(첫 번째입니다!).
따라서 제네시스 블록을 구축하기 위해 createGenesisBlock()이라는 클래스에 함수를 추가하겠습니다. Blockchain 클래스의 Object() { [네이티브 코드] } 함수로 돌아갑니다.
이제 새로운 블록체인 인스턴스를 구축할 때마다 제네시스 블록을 포함할 수 있습니다.
블록체인 방식
이제 새 블록을 추가하고 가장 최근 블록을 가져오는 등의 작업을 수행할 수 있도록 블록체인 클래스에 메서드를 추가해 보겠습니다.
getLatestBlock 기능이 가장 기본입니다. 단순히 체인 배열의 마지막 멤버를 반환합니다.
addBlock 기술은 조금 더 복잡합니다.
체인에 새 블록을 추가하기 전에 먼저 해당 블록의 previousHash 필드를 적절하게 설정해야 합니다.
우리 체인에 가장 최근에 추가된 블록의 해시로 설정되어야 합니다. 또한 새 블록의 해시를 계산해야 합니다.
지원
우리 MelodyCoin이 어떻게 나왔는지 봅시다.
이를 위해 블록체인 인스턴스를 생성합니다. 블록을 몇 개 더 추가해 보겠습니다.
거기에 두 개의 새로운 블록을 만들었습니다. 현재 블록체인이 어떤 모습인지 살펴보겠습니다.
MelodyCoin은 XNUMX개의 공백으로 문자열화되고 형식화됩니다.
블록체인의 무결성 확인
블록체인은 일단 블록이 추가되면 나머지 체인을 무효화하지 않고는 수정할 수 없기 때문에 환상적입니다.
그러나 이 구현으로 블록체인의 무결성을 확인할 수 있는 방법이 없습니다.
블록체인에 isChainValid 기능을 도입해 봅시다. 체인이 합법적이면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
무결성 테스트
이제 블록체인의 무결성을 테스트할 수 있습니다. 지금 실행하면 체인이 정품임을 확인할 수 있습니다.
이제 블록체인을 조작해 봅시다. 블록 2를 변경하고 내용을 덮어씁니다(100개가 아닌 XNUMX개의 코인을 전송했다고 가정).
이것을 실행하면 소프트웨어가 체인을 변조하려는 우리의 노력을 인식하는 것을 볼 수 있습니다.
그러나 내가 이것에 간섭할 수 있는 또 다른 방법이 있다고 믿을 수 있습니다. 블록의 내용을 변경했지만 해시를 다시 계산하지 않았습니다. 따라서 영리하게 시도하여 동일한 블록의 해시를 다시 계산할 수 있습니다.
이것이 우리의 작은 블록체인 설정의 전부입니다! 이를 통해 새로운 블록을 추가하고 체인 내 데이터 변조를 감지할 수 있습니다.
우리가 해결해야 할 작은 블록체인에는 두 가지 문제가 있습니다.
- 최신 컴퓨터는 매우 빠르며 몇 초 만에 체인에 수천 개의 블록을 추가할 수 있습니다. 우리는 누구도 우리 블록체인에 스팸을 보내는 것을 원하지 않습니다.
- 우리의 블록체인은 여전히 변조에 취약합니다. 블록의 내용을 업데이트한 다음 모든 후속 블록에 대한 해시(및 이전 해시)를 간단히 다시 계산할 수 있습니다. 당신이 그것을 엉망으로 만들더라도 합법적 인 체인으로 끝날 것입니다.
이러한 문제를 해결하기 위해 블록체인은 "작업 증명"이라는 기술을 사용합니다. 이 접근 방식을 사용하여 블록을 생성하는 데 상당한 양의 계산 리소스를 사용했음을 입증해야 합니다. 이것은 또한 불린다 채광.
작업 증명은 블록의 해시가 특정 양의 XNUMX으로 시작하도록 요구합니다. 그러나 해시가 이 규칙에 맞는지 어떻게 알 수 있습니까?
블록의 내용은 해시를 결정합니다. 따라서 내용을 수정하지 않는 한 항상 동일한 해시를 얻습니다.
각 블록에는 솔루션으로 nonce 값이 추가되어야 합니다. 이것은 기본적으로 블록의 해시가 충분한 XNUMX으로 시작될 때까지 업데이트할 수 있는 임의의 데이터입니다. 해시 함수의 출력을 변경할 수 없기 때문에 다양한 조합을 테스트하고 최선을 다해야 합니다.
블록체인에 마이닝 소개
Block 클래스에 nonce를 포함하는 것으로 시작하겠습니다. nonce는 블록의 해시에 영향을 미치도록 수정할 수 있는 블록 내의 단일 값입니다.
우리는 타임스탬프나 데이터를 변경할 수 없습니다.
다음으로 블록의 실제 마이닝을 수행할 mineBlock() 함수를 작성해 보겠습니다. 이 함수는 필요한 난이도를 매개변수로 전송하고 블록의 해시가 충분한 XNUMX으로 시작될 때까지 계속 실행됩니다.
해시가 충분한 5으로 시작될 때까지 실행되는 기본적인 while 루프를 만들었습니다. 얼마나 많은 5이 필요한지 결정하기 위해 난이도를 사용합니다. 난이도가 XNUMX인 경우 해시는 XNUMX개의 XNUMX으로 시작해야 합니다.
해시에 XNUMX이 충분하지 않으면 nonce를 XNUMX 올리고 해시를 다시 계산합니다. 그리고 난이도에 해당하는 해시를 찾으면 콘솔에 기록합니다.
우리가 해야 할 일이 하나 더 있습니다. 우리는 calculateHash 메서드에서 nonce 변수를 실제로 고려하지 않으므로 다음과 같습니다.
블록체인 클래스
이 새로운 접근 방식을 블록체인 클래스의 테스트에 적용하고 어떻게 진행되는지 살펴보겠습니다.
시작하려면 Object() 함수에서 블록체인의 난이도를 정의하겠습니다. 나중에 어딘가에서 사용할 수 있으므로 여기에서 정의합니다.
addBlock 함수는 블록을 체인에 추가하기 전에 블록을 채굴하도록 수정되어야 합니다.
블록체인 사용
이제 새로운 블록체인을 작업 증명 알고리즘과 함께 사용하겠습니다. 여기에 몇 개의 console.log 문을 추가합니다.
이 코드를 실행하면 마이닝 프로세스가 더 이상 특별히 빠르지 않다는 것을 관찰할 수 있습니다.
알고리즘이 세 개의 XNUMX으로 시작하는 해시가 있는 블록을 생성하는 데 약간의 시간이 걸립니다(난이도에 따라 구성됨).
이것이 기본 블록체인 설정의 끝이었습니다.
작업 증명 메커니즘 덕분에 블록체인에 새 블록이 추가되는 속도를 조절할 수 있습니다.
블록체인에서 가장 중요한 보안 기능입니다. 이제 어떻게 작동하는지 이해했으므로 직접 만들어 보세요!
댓글을 남겨주세요.