From 837ca9b4687b14bb0cf2fac23ac497f09a2217f5 Mon Sep 17 00:00:00 2001 From: BernatCarbo Date: Tue, 1 Jun 2021 15:40:04 +0200 Subject: [PATCH 1/3] Btc subfamily alt with different hashing --- .../alt/plugins/bitcoin/BitcoinFamilyChain.kt | 8 ++-- .../bitcoin/PlaceholdersFamilyChain.kt | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PlaceholdersFamilyChain.kt diff --git a/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt index 287551078..567d45adf 100644 --- a/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt +++ b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt @@ -48,7 +48,7 @@ private val logger = createLogger {} private const val NOT_FOUND_ERROR_CODE = -5 @PluginSpec(name = "BitcoinFamily", key = "btc") -class BitcoinFamilyChain( +open class BitcoinFamilyChain( override val key: String, configuration: PluginConfig ) : HttpSecurityInheritingChain { @@ -90,12 +90,12 @@ class BitcoinFamilyChain( checkNotNull(config.payoutAddress) { "$name's payoutAddress ($key.payoutAddress) must be configured!" } - if (config.payoutAddress.isEmpty() || config.payoutAddress == "INSERT PAYOUT ADDRESS") { + if (config.payoutAddress!!.isEmpty() || config.payoutAddress == "INSERT PAYOUT ADDRESS") { error( "'${config.payoutAddress}' is not a valid value for the $name's payoutAddress configuration ($key.payoutAddress). Please set up a valid payout address" ) } - payoutAddress = config.payoutAddress + payoutAddress = config.payoutAddress!! } override suspend fun getBestBlockHeight(): Int { @@ -292,7 +292,7 @@ class BitcoinFamilyChain( val witnessProgram = ByteArray(addressData.size - 2) addressData.copyInto(witnessProgram, 0,2, addressData.size) try { - segwitToBech32(config.addressPrefix,0, witnessProgram) + segwitToBech32(config.addressPrefix!!,0, witnessProgram) } catch (exception: Exception) { throw IllegalArgumentException("Can't extract the Bech32 address from the address data: ${addressData.toHex()}", exception) } diff --git a/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PlaceholdersFamilyChain.kt b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PlaceholdersFamilyChain.kt new file mode 100644 index 000000000..860aa889f --- /dev/null +++ b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PlaceholdersFamilyChain.kt @@ -0,0 +1,38 @@ +// VeriBlock Blockchain Project +// Copyright 2017-2018 VeriBlock, Inc +// Copyright 2018-2021 Xenios SEZC +// All rights reserved. +// https://www.veriblock.org +// Distributed under the MIT software license, see the accompanying +// file LICENSE or http://www.opensource.org/licenses/mit-license.php. + +package org.veriblock.alt.plugins.bitcoin + +import org.veriblock.core.altchain.AltchainPoPEndorsement +import org.veriblock.core.contracts.BlockEvidence +import org.veriblock.core.crypto.* +import org.veriblock.core.utilities.SerializerUtility +import org.veriblock.core.utilities.extensions.flip +import org.veriblock.sdk.alt.plugin.PluginConfig +import org.veriblock.sdk.alt.plugin.PluginSpec +import java.nio.ByteBuffer + +@PluginSpec(name = "PlaceholdersFamily", key = "phl") +class PlaceholdersFamilyChain( + override val key: String, + configuration: PluginConfig +) : BitcoinFamilyChain(key, configuration) { + + private val crypto = Crypto() + + override fun extractBlockEvidence(altchainPopEndorsement: AltchainPoPEndorsement): BlockEvidence { + val hash = crypto.SHA256D(altchainPopEndorsement.getHeader()).flip() + val previousHash = altchainPopEndorsement.getHeader().copyOfRange(4, 36).flip() + val contextBuffer = ByteBuffer.wrap(altchainPopEndorsement.getContextInfo()) + val height = contextBuffer.getInt() + val previousKeystone = SerializerUtility.readSingleByteLenValue(contextBuffer, 8, 64).flip() + val secondPreviousKeystone = SerializerUtility.readSingleByteLenValue(contextBuffer, 8, 64).flip() + + return BlockEvidence(height, hash, previousHash, previousKeystone, secondPreviousKeystone) + } +} From 8b1b29e8cb89f3d79d5ba3ec21361019cdb15404 Mon Sep 17 00:00:00 2001 From: BernatCarbo Date: Tue, 1 Jun 2021 20:36:16 +0200 Subject: [PATCH 2/3] typo --- .../{PlaceholdersFamilyChain.kt => PexaFamilyChain.kt} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/{PlaceholdersFamilyChain.kt => PexaFamilyChain.kt} (94%) diff --git a/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PlaceholdersFamilyChain.kt b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PexaFamilyChain.kt similarity index 94% rename from altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PlaceholdersFamilyChain.kt rename to altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PexaFamilyChain.kt index 860aa889f..662086ee4 100644 --- a/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PlaceholdersFamilyChain.kt +++ b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/PexaFamilyChain.kt @@ -17,8 +17,8 @@ import org.veriblock.sdk.alt.plugin.PluginConfig import org.veriblock.sdk.alt.plugin.PluginSpec import java.nio.ByteBuffer -@PluginSpec(name = "PlaceholdersFamily", key = "phl") -class PlaceholdersFamilyChain( +@PluginSpec(name = "PexaFamily", key = "phx") +class PexaFamilyChain( override val key: String, configuration: PluginConfig ) : BitcoinFamilyChain(key, configuration) { From a12df1b2e4657569453391e4709215c4bbb935ab Mon Sep 17 00:00:00 2001 From: BernatCarbo Date: Wed, 2 Jun 2021 15:15:10 +0200 Subject: [PATCH 3/3] fix build --- .../org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt index 65e0d8109..29fd1ea0a 100644 --- a/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt +++ b/altchain-plugins/src/main/kotlin/org/veriblock/alt/plugins/bitcoin/BitcoinFamilyChain.kt @@ -387,12 +387,12 @@ open class BitcoinFamilyChain( checkNotNull(config.payoutAddress) { "$name's payoutAddress ($key.payoutAddress) must be configured!" } - if (config.payoutAddress.isEmpty() || config.payoutAddress == "INSERT PAYOUT ADDRESS") { + if (config.payoutAddress?.isEmpty() == true || config.payoutAddress == "INSERT PAYOUT ADDRESS") { error( "'${config.payoutAddress}' is not a valid value for the $name's payoutAddress configuration ($key.payoutAddress). Please set up a valid payout address" ) } - payoutAddress = config.payoutAddress + payoutAddress = config.payoutAddress!! } private suspend fun validateAddress(address: String): ByteArray {