mirror of
https://github.com/pezkuwichain/pezkuwi-wallet-android.git
synced 2026-06-17 06:41:07 +00:00
feat: Add bizinikiwi signing context for Pezkuwi ecosystem
Pezkuwi chains use "bizinikiwi" signing context instead of standard "substrate" context used by Polkadot ecosystem. This was causing "bad signature" errors on HEZ transfers. Changes: - Add sr25519-bizinikiwi native Rust binding with bizinikiwi context - Add isPezkuwiChain extension to detect Pezkuwi ecosystem chains - Add PezkuwiKeyPairSigner for signing with bizinikiwi context - Modify SecretsSigner to use correct context based on chain: - Pezkuwi chains (3) -> BizinikiwSr25519 (bizinikiwi) - Other chains (98+) -> KeyPairSigner (substrate) - Add live transfer test for Pezkuwi mainnet Tested with successful HEZ transfer on Pezkuwi mainnet: TX: 0xe25a4eaaeaa04122cca130582dba3cacb2280dea5d908924b45757ea67c27996
This commit is contained in:
@@ -645,3 +645,16 @@ fun SignatureVerifier.verifyMultiChain(
|
||||
verify(signature, Signer.MessageHashing.SUBSTRATE, message, publicKey)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this chain is part of the Pezkuwi ecosystem.
|
||||
* Pezkuwi chains use "bizinikiwi" signing context instead of "substrate".
|
||||
*/
|
||||
val Chain.isPezkuwiChain: Boolean
|
||||
get() = id in PEZKUWI_CHAIN_IDS
|
||||
|
||||
private val PEZKUWI_CHAIN_IDS = setOf(
|
||||
ChainGeneses.PEZKUWI,
|
||||
ChainGeneses.PEZKUWI_ASSET_HUB,
|
||||
ChainGeneses.PEZKUWI_PEOPLE
|
||||
)
|
||||
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
package io.novafoundation.nova.runtime.extrinsic.signer
|
||||
|
||||
import io.novafoundation.nova.sr25519.BizinikiwSr25519
|
||||
import io.novasama.substrate_sdk_android.encrypt.SignatureWrapper
|
||||
import io.novasama.substrate_sdk_android.encrypt.keypair.Keypair
|
||||
import io.novasama.substrate_sdk_android.runtime.AccountId
|
||||
import io.novasama.substrate_sdk_android.runtime.extrinsic.signer.SignedRaw
|
||||
import io.novasama.substrate_sdk_android.runtime.extrinsic.signer.SignerPayloadRaw
|
||||
import io.novasama.substrate_sdk_android.runtime.extrinsic.v5.transactionExtension.InheritedImplication
|
||||
import io.novasama.substrate_sdk_android.runtime.extrinsic.v5.transactionExtension.extensions.verifySignature.GeneralTransactionSigner
|
||||
import io.novasama.substrate_sdk_android.runtime.extrinsic.v5.transactionExtension.signingPayload
|
||||
|
||||
/**
|
||||
* SR25519 signer for Pezkuwi chains using "bizinikiwi" signing context.
|
||||
*
|
||||
* This signer is used instead of the standard KeyPairSigner for Pezkuwi ecosystem chains
|
||||
* (Pezkuwi, Pezkuwi Asset Hub, Pezkuwi People) which require signatures with "bizinikiwi"
|
||||
* context instead of the standard "substrate" context used by Polkadot ecosystem chains.
|
||||
*/
|
||||
class PezkuwiKeyPairSigner(
|
||||
private val keypair: Keypair
|
||||
) : GeneralTransactionSigner {
|
||||
|
||||
override suspend fun signInheritedImplication(
|
||||
inheritedImplication: InheritedImplication,
|
||||
accountId: AccountId
|
||||
): SignatureWrapper {
|
||||
val payload = inheritedImplication.signingPayload()
|
||||
|
||||
// Use BizinikiwSr25519 native library with "bizinikiwi" signing context
|
||||
val signature = BizinikiwSr25519.sign(
|
||||
publicKey = keypair.publicKey,
|
||||
secretKey = keypair.privateKey,
|
||||
message = payload
|
||||
)
|
||||
|
||||
return SignatureWrapper.Sr25519(signature)
|
||||
}
|
||||
|
||||
suspend fun signRaw(payload: SignerPayloadRaw): SignedRaw {
|
||||
// Use BizinikiwSr25519 native library with "bizinikiwi" signing context
|
||||
val signature = BizinikiwSr25519.sign(
|
||||
publicKey = keypair.publicKey,
|
||||
secretKey = keypair.privateKey,
|
||||
message = payload.message
|
||||
)
|
||||
|
||||
return SignedRaw(payload, SignatureWrapper.Sr25519(signature))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user