Свойство 'height'
не сохраняется в levelDB.Я использую обещания в первый раз, хотя.Пожалуйста, простите мою невиновность здесь.Я могу понять, почему данные не сохраняются в levelDB.
Вот код для блокчейна:
class Block{
constructor(data){
this.hash = "",
this.height = 0,
this.body = data,
this.time = 0,
this.previousBlockHash = ""
}
}
class Blockchain{
constructor(){
//Get block height from levelDB
levelDB.getDBBlockHeight().then(height => {
//Check if block height is 0
if (height === -1) {
//Create the Genesis Block - The first block in the blockchain
this.addBlock(
new Block('First block in the chain - Genesis block')
).then(() => console.log('Genesis Block created!'))
}
})
}
// Add new block
async addBlock(newBlock){
//Get block height from levelDB
newBlock.height = await parseInt(this.getBlockHeight()) + 1
//Generate block timestamp
newBlock.time = new Date().getTime().toString().slice(0, -3)
//Check if the Block is not Genesis Block
if (newBlock.height > 0) {
//Get the block
const prevBlock = await this.getBlock(newBlock.height)
//Get previous block's hash
newBlock.previousBlockHash = prevBlock.hash
console.log('Previous Hash: ' + newBlock.previousBlockHash)
}
//Generate hash for the new block.
newBlock.hash = SHA256(JSON.stringify(newBlock)).toString()
console.log('New Hash: ' + newBlock.hash)
//Save the block created to levelDB
await levelDB.addDBBlock(newBlock.height, JSON.stringify(newBlock))
}
Код levelDB для сохранения данных с использованием обещаний:
module.exports = {
//Saving blocks to LevelDB
addDBBlock: (key, value) => {
return new Promise((resolve, reject) => {
db.put(key, value, error => {
if (error) reject(error)
resolve('Added block #' + key)
})
})
},
//Getting blockchain height from levelDB
getDBBlockHeight: () => {
return new Promise((resolve, reject) => {
let height = 0
db.createReadStream()
.on('data', data => {
height++
})
.on('error', error => {
reject(error)
})
.on('close', () => {
resolve(height)
})
})
},
Пожалуйста, сообщите, если проблемы с неправильнымструктура обещаний Я ошибаюсь при вводе данных.