mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 01:05:20 +00:00
@@ -78,6 +78,7 @@ class GeohashMessageHandler(
|
|||||||
if (isTeleportPresence) return@launch
|
if (isTeleportPresence) return@launch
|
||||||
|
|
||||||
val senderName = repo.displayNameForNostrPubkeyUI(event.pubkey)
|
val senderName = repo.displayNameForNostrPubkeyUI(event.pubkey)
|
||||||
|
val hasNonce = try { NostrProofOfWork.hasNonce(event) } catch (_: Exception) { false }
|
||||||
val msg = BitchatMessage(
|
val msg = BitchatMessage(
|
||||||
id = event.id,
|
id = event.id,
|
||||||
sender = senderName,
|
sender = senderName,
|
||||||
@@ -88,7 +89,9 @@ class GeohashMessageHandler(
|
|||||||
senderPeerID = "nostr:${event.pubkey.take(8)}",
|
senderPeerID = "nostr:${event.pubkey.take(8)}",
|
||||||
mentions = null,
|
mentions = null,
|
||||||
channel = "#$subscribedGeohash",
|
channel = "#$subscribedGeohash",
|
||||||
powDifficulty = try { NostrProofOfWork.calculateDifficulty(event.id).takeIf { it > 0 } } catch (_: Exception) { null }
|
powDifficulty = try {
|
||||||
|
if (hasNonce) NostrProofOfWork.calculateDifficulty(event.id).takeIf { it > 0 } else null
|
||||||
|
} catch (_: Exception) { null }
|
||||||
)
|
)
|
||||||
withContext(Dispatchers.Main) { messageManager.addChannelMessage("geo:$subscribedGeohash", msg) }
|
withContext(Dispatchers.Main) { messageManager.addChannelMessage("geo:$subscribedGeohash", msg) }
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|||||||
@@ -54,6 +54,12 @@ object NostrProofOfWork {
|
|||||||
fun validateDifficulty(event: NostrEvent, minimumDifficulty: Int): Boolean {
|
fun validateDifficulty(event: NostrEvent, minimumDifficulty: Int): Boolean {
|
||||||
if (minimumDifficulty <= 0) return true
|
if (minimumDifficulty <= 0) return true
|
||||||
|
|
||||||
|
// Require explicit nonce tag to recognize PoW per NIP-13 intent
|
||||||
|
if (!hasNonce(event)) {
|
||||||
|
Log.w(TAG, "Event ${event.id.take(16)}... missing nonce tag; treating as no PoW")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
val actualDifficulty = calculateDifficulty(event.id)
|
val actualDifficulty = calculateDifficulty(event.id)
|
||||||
val committedDifficulty = getCommittedDifficulty(event)
|
val committedDifficulty = getCommittedDifficulty(event)
|
||||||
|
|
||||||
|
|||||||
@@ -99,14 +99,22 @@ class GeohashViewModel(
|
|||||||
powDifficulty = if (pow.enabled) pow.difficulty else null
|
powDifficulty = if (pow.enabled) pow.difficulty else null
|
||||||
)
|
)
|
||||||
messageManager.addChannelMessage("geo:${channel.geohash}", localMsg)
|
messageManager.addChannelMessage("geo:${channel.geohash}", localMsg)
|
||||||
if (pow.enabled && pow.difficulty > 0) {
|
val startedMining = pow.enabled && pow.difficulty > 0
|
||||||
|
if (startedMining) {
|
||||||
com.bitchat.android.ui.PoWMiningTracker.startMiningMessage(tempId)
|
com.bitchat.android.ui.PoWMiningTracker.startMiningMessage(tempId)
|
||||||
}
|
}
|
||||||
val identity = NostrIdentityBridge.deriveIdentity(forGeohash = channel.geohash, context = getApplication())
|
try {
|
||||||
val teleported = state.isTeleported.value ?: false
|
val identity = NostrIdentityBridge.deriveIdentity(forGeohash = channel.geohash, context = getApplication())
|
||||||
val event = NostrProtocol.createEphemeralGeohashEvent(content, channel.geohash, identity, nickname, teleported)
|
val teleported = state.isTeleported.value ?: false
|
||||||
val relayManager = NostrRelayManager.getInstance(getApplication())
|
val event = NostrProtocol.createEphemeralGeohashEvent(content, channel.geohash, identity, nickname, teleported)
|
||||||
relayManager.sendEventToGeohash(event, channel.geohash, includeDefaults = false, nRelays = 5)
|
val relayManager = NostrRelayManager.getInstance(getApplication())
|
||||||
|
relayManager.sendEventToGeohash(event, channel.geohash, includeDefaults = false, nRelays = 5)
|
||||||
|
} finally {
|
||||||
|
// Ensure we stop the per-message mining animation regardless of success/failure
|
||||||
|
if (startedMining) {
|
||||||
|
com.bitchat.android.ui.PoWMiningTracker.stopMiningMessage(tempId)
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Failed to send geohash message: ${e.message}")
|
Log.e(TAG, "Failed to send geohash message: ${e.message}")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user