Skip to content

Commit

Permalink
Prep Ledger to handle BTC
Browse files Browse the repository at this point in the history
  • Loading branch information
ccali11 committed May 4, 2023
1 parent a57fab5 commit 70a2798
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 39 deletions.
32 changes: 30 additions & 2 deletions apps/web/src/composables/ledger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,35 @@ export default function useLedger() {
return new EthersLedgerSigner(options)
}

const getLedgerAddress = {
'BTC': getBitcoinLedgerAddress,
'ETH': getEthersLedgerAddresses,
'IOTX': () => {
return new Promise((resolve, reject) => {
console.log('IOTX is not yet supported on Ledger')
resolve('IOTX is not yet supported on Ledger')
}) as Promise<string>
},
'SOL': () => {
return new Promise((resolve, reject) => {
console.log('SOL is not yet supported on Ledger')
resolve('SOL is not yet supported on Ledger')
}) as Promise<string>
},
'': () => {
return new Promise((resolve, reject) => {
console.log('No currency selected')
resolve('No currency selected')
}) as Promise<string>
},
'USD': () => {
return new Promise((resolve, reject) => {
console.log('USD is not yet supported on Ledger')
resolve('USD is not yet supported on Ledger')
}) as Promise<string>
}
}

async function getBitcoinLedgerAddress() {
const signer = getBitcoinLedgerSigner()
return await signer.getAddress()
Expand Down Expand Up @@ -101,10 +130,9 @@ export default function useLedger() {
}

return {
getBitcoinLedgerAddress,
getBitcoinLedgerSigner,
getEthersLedgerAddresses,
getEthersLedgerSigner,
getLedgerAddress,
loginWithLedger,
signLedgerMessage,
sendLedgerTransaction,
Expand Down
48 changes: 43 additions & 5 deletions apps/web/src/composables/trezor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ export default function useTrezor() {
const { ethereumURL } = useEnvironment()
const { getGasPriceAndLimit } = useEthers()

// TODO: Implement this:
function getBitcoinTrezorSigner() {
return alert('Not implemented yet')
// const options = {
// path: trezorPath
// }
// return new BitcoinTrezorSigner(options)
}

function getEthersTrezorSigner(): ethers.Signer {
const options = {
provider: new ethers.providers.JsonRpcProvider(ethereumURL),
Expand All @@ -22,12 +31,41 @@ export default function useTrezor() {
return new EthersTrezorSigner(options)
}

async function getTrezorAddress() {
const signer = getEthersTrezorSigner()
return await signer.getAddress()
const getTrezorAddress = {
'BTC': () => {
return new Promise((resolve, reject) => {
console.log('BTC is not yet supported on Trezor')
resolve('BTC is not yet supported on Trezor')
}) as Promise<string>
},
'ETH': getEthersTrezorAddresses,
'IOTX': () => {
return new Promise((resolve, reject) => {
console.log('IOTX is not yet supported on Trezor')
resolve('IOTX is not yet supported on Trezor')
}) as Promise<string>
},
'SOL': () => {
return new Promise((resolve, reject) => {
console.log('SOL is not yet supported on Trezor')
resolve('SOL is not yet supported on Trezor')
}) as Promise<string>
},
'': () => {
return new Promise((resolve, reject) => {
console.log('No currency selected')
resolve('No currency selected')
}) as Promise<string>
},
'USD': () => {
return new Promise((resolve, reject) => {
console.log('USD is not yet supported on Trezor')
resolve('USD is not yet supported on Trezor')
}) as Promise<string>
}
}

async function getTrezorAddresses() {
async function getEthersTrezorAddresses() {
const signer = getEthersTrezorSigner()
return await signer.getAddresses()
}
Expand Down Expand Up @@ -83,5 +121,5 @@ export default function useTrezor() {
return await signer.signMessage(message)
}

return { getEthersTrezorSigner, getTrezorAddress, getTrezorAddresses, loginWithTrezor, sendTrezorTransaction, signTrezorMessage }
return { getEthersTrezorSigner, getTrezorAddress, loginWithTrezor, sendTrezorTransaction, signTrezorMessage }
}
51 changes: 19 additions & 32 deletions apps/web/src/composables/wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,36 +38,24 @@ const toAddress = ref<string>('2N3Petr4LMH9tRneZCYME9mu33gR5hExvds')
export default function useWallet() {
const { ethersProviderList, getEthersAddress, getEthersAddressWithBalance, getEthersBalance, sendEthersTransaction, signEthersMessage, loginWithEthers, getEthersBrowserProviderSelectedCurrency, switchEthersNetwork } = useEthers()
const { solanaProviderList, getSolanaAddress, sendSolanaTransaction, signSolanaMessage } = useSolana()
const { getBitcoinLedgerAddress, getEthersLedgerAddresses, loginWithLedger, sendLedgerTransaction, signLedgerMessage } = useLedger()
const { getTrezorAddress, getTrezorAddresses, loginWithTrezor, sendTrezorTransaction, signTrezorMessage } = useTrezor()
const { getLedgerAddress, loginWithLedger, sendLedgerTransaction, signLedgerMessage } = useLedger()
const { getTrezorAddress, loginWithTrezor, sendTrezorTransaction, signTrezorMessage } = useTrezor()
const { getWalletConnectAddress, loginWithWalletConnect, sendWalletConnectTransaction, signWalletConnectMessage } = useWalletConnect()
const { user, getUser, setUser, addAccount, removeAccount, updatePrimaryAddress } = useUsers()
const getLedgerAddress = {
'BTC': getBitcoinLedgerAddress,
'ETH': getEthersLedgerAddresses,
'IOTX': () => {
return new Promise((resolve, reject) => {
console.log('IOTX is not yet supported on Ledger')
resolve('IOTX is not yet supported on Ledger')
}) as Promise<string>
},
'SOL': () => {
return new Promise((resolve, reject) => {
console.log('SOL is not yet supported on Ledger')
resolve('SOL is not yet supported on Ledger')
}) as Promise<string>
},
'': () => {
return new Promise((resolve, reject) => {
console.log('No currency selected')
resolve('No currency selected')
}) as Promise<string>
},
'USD': () => {

function getColdStorageAddress(provider: ProviderString, currency: Currency = 'ETH') {
if (provider === 'Ledger') {
new Promise((resolve, reject) => {
resolve(getLedgerAddress[currency]())
})
} else if (provider === 'Trezor') {
new Promise((resolve, reject) => {
resolve(getTrezorAddress[currency]())
})
} else {
return new Promise((resolve, reject) => {
console.log('USD is not yet supported on Ledger')
resolve('USD is not yet supported on Ledger')
}) as Promise<string>
resolve('Cold storage provider not yet supported')
})
}
}

Expand Down Expand Up @@ -167,9 +155,9 @@ export default function useWallet() {
} else if (provider === 'Ledger') {
setSelectedCurrency(currency as Currency)
// Ask user to select an account
address = await getLedgerAddress[currency as Currency]()
address = await getColdStorageAddress(provider, currency as Currency)
} else if (provider === 'Trezor') {
address = await getTrezorAddress()
address = await getColdStorageAddress(provider, currency as Currency)
} else {
throw new Error('No provider selected')
}
Expand Down Expand Up @@ -222,11 +210,10 @@ export default function useWallet() {
async function logout() {
loadingUserWallets.value = true
await Session.signOut()
setUser(undefined)
setSelectedAddress('')
setSelectedProvider('')
setSelectedCurrency('')
setUser()
setUser(undefined)
setPrimaryAddress('')
loadingUserWallets.value = false
// router.push('/auth')
Expand Down Expand Up @@ -322,7 +309,7 @@ export default function useWallet() {
setUserAddresses(ledgerAddresses)
} else if (provider === 'Trezor') {
setSelectedProvider(provider)
const trezorAddresses = await getTrezorAddresses()
const trezorAddresses = await getTrezorAddress[currency]() as CryptoAddress[]
setUserAddresses(trezorAddresses)
}
} catch (error) {
Expand Down

0 comments on commit 70a2798

Please sign in to comment.