Skip to content

Commit

Permalink
fixup! fixup! tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
szymonlesisz committed Aug 26, 2024
1 parent 72f7a64 commit db8ab69
Show file tree
Hide file tree
Showing 3 changed files with 155 additions and 22 deletions.
165 changes: 146 additions & 19 deletions packages/connect/test-e2e.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import TrezorConnect from './src';

import * as messages from '@trezor/protobuf/messages.json';
import { v2 as protocolV2, thp } from '@trezor/protocol';
import { NodeUsbTransport, UdpTransport } from '../transport/src';

const abort = new AbortController();
Expand All @@ -9,8 +10,20 @@ const debugTransport =
? new UdpTransport({ messages, debugLink: true, signal: abort.signal })
: new NodeUsbTransport({ messages, debugLink: true, signal: abort.signal });

const loadTransport =
process.argv[2] === 'udp'
? new UdpTransport({ messages, signal: abort.signal })
: new NodeUsbTransport({ messages, signal: abort.signal });

const initDebugLink = async () => {
if (!debugTransport.stopped) {
return;
}
const init = await debugTransport.init().promise;
const init2 = await loadTransport.init().promise;

const enumerate = await debugTransport.enumerate().promise;
const enumerate2 = await loadTransport.enumerate().promise;
if (!enumerate.success) {
return;
}
Expand All @@ -33,7 +46,7 @@ const debugLinkState = async channel => {
session: acquire.payload,
}).promise;

console.warn('DebugLinkState', response.payload);
console.warn('DebugLinkState', response);

await debugTransport.release(enumerate.payload[0]).promise;
await debugTransport.enumerate().promise;
Expand All @@ -42,20 +55,90 @@ const debugLinkState = async channel => {
};

const debugLinkDecision = async () => {
console.warn('debugLinkDecision-1');
const enumerate = await debugTransport.enumerate().promise;
if (!enumerate.success) {
return;
}
console.warn('debugLinkDecision-2', enumerate);
const acquire = await debugTransport.acquire({ input: enumerate.payload[0] }).promise;
console.warn('debugLinkDecision-3', acquire);
const session = acquire.payload;

await debugTransport.send({
name: 'DebugLinkDecision',
data: { button: 1 },
session: acquire.payload,
}).promise;
const callRes = await debugTransport
.send({
name: 'DebugLinkDecision',
data: { button: 1 },
session,
})
.promise.then(r => {
console.warn('debugLinkDecision-4', r);

await debugTransport.release(enumerate.payload[0]).promise;
await debugTransport.enumerate().promise;
return r;
});

console.warn('debugLinkDecision-5', callRes);

const rele = await debugTransport.release({ ...enumerate.payload[0], session }).promise;
console.warn('debugLinkDecision-6', rele);
const enum2 = await debugTransport.enumerate().promise;

console.warn('debugLinkDecision-end', enum2);
};

const debugLinkLoadSeed = async elo => {
console.warn('debugLinkLoadSeed-1', elo);
// if (elo) return;

const enumerate = await loadTransport.enumerate().promise;
if (!enumerate.success) {
return;
}
console.warn('debugLinkLoadSeed-2', enumerate);
const acquire = await loadTransport.acquire({ input: enumerate.payload[0] }).promise;
const session = acquire.payload;

console.warn('debugLinkLoadSeed-3', acquire);

const protocolState = new thp.ThpProtocolState();
protocolState.deserialize(elo);

const load = await loadTransport
.call({
session,
name: 'LoadDevice',
data: {
pin: '',
label: 'THP device',
passphrase_protection: true,
mnemonics: ['all all all all all all all all all all all all'],
skip_checksum: true,
},
protocol: protocolV2,
protocolState,
})
.promise.then(r => {
console.warn('debugLinkLoadSeed-4', r);
if (r.success && r.payload.type === 'ButtonRequest') {
const ack = loadTransport.call({
session,
name: 'ButtonAck',
data: {},
}).promise;

//return debugLinkDecision().then(() => ack);
return ack;
}

return r;
});

console.warn('debugLinkLoadSeed-5', load);

const release = await loadTransport.release({ ...enumerate.payload[0], session }).promise;
console.warn('debugLinkLoadSeed-6', release);
const enumerate2 = await loadTransport.enumerate().promise;
console.warn('debugLinkLoadSeed-7', enumerate2);
};

const getFeatures = device => {
Expand All @@ -66,7 +149,7 @@ const getFeatures = device => {

const signTx = device => {
const outputs = [];
for (let i = 0; i < 4; i++) {
for (let i = 0; i < 255; i++) {
const output = {
address: 'momtnzR3XqXgDSsFmd8gkGxUiHZLde3RmA',
amount: 7129,
Expand All @@ -86,6 +169,12 @@ const signTx = device => {
prev_index: 1,
amount: 1827955,
},
{
address_n: "m/44'/1'/0'/0/0",
prev_hash: 'e5040e1bc1ae7667ffb9e5248e90b2fb93cd9150234151ce90e14ab2f5933bcd',
prev_index: 0,
amount: '31000000',
},
// {
// address_n: "m/84'/1'/0'/0/0",
// amount: '129999867',
Expand Down Expand Up @@ -134,24 +223,60 @@ const run = async () => {
// });
await initDebugLink();

signTx(event.payload).then(r => {
console.warn(r);
console.warn('Time--->', Math.round((Date.now() - testStart) / 1000));
process.exit(1);
});
if (event.payload.features && event.payload.mode === 'initialize') {
console.log('Loading seed');
await new Promise(resolve => setTimeout(resolve, 2000));
if (event.payload.protocolState) {
await TrezorConnect.resetDevice({
pin: '',
label: 'THP device',
passphrase_protection: true,
// mnemonics: ['all all all all all all all all all all all all'],
// skip_checksum: true,
});
} else {
await debugLinkLoadSeed(event.payload.protocolState);
}
}

if (!event.payload.features && event.payload.properties) {
await getFeatures(event.payload);
} else {
signTx(event.payload).then(r => {
console.warn(r);
console.warn('Time--->', Math.round((Date.now() - testStart) / 1000));
process.exit(1);
});
}

// getFeatures(event.payload);

// TrezorConnect.getAddress({
// device: { path: event.payload.path },
// path: "m/44'/0'/0'/0/0",
// }).then(r => {
// console.warn(r);
// process.exit(1);
// });
}
});

TrezorConnect.on('UI_EVENT', async event => {
console.warn('UI_EVENT', event);

if (event.type === 'ui-request_pin') {
setTimeout(() => TrezorConnect.cancel(), 1000);

// TrezorConnect.uiResponse({
// type: 'ui-receive_pin',
// payload: null,
// });
}

if (event.type === 'ui-request_passphrase') {
TrezorConnect.uiResponse({
type: 'ui-receive_passphrase',
payload: {
passphraseOnDevice: false,
// value: 'abcd',
value: '',
},
payload: { value: '' },
});
}

Expand Down Expand Up @@ -193,6 +318,8 @@ const run = async () => {
}

if (event.type === 'ui-button') {
// console.warn('RESOLVE!');
// TrezorConnect.cancel();
await debugLinkDecision();
}
});
Expand Down
5 changes: 5 additions & 0 deletions packages/transport/src/thp/receive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,16 @@ export const receiveThpMessage = async ({
apiWrite,
signal,
}: Omit<ReceiveThpMessageProps, 'messages'>): Promise<any> => {
const recvStart = Date.now();
console.warn('receiveThpMessage start', protocolState);

const decoded = await receive(
() => readWithExpectedState(apiRead, protocolState, signal),
v2Protocol,
);

console.warn('receiveThpMessage received', recvStart - Date.now());

const isAckExpected = protocolThp.isAckExpected(protocolState?.expectedResponses || []);
if (isAckExpected) {
const ack = protocolThp.encodeAck(decoded.header);
Expand All @@ -77,6 +80,8 @@ export const receiveThpMessage = async ({
}
}

console.warn('receiveThpMessage end', recvStart - Date.now());

// if (isAckExpected) {
// protocolState?.updateSyncBit('recv');
// }
Expand Down
7 changes: 4 additions & 3 deletions packages/transport/src/thp/send.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export const sendThpMessage = async ({

const attempt = async (): ReturnType<typeof apiRead> => {
try {
const sendStart = Date.now();
const result = await scheduleAction(
async attemptSignal => {
console.warn('---> sendThpMessage attempt start', tries);
Expand Down Expand Up @@ -61,7 +62,7 @@ export const sendThpMessage = async ({
},
);

console.warn('sendWithRetransmission result', tries, result);
console.warn('sendWithRetransmission result', tries, Date.now() - sendStart, result);

return result;
} catch (error) {
Expand All @@ -70,10 +71,10 @@ export const sendThpMessage = async ({
}
};

const result = await attempt();
// const result = await attempt();
protocolState?.updateSyncBit('send');
protocolState?.setExpectedResponse(expectedResponses);
console.warn('the final result!', result);
console.warn('send final result!', 0x20, expectedResponses);

return expectedResponses;
};

0 comments on commit db8ab69

Please sign in to comment.