Add blockchain sync between nodes

This commit is contained in:
Victor Bodinaud
2024-11-30 11:49:31 +01:00
parent 3884a2a0ca
commit 6d0777930d
4 changed files with 249 additions and 2 deletions

View File

@@ -116,4 +116,62 @@ class Blockchain {
}
return true
}
func validateChain(_ newChain: [Block]) -> Bool {
// Vérifier que la chaîne commence par notre genesis block
guard newChain.first?.hash == chain.first?.hash else {
print("Genesis block mismatch")
return false
}
// Vérifier chaque bloc
for i in 1..<newChain.count {
let block = newChain[i]
let previousBlock = newChain[i-1]
// Vérifier le chaînage
if block.previousHash != previousBlock.hash {
print("Invalid chain at block \(i): incorrect previous hash")
return false
}
// Vérifier la validité du bloc
if !block.isValid() {
print("Invalid chain at block \(i): invalid block hash")
return false
}
}
return true
}
func replaceChain(_ newChain: [Block]) -> Bool {
// Vérifier que la nouvelle chaîne est plus longue
guard newChain.count > chain.count else {
print("Received chain is not longer than current chain")
return false
}
// Vérifier la validité de la nouvelle chaîne
guard validateChain(newChain) else {
print("Received chain is invalid")
return false
}
// Sauvegarder l'ancienne chaîne au cas où
let oldChain = chain
// Essayer de traiter tous les blocs
for block in newChain {
if !accountManager.processBlock(block) {
print("Failed to process transactions in block \(block.index)")
chain = oldChain
return false
}
}
chain = newChain
print("Chain replaced successfully")
return true
}
}