from e2e.Classes.Consensus.SpamFilter import SpamFilter from e2e.Vectors.Generation.PrototypeChain import PrototypeChain proto: PrototypeChain = PrototypeChain(1, False) blsPrivKey: PrivateKey = PrivateKey(0) blsPubKey: PublicKey = blsPrivKey.toPublicKey() edPrivKey: ed25519.SigningKey = ed25519.SigningKey(b'\0' * 32) edPubKey: ed25519.VerifyingKey = edPrivKey.get_verifying_key() #Create the SendDifficulty MR. sendDiff: SignedSendDifficulty = SignedSendDifficulty(4, 0) sendDiff.sign(0, blsPrivKey) sendDiffMR: SignedMeritRemoval = SignedMeritRemoval(sendDiff, sendDiff) #Create the DataDifficulty MR. dataDiff: SignedDataDifficulty = SignedDataDifficulty(4, 0) dataDiff.sign(0, blsPrivKey) dataDiffMR: SignedMeritRemoval = SignedMeritRemoval(dataDiff, dataDiff) #Create the Verification MR. data: Data = Data(bytes(32), edPubKey.to_bytes()) data.sign(edPrivKey) data.beat(SpamFilter(5)) verif: SignedVerification = SignedVerification(data.hash) verif.sign(0, blsPrivKey) #Transform the Verification to a SignedMeritRemovalVerificationPacket. packet: SignedMeritRemovalVerificationPacket = SignedMeritRemovalVerificationPacket(
from e2e.Classes.Consensus.MeritRemoval import SignedMeritRemoval from e2e.Vectors.Generation.PrototypeChain import PrototypeChain blsPrivKey: PrivateKey = PrivateKey(0) blsPubKey: PublicKey = blsPrivKey.toPublicKey() proto: PrototypeChain = PrototypeChain(1, False) #Create conflicting Data Difficulties. dataDiffs: List[SignedDataDifficulty] = [ SignedDataDifficulty(3, 0), SignedDataDifficulty(4, 0) ] dataDiffs[0].sign(0, blsPrivKey) dataDiffs[1].sign(0, blsPrivKey) #Create a MeritRemoval out of the conflicting Data Difficulties. mr: SignedMeritRemoval = SignedMeritRemoval(dataDiffs[0], dataDiffs[1]) proto.add(elements=[mr]) #Create a MeritRemoval with the Elements swapped. swapped: SignedMeritRemoval = SignedMeritRemoval(dataDiffs[1], dataDiffs[0]) proto.add(elements=[swapped]) result: Dict[str, Any] = {"blockchain": proto.toJSON()} vectors: IO[Any] = open( "e2e/Vectors/Consensus/MeritRemoval/HundredTwentyThree/Swap.json", "w") vectors.write(json.dumps(result)) vectors.close()
#Create the initial Data and two competing Datas. datas: List[Data] = [Data(bytes(32), edPubKey.to_bytes())] datas.append(Data(datas[0].hash, b"Initial Data.")) datas.append(Data(datas[0].hash, b"Second Data.")) for data in datas: data.sign(edPrivKey) data.beat(spamFilter) #Create Verifications for all 3. verifs: List[SignedVerification] = [] for data in datas: verifs.append(SignedVerification(data.hash, 0)) verifs[-1].sign(0, blsPrivKey) #Create a MeritRemoval out of the conflicting Verifications. mr: SignedMeritRemoval = SignedMeritRemoval(verifs[1], verifs[2]) #Create a MeritRemoval with random keys. packeted: SignedMeritRemoval = SignedMeritRemoval( SignedMeritRemovalVerificationPacket( SignedVerificationPacket(verifs[1].hash), [ blsPubKey.serialize(), PrivateKey(1).toPublicKey().serialize(), PrivateKey(2).toPublicKey().serialize() ], Signature.aggregate([ blsPrivKey.sign(verifs[1].signatureSerialize()), PrivateKey(1).sign(verifs[1].signatureSerialize()), PrivateKey(2).sign(verifs[1].signatureSerialize()) ])
data: Data = Data(bytes.fromhex("11" * 32), bytes(1)) transactions.add(data) #Create a competing Data using the same input. competingData: Data = Data(bytes.fromhex("11" * 32), bytes(2)) transactions.add(competingData) #Verify the Datas. verif: SignedVerification = SignedVerification(data.hash) verif.sign(0, blsPrivKey) competingVerif: SignedVerification = SignedVerification(competingData.hash) competingVerif.sign(0, blsPrivKey) #Create a MeritRemoval out of the conflicting Verifications. mr: SignedMeritRemoval = SignedMeritRemoval(verif, competingVerif) #Generate a Block containing the MeritRemoval. block = Block( BlockHeader(0, blockchain.last(), BlockHeader.createContents([], [mr]), 1, bytes(4), BlockHeader.createSketchCheck(bytes(4), []), 0, blockchain.blocks[-1].header.time + 1200), BlockBody([], [mr], mr.signature)) #Mine it. block.mine(blsPrivKey, blockchain.difficulty()) #Add it. blockchain.add(block) print("Generated Invalid Competing Block " + str(len(blockchain.blocks)) + ".") result: Dict[str, Any] = {
bytes(4), bytes(32), 0, blockchain.blocks[-1].header.time + 1200 ), BlockBody([], [partial], partial.signature) ) #Mine it. block.mine(blsPrivKey, blockchain.difficulty()) #Add it. blockchain.add(block) print("Generated Hundred Twenty Three Partial Block " + str(len(blockchain.blocks)) + ".") #Create a MeritRemoval which isn't partial. mr: SignedMeritRemoval = SignedMeritRemoval(dataDiffs[0], dataDiffs[1]) #Generate a Block containing the MeritRemoval. block = Block( BlockHeader( 0, blockchain.last(), BlockHeader.createContents([], [mr]), 1, bytes(4), bytes(32), 0, blockchain.blocks[-1].header.time + 1200 ), BlockBody([], [mr], mr.signature) )
datas.append(Data(datas[0].hash, b"Initial Data.")) datas.append(Data(datas[0].hash, b"Second Data.")) for data in datas: data.sign(edPrivKey) data.beat(spamFilter) #Create Verifications for all 3. verifs: List[SignedVerification] = [] packets: List[VerificationPacket] = [] for data in datas: verifs.append(SignedVerification(data.hash, 0)) verifs[-1].sign(0, blsPrivKey) packets.append(VerificationPacket(data.hash, [0])) #Create a MeritRemoval out of the conflicting Verifications. mr: SignedMeritRemoval = SignedMeritRemoval(verifs[1], verifs[2]) #Generate a Block containing the MeritRemoval. proto.add(packets=packets, elements=[mr]) result: Dict[str, Any] = { "blockchain": proto.toJSON(), "datas": [datas[0].toJSON(), datas[1].toJSON(), datas[2].toJSON()], "verification": verifs[0].toSignedJSON(), "removal": mr.toSignedJSON() } vectors: IO[Any] = open( "e2e/Vectors/Consensus/MeritRemoval/VerifyCompeting.json", "w") vectors.write(json.dumps(result)) vectors.close()
#Create the initial Data and two competing Datas. datas: List[Data] = [Data(bytes(32), edPubKey.to_bytes())] datas.append(Data(datas[0].hash, b"Initial Data.")) datas.append(Data(datas[0].hash, b"Second Data.")) for data in datas: data.sign(edPrivKey) data.beat(spamFilter) #Create Verifications for all 3. verifs: List[SignedVerification] = [] for data in datas: verifs.append(SignedVerification(data.hash, 0)) verifs[-1].sign(0, blsPrivKey) #Create a MeritRemoval out of the conflicting Verifications. mr: SignedMeritRemoval = SignedMeritRemoval(verifs[1], verifs[2]) #Create a MeritRemoval with random keys. packeted: SignedMeritRemoval = SignedMeritRemoval( SignedMeritRemovalVerificationPacket( SignedVerificationPacket(verifs[1].hash), [ blsPubKey.serialize(), PrivateKey(blake2b( b'\1', digest_size=32).digest()).toPublicKey().serialize(), PrivateKey(blake2b( b'\2', digest_size=32).digest()).toPublicKey().serialize() ], Signature.aggregate([ blsPrivKey.sign(verifs[1].signatureSerialize()), PrivateKey(blake2b(b'\1', digest_size=32).digest()).sign( verifs[1].signatureSerialize()),
block.mine(blsPrivKey, blockchain.difficulty()) #Add it. blockchain.add(block) print("Generated Same Nonce Block " + str(len(blockchain.blocks)) + ".") #Create a DataDifficulty. dataDiff: SignedDataDifficulty = SignedDataDifficulty(3, 0) dataDiff.sign(0, blsPrivKey) #Create a conflicting DataDifficulty with the same nonce. dataDiffConflicting = SignedDataDifficulty(1, 0) dataDiffConflicting.sign(0, blsPrivKey) #Create a MeritRemoval out of the two of them. mr: SignedMeritRemoval = SignedMeritRemoval(dataDiff, dataDiffConflicting) #Generate a Block containing the MeritRemoval. block = Block( BlockHeader(0, blockchain.last(), BlockHeader.createContents([], [mr]), 1, bytes(4), bytes(32), 0, blockchain.blocks[-1].header.time + 1200), BlockBody([], [mr], mr.signature)) #Mine it. block.mine(blsPrivKey, blockchain.difficulty()) #Add it. blockchain.add(block) print("Generated Same Nonce Block " + str(len(blockchain.blocks)) + ".") result: Dict[str, Any] = {
[ PrivateKey(blake2b(b'\1', digest_size=32).digest()).toPublicKey().serialize() ], PrivateKey(blake2b(b'\1', digest_size=32).digest()).sign(verifs[1].signatureSerialize()) ), SignedMeritRemovalVerificationPacket( SignedVerificationPacket(verifs[1].hash), [ PrivateKey(blake2b(b'\1', digest_size=32).digest()).toPublicKey().serialize() ], PrivateKey(blake2b(b'\1', digest_size=32).digest()).sign(verifs[1].signatureSerialize()) ) ] #Create a MeritRemoval out of the conflicting Verifications. e1MR: SignedMeritRemoval = SignedMeritRemoval(verifs[1], packets[0], 0) e2MR: SignedMeritRemoval = SignedMeritRemoval(packets[1], verifs[2], 0) #Generate a Block containing the MeritRemoval for each chain. block = Block( BlockHeader( 0, e1Chain.last(), BlockHeader.createContents([], [e1MR]), 1, bytes(4), bytes(32), 0, e1Chain.blocks[-1].header.time + 1200 ), BlockBody([], [e1MR], e1MR.signature)