Вы не добавляете блок в блокчейн через API, вы делаете запрос к конечной точке API, и блокчейн MINE блокирует. Я имею в виду, что вы не отправляете никаких данных. Для добавления чего-либо вы делаете запрос «POST», но в этом случае вы делаете запрос get к конечной точке.
Я думаю, что ваш подход неверен. Потому что вы определяете класс BLOCK и класс BLOCKCHAIN. Это разные классы, однако майнинг - это метод внутри блокчейна. Поскольку каждый экземпляр класса Blockchain будет иметь этот метод, лучше указывать его в porototype.
Blockchain.prototype.createNewBlock=function(){}
Думайте Blockchain как блокнот с неограниченным количеством страниц. Все страницы имеют одинаковый размер, и вы записываете транзакции внутри страниц. Заполнив страницу, вы должны надежно подписать ее, прежде чем перейти на следующую пустую страницу. Эта подпись называется ha sh. Вы берете последний блок ha sh, транзакции внутри страницы и одноразовый номер этой страницы, который является доказательством работы, и вы помещаете внутрь функцию sha256, чтобы создать шестнадцатеричные 64 символа ha sh. Поскольку вы надежно подписали страницу, вам нужно написать для этой страницы метку с такими свойствами: index, nonce, previousBlockHa sh, currentHa sh, отметка времени и транзакции. как только это будет сделано, вы можете добавить это в цепочку, поэтому у вас должно быть свойство внутри класса Blockchain для отслеживания блоков.
this.chain = [];//everytime you create a new block, you push them here
У вас должен быть массив транзакций внутри вашей цепочки блоков.
this.pendingTransactions = [];
Затем, когда вы создаете новые транзакции, вы должны заполнить этот массив новой транзакцией. вам также нужно создать метод-прототип для создания транзакций.
создание метода Block:
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
};
//after a block is hashed, we cleared up the pendingTransactions[] for the new block
this.pendingTransactions = [];
this.chain.push(newBlock);
return newBlock;
};
после того, как вы создали блок, вам нужно создать конечную точку для MINE блок.
app.get("/mine", (req, res) => {
const lastBlock = blockchain.getLastBlock();// this.chain[this.chain.length - 1]
const previousBlockHash = lastBlock["hash"];
const currentBlockData = {
transactions: blockchain.pendingTransactions,
index: lastBlock["index"] + 1
};
const nonce = blockchain.proofOfWork(previousBlockHash, currentBlockData);//based on your algorithm find the nonce
const blockHash = blockchain.hashBlock(
previousBlockHash,
currentBlockData,
nonce
);
blockchain.createNewTransaction(6.25, "00", "address of the miner");// you need to reward the miner so create a new transaction
const newBlock = blockchain.createNewBlock(nonce, previousBlockHash, blockHash);
res.send({ note: "NEW BLOCK IS CREATED", blocks: newBlock });
});