OSDN Git Service

fixed normal transactions wrong password frozen 5 mins.
authorZhiting Lin <zlin035@uottawa.ca>
Tue, 14 Aug 2018 10:48:51 +0000 (18:48 +0800)
committerZhiting Lin <zlin035@uottawa.ca>
Tue, 14 Aug 2018 10:48:51 +0000 (18:48 +0800)
src/features/transactions/actions.js
src/sdk/api/accounts.js

index d4549ec..6574494 100644 (file)
@@ -99,15 +99,14 @@ function preprocessTransaction(formParams) {
 form.submitForm = (formParams) => function (dispatch) {
   const client = chainClient()
 
-  const buildPromise = (formParams.state.showAdvanced && formParams.signTransaction) ? null :
-    client.transactions.build(builder => {
-      const processed = preprocessTransaction(formParams)
+  const builderFunction = ( builder ) => {
+    const processed = preprocessTransaction(formParams)
 
-      builder.actions = processed.actions
-      if (processed.baseTransaction) {
-        builder.baseTransaction = processed.baseTransaction
-      }
-    })
+    builder.actions = processed.actions
+    if (processed.baseTransaction) {
+      builder.baseTransaction = processed.baseTransaction
+    }
+  }
 
   const submitSucceeded = () => {
     dispatch(form.created())
@@ -121,21 +120,43 @@ form.submitForm = (formParams) => function (dispatch) {
 
   // normal transactions
   if(formParams.form === 'normalTx'){
-    return buildPromise
-      .then(tpl => {
+
+    const accountId = formParams.accountId
+    const accountAlias = formParams.accountAlias
+    const accountInfo = Object.assign({},  accountAlias!== ''? {alias: accountAlias}: {id: accountId})
+
+    return client.accounts.query(accountInfo)
+      .then( resp => {
+        if(resp.data[0].xpubs.length > 1){
+          throw new Error('Your account has multiple keys, please use advanced transactions.')
+        }
+        const body = Object.assign({}, {xpub: resp.data[0].xpubs[0], password: formParams.password})
+        return client.mockHsm.keys.checkPassword(body)
+      })
+      .then( result => {
+        if(!result.data.checkResult){
+          throw new Error('Your password is wrong, please check your password.')
+        }
+        return client.transactions.build(builderFunction)
+      })
+      .then( tpl => {
         const body = Object.assign({}, {password: formParams.password, transaction: tpl.data})
         return client.transactions.sign(body)
       })
       .then(signed => {
         if(!signed.data.signComplete){
-          throw new Error('Signature failed, it might be your password is wrong.')
+          throw new Error('Signature failed.')
         }
         return client.transactions.submit(signed.data.transaction.rawTransaction)
       })
       .then(submitSucceeded)
   }
+
   //advanced transactions
   else{
+    const buildPromise = (formParams.state.showAdvanced && formParams.signTransaction) ? null :
+      client.transactions.build(builderFunction)
+
     if (formParams.submitAction == 'submit') {
       const signAndSubmitTransaction = (transaction) => {
         const body = Object.assign({}, {password: formParams.password, transaction: transaction})
index 4a5df5a..a7502d0 100644 (file)
@@ -27,8 +27,6 @@ const accountsAPI = (client) => {
 
     listAddresses: (accountId) => shared.query(client, 'accounts', '/list-addresses', {account_id: accountId}),
 
-    listPubKey: (accountId) => shared.query(client, 'accounts', '/list-pubkeys', {account_id: accountId}),
-
     validateAddresses: (address, cb) => shared.query(client, 'accounts', '/validate-address', {'address': address},  {cb})
   }
 }