@xpla/xpla
Version:
<p align="center"> <img src="https://user-images.githubusercontent.com/545047/188804067-28e67e5e-0214-4449-ab04-2e0c564a6885.svg" width="80"> </p>
30 lines (28 loc) • 897 B
JavaScript
import { bech32 } from "bech32";
import { keccak_256 } from "@noble/hashes/sha3";
//#region src/auth/strategy.ts
const COSMOS_EVM_ADDRESS_STRATEGY = {
name: "cosmos_evm",
preprocessPublicKey: (pubKeyBytes, compressed, algo) => {
let ethPubKey = compressed ? algo.uncompress(pubKeyBytes) : pubKeyBytes;
return ethPubKey[0] === 4 ? ethPubKey.slice(1) : ethPubKey;
},
hash: (bytes) => keccak_256(bytes).slice(-20),
encode: (bytes, prefix = "xpla") => {
const words = bech32.toWords(Buffer.from(bytes));
return bech32.encode(prefix, words);
},
decode: (address) => {
const decoded = bech32.decode(address);
return {
bytes: new Uint8Array(bech32.fromWords(decoded.words)),
prefix: decoded.prefix
};
},
extractPrefix: (address) => {
const match = address.match(/^([a-z]+)1/);
return match ? match[1] : void 0;
}
};
//#endregion
export { COSMOS_EVM_ADDRESS_STRATEGY };