Skip to content

Commit

Permalink
add scan ota button
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonHJ committed Mar 28, 2022
1 parent 77a6bf9 commit 2c1d357
Show file tree
Hide file tree
Showing 14 changed files with 122 additions and 32 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,7 +1,7 @@
{
"name": "wanwallet",
"productName": "Wan Wallet",
"version": "1.5.5",
"version": "1.5.6",
"description": "Wanchain's new multicoin wallet",
"main": "./build/main.js",
"author": {
Expand Down
13 changes: 8 additions & 5 deletions src/app/containers/Login/index.js
Expand Up @@ -4,7 +4,7 @@ import { observer, inject } from 'mobx-react';
import { Button, Input, message, Modal } from 'antd';

import style from './index.less';
import { BTCPATH_TEST, WANPATH } from 'utils/settings';
import { WANPATH } from 'utils/settings';
import { openScanOTA, createBTCAddr, createETHAddr, createXRPAddr } from 'utils/helper';

message.config({
Expand All @@ -14,6 +14,7 @@ message.config({

@inject(stores => ({
auth: stores.session.auth,
settings: stores.session.settings,
btcPath: stores.btcAddress.btcPath,
addrInfo: stores.wanAddress.addrInfo,
language: stores.languageIntl.language,
Expand Down Expand Up @@ -58,10 +59,12 @@ class Login extends Component {
await this.props.updateUserAccountDB('1.0.0', true);
}
// Open scanner to scan the smart contract to get private tx balance.
const normalObj = Object.values(this.props.addrInfo['normal']).map(item => [1, `${WANPATH}${item.path}`]);
const importObj = Object.values(this.props.addrInfo['import']).map(item => [5, `${WANPATH}${item.path}`]);
const rawKeyObj = Object.values(this.props.addrInfo['rawKey']).map(item => [6, `${WANPATH}${item.path}`]);
openScanOTA([].concat(normalObj, importObj, rawKeyObj));
if (this.props.settings.scan_ota) {
const normalObj = Object.values(this.props.addrInfo['normal']).map(item => [1, `${WANPATH}${item.path}`]);
const importObj = Object.values(this.props.addrInfo['import']).map(item => [5, `${WANPATH}${item.path}`]);
const rawKeyObj = Object.values(this.props.addrInfo['rawKey']).map(item => [6, `${WANPATH}${item.path}`]);
openScanOTA([].concat(normalObj, importObj, rawKeyObj));
}

if (!Object.keys(this.props.btcAddrInfo.normal).length) {
createBTCAddr(this.props.btcPath, 0).then(addressInfo => {
Expand Down
5 changes: 3 additions & 2 deletions src/app/containers/Register/index.js
Expand Up @@ -17,6 +17,7 @@ const Step = Steps.Step;
@inject(stores => ({
pwd: stores.mnemonic.pwd,
method: stores.mnemonic.method,
settings: stores.session.settings,
isMainNetwork: stores.session.isMainNetwork,
current: stores.mnemonic.current,
mnemonic: stores.mnemonic.mnemonic,
Expand Down Expand Up @@ -102,7 +103,7 @@ class Register extends Component {
}

done = () => {
const { isMainNetwork, mnemonic, newPhrase, pwd, addWANAddress, addETHAddress, addBTCAddress, addXRPAddress, addBNBAddress } = this.props;
const { isMainNetwork, mnemonic, newPhrase, pwd, addWANAddress, addETHAddress, addBTCAddress, addXRPAddress, addBNBAddress, settings } = this.props;
if (newPhrase.join(' ') === mnemonic) {
this.setState({ loading: true });
wand.request('phrase_import', { phrase: mnemonic, pwd }, err => {
Expand All @@ -118,7 +119,7 @@ class Register extends Component {
} else {
try {
let [wanAddrInfo, ethAddrInfo, btcMainAddInfo, xrpAddrInfo] = await Promise.all([
createFirstAddr(WALLETID.NATIVE, 'WAN', `${WANPATH}0`, 'WAN-Account1'),
createFirstAddr(WALLETID.NATIVE, 'WAN', `${WANPATH}0`, 'WAN-Account1', settings.scan_ota),
createFirstAddr(WALLETID.NATIVE, 'ETH', `${ETHPATH}0`, 'ETH-Account1'),
createBTCAddr(isMainNetwork ? BTCPATH_MAIN : BTCPATH_TEST, 0),
createXRPAddr(),
Expand Down
38 changes: 27 additions & 11 deletions src/app/containers/WanAccount/index.js
Expand Up @@ -3,22 +3,23 @@ import { toChecksumOTAddress } from 'wanchain-util';
import intl from 'react-intl-universal';
import React, { Component } from 'react';
import { observer, inject } from 'mobx-react';
import { Button, Table, Row, Col, message, Tooltip, Icon, Tag } from 'antd';
import { Button, Table, Row, Col, message, Tooltip, Icon, Tag, Switch } from 'antd';
import style from './index.less';
import totalImg from 'static/image/wan.png';
import { WALLETID } from 'utils/settings';
import WANTransHistory from 'components/WANTransHistory';
import CopyAndQrcode from 'components/CopyAndQrcode';
import SendNormalTrans from 'components/SendNormalTrans';
import RedeemFromPrivate from 'components/RedeemFromPrivate';
import { hasSameName, checkAddrType, getWalletIdByType, createWANAddr } from 'utils/helper';
import { hasSameName, checkAddrType, getWalletIdByType, createWANAddr, initScanOTA, stopScanOTA } from 'utils/helper';
import { EditableFormRow, EditableCell } from 'components/Rename';
import WarningExistAddress from 'components/WarningExistAddress';
import arrow from 'static/image/arrow.png';

const CHAINTYPE = 'WAN';

@inject(stores => ({
settings: stores.session.settings,
addrInfo: stores.wanAddress.addrInfo,
language: stores.languageIntl.language,
getAddrList: stores.wanAddress.getAddrList,
Expand All @@ -28,6 +29,7 @@ const CHAINTYPE = 'WAN';
updateTransHistory: () => stores.wanAddress.updateTransHistory(),
changeTitle: newTitle => stores.languageIntl.changeTitle(newTitle),
updateName: (arr, type) => stores.wanAddress.updateName(arr, type),
updateSettings: newValue => stores.session.updateSettings(newValue),
}))

@observer
Expand Down Expand Up @@ -99,7 +101,7 @@ class WanAccount extends Component {
}

createAccount = () => {
const { addAddress, getAddrList } = this.props;
const { addAddress, getAddrList, settings } = this.props;
if (this.canCreate) {
try {
this.canCreate = false;
Expand All @@ -113,11 +115,13 @@ class WanAccount extends Component {
createWANAddr(checkDuplicate).then(addressInfo => {
addAddress(addressInfo);
this.canCreate = true;
wand.request('address_scanMultiOTA', { path: [[WALLETID.NATIVE, addressInfo.path]] }, function (err, res) {
if (err) {
console.log('Open OTA scanner failed:', err);
}
});
if (settings.scan_ota) {
wand.request('address_scanMultiOTA', { path: [[WALLETID.NATIVE, addressInfo.path]] }, function (err, res) {
if (err) {
console.log('Open OTA scanner failed:', err);
}
});
}
message.success(intl.get('WanAccount.createAccountSuccess'));
}).catch((e) => {
this.canCreate = true;
Expand Down Expand Up @@ -297,8 +301,17 @@ class WanAccount extends Component {
this.setState({ isExist: false })
}

handleScanOTA = checked => {
this.props.updateSettings({ scan_ota: checked });
if (checked) {
initScanOTA();
} else {
stopScanOTA();
}
}

render() {
const { getAllAmount, getAddrList } = this.props;
const { getAllAmount, getAddrList, settings } = this.props;
const components = {
body: {
cell: EditableCell,
Expand All @@ -322,13 +335,16 @@ class WanAccount extends Component {
return (
<div className="account">
<Row className={style.title + ' title'}>
<Col span={12} className="col-left">
<Col span={16} className="col-left">
<img className="totalImg" src={totalImg} alt={intl.get('WanAccount.wanchain')} />
<span className="wanTotal">{getAllAmount}</span>
<span className="wanTex">{intl.get('WanAccount.wan')}</span>
<Tag className="symbol">{intl.get('Common.wanchain')}</Tag>
<Tooltip placement="top" title="The balances of all your private addresses will be scanned and updated to the latest state when you turn it on. This may take a while."><Icon style={{ marginLeft: '45px', position: 'relative', top: '2px' }} type="question-circle" /></Tooltip>
<span style={{ color: '#BCBCC1', display: 'inline-block', marginRight: '5px', marginLeft: '5px' }} className="wanTex">Refresh Private Balances</span>
<Switch size="small" checked={settings.scan_ota} className={style.switchBtn} defaultChecked onChange={this.handleScanOTA} />
</Col>
<Col span={12} className="col-right">
<Col span={8} className="col-right">
<Button className="createBtn" type="primary" shape="round" size="large" onClick={this.createAccount}>{intl.get('Common.create')}</Button>
</Col>
</Row>
Expand Down
8 changes: 8 additions & 0 deletions src/app/global.less
Expand Up @@ -1107,4 +1107,12 @@
::selection {
color: #151625;
background: #fff;
}

.ant-switch {
background-color: #30313D;
}

.ant-switch-checked {
background-color: #1183E6;
}
2 changes: 2 additions & 0 deletions src/app/locales/en-US.js
Expand Up @@ -653,6 +653,8 @@ const en_US = {
'Config.others': 'Other Options',
'Config.enableOfflineWallet': 'Enable Offline Wallet',
'Config.offlineWallet': 'Show offline wallet in the sidebar',
'Config.enableScanOTA': 'Enable Scan OTA',
'Config.scanOTA': 'Scan OTA Address',

'staking.validatorRegister': 'Validator Register',
'staking.validatorUpdate': 'Validator Update',
Expand Down
1 change: 1 addition & 0 deletions src/app/stores/session.js
Expand Up @@ -22,6 +22,7 @@ class Session {
reinput_pwd: false,
staking_advance: false,
offline_wallet: false,
scan_ota: false,
logout_timeout: '5',
};

Expand Down
32 changes: 30 additions & 2 deletions src/app/utils/helper.js
Expand Up @@ -721,7 +721,33 @@ export const openScanOTA = function (path) {
})
}

export const createFirstAddr = function (walletID, chainType, path, name) {
export const initScanOTA = function () {
return new Promise((resolve, reject) => {
wand.request('address_initScanOTA', {}, function (err, res) {
if (err) {
console.log('Open OTA scanner failed:', err);
return reject(err);
} else {
return resolve();
}
});
})
}

export const stopScanOTA = function () {
return new Promise((resolve, reject) => {
wand.request('address_stopScanMultiOTA', {}, function (err, res) {
if (err) {
console.log('Stop OTA scanner failed:', err);
return reject(err);
} else {
return resolve();
}
});
})
}

export const createFirstAddr = function (walletID, chainType, path, name, scan_ota) {
return new Promise((resolve, reject) => {
wand.request('address_getOne', { walletID, chainType, path }, (err, val_address_get) => {
if (!err) {
Expand All @@ -740,7 +766,9 @@ export const createFirstAddr = function (walletID, chainType, path, name) {
}

// Scan new account
openScanOTA([[1, path]]);
if (scan_ota) {
openScanOTA([[1, path]]);
}
} else {
addressInfo = {
start: 0,
Expand Down
33 changes: 30 additions & 3 deletions src/controllers/index.js
Expand Up @@ -445,7 +445,7 @@ ipc.on(ROUTE_WALLET, async (event, actionUni, payload) => {
if (type === 'BTC') {
ccUtil.btcImportAddress(addr.address);
}
if (type === 'WAN') {
if (type === 'WAN' && setting.get('settings').scan_ota) {
ccUtil.scanOTA(wid, newPath);
}
ret = {
Expand Down Expand Up @@ -750,6 +750,32 @@ ipc.on(ROUTE_ADDRESS, async (event, actionUni, payload) => {
}
break

case 'stopScanMultiOTA':
{
try {
ccUtil.stopCheckAcctsScan();
} catch (e) {
logger.error('stopScanMultiOTA failed:')
logger.error(e.message || e.stack)
err = e
}
sendResponse([ROUTE_ADDRESS, [action, id].join('#')].join('_'), event, { err: err, data: { status: 'Opened' } })
}
break

case 'initScanOTA':
{
try {
ccUtil.initScanOTA();
} catch (e) {
logger.error('initScanOTA failed:')
logger.error(e.message || e.stack)
err = e
}
sendResponse([ROUTE_ADDRESS, [action, id].join('#')].join('_'), event, { err: err, data: { status: 'Opened' } })
}
break

case 'isWanAddress':
let ret;
try {
Expand Down Expand Up @@ -845,8 +871,9 @@ ipc.on(ROUTE_ADDRESS, async (event, actionUni, payload) => {
hdUtil.importKeyStore(`${WANBIP44Path}0`, keyFileContent, keyFilePwd, hdWalletPwd, checkDuplicate);
hdUtil.createUserAccount(5, `${WANBIP44Path}${path}`, { name: accountName, addr, waddr });
Windows.broadcast('notification', 'keyfilepath', { path, name: accountName, addr: wanUtil.toChecksumAddress(addr), waddr: wanUtil.toChecksumOTAddress(waddr) });
ccUtil.scanOTA(5, `${WANBIP44Path}${path}`);

if (setting.get('settings').scan_ota) {
ccUtil.scanOTA(5, `${WANBIP44Path}${path}`);
}
sendResponse([ROUTE_ADDRESS, [action, id].join('#')].join('_'), event, { err: err, data: true })
} catch (e) {
console.log('e:', e);
Expand Down
10 changes: 6 additions & 4 deletions src/modals/systemUpdate.css
Expand Up @@ -164,10 +164,10 @@ p {

#loading-outer {
display: inline-block;
box-sizing: border-box;
width: 100%;
margin-right: -4em;
padding-right: 4em;
width: 90%;
border-radius: 100px;
height: 8px;
background-color: white;
}

#loading-bar {
Expand All @@ -177,6 +177,8 @@ p {
height: 8px;
border-radius: 100px;
background-image: linear-gradient(to right, rgb(16, 142, 233) 0%, rgb(135, 208, 104) 100%);
position: relative;
top: -7px;
}

#percentage {
Expand Down
6 changes: 3 additions & 3 deletions src/modals/systemUpdate.html
Expand Up @@ -96,10 +96,10 @@
'downloading'
];
const setLoadingPercentage = ({
perc
percent
}) => {
document.getElementById('percentage').innerText = perc + '%';
document.getElementById('loading-bar').style.width = perc.toString() + '%';
document.getElementById('percentage').innerText = Number(percent).toFixed(1) + '%';
document.getElementById('loading-bar').style.width = Number(percent).toFixed(1) + '%';
}
const setWindowsLoadingPercentage = ({
percent,
Expand Down
2 changes: 1 addition & 1 deletion src/modules/preload/routes.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/modules/walletBackend/config.js
Expand Up @@ -7,6 +7,7 @@ class ConfigFactoryService {
_init() {
this.config = {}
this.config.network = setting.network
this.config.scan_ota = setting.settings.scan_ota
this.dataPathPrex = path.join(setting.userDataPath, `Db${[undefined, '0'].includes(setting.mnemonic) ? '' : setting.mnemonic}`)

if (this.config.network.includes('main')) {
Expand Down
1 change: 1 addition & 0 deletions src/utils/Settings.js
Expand Up @@ -22,6 +22,7 @@ const defaultConfig = {
reinput_pwd: false,
staking_advance: false,
offline_wallet: false,
scan_ota: false,
logout_timeout: '5',
main: {
tokens: {
Expand Down

0 comments on commit 2c1d357

Please sign in to comment.