@ton-keychain/trx
Version:
SDK for creating multi account mnemonics, plugin for tron
86 lines (80 loc) • 2.65 kB
JavaScript
// src/index.ts
import { getNthAccountTon } from "@ton-keychain/core";
// src/keychain-trx-accounts-provider.ts
import { entropyToMnemonic } from "@scure/bip39";
import { wordlist } from "@scure/bip39/wordlists/english";
import { hmac } from "@noble/hashes/hmac";
import { sha256 as sha2562 } from "@noble/hashes/sha256";
// src/utils.ts
import { decodeBase58, encodeBase58, sha256 } from "ethers";
var TronAddress = {
hexToBase58(address) {
const tronAddressPayload = "0x41" + address.slice(2);
const checkSumTail = sha256(sha256(tronAddressPayload)).slice(2, 10);
return encodeBase58(tronAddressPayload + checkSumTail);
},
base58ToHex(address) {
const decoded = decodeBase58(address).toString(16);
return "0x" + decoded.slice(2, -8);
}
};
// src/keychain-trx-account.ts
var KeychainTrxAccount = class {
constructor(hdAccount) {
this.hdAccount = hdAccount;
this.address = TronAddress.hexToBase58(this.hexAddress);
}
get hexAddress() {
return this.hdAccount.address;
}
get privateKey() {
return this.hdAccount.privateKey;
}
get publicKey() {
return this.hdAccount.publicKey;
}
address;
};
// src/keychain-trx-accounts-provider.ts
import { ethers } from "ethers";
var KeychainTrxAccountsProvider = class _KeychainTrxAccountsProvider {
constructor(mnemonics, hdAccount) {
this.mnemonics = mnemonics;
this.hdAccount = hdAccount;
}
static MNEMONICS_WORDS_NUMBER = 12;
static CHECKSUM_BITS = 4;
static BASE_DERIVATION_PATH = "m/44'/195'/0'/0";
static NETWORK_LABEL = "trx-0x2b6653dc_root";
static fromEntropy(entropy) {
const networkEntropy = this.patchEntropy(entropy);
const mnemonics = entropyToMnemonic(networkEntropy, wordlist);
const hdAccount = ethers.HDNodeWallet.fromPhrase(
mnemonics,
void 0,
this.BASE_DERIVATION_PATH
);
return new _KeychainTrxAccountsProvider(mnemonics.split(" "), hdAccount);
}
static patchEntropy(seed) {
return hmac(sha2562, this.NETWORK_LABEL, seed).subarray(
0,
(_KeychainTrxAccountsProvider.MNEMONICS_WORDS_NUMBER * 11 - _KeychainTrxAccountsProvider.CHECKSUM_BITS) / 8
);
}
getAccount(index = 0) {
return new KeychainTrxAccount(this.hdAccount.deriveChild(index));
}
};
// src/index.ts
async function getNthAccountTrx(rootMnemonic, childIndex) {
const tonAccount = await getNthAccountTon(rootMnemonic, childIndex);
const trxProvider = KeychainTrxAccountsProvider.fromEntropy(tonAccount.entropy);
return trxProvider.getAccount();
}
export {
KeychainTrxAccount,
KeychainTrxAccountsProvider,
TronAddress as TronAddressUtils,
getNthAccountTrx
};