@ledgerhq/coin-aptos
Version:
Ledger Aptos Coin integration
22 lines • 1.2 kB
JavaScript
import { AccountAddress, Ed25519PublicKey, Ed25519Signature, generateSigningMessageForTransaction, } from "@aptos-labs/ts-sdk";
import { sha3_256 as sha3Hash } from "@noble/hashes/sha3";
import { combineSignedTransaction } from "../logic/combine";
export * from "./client";
export async function signTransaction(signerContext, account, deviceId, rawTxn) {
const { freshAddressPath: derivationPath } = account;
if (!account.xpub) {
throw Error("Account must have a public signing key");
}
const publicKey = Buffer.from(AccountAddress.from(account.xpub).toUint8Array());
const hash = sha3Hash.create();
hash.update(publicKey.toString("hex"));
hash.update("\x00");
const signingMessage = generateSigningMessageForTransaction({
rawTransaction: rawTxn,
});
const response = await signerContext(deviceId, async (signer) => await signer.signTransaction(derivationPath, Buffer.from(signingMessage)));
const signature = new Ed25519Signature(response.signature.toString("hex"));
const pubkey = new Ed25519PublicKey(publicKey.toString("hex"));
return combineSignedTransaction(rawTxn, signature, pubkey);
}
//# sourceMappingURL=index.js.map