NodeJS로 50줄의 코드로 블록체인 만들기



NodeJS로 50줄의 코드로 첫 블록체인 애플리케이션을 만들 시간입니다!

우리는 블록체인이 될 수 있는 것의 지나치게 단순화된 버전을 만들 것이며, 여러 노드 사이의 네트워킹 시스템을 설계하는 방법이 아니라 채굴 프로세스에 초점을 맞출 것입니다.

또한 NodeJS는 단일 스레드 언어이기 때문에 마이닝 측면에서 사용하는 것을 권장할 수 없습니다. 이 기사는 블록체인이 작동하는 방식을 설명하기 위해 독점적으로 여기에 있습니다.

두 개의 기본 파일이 필요합니다.
  • blockchain.JSON이 블록체인 데이터를 저장합니다
  • .
  • 앱용 app.js

  • 내 소스 코드에 주석을 이미 추가했기 때문에 코드의 각 줄을 설명하지 않겠습니다.

    blockchain.JSON은 블록체인 데이터 아키텍처를 저장합니다.

    [
      {
        "id": "0",
        "timestamp": 0,
        "nonce": 0
      }
    ]
    
    


    app.js :

    // Sha3 is a module to hash documents
    const { SHA3 } = require("sha3");
    const hash = new SHA3(256);
    const fs = require("fs");
    
    const fileName = "./blochain.json";
    
    // We start our nonce at 0
    let nonce = 0;
    // Difficulty of the Blockchain. The more you add 0, the more it will be difficut to mine a Block
    const difficulty = "000";
    // Switch to end the while loop
    let notFounded = true;
    
    // Function used to update our Blockhcain
    const updateBlockchain = (id, timestamp, nonce) => {
      let blockchain = require(fileName);
      // We create the new Block
      const addBlock = {
        id: id,
        timestamp: timestamp,
        nonce: nonce
      };
      // We add it into the Blockchain
      blockchain.push(addBlock);
      fs.writeFile(
        fileName,
        JSON.stringify(blockchain, null, 2),
        function writeJSON(err) {
          if (err) return console.log(err);
        }
      );
    };
    
    // Function to mine a Block
    const mining = () => {
      var start = new Date().getTime();
      // We import the Blockchain
      const blockchain = require(fileName);
    
      while (notFounded) {
        // We need to reset our hash every loop
        hash.reset();
        // We hash the new data (block + nonce)
        hash.update(JSON.stringify(blockchain) + nonce);
        let hashed = hash.digest("hex");
        // IF the new hashed data starts with '000'
        if (hashed.startsWith(difficulty)) {
          var diff = (new Date().getTime() - start) / 1000;
          // We turn the switch off to end the while loop
          notFounded = false;
          console.log("\x1b[46m%s\x1b[0m", "//// FOUNDED ! ////");
          console.log(`Hash : ${hashed}`);
          console.log(`Nonce : ${nonce}`);
          console.log(`Total time : ${diff}s`);
          console.log("\x1b[46m%s\x1b[0m", "////           ////");
          // We execute the updateBlockchain
          updateBlockchain(hashed, Date.now(), nonce);
        } else {
          // PLEASE NOTE: If you want your mining process to be faster, delete or comment the next console.log()
          console.log(hashed);
          // We increment the nonce and start again the loop
          nonce++;
        }
      }
    };
    
    // When we launch the app, start mining
    mining();
    
    


    앱을 실행하려면:
    먼저 yarn npm -g yarn을 설치합니다.
    그런 다음 sha3 yarn을 설치하고 sha3을 추가합니다.
    그리고 그게 다야! node app.js 로 광부를 시작할 준비가 되었습니다. 원한다면 const 난이도에 0을 더 추가하여 난이도를 개선할 수 있습니다.

    MIT 라이선스에 따른 레포: https://github.com/Icesofty/blockchain-demo

    좋은 웹페이지 즐겨찾기