11import { Effect , Equal , ParseResult } from "effect"
22
3+ import * as CoreAddress from "../../core/Address.js"
34import * as KeyHash from "../../core/KeyHash.js"
45import * as PrivateKey from "../../core/PrivateKey.js"
56import * as Transaction from "../../core/Transaction.js"
@@ -9,7 +10,6 @@ import * as CoreUTxO from "../../core/UTxO.js"
910import * as VKey from "../../core/VKey.js"
1011import { runEffectPromise } from "../../utils/effect-runtime.js"
1112import { hashTransaction } from "../../utils/Hash.js"
12- import type * as Address from "../Address.js"
1313import {
1414 makeTxBuilder ,
1515 type ReadOnlyTransactionBuilder ,
@@ -114,13 +114,14 @@ const createReadOnlyWallet = (
114114 address : string ,
115115 rewardAddress ?: string
116116) : WalletNew . ReadOnlyWallet => {
117+ const coreAddress = CoreAddress . fromBech32 ( address )
117118 const walletEffect : WalletNew . ReadOnlyWalletEffect = {
118- address : ( ) => Effect . succeed ( address ) ,
119+ address : ( ) => Effect . succeed ( coreAddress ) ,
119120 rewardAddress : ( ) => Effect . succeed ( rewardAddress ?? null )
120121 }
121122
122123 return {
123- address : ( ) => Promise . resolve ( address ) ,
124+ address : ( ) => Promise . resolve ( coreAddress ) ,
124125 rewardAddress : ( ) => Promise . resolve ( rewardAddress ?? null ) ,
125126 Effect : walletEffect ,
126127 type : "read-only"
@@ -167,12 +168,14 @@ const createReadOnlyClient = (
167168 const provider = createProvider ( providerConfig )
168169 const walletNetwork = toWalletNetwork ( network )
169170 const wallet = createReadOnlyWallet ( walletNetwork , walletConfig . address , walletConfig . rewardAddress )
171+ // Parse the bech32 address to Core Address for provider calls
172+ const coreAddress = CoreAddress . fromBech32 ( walletConfig . address )
170173
171174 const result = {
172175 ...provider ,
173176 address : wallet . address ,
174177 rewardAddress : wallet . rewardAddress ,
175- getWalletUtxos : ( ) => provider . getUtxos ( walletConfig . address ) ,
178+ getWalletUtxos : ( ) => provider . getUtxos ( coreAddress ) ,
176179 getWalletDelegation : async ( ) => {
177180 const rewardAddr = walletConfig . rewardAddress
178181 if ( ! rewardAddr ) throw new Error ( "No reward address configured" )
@@ -187,7 +190,7 @@ const createReadOnlyClient = (
187190 Effect : {
188191 ...provider . Effect ,
189192 ...wallet . Effect ,
190- getWalletUtxos : ( ) => provider . Effect . getUtxos ( walletConfig . address ) ,
193+ getWalletUtxos : ( ) => provider . Effect . getUtxos ( coreAddress ) ,
191194 getWalletDelegation : ( ) => {
192195 const rewardAddr = walletConfig . rewardAddress
193196 if ( ! rewardAddr )
@@ -324,7 +327,7 @@ const createSigningWallet = (network: WalletNew.Network, config: SeedWalletConfi
324327
325328 return witnesses . length > 0 ? TransactionWitnessSet . fromVKeyWitnesses ( witnesses ) : TransactionWitnessSet . empty ( )
326329 } ) ,
327- signMessage : ( _address : Address . Address | RewardAddress . RewardAddress , payload : WalletNew . Payload ) =>
330+ signMessage : ( _address : CoreAddress . Address | RewardAddress . RewardAddress , payload : WalletNew . Payload ) =>
328331 Effect . map ( derivationEffect , ( derivation ) => {
329332 // For now, always use payment key for message signing
330333 const paymentSk = PrivateKey . fromBech32 ( derivation . paymentKey )
@@ -406,7 +409,7 @@ const createPrivateKeyWallet = (
406409
407410 return witnesses . length > 0 ? TransactionWitnessSet . fromVKeyWitnesses ( witnesses ) : TransactionWitnessSet . empty ( )
408411 } ) ,
409- signMessage : ( _address : Address . Address | RewardAddress . RewardAddress , payload : WalletNew . Payload ) =>
412+ signMessage : ( _address : CoreAddress . Address | RewardAddress . RewardAddress , payload : WalletNew . Payload ) =>
410413 Effect . map ( derivationEffect , ( derivation ) => {
411414 const paymentSk = PrivateKey . fromBech32 ( derivation . paymentKey )
412415 const vk = VKey . fromPrivateKey ( paymentSk )
@@ -435,7 +438,7 @@ const createPrivateKeyWallet = (
435438 */
436439const createApiWallet = ( _network : WalletNew . Network , config : ApiWalletConfig ) : WalletNew . ApiWallet => {
437440 const api = config . api
438- let cachedAddress : Address . Address | null = null
441+ let cachedAddress : CoreAddress . Address | null = null
439442 let cachedReward : RewardAddress . RewardAddress | null = null
440443
441444 const getPrimaryAddress = Effect . gen ( function * ( ) {
@@ -448,12 +451,13 @@ const createApiWallet = (_network: WalletNew.Network, config: ApiWalletConfig):
448451 try : ( ) => api . getUnusedAddresses ( ) ,
449452 catch : ( cause ) => new WalletNew . WalletError ( { message : ( cause as Error ) . message , cause : cause as Error } )
450453 } )
451- const addr = used [ 0 ] ?? unused [ 0 ]
452- if ( ! addr ) {
454+ const addrStr = used [ 0 ] ?? unused [ 0 ]
455+ if ( ! addrStr ) {
453456 return yield * Effect . fail ( new WalletNew . WalletError ( { message : "Wallet API returned no addresses" , cause : null } ) )
454457 }
455- cachedAddress = addr
456- return addr
458+ // Convert bech32 string to Core Address
459+ cachedAddress = CoreAddress . fromBech32 ( addrStr )
460+ return cachedAddress
457461 } )
458462
459463 const getPrimaryRewardAddress = Effect . gen ( function * ( ) {
@@ -483,10 +487,12 @@ const createApiWallet = (_network: WalletNew.Network, config: ApiWalletConfig):
483487 )
484488 )
485489 } ) ,
486- signMessage : ( address : Address . Address | RewardAddress . RewardAddress , payload : WalletNew . Payload ) =>
490+ signMessage : ( address : CoreAddress . Address | RewardAddress . RewardAddress , payload : WalletNew . Payload ) =>
487491 Effect . gen ( function * ( ) {
492+ // Convert Core Address to bech32 string for the CIP-30 API
493+ const addressStr = address instanceof CoreAddress . Address ? CoreAddress . toBech32 ( address ) : address
488494 const result = yield * Effect . tryPromise ( {
489- try : ( ) => api . signData ( address , payload ) ,
495+ try : ( ) => api . signData ( addressStr , payload ) ,
490496 catch : ( cause ) => new WalletNew . WalletError ( { message : "User rejected message signing" , cause } )
491497 } )
492498 return { payload, signature : result . signature }
0 commit comments