Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions nanowallet/gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ var jsFiles = "src/app/**/*.js";
var viewFiles = "src/app/**/*.html";
var specFiles = "tests/specs/*.spec.js"
var specsArray = glob.sync(specFiles);
var setupFile = "tests/setup.js";


var interceptErrors = function(error) {
Expand Down Expand Up @@ -73,8 +74,7 @@ gulp.task('browserify', ['views'], function() {

// Task for test files
gulp.task('browserifyTests', function() {
return browserify(specsArray)
// .transform(babelify, {presets: ["es2015"]})
return browserify([setupFile].concat(specsArray))
.transform(babelify.configure({
presets: [['es2015', {
targets: {
Expand Down
14,073 changes: 5,338 additions & 8,735 deletions nanowallet/package-lock.json

Large diffs are not rendered by default.

17 changes: 9 additions & 8 deletions nanowallet/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
"author": "https://github.com/QuantumMechanics <qmnwdev@gmail.com>",
"license": "MIT",
"dependencies": {
"@ledgerhq/hw-transport-node-hid-noevents": "^6.27.13",
"trezor-connect": "^8.2.7"
"@ledgerhq/hw-transport-node-hid-noevents": "^5.43.0",
"bigi": "^1.4.2",
"ecurve": "^1.0.6"
},
"devDependencies": {
"@babel/runtime": "^7.4.2",
Expand All @@ -15,7 +16,7 @@
"angular-animate": "1.6.2",
"angular-chart.js": "1.0.0",
"angular-mocks": "1.6.2",
"angular-sanitize": "1.8.3",
"angular-sanitize": "1.6.2",
"angular-translate": "2.19.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-async-to-generator": "^6.24.1",
Expand All @@ -24,7 +25,7 @@
"babel-preset-es2015": "^6.3.13",
"babelify": "^7.2.0",
"bip32-path": "^0.4.2",
"bitcoinjs-lib": "^6.1.0",
"bitcoinjs-lib": "^3.3.2",
"bootstrap": "3.4.1",
"browser-sync": "^2.29.1",
"browserify": "^13.0.0",
Expand All @@ -38,7 +39,7 @@
"electron-packager": "17.1.1",
"electron-rebuild": "^2.3.4",
"electron-updater": "4.3.5",
"glob": "10.2.6",
"glob": "^7.2.3",
"gulp": "^3.9.1",
"gulp-angular-templatecache": "^1.8.0",
"gulp-autoprefixer": "^8.0.0",
Expand All @@ -51,15 +52,15 @@
"jsqr": "^1.0.4",
"marked": "^0.3.5",
"merge-stream": "^2.0.0",
"nem-library": "1.0.9",
"nem-library": "1.0.5",
"nem-sdk": "^1.6.8",
"nem-voting": "^2.2.9",
"ng-toast": "2.0.0",
"ngstorage": "0.3.10",
"npm-build-zip": "^1.0.2",
"nw": "^0.75.0",
"nw-builder": "^4.6.3",
"rxjs": "7.8.1",
"nw-builder": "3.5.7",
"rxjs": "5.5.12",
"symbol-hd-wallets": "0.12.0",
"symbol-paper-wallets": "1.0.2-optin",
"symbol-post-launch-optin-module": "1.0.1",
Expand Down
18 changes: 12 additions & 6 deletions nanowallet/src/app/modules/trezor/trezor.service.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { TransactionTypes } from 'nem-library';
import nem from 'nem-sdk';
import TrezorConnect from 'trezor-connect';

/** Service storing Trezor utility functions. */
class Trezor {
Expand All @@ -20,7 +19,14 @@ class Trezor {
// Service properties region //

// End properties region //
TrezorConnect.manifest({ email: 'maintainers@nem.io', appUrl: 'https://www.nem.io' });

window.TrezorConnect.init({
manifest: {
email: 'maintainers@nem.io',
appUrl: 'https://www.nem.io',
},
coreMode: 'popup',
});
}

// Service methods region //
Expand All @@ -47,7 +53,7 @@ class Trezor {
createAccount(network, index, label) {
return new Promise((resolve, reject) => {
const hdKeypath = this.bip44(network, index);
TrezorConnect.nemGetAddress({
window.TrezorConnect.nemGetAddress({
path: hdKeypath,
network: this.adjustNetwork(network),
showOnTrezor: true
Expand Down Expand Up @@ -76,7 +82,7 @@ class Trezor {
const value = "0000000000000000000000000000000000000000000000000000000000000000";

return new Promise((resolve, reject) => {
TrezorConnect.cipherKeyValue({
window.TrezorConnect.cipherKeyValue({
path: account.hdKeypath,
key: key,
value: value,
Expand Down Expand Up @@ -124,7 +130,7 @@ class Trezor {
const tx = this.adjustImportanceTransferTransaction(transaction);

return new Promise((resolve, reject) => {
TrezorConnect.nemSignTransaction({
window.TrezorConnect.nemSignTransaction({
path: account.hdKeypath,
transaction: tx,
}).then(function (result) {
Expand All @@ -144,7 +150,7 @@ class Trezor {

showAccount(account) {
return new Promise((resolve, reject) => {
TrezorConnect.nemGetAddress({
window.TrezorConnect.nemGetAddress({
path: account.hdKeypath,
network: this.adjustNetwork(account.network),
showOnTrezor: true
Expand Down
1 change: 1 addition & 0 deletions nanowallet/src/start.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<link rel="stylesheet" href="css/ngToast.min.css">
<link rel="stylesheet" href="css/NEMonster.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans:100,400,700,900">
<script src="https://connect.trezor.io/9/trezor-connect.js"></script>
</head>

<body>
Expand Down
7 changes: 7 additions & 0 deletions nanowallet/tests/setup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Mock TrezorConnect
window.TrezorConnect = {
init: function() {},
nemGetAddress: function() {},
nemSignTransaction: function() {},
cipherKeyValue: function() {}
};
193 changes: 193 additions & 0 deletions nanowallet/tests/specs/trezorService.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
import Trezor from '../../src/app/modules/trezor/trezor.service';
import { TransactionTypes } from 'nem-library';

describe('Trezor Service', () => {
let trezorService;
let mockNemGetAddress;
let mockNemSignTransaction;
let mockCipherKeyValue;

const TESTNET_NETWORK = -104;
const TESTNET_ADDRESS = 'TA545ICAVNEUDFUBIHO3CEJBSVIZ7YYHFFX5LQPT';
const MOCK_HD_PATH = "m/44'/1'/0'/0'/0'";

const createTestAccount = () => ({
hdKeypath: MOCK_HD_PATH,
network: TESTNET_NETWORK
});

const createTrezorSuccessResponse = payload => Promise.resolve({
success: true,
payload
});

const createTrezorErrorResponse = () => Promise.resolve({
success: false,
payload: {
error: 'Trezor error'
}
});

const AssertError = done => (error) => {
expect(error).toBeDefined();
done();
};

beforeEach(() => {
spyOn(window.TrezorConnect, 'init');
mockNemGetAddress = spyOn(window.TrezorConnect, 'nemGetAddress');
mockNemSignTransaction = spyOn(window.TrezorConnect, 'nemSignTransaction');
mockCipherKeyValue = spyOn(window.TrezorConnect, 'cipherKeyValue');

trezorService = new Trezor();
});

describe('constructor', () => {
it('initialize TrezorConnect with correct config', () => {
// Act + Assert:
expect(window.TrezorConnect.init).toHaveBeenCalledWith({
manifest: {
email: 'maintainers@nem.io',
appUrl: 'https://www.nem.io',
},
debug: true,
coreMode: 'popup',
});
});
});

describe('createWallet', () => {
it('create a wallet with primary account', (done) => {
mockNemGetAddress.and.returnValue(
createTrezorSuccessResponse({ address: TESTNET_ADDRESS })
);

trezorService.createWallet(TESTNET_NETWORK)
.then(result => {
expect(result).toEqual({
name: 'TREZOR',
accounts: {
'0': {
brain: false,
algo: 'trezor',
encrypted: '',
iv: '',
address: TESTNET_ADDRESS,
label: 'Primary',
network: TESTNET_NETWORK,
child: '',
hdKeypath: MOCK_HD_PATH
}
}
});
done();
});
});

it('rejected when Trezor operation fails', (done) => {
// Arrange:
mockNemGetAddress.and.returnValue(
createTrezorErrorResponse()
);

// Act + Assert:
trezorService.createWallet(TESTNET_NETWORK)
.then(() => {}, AssertError(done));
});
});

describe('deriveRemote', () => {
it('returns derive remote account', (done) => {
// Arrange:
const mockPrivateKey = '0000000000000000000000000000000000000000000000000000000000000000';
mockCipherKeyValue.and.returnValue(
createTrezorSuccessResponse({ value: mockPrivateKey })
);

// Act:
trezorService.deriveRemote(createTestAccount(), TESTNET_NETWORK)
.then(result => {
// Assert:
expect(result).toEqual({
address: 'TBONKWCOWBZYZB2I5JD3LSDBQVBYHB757VN3SKPP',
privateKey: mockPrivateKey,
publicKey: '462ee976890916e54fa825d26bdd0235f5eb5b6a143c199ab0ae5ee9328e08ce'
});
done();
});
});

it('rejected when Trezor operation fails', (done) => {
// Arrange:
mockCipherKeyValue.and.returnValue(
createTrezorErrorResponse()
);

// Act + Assert:
trezorService.deriveRemote(createTestAccount(), TESTNET_NETWORK)
.then(() => {}, AssertError(done));
});
});

describe('serialize', () => {
const createTestTransaction = {
type: TransactionTypes.TRANSFER,
amount: 100
}

it('returns transaction payload', (done) => {
// Arrange:
const mockSignature = 'serialize payload';
mockNemSignTransaction.and.returnValue(
createTrezorSuccessResponse(mockSignature)
);

// Act:
trezorService.serialize(createTestTransaction, createTestAccount())
.then(result => {
// Assert:
expect(result).toBe(mockSignature);
done();
});
});

it('rejected when signing fails', (done) => {
// Arrange:
mockNemSignTransaction.and.returnValue(
createTrezorErrorResponse()
);

// Act + Assert:
trezorService.serialize(createTestTransaction, createTestAccount())
.then(() => {}, AssertError(done));
});
});

describe('showAccount', () => {
it('returns account address', (done) => {
// Arrange:
mockNemGetAddress.and.returnValue(
createTrezorSuccessResponse({ address: TESTNET_ADDRESS })
);

// Act:
trezorService.showAccount(createTestAccount())
.then(result => {
// Assert:
expect(result).toBe(TESTNET_ADDRESS);
done();
});
});

it('rejected when showing account fails', (done) => {
// Arrange:
mockNemGetAddress.and.returnValue(
createTrezorErrorResponse()
);

// Act + Assert:
trezorService.showAccount(createTestAccount())
.then(() => {}, AssertError(done));
});
});
});
20 changes: 6 additions & 14 deletions nanowallet/tests/test/importanceTransferModuleTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export const assertTestnetNodes = ($controller, $rootScope, controlName, Wallet,

// Act:
ctrl.setNodes();

// Assert:
expect(ctrl.nodes).toEqual([
{
Expand Down Expand Up @@ -101,7 +101,7 @@ export const assertMainnetNodes = async ($controller, $rootScope, controlName, W
"port": 7890
},
{
"host": "http://62.75.171.41",
"host": "http://bigalice3.nem.ninja",
"port": 7890
},
{
Expand All @@ -124,18 +124,6 @@ export const assertMainnetNodes = async ($controller, $rootScope, controlName, W
"host": "http://nijuichi.nem.ninja",
"port": 7890
},
{
"host": "http://alice2.nem.ninja",
"port": 7890
},
{
"host": "http://alice3.nem.ninja",
"port": 7890
},
{
"host": "http://alice4.nem.ninja",
"port": 7890
},
{
"host": "http://alice5.nem.ninja",
"port": 7890
Expand All @@ -148,6 +136,10 @@ export const assertMainnetNodes = async ($controller, $rootScope, controlName, W
"host": "http://alice7.nem.ninja",
"port": 7890
},
{
"host": "http://alice8.nem.ninja",
"port": 7890
},
{
"host": "http://localhost",
"port": 7890
Expand Down