Skip to content

Commit df564fc

Browse files
committed
feat(opencode): support receiving MintMetadata context from server when grabbing bills
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 17a0e9c commit df564fc

5 files changed

Lines changed: 30 additions & 12 deletions

File tree

services/opencode/src/main/kotlin/com/getcode/opencode/ControllerFactory.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import com.getcode.opencode.controllers.MessagingController
77
import com.getcode.opencode.controllers.TokenController
88
import com.getcode.opencode.controllers.TransactionController
99
import com.getcode.opencode.inject.OpenCodeModule
10-
import com.getcode.util.locale.AndroidLocale
1110
import dagger.hilt.android.EntryPointAccessors
1211

1312
object ControllerFactory {

services/opencode/src/main/kotlin/com/getcode/opencode/controllers/MessagingController.kt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.getcode.opencode.controllers
22

33
import com.codeinc.opencode.gen.messaging.v1.MessagingService
4-
import com.codeinc.opencode.gen.messaging.v1.exchangeDataOrNull
5-
import com.codeinc.opencode.gen.transaction.v1.TransactionService
6-
import com.codeinc.opencode.gen.transaction.v1.exchangeData
74
import com.getcode.ed25519.Ed25519.KeyPair
5+
import com.getcode.opencode.internal.domain.mapping.BillCustomizationMapper
6+
import com.getcode.opencode.internal.domain.mapping.LaunchpadMetadataMapper
7+
import com.getcode.opencode.internal.domain.mapping.MintMapper
8+
import com.getcode.opencode.internal.domain.mapping.SocialLinkMapper
9+
import com.getcode.opencode.internal.domain.mapping.VmMetadataMapper
810
import com.getcode.opencode.internal.extensions.toPublicKey
9-
import com.getcode.opencode.internal.manager.VerifiedState
1011
import com.getcode.opencode.internal.network.extensions.asProtobufExchangeData
1112
import com.getcode.opencode.internal.network.extensions.asSolanaAccountId
1213
import com.getcode.opencode.internal.network.extensions.toMint
@@ -43,6 +44,13 @@ class MessagingController @Inject constructor(
4344
// Thread-safe streamReference management
4445
private val streamReferenceMutex = Mutex()
4546

47+
private val mintMapper = MintMapper(
48+
vmMetadataMapper = VmMetadataMapper(),
49+
launchpadMetadataMapper = LaunchpadMetadataMapper(),
50+
socialLinkMapper = SocialLinkMapper(),
51+
customizationMapper = BillCustomizationMapper(),
52+
)
53+
4654
suspend fun awaitRequestToGrabBill(
4755
scope: CoroutineScope,
4856
rendezvous: KeyPair,
@@ -167,11 +175,13 @@ class MessagingController @Inject constructor(
167175
val message = messages.firstOrNull() ?: throw IllegalStateException("No message found")
168176
val mint = message.requestToGiveBill.mint.toMint()
169177
val exchangeData = message.requestToGiveBill.exchangeData.toModel()
178+
val token = message.additionalContext.requestToGiveBill.mintMetadata
170179

171180
GiveRequest(
172181
messageId = message.id.toPublicKey(),
173182
mint = mint,
174-
exchangeData = exchangeData
183+
exchangeData = exchangeData,
184+
tokenMetadata = mintMapper.map(token)
175185
)
176186
}
177187
}

services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.getcode.opencode.internal.transactors
33
import com.getcode.opencode.controllers.AccountController
44
import com.getcode.opencode.controllers.MessagingController
55
import com.getcode.opencode.controllers.TransactionController
6+
import com.getcode.opencode.internal.domain.mapping.MintMapper
67
import com.getcode.opencode.internal.extensions.toPublicKey
78
import com.getcode.opencode.model.accounts.AccountCluster
89
import com.getcode.opencode.model.core.OpenCodePayload
@@ -90,14 +91,15 @@ internal class GrabBillTransactor(
9091
data: OpenCodePayload
9192
): Result<TransactionMetadata.SendPublicPayment> {
9293
// 1. Wait for the give request from the sender so we can determine what mint we are operating on
93-
val (messageId, giveRequestMint, exchangeData) = messagingController.pollForGiveRequest(data.rendezvous)
94+
val (messageId, giveRequestMint, exchangeData, mintMetadata) = messagingController.pollForGiveRequest(data.rendezvous)
9495
.getOrNull()
9596
?: return logAndFail(GrabTransactorError.Other(message = "No give request found for rendezvous"))
9697

9798
// 2. Utilize the mint from the give request to get the Token metadata
98-
val token = tokenProvider.getTokenMetadata(giveRequestMint)
99-
.getOrNull()?.token
100-
?: return logAndFail(GrabTransactorError.Other(message = "No token found for proposed mint"))
99+
val token = mintMetadata
100+
?: (tokenProvider.getTokenMetadata(giveRequestMint)
101+
.getOrNull()?.token
102+
?: return logAndFail(GrabTransactorError.Other(message = "No token found for proposed mint")))
101103

102104
val tokenizedCluster = ownerKey.withTimelockForToken(token)
103105

services/opencode/src/main/kotlin/com/getcode/opencode/managers/BillTransactionManager.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.getcode.opencode.controllers.AccountController
44
import com.getcode.opencode.controllers.CurrencyController
55
import com.getcode.opencode.controllers.MessagingController
66
import com.getcode.opencode.controllers.TransactionController
7+
import com.getcode.opencode.internal.domain.mapping.MintMapper
78
import com.getcode.opencode.internal.manager.VerifiedProtoManager
89
import com.getcode.opencode.internal.manager.VerifiedState
910
import com.getcode.opencode.internal.transactors.GiveBillTransactor
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package com.getcode.opencode.model.transactions
22

3+
import com.getcode.opencode.model.financial.MintMetadata
34
import com.getcode.solana.keys.Mint
45
import com.getcode.solana.keys.PublicKey
56
import com.getcode.solana.keys.Signature
67

78
sealed interface TransferRequest
8-
data class GrabRequest(val account: PublicKey, val signature: Signature): TransferRequest
9-
data class GiveRequest(val messageId: PublicKey, val mint: Mint, val exchangeData: ExchangeData.Verified): TransferRequest
9+
data class GrabRequest(val account: PublicKey, val signature: Signature) : TransferRequest
10+
data class GiveRequest(
11+
val messageId: PublicKey,
12+
val mint: Mint,
13+
val exchangeData: ExchangeData.Verified,
14+
val tokenMetadata: MintMetadata?
15+
) : TransferRequest

0 commit comments

Comments
 (0)