import uuid from 'uuid'
-import {chainClient} from 'utility/environment'
+import {chainClient, btmID} from 'utility/environment'
import {parseNonblankJSON} from 'utility/string'
import {push} from 'react-router-redux'
import {baseCreateActions, baseListActions} from 'features/shared/actions'
+import { normalTxActionBuilder, issueAssetTxActionBuilder } from './transactions'
const type = 'transaction'
}
if (formParams.form === 'normalTx') {
- let gasPrice = 0
- switch (formParams.gas.type) {
- case 'Fast':
- gasPrice = formParams.state.estimateGas * 2
- break
- case 'Customize':
- gasPrice = formParams.gas.price
- break
- case 'Standard':
- default:
- gasPrice = formParams.state.estimateGas * 1
- break
- }
+ const gasPrice = formParams.state.estimateGas * Number(formParams.gasLevel)
+ builder.actions = normalTxActionBuilder(formParams, Number(gasPrice), 'amount')
+ }
- builder.actions.push({
- accountAlias: formParams.accountAlias,
- accountId: formParams.accountId,
- assetAlias: 'BTM',
- amount: Number(gasPrice),
- type: 'spend_account'
- })
- builder.actions.push({
- accountAlias: formParams.accountAlias,
- accountId: formParams.accountId,
- assetAlias: formParams.assetAlias,
- assetId: formParams.assetId,
- amount: formParams.amount,
- type: 'spend_account'
- })
- builder.actions.push({
- address: formParams.address,
- assetAlias: formParams.assetAlias,
- assetId: formParams.assetId,
- amount: formParams.amount,
- type: 'control_address'
- })
+ if (formParams.form === 'issueAssetTx') {
+ const gasPrice = formParams.state.estimateGas * Number(formParams.gasLevel)
+ builder.actions = issueAssetTxActionBuilder(formParams, Number(gasPrice), 'amount')
}
+
if (builder.baseTransaction == '') {
delete builder.baseTransaction
}
}
// normal transactions
- if(formParams.form === 'normalTx'){
+ if( formParams.form === 'normalTx'){
const accountId = formParams.accountId
const accountAlias = formParams.accountAlias
const accountInfo = Object.assign({}, accountAlias!== ''? {alias: accountAlias}: {id: accountId})
+ const isBTM = (formParams.assetId === btmID) || (formParams.assetAlias === 'BTM')
+
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.')
+ throw {code: 'F_BTM003'}
}
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.')
+ throw new Error('PasswordWrong')
}
- return client.transactions.build(builderFunction)
+ if(isBTM)
+ return client.transactions.buildChain(builderFunction)
+ else
+ return client.transactions.build(builderFunction)
})
.then( tpl => {
- const body = Object.assign({}, {password: formParams.password, transaction: tpl.data})
- return client.transactions.sign(body)
+ if(isBTM){
+ const body = Object.assign({}, {password: formParams.password, transactions: tpl.data})
+ return client.transactions.signBatch(body)
+ }
+ else{
+ 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.')
+ throw {code: 'F_BTM100'}
+ }
+ if(isBTM){
+ const rawTransactions = signed.data.transaction.map(tx => tx.rawTransaction)
+ return client.transactions.submitBatch(rawTransactions)
+ }
+ else{
+ return client.transactions.submit(signed.data.transaction.rawTransaction)
}
- return client.transactions.submit(signed.data.transaction.rawTransaction)
})
.then(submitSucceeded)
}
//advanced transactions
- else{
+ else if( formParams.form === 'advancedTx' ){
const buildPromise = (formParams.state.showAdvanced && formParams.signTransaction) ? null :
client.transactions.build(builderFunction)
return buildPromise
.then(resp => signAndSubmitGeneratedTransaction(resp.data))
}
+
+ //issue Asset transactions
+ else if( formParams.form === 'issueAssetTx'){
+ //submit action
+ const signAndSubmitTransaction = (transaction) => {
+ const body = Object.assign({}, {password: formParams.password, transaction: transaction})
+ return client.transactions.sign(body)
+ .then( signed =>{
+ if(!signed.data.signComplete){
+ const id = uuid.v4()
+ dispatch({
+ type: 'GENERATED_TX_HEX',
+ generated: {
+ id: id,
+ hex: JSON.stringify(signed.data.transaction),
+ },
+ })
+ dispatch(push(`/transactions/generated/${id}`))
+
+ }else{
+ return client.transactions.submit(signed.data.transaction.rawTransaction)
+ .then(submitSucceeded)
+ }
+ })
+ }
+
+ if (formParams.submitAction == 'submit') {
+ return client.transactions.build(builderFunction)
+ .then(tpl => signAndSubmitTransaction(tpl.data))
+ }
+
+ if( formParams.submitAction == 'sign' ){
+ const transaction = JSON.parse(formParams.signTransaction)
+ return signAndSubmitTransaction(transaction)
+ }
+
+ }
}
const decode = (data) => {
}
})
.catch(err => {
+ dispatch({type: 'DECODE_TRANSACTION', data:[]})
throw {_error: err}
})
}