@xpla/xpla
Version:
<p align="center"> <img src="https://user-images.githubusercontent.com/545047/188804067-28e67e5e-0214-4449-ab04-2e0c564a6885.svg" width="80"> </p>
64 lines (63 loc) • 2.38 kB
JavaScript
import { defaultAccountParser as parseCosmosAccount, defaultSignerConfig as CosmosSignerConfig, } from '@interchainjs/cosmos/defaults';
import { toDecoder } from '@interchainjs/cosmos/utils';
import { PubKey as Secp256k1PubKey } from '@interchainjs/cosmos-types/cosmos/crypto/secp256k1/keys';
import { EthAccount } from './accounts/eth-account';
import { EthAccount as protoEthAccount } from '@xpla/xplajs/ethermint/types/v1/account';
import { abytes } from '@noble/hashes/_assert';
import { keccak_256 } from '@noble/hashes/sha3';
import { computeAddress } from '@ethersproject/transactions';
import { Key } from '@interchainjs/utils';
import { EthSecp256k1Auth } from '@interchainjs/auth/ethSecp256k1';
export const Network = {
Mainnet: {
lcd: "https://dimension-lcd.xpla.io",
rpc: "https://dimension-rpc.xpla.io",
},
Testnet: {
lcd: "https://cube-lcd.xpla.io",
rpc: "https://cube-rpc.xpla.io",
}
};
export const defaultPublicKeyConfig = {
isCompressed: CosmosSignerConfig.publicKey.isCompressed,
hash: (publicKey) => Key.fromHex(computeAddress(publicKey.value))
};
export const defaultEncodePublicKey = (key) => {
return {
typeUrl: '/ethermint.crypto.v1.ethsecp256k1.PubKey',
value: Secp256k1PubKey.encode(Secp256k1PubKey.fromPartial({ key: key.value })).finish(),
};
};
export const defaultAccountParser = (encodedAccount) => {
try {
return parseCosmosAccount(encodedAccount);
}
catch (error) {
const decoder = toDecoder(protoEthAccount);
const account = decoder.fromPartial(decoder.decode(encodedAccount.value));
return account.baseAccount;
}
};
export const defaultSignerOptions = {
Cosmos: {
...CosmosSignerConfig,
message: {
...CosmosSignerConfig.message,
hash: (message) => {
const hashed = keccak_256(message);
abytes(hashed);
return hashed;
},
},
publicKey: defaultPublicKeyConfig,
encodePublicKey: defaultEncodePublicKey,
parseAccount: defaultAccountParser,
createAccount: EthAccount,
prefix: 'xpla',
}
};
export const defaultWalletOptions = {
bip39Password: undefined,
createAuthsFromMnemonic: EthSecp256k1Auth.fromMnemonic,
signerConfig: defaultSignerOptions.Cosmos,
};