@@ -15,7 +15,7 @@ import {
15
15
} from "./wrappers.js" ;
16
16
17
17
import type { EventFragment , FunctionFragment , InterfaceAbi , ParamType , Result } from "../abi/index.js" ;
18
- import type { Addressable } from "../address/index.js" ;
18
+ import type { Addressable , NameResolver } from "../address/index.js" ;
19
19
import type { EventEmitterable , Listener } from "../utils/index.js" ;
20
20
import type {
21
21
BlockTag , ContractRunner , Provider , TransactionRequest , TopicFilter
@@ -68,6 +68,14 @@ function canSend(value: any): value is ContractRunnerSender {
68
68
return ( value && typeof ( value . sendTransaction ) === "function" ) ;
69
69
}
70
70
71
+ function getResolver ( value : any ) : undefined | NameResolver {
72
+ if ( value != null ) {
73
+ if ( canResolve ( value ) ) { return value ; }
74
+ if ( value . provider ) { return value . provider ; }
75
+ }
76
+ return undefined ;
77
+ }
78
+
71
79
class PreparedTopicFilter implements DeferredTopicFilter {
72
80
#filter: Promise < TopicFilter > ;
73
81
readonly fragment ! : EventFragment ;
@@ -146,9 +154,7 @@ export async function copyOverrides<O extends string = "data" | "to">(arg: any,
146
154
"cannot override data" , "overrides.data" , overrides . data ) ;
147
155
148
156
// Resolve any from
149
- if ( overrides . from ) {
150
- overrides . from = await resolveAddress ( overrides . from ) ;
151
- }
157
+ if ( overrides . from ) { overrides . from = overrides . from ; }
152
158
153
159
return < Omit < ContractTransaction , O > > overrides ;
154
160
}
@@ -177,6 +183,10 @@ function buildWrappedFallback(contract: BaseContract): WrappedFallback {
177
183
const tx : ContractTransaction = < any > ( await copyOverrides < "data" > ( overrides , [ "data" ] ) ) ;
178
184
tx . to = await contract . getAddress ( ) ;
179
185
186
+ if ( tx . from ) {
187
+ tx . from = await resolveAddress ( tx . from , getResolver ( contract . runner ) ) ;
188
+ }
189
+
180
190
const iface = contract . interface ;
181
191
182
192
const noValue = ( getBigInt ( ( tx . value || BN_0 ) , "overrides.value" ) === BN_0 ) ;
@@ -271,6 +281,10 @@ function buildWrappedMethod<A extends Array<any> = Array<any>, R = any, D extend
271
281
let overrides : Omit < ContractTransaction , "data" | "to" > = { } ;
272
282
if ( fragment . inputs . length + 1 === args . length ) {
273
283
overrides = await copyOverrides ( args . pop ( ) ) ;
284
+
285
+ if ( overrides . from ) {
286
+ overrides . from = await resolveAddress ( overrides . from , getResolver ( contract . runner ) ) ;
287
+ }
274
288
}
275
289
276
290
if ( fragment . inputs . length !== args . length ) {