@rhino.fi/client-js
Version:
42 lines (37 loc) • 1.13 kB
JavaScript
const selectTransport = require('../../lib/ledger/selectTransport')
const Eth = require('@ledgerhq/hw-app-eth').default
const { getStructHash } = require('eip-712')
// https://eips.ethereum.org/EIPS/eip-712
module.exports = async (dvf, jsonData, ledgerPath) => {
const Transport = selectTransport(dvf.isBrowser)
const createdTransport = await Transport.create()
const ledgerEth = new Eth(createdTransport)
const domainStructHash = getStructHash(
jsonData,
'EIP712Domain',
jsonData.domain,
)
const domainStructString = Buffer.from(domainStructHash).toString('hex')
const messageStructHash = getStructHash(
jsonData,
jsonData.primaryType,
jsonData.message,
)
const messageStructString = Buffer.from(messageStructHash).toString('hex')
return ledgerEth
.signEIP712HashedMessage(
ledgerPath,
domainStructString,
messageStructString,
)
.then(signature => {
return {
r: Buffer.from(signature.r, 'hex'),
s: Buffer.from(signature.s, 'hex'),
v: signature.v,
}
})
.finally(() => {
createdTransport.close()
})
}