Skip to content

Commit 2616f4c

Browse files
committedOct 9, 2023
Fixed resolving ENS addresses used as from parameters (#3961).
1 parent cd5f0fe commit 2616f4c

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed
 

Diff for: ‎src.ts/contract/contract.ts

+18-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
} from "./wrappers.js";
1616

1717
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";
1919
import type { EventEmitterable, Listener } from "../utils/index.js";
2020
import type {
2121
BlockTag, ContractRunner, Provider, TransactionRequest, TopicFilter
@@ -68,6 +68,14 @@ function canSend(value: any): value is ContractRunnerSender {
6868
return (value && typeof(value.sendTransaction) === "function");
6969
}
7070

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+
7179
class PreparedTopicFilter implements DeferredTopicFilter {
7280
#filter: Promise<TopicFilter>;
7381
readonly fragment!: EventFragment;
@@ -146,9 +154,7 @@ export async function copyOverrides<O extends string = "data" | "to">(arg: any,
146154
"cannot override data", "overrides.data", overrides.data);
147155

148156
// Resolve any from
149-
if (overrides.from) {
150-
overrides.from = await resolveAddress(overrides.from);
151-
}
157+
if (overrides.from) { overrides.from = overrides.from; }
152158

153159
return <Omit<ContractTransaction, O>>overrides;
154160
}
@@ -177,6 +183,10 @@ function buildWrappedFallback(contract: BaseContract): WrappedFallback {
177183
const tx: ContractTransaction = <any>(await copyOverrides<"data">(overrides, [ "data" ]));
178184
tx.to = await contract.getAddress();
179185

186+
if (tx.from) {
187+
tx.from = await resolveAddress(tx.from, getResolver(contract.runner));
188+
}
189+
180190
const iface = contract.interface;
181191

182192
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
271281
let overrides: Omit<ContractTransaction, "data" | "to"> = { };
272282
if (fragment.inputs.length + 1 === args.length) {
273283
overrides = await copyOverrides(args.pop());
284+
285+
if (overrides.from) {
286+
overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));
287+
}
274288
}
275289

276290
if (fragment.inputs.length !== args.length) {

Diff for: ‎src.ts/providers/abstract-provider.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ export class AbstractProvider implements Provider {
817817
[ "to", "from" ].forEach((key) => {
818818
if ((<any>request)[key] == null) { return; }
819819

820-
const addr = resolveAddress((<any>request)[key]);
820+
const addr = resolveAddress((<any>request)[key], this);
Has conversations. Original line has conversations.
821821
if (isPromise(addr)) {
822822
promises.push((async function() { (<any>request)[key] = await addr; })());
823823
} else {

0 commit comments

Comments
 (0)
Please sign in to comment.