resolves #46 Co-authored-by: johba <johba@harb.eth> Reviewed-on: https://codeberg.org/johba/harb/pulls/53
40 lines
1,000 B
TypeScript
40 lines
1,000 B
TypeScript
import { ethers } from 'ethers';
|
|
|
|
export interface RecenterAccessReader {
|
|
recenterAccess(): Promise<string>;
|
|
}
|
|
|
|
export async function readRecenterAccess(reader: RecenterAccessReader, zeroAddress: string): Promise<string> {
|
|
let raw: string;
|
|
try {
|
|
raw = await reader.recenterAccess();
|
|
} catch (error) {
|
|
throw new Error(`Failed to read recenterAccess: ${(error as Error).message}`);
|
|
}
|
|
|
|
if (typeof raw !== 'string' || raw.length === 0) {
|
|
return zeroAddress;
|
|
}
|
|
|
|
if (raw === zeroAddress) {
|
|
return zeroAddress;
|
|
}
|
|
|
|
try {
|
|
return ethers.getAddress(raw);
|
|
} catch (error) {
|
|
throw new Error(`Invalid recenterAccess address: ${(error as Error).message}`);
|
|
}
|
|
}
|
|
|
|
export function hasRecenterAccess(recenterAddress: string, walletAddress: string, zeroAddress: string): boolean {
|
|
if (recenterAddress === zeroAddress) {
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
return ethers.getAddress(recenterAddress) === ethers.getAddress(walletAddress);
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|