Тестирование блокчейна на локальном хосте - PullRequest
0 голосов
/ 05 мая 2020

все, я старшеклассник, который пытается изучить какой-нибудь блокчейн. И я впервые использую StackOverflow. Когда я пытаюсь выполнить хостинг с помощью терминала и nodemon, терминал сообщает, что «Ошибка [ERR_PACKAGE_PATH_NOT_EXPORTED]: подпуть пакета './v1' не определяется параметром« exports »в / Users / coding / Desktop / blockchain / node_modules / uuid / package . json "и я не знаю, что мне делать. Он говорит, что "v1" не определяется экспортом, и я этого не понимаю. и nodemon сообщает, что приложение [nodemon] разбилось - ожидание изменений файла перед запуском ... это код для всего проекта.

const express = require('express');
const app = express();
const bodyParser =require('body-parser');
const Blockchain = require('./blockchain');
const uuid = require('uuid/v1');

const nodeAddress = uuid().slipt('-').join(''); 

const bitcoin = new Blockchain();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));

app.get('/blockchain', function (req, res) {
    res.send(bitcoin);

});


app.post('/transaction', function(req, res){
    const blockIndex = bitcoin.createNewTransaction(req.body.amount, req.body.sender, req.body.recipient);
    res.json({ note: `Transaction will be added in block ${blockIndex}.`});

});


app.get('/mine', function(req, res){
    const lastBlock = bitcoin.getLastBlock();
    const previousBlockHash = lastBlock['hash'];
    const currentBlockData = {
        transaction: bitcoin.pendingTransactions,
        index: lastBlock['index'] + 1,
    };

    const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
    const blockHash = bitcoin.hashBlock(previousBlockHash,currentBlockData,nonce);

    bitcoin.createNewTransaction(12.5, "00", nodeAddress );


    const newBlock = bitcoin.createNewBlock(nonce, previousBlockHash, blockHash);
    res.json({
        note: "new block mined successfully",
        block: newBlock,
    });
});


app.listen(3000, function(){
    console.log("listening on port 3000....")
})

это страница, на которой создается цепочка блоков

const sha256 = require('sha256');

function Blockchain() {
    this.chain = [];
    this.pendingTransactions = [];
    this.createNewBlock(100, '0', '0');
}

Blockchain.prototype.createNewBlock = function(nonce, previousblockHash, hash){
    const newBlock = {
        index: this.chain.length + 1,
        timestamp: Date.now(),
        transactions: this.pendingTransactions,
        nonce: nonce,
        hash: hash,
        previousblockHash: previousblockHash,
    };
    this.pendingTransactions = [];
    this.chain.push(newBlock);

    return newBlock;
}

Blockchain.prototype.getLastBlock = function() {
    return this.chain[this.chain.length - 1];
}

Blockchain.prototype.createNewTransaction = function( amount, sender,recipient ) {
    const newTransactions = {
        amount: amount,
        sender: sender,
        recipient: recipient,

    };
    this.pendingTransactions.push(newTransactions);

    return this.getLastBlock()['index'] + 1;

}
Blockchain.prototype.hashBlock = function( previousBlockHash, currentBlockData,nonce ){
    const dataAsString = previousBlockHash + nonce.toString() + JSON.stringify(currentBlockData);
    const hash  = sha256(dataAsString);
    return hash;

}
Blockchain.prototype.proofOfWork = function(previousBlockHash, currentBlockData){
    let nonce = 0;
    let hash = this.hashBlock(previousBlockHash,currentBlockData,nonce);
    while (hash.substring(0,4) !== '0000') {
        nonce++;
        hash = this.hashBlock(previousBlockHash,currentBlockData, nonce);

    }
    return nonce;
} 


module.exports = Blockchain;

а это пакет json

{
  "name": "blockchain",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon --watch dev -e js dev/api.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "nodemon": "^2.0.3",
    "sha256": "^0.2.0",
    "uuid": "^8.0.0"
  }
}

1 Ответ

0 голосов
/ 06 мая 2020

Я действительно столкнулся с этой проблемой сегодня, я увидел другой вопрос здесь с возможным решением (попробуйте другую версию узла). Я думаю, вы также хотите изменить свой require () для uuid:
const { v1: uuidv1 } = require('uuid');
UPDATE: Только что протестировано на Node v14.1.0, и я не получил ошибки. Раньше у меня была v13.1.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...