wormhole/sdk/js/src/bridge/getEmitterAddress.ts

46 lines
1.4 KiB
TypeScript

import { PublicKeyInitData } from "@solana/web3.js";
import { decodeAddress, getApplicationAddress } from "algosdk";
import { bech32 } from "bech32";
import {
arrayify,
sha256,
BytesLike,
Hexable,
zeroPad,
} from "ethers/lib/utils";
import { deriveWormholeEmitterKey } from "../solana/wormhole";
import { uint8ArrayToHex } from "../utils";
export function getEmitterAddressEth(
contractAddress: number | BytesLike | Hexable
) {
return Buffer.from(zeroPad(arrayify(contractAddress), 32)).toString("hex");
}
export async function getEmitterAddressSolana(
programAddress: PublicKeyInitData
) {
return deriveWormholeEmitterKey(programAddress).toBuffer().toString("hex");
}
export async function getEmitterAddressTerra(programAddress: string) {
return Buffer.from(
zeroPad(bech32.fromWords(bech32.decode(programAddress).words), 32)
).toString("hex");
}
export const getEmitterAddressInjective = getEmitterAddressTerra;
export const getEmitterAddressXpla = getEmitterAddressTerra;
export function getEmitterAddressAlgorand(appId: bigint): string {
const appAddr: string = getApplicationAddress(appId);
const decAppAddr: Uint8Array = decodeAddress(appAddr).publicKey;
const aa: string = uint8ArrayToHex(decAppAddr);
return aa;
}
export function getEmitterAddressNear(programAddress: string): string {
return uint8ArrayToHex(arrayify(sha256(Buffer.from(programAddress, "utf8"))));
}