diff --git a/app/components/wallet.jsx b/app/components/wallet.jsx
index 03292b4..7cfaa1a 100644
--- a/app/components/wallet.jsx
+++ b/app/components/wallet.jsx
@@ -6,6 +6,7 @@ import classnames from 'classnames'
import CopyToClipboard from 'react-copy-to-clipboard'
import zencashjs from 'zencashjs'
+import MDRefresh from 'react-icons/lib/md/refresh'
import MDCopy from 'react-icons/lib/md/content-copy'
import MDSettings from 'react-icons/lib/md/settings'
import FARepeat from 'react-icons/lib/fa/repeat'
@@ -90,24 +91,22 @@ class ZWalletGenerator extends React.Component {
render () {
return (
-
-
- Create New Wallet
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
Create New Wallet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
)
}
}
@@ -245,13 +244,12 @@ class ZWalletSettings extends React.Component {
ZenCash Wallet Settings
-
-
-
-
+ />
+
+
Insight API
- {key} |
- {this.state[key].confirmedBalance} |
- {this.state[key].unconfirmedBalance} |
+ {key} |
+
+
+ } tooltipText={'copy wif private key'}/>
+
+ |
+ {this.props.publicAddresses[key].confirmedBalance} |
+ {this.props.publicAddresses[key].unconfirmedBalance} |
)
+
+ const c_confirmed = Number(this.props.publicAddresses[key].confirmedBalance)
+ const c_unconfirmed = Number(this.props.publicAddresses[key].unconfirmedBalance)
+ if (!isNaN(c_confirmed)){
+ totalConfirmed += c_confirmed
+ }
+
+ if (!isNaN(c_unconfirmed)){
+ totalUnconfirmed += c_unconfirmed
+ }
}
- }.bind(this))
+ }.bind(this))
return (
@@ -393,16 +393,37 @@ class ZAddressInfo extends React.Component {
{this.state.retrieveAddressError ?
Error connecting to the Insight API. Double check the Insight API supplied in settings.
:
- The balance displayed here is dependent on the insight node }
+ The balance displayed here is dependent on the insight node.
Automatically updates every 5 minutes.
+ }
+ } tooltipText={'manually refresh balance'}/>
-
+
+
+
+
+
+
+ Total Confirmed |
+ Total Unconfirmed |
+
+
+
+
+ {totalConfirmed} |
+ {totalUnconfirmed} |
+
+
+
+
+
Address |
+ WIF |
Confirmed |
Unconfirmed |
@@ -490,6 +511,12 @@ class ZSendZEN extends React.Component {
const value = this.state.amount;
const fee = this.state.fee;
const recipientAddress = this.state.recipientAddress;
+ const senderAddress = this.state.selectedAddress;
+
+ // Convert how much we wanna send
+ // to satoshis
+ const satoshisToSend = Math.round(value * 100000000)
+ const satoshisfeesToSend = Math.round(fee * 100000000)
// Reset zen send progress and error message
this.setProgressValue(0)
@@ -498,15 +525,24 @@ class ZSendZEN extends React.Component {
// Error strings
var errString = ''
- // Validation
+ // Validation
+ if (senderAddress === ''){
+ errString += '`From Address` field can\'t be empty.;'
+ }
+
if (recipientAddress.length !== 35) {
- errString = 'Invalid address. Only transparent addresses are supported at this point in time.;'
+ errString += 'Invalid address. Only transparent addresses are supported at this point in time.;'
}
if (typeof parseInt(value) !== 'number' || value === ''){
errString += 'Invalid amount.;'
}
+ // Can't send 0 satoshis
+ if (satoshisToSend === 0){
+ errString += 'Amount can\'t be 0.;'
+ }
+
if (typeof parseInt(fee) !== 'number' || fee === ''){
errString += 'Invalid fee.;'
}
@@ -516,23 +552,14 @@ class ZSendZEN extends React.Component {
return
}
+ // Private key
+ const senderPrivateKey = this.props.publicAddresses[senderAddress].privateKey;
+
// Get previous transactions
- const prevTxURL = urlAppend(this.props.settings.insightAPI, 'addr/') + this.props.publicAddresses + '/utxo'
+ const prevTxURL = urlAppend(this.props.settings.insightAPI, 'addr/') + senderAddress + '/utxo'
const infoURL = urlAppend(this.props.settings.insightAPI, 'status?q=getInfo')
const sendRawTxURL = urlAppend(this.props.settings.insightAPI, 'tx/send')
- // Convert how much we wanna send
- // to satoshis
- const satoshisToSend = Math.round(value * 100000000)
- const satoshisfeesToSend = Math.round(fee * 100000000)
-
- // Can't send 0 satoshis
- if (satoshisToSend === 0){
- this.setSendErrorMessage('Amount can\'t be 0')
- this.setProgressValue(0)
- return
- }
-
// Building our transaction TXOBJ
// How many satoshis do we have so far
var satoshisSoFar = 0
@@ -585,14 +612,14 @@ class ZSendZEN extends React.Component {
// fail and tell user
if (satoshisSoFar < satoshisToSend + satoshisfeesToSend){
this.setSendErrorMessage('Not enough confirmed ZEN in account to perform transaction')
- this.setProgressValue(0)
+ this.setProgressValue(0)
}
// If we don't have exact amount
// Refund remaining to current address
if (satoshisSoFar !== satoshisToSend + satoshisfeesToSend){
var refundSatoshis = satoshisSoFar - satoshisToSend - satoshisfeesToSend
- recipients = recipients.concat({address: this.props.publicAddresses, satoshis: refundSatoshis})
+ recipients = recipients.concat({address: senderAddress, satoshis: refundSatoshis})
}
// Create transaction
@@ -600,7 +627,7 @@ class ZSendZEN extends React.Component {
// Sign each history transcation
for (var i = 0; i < history.length; i ++){
- txObj = zencashjs.transaction.signTx(txObj, i, this.props.privateKey, this.props.settings.compressPubKey)
+ txObj = zencashjs.transaction.signTx(txObj, i, senderPrivateKey, this.props.settings.compressPubKey)
}
// Convert it to hex string
@@ -640,7 +667,7 @@ class ZSendZEN extends React.Component {
)
}
- // Else
+ // Else show error why
else if (this.state.sendErrorMessage !== ''){
zenTxLink = (
this.state.sendErrorMessage.split(';').map(function (s) {
@@ -655,6 +682,17 @@ class ZSendZEN extends React.Component {
)
}
+ // Send addresses
+ // Key is the address btw
+ var sendAddresses = [];
+ Object.keys(this.props.publicAddresses).forEach(function(key) {
+ if (key !== undefined){
+ sendAddresses.push(
+
+ )
+ }
+ }.bind(this))
+
return (
@@ -663,15 +701,14 @@ class ZSendZEN extends React.Component {
ALWAYS VALIDATE YOUR DESINATION ADDRESS BY SENDING SMALL AMOUNTS OF ZEN FIRST
- From
+ From Address
-
-
-
+
+ {sendAddresses}
- Address
+ To Address
@@ -773,12 +810,13 @@ class ZWalletTabs extends React.Component {
@@ -796,6 +834,7 @@ export default class ZWallet extends React.Component {
this.setPrivateKeys = this.setPrivateKeys.bind(this)
this.setInsightAPI = this.setInsightAPI.bind(this)
this.setUnlockType = this.setUnlockType.bind(this)
+ this.setPublicAddressesKeyValue = this.setPublicAddressesKeyValue.bind(this)
this.toggleUseTestNet = this.toggleUseTestNet.bind(this)
this.toggleCompressPubKey = this.toggleCompressPubKey.bind(this)
this.toggleShowSettings = this.toggleShowSettings.bind(this)
@@ -803,13 +842,13 @@ export default class ZWallet extends React.Component {
this.state = {
privateKeys : '',
- publicAddresses: null, // Public address will be {address: privateKey}
+ publicAddresses: null, // Public address will be {address: {privateKey: '', transactionURL: '', privateKeyWIF: ''}
settings: {
showSettings: false,
showWalletGen: false,
compressPubKey: true,
insightAPI: 'https://explorer.zensystem.io/insight-api-zen/',
- explorerURL: 'https://explorer.zensystem.io/insight/',
+ explorerURL: 'https://explorer.zensystem.io/',
useTestNet: false,
unlockType: UNLOCK_WALLET_TYPE.IMPORT_WALLET
}
@@ -837,10 +876,20 @@ export default class ZWallet extends React.Component {
}
for (var i = 0; i < this.state.privateKeys.length; i++){
+ const pubKeyHash = this.state.settings.useTestNet ? zencashjs.config.testnet.wif : zencashjs.config.mainnet.wif
+
const c_pk = this.state.privateKeys[i]
- const c_addr = _privKeyToAddr(c_pk, this.state.settings.compressPubKey, this.state.settings.useTestNet)
- publicAddresses[c_addr] = c_pk
+ const c_pk_wif = zencashjs.address.privKeyToWIF(c_pk, true, pubKeyHash)
+ const c_addr = _privKeyToAddr(c_pk, this.state.settings.compressPubKey, this.state.settings.useTestNet)
+
+ publicAddresses[c_addr] = {
+ privateKey: c_pk,
+ privateKeyWIF: c_pk_wif,
+ transactionURL: urlAppend(this.state.settings.explorerURL, 'address/') + c_addr,
+ confirmedBalance: 'loading...',
+ unconfirmedBalance: 'loading...',
+ }
}
// Set public address
@@ -874,6 +923,15 @@ export default class ZWallet extends React.Component {
})
}
+ setPublicAddressesKeyValue(address, key, value){
+ var newPublicAddresses = this.state.publicAddresses
+ newPublicAddresses[address][key] = value
+
+ this.setState({
+ publicAddresses: newPublicAddresses
+ })
+ }
+
setInsightAPI(uri){
var _settings = this.state.settings
_settings.insightAPI = uri
@@ -941,17 +999,17 @@ export default class ZWallet extends React.Component {
return (
-
+
ZenCash Wallet
} tooltipText={'settings'}/>
} tooltipText={'reset wallet'}/>
-
+
-
+
{ this.state.publicAddresses === null ?
(
)
}
- { this.state.settings.showWalletGen ?
- (
) : null
- }
+
+
+ { this.state.settings.showWalletGen ?
+ (
) : null
+ }
+
+
);
}
diff --git a/dist/bundle.js b/dist/bundle.js
index 3a0f419..b563ad3 100644
--- a/dist/bundle.js
+++ b/dist/bundle.js
@@ -46246,6 +46246,10 @@ var _zencashjs = __webpack_require__(327);
var _zencashjs2 = _interopRequireDefault(_zencashjs);
+var _refresh = __webpack_require__(439);
+
+var _refresh2 = _interopRequireDefault(_refresh);
+
var _contentCopy = __webpack_require__(432);
var _contentCopy2 = _interopRequireDefault(_contentCopy);
@@ -46272,8 +46276,6 @@ var _eye2 = _interopRequireDefault(_eye);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
@@ -46379,38 +46381,34 @@ var ZWalletGenerator = function (_React$Component2) {
key: 'render',
value: function render() {
return _react2.default.createElement(
- _reactstrap.Row,
+ 'div',
null,
_react2.default.createElement(
- _reactstrap.Col,
+ 'h3',
+ { className: 'display-6' },
+ 'Create New Wallet'
+ ),
+ _react2.default.createElement('br', null),
+ _react2.default.createElement(
+ _reactstrap.InputGroup,
null,
+ _react2.default.createElement(_reactstrap.Input, { onChange: this.handlePasswordPhrase, placeholder: 'Password phrase. Do NOT forget to save this! Use >15 words to be safe.' })
+ ),
+ _react2.default.createElement('br', null),
+ _react2.default.createElement(
+ _reactstrap.InputGroup,
+ null,
+ _react2.default.createElement(_reactstrap.Input, { value: this.state.privateKey, placeholder: 'Private key generated from password phrase' }),
_react2.default.createElement(
- 'h3',
- { className: 'display-6' },
- 'Create New Wallet'
- ),
- _react2.default.createElement('br', null),
- _react2.default.createElement(
- _reactstrap.InputGroup,
- null,
- _react2.default.createElement(_reactstrap.Input, { onChange: this.handlePasswordPhrase, placeholder: 'Password phrase. Do NOT forget to save this! Use >15 words to be safe.' })
- ),
- _react2.default.createElement('br', null),
- _react2.default.createElement(
- _reactstrap.InputGroup,
+ _reactstrap.InputGroupButton,
null,
- _react2.default.createElement(_reactstrap.Input, { value: this.state.privateKey, placeholder: 'Private key generated from password phrase' }),
_react2.default.createElement(
- _reactstrap.InputGroupButton,
- null,
+ _reactCopyToClipboard2.default,
+ { text: this.state.privateKey },
_react2.default.createElement(
- _reactCopyToClipboard2.default,
- { text: this.state.privateKey },
- _react2.default.createElement(
- _reactstrap.Button,
- null,
- _react2.default.createElement(_contentCopy2.default, null)
- )
+ _reactstrap.Button,
+ null,
+ _react2.default.createElement(_contentCopy2.default, null)
)
)
)
@@ -46624,14 +46622,14 @@ var ZWalletSettings = function (_React$Component4) {
_react2.default.createElement(
_reactstrap.ModalBody,
null,
- _react2.default.createElement(
- 'p',
- null,
- _react2.default.createElement(ZWalletSelectUnlockType, {
- setUnlockType: this.props.setUnlockType,
- unlockType: this.props.settings.unlockType
- })
- ),
+ _react2.default.createElement(ZWalletSelectUnlockType, {
+ setUnlockType: this.props.setUnlockType,
+ unlockType: this.props.settings.unlockType
+ })
+ ),
+ _react2.default.createElement(
+ _reactstrap.ModalBody,
+ null,
_react2.default.createElement(
_reactstrap.InputGroup,
null,
@@ -46746,31 +46744,17 @@ var ZAddressInfo = function (_React$Component5) {
_axios2.default.get(info_url).then(function (response) {
var data = response.data;
- this.setState(_defineProperty({}, address, {
- confirmedBalance: data.balance,
- unconfirmedBalance: data.unconfirmedBalance,
+ this.props.setPublicAddressesKeyValue(address, 'confirmedBalance', data.balance);
+ this.props.setPublicAddressesKeyValue(address, 'unconfirmedBalance', data.unconfirmedBalance);
+ this.setState({
retrieveAddressError: false
- }));
+ });
}.bind(this)).catch(function (error) {
this.setState({
retrieveAddressError: true
});
}.bind(this));
}
- }, {
- key: 'componentWillMount',
- value: function componentWillMount() {
- // Setup state
- Object.keys(this.props.publicAddresses).forEach(function (address) {
- if (address !== undefined) {
- this.setState(_defineProperty({}, address, {
- transactionURL: urlAppend(this.props.settings.explorerURL, 'address/') + address,
- confirmedBalance: 'loading...',
- unconfirmedBalance: 'loading...'
- }));
- }
- }.bind(this));
- }
}, {
key: 'componentDidMount',
value: function componentDidMount() {
@@ -46778,7 +46762,7 @@ var ZAddressInfo = function (_React$Component5) {
this.updateAddressesInfo();
// Update every 30 seconds
- this.interval = setInterval(this.updateAddressesInfo, 30000);
+ this.interval = setInterval(this.updateAddressesInfo, 300000);
}
}, {
key: 'componentWillUnmount',
@@ -46790,8 +46774,11 @@ var ZAddressInfo = function (_React$Component5) {
value: function render() {
// Key is the address
var addresses = [];
+ var totalConfirmed = 0.0;
+ var totalUnconfirmed = 0.0;
Object.keys(this.props.publicAddresses).forEach(function (key) {
if (key !== undefined) {
+ // Add to address
addresses.push(_react2.default.createElement(
'tr',
null,
@@ -46800,21 +46787,40 @@ var ZAddressInfo = function (_React$Component5) {
{ scope: 'row' },
_react2.default.createElement(
'a',
- { href: this.state[key].transactionURL },
+ { href: this.props.publicAddresses[key].transactionURL },
key
)
),
_react2.default.createElement(
'td',
null,
- this.state[key].confirmedBalance
+ _react2.default.createElement(
+ _reactCopyToClipboard2.default,
+ { text: this.props.publicAddresses[key].privateKeyWIF },
+ _react2.default.createElement(ToolTipButton, { id: key, buttonText: _react2.default.createElement(_contentCopy2.default, null), tooltipText: 'copy wif private key' })
+ )
+ ),
+ _react2.default.createElement(
+ 'td',
+ null,
+ this.props.publicAddresses[key].confirmedBalance
),
_react2.default.createElement(
'td',
null,
- this.state[key].unconfirmedBalance
+ this.props.publicAddresses[key].unconfirmedBalance
)
));
+
+ var c_confirmed = Number(this.props.publicAddresses[key].confirmedBalance);
+ var c_unconfirmed = Number(this.props.publicAddresses[key].unconfirmedBalance);
+ if (!isNaN(c_confirmed)) {
+ totalConfirmed += c_confirmed;
+ }
+
+ if (!isNaN(c_unconfirmed)) {
+ totalUnconfirmed += c_unconfirmed;
+ }
}
}.bind(this));
@@ -46840,7 +46846,58 @@ var ZAddressInfo = function (_React$Component5) {
) : _react2.default.createElement(
_reactstrap.Alert,
{ color: 'warning' },
- 'The balance displayed here is dependent on the insight node'
+ 'The balance displayed here is dependent on the insight node.',
+ _react2.default.createElement('br', null),
+ 'Automatically updates every 5 minutes.'
+ ),
+ _react2.default.createElement(ToolTipButton, { onClick: this.updateAddressesInfo, id: 5, buttonText: _react2.default.createElement(_refresh2.default, null), tooltipText: 'manually refresh balance' })
+ )
+ )
+ ),
+ _react2.default.createElement(
+ _reactstrap.Card,
+ null,
+ _react2.default.createElement(
+ _reactstrap.CardBlock,
+ null,
+ _react2.default.createElement(
+ _reactstrap.Table,
+ { bordered: true },
+ _react2.default.createElement(
+ 'thead',
+ null,
+ _react2.default.createElement(
+ 'tr',
+ null,
+ _react2.default.createElement(
+ 'th',
+ null,
+ 'Total Confirmed'
+ ),
+ _react2.default.createElement(
+ 'th',
+ null,
+ 'Total Unconfirmed'
+ )
+ )
+ ),
+ _react2.default.createElement(
+ 'tbody',
+ null,
+ _react2.default.createElement(
+ 'tr',
+ null,
+ _react2.default.createElement(
+ 'th',
+ null,
+ totalConfirmed
+ ),
+ _react2.default.createElement(
+ 'th',
+ null,
+ totalUnconfirmed
+ )
+ )
)
)
)
@@ -46865,6 +46922,11 @@ var ZAddressInfo = function (_React$Component5) {
null,
'Address'
),
+ _react2.default.createElement(
+ 'th',
+ null,
+ 'WIF'
+ ),
_react2.default.createElement(
'th',
null,
@@ -46978,6 +47040,12 @@ var ZSendZEN = function (_React$Component6) {
var value = this.state.amount;
var fee = this.state.fee;
var recipientAddress = this.state.recipientAddress;
+ var senderAddress = this.state.selectedAddress;
+
+ // Convert how much we wanna send
+ // to satoshis
+ var satoshisToSend = Math.round(value * 100000000);
+ var satoshisfeesToSend = Math.round(fee * 100000000);
// Reset zen send progress and error message
this.setProgressValue(0);
@@ -46986,15 +47054,24 @@ var ZSendZEN = function (_React$Component6) {
// Error strings
var errString = '';
- // Validation
+ // Validation
+ if (senderAddress === '') {
+ errString += '`From Address` field can\'t be empty.;';
+ }
+
if (recipientAddress.length !== 35) {
- errString = 'Invalid address. Only transparent addresses are supported at this point in time.;';
+ errString += 'Invalid address. Only transparent addresses are supported at this point in time.;';
}
if (typeof parseInt(value) !== 'number' || value === '') {
errString += 'Invalid amount.;';
}
+ // Can't send 0 satoshis
+ if (satoshisToSend === 0) {
+ errString += 'Amount can\'t be 0.;';
+ }
+
if (typeof parseInt(fee) !== 'number' || fee === '') {
errString += 'Invalid fee.;';
}
@@ -47004,23 +47081,14 @@ var ZSendZEN = function (_React$Component6) {
return;
}
+ // Private key
+ var senderPrivateKey = this.props.publicAddresses[senderAddress].privateKey;
+
// Get previous transactions
- var prevTxURL = urlAppend(this.props.settings.insightAPI, 'addr/') + this.props.publicAddresses + '/utxo';
+ var prevTxURL = urlAppend(this.props.settings.insightAPI, 'addr/') + senderAddress + '/utxo';
var infoURL = urlAppend(this.props.settings.insightAPI, 'status?q=getInfo');
var sendRawTxURL = urlAppend(this.props.settings.insightAPI, 'tx/send');
- // Convert how much we wanna send
- // to satoshis
- var satoshisToSend = Math.round(value * 100000000);
- var satoshisfeesToSend = Math.round(fee * 100000000);
-
- // Can't send 0 satoshis
- if (satoshisToSend === 0) {
- this.setSendErrorMessage('Amount can\'t be 0');
- this.setProgressValue(0);
- return;
- }
-
// Building our transaction TXOBJ
// How many satoshis do we have so far
var satoshisSoFar = 0;
@@ -47077,7 +47145,7 @@ var ZSendZEN = function (_React$Component6) {
// Refund remaining to current address
if (satoshisSoFar !== satoshisToSend + satoshisfeesToSend) {
var refundSatoshis = satoshisSoFar - satoshisToSend - satoshisfeesToSend;
- recipients = recipients.concat({ address: this.props.publicAddresses, satoshis: refundSatoshis });
+ recipients = recipients.concat({ address: senderAddress, satoshis: refundSatoshis });
}
// Create transaction
@@ -47085,7 +47153,7 @@ var ZSendZEN = function (_React$Component6) {
// Sign each history transcation
for (var i = 0; i < history.length; i++) {
- txObj = _zencashjs2.default.transaction.signTx(txObj, i, this.props.privateKey, this.props.settings.compressPubKey);
+ txObj = _zencashjs2.default.transaction.signTx(txObj, i, senderPrivateKey, this.props.settings.compressPubKey);
}
// Convert it to hex string
@@ -47133,7 +47201,7 @@ var ZSendZEN = function (_React$Component6) {
);
}
- // Else
+ // Else show error why
else if (this.state.sendErrorMessage !== '') {
zenTxLink = this.state.sendErrorMessage.split(';').map(function (s) {
if (s !== '') {
@@ -47152,6 +47220,22 @@ var ZSendZEN = function (_React$Component6) {
});
}
+ // Send addresses
+ // Key is the address btw
+ var sendAddresses = [];
+ Object.keys(this.props.publicAddresses).forEach(function (key) {
+ if (key !== undefined) {
+ sendAddresses.push(_react2.default.createElement(
+ 'option',
+ { value: key },
+ '[',
+ this.props.publicAddresses[key].confirmedBalance,
+ '] - ',
+ key
+ ));
+ }
+ }.bind(this));
+
return _react2.default.createElement(
_reactstrap.Row,
null,
@@ -47178,26 +47262,13 @@ var ZSendZEN = function (_React$Component6) {
_react2.default.createElement(
_reactstrap.InputGroupAddon,
null,
- 'From'
+ 'From Address'
),
_react2.default.createElement(
_reactstrap.Input,
{ type: 'select', onChange: this.handleUpdateSelectedAddress },
- _react2.default.createElement(
- 'option',
- { value: 'znSDvF9nA5VCdse5HbEKmsoNbjCbsEA3VAH' },
- 'znSDvF9nA5VCdse5HbEKmsoNbjCbsEA3VAH - 50.92'
- ),
- _react2.default.createElement(
- 'option',
- { value: '1' },
- 'znSDvF9nA5VCdse5HbEKmsoNbjCbsEA3VAH - 32.92'
- ),
- _react2.default.createElement(
- 'option',
- { value: '2' },
- 'znSDvF9nA5VCdse5HbEKmsoNbjCbsEA3VAH - 1-.92'
- )
+ _react2.default.createElement('option', { value: '' }),
+ sendAddresses
)
),
_react2.default.createElement(
@@ -47206,7 +47277,7 @@ var ZSendZEN = function (_React$Component6) {
_react2.default.createElement(
_reactstrap.InputGroupAddon,
null,
- 'Address'
+ 'To Address'
),
_react2.default.createElement(_reactstrap.Input, { onChange: this.handleUpdateRecipientAddress, placeholder: 'e.g znSDvF9nA5VCdse5HbEKmsoNbjCbsEA3VAH' })
),
@@ -47389,7 +47460,8 @@ var ZWalletTabs = function (_React$Component8) {
{ tabId: '1' },
_react2.default.createElement(ZAddressInfo, {
publicAddresses: this.props.publicAddresses,
- settings: this.props.settings
+ settings: this.props.settings,
+ setPublicAddressesKeyValue: this.props.setPublicAddressesKeyValue
})
),
_react2.default.createElement(
@@ -47421,6 +47493,7 @@ var ZWallet = function (_React$Component9) {
_this14.setPrivateKeys = _this14.setPrivateKeys.bind(_this14);
_this14.setInsightAPI = _this14.setInsightAPI.bind(_this14);
_this14.setUnlockType = _this14.setUnlockType.bind(_this14);
+ _this14.setPublicAddressesKeyValue = _this14.setPublicAddressesKeyValue.bind(_this14);
_this14.toggleUseTestNet = _this14.toggleUseTestNet.bind(_this14);
_this14.toggleCompressPubKey = _this14.toggleCompressPubKey.bind(_this14);
_this14.toggleShowSettings = _this14.toggleShowSettings.bind(_this14);
@@ -47428,13 +47501,13 @@ var ZWallet = function (_React$Component9) {
_this14.state = {
privateKeys: '',
- publicAddresses: null, // Public address will be {address: privateKey}
+ publicAddresses: null, // Public address will be {address: {privateKey: '', transactionURL: '', privateKeyWIF: ''}
settings: {
showSettings: false,
showWalletGen: false,
compressPubKey: true,
insightAPI: 'https://explorer.zensystem.io/insight-api-zen/',
- explorerURL: 'https://explorer.zensystem.io/insight/',
+ explorerURL: 'https://explorer.zensystem.io/',
useTestNet: false,
unlockType: UNLOCK_WALLET_TYPE.IMPORT_WALLET
}
@@ -47465,10 +47538,20 @@ var ZWallet = function (_React$Component9) {
var publicAddresses = {};
for (var i = 0; i < this.state.privateKeys.length; i++) {
+ var pubKeyHash = this.state.settings.useTestNet ? _zencashjs2.default.config.testnet.wif : _zencashjs2.default.config.mainnet.wif;
+
var c_pk = this.state.privateKeys[i];
+
+ var c_pk_wif = _zencashjs2.default.address.privKeyToWIF(c_pk, true, pubKeyHash);
var c_addr = _privKeyToAddr(c_pk, this.state.settings.compressPubKey, this.state.settings.useTestNet);
- publicAddresses[c_addr] = c_pk;
+ publicAddresses[c_addr] = {
+ privateKey: c_pk,
+ privateKeyWIF: c_pk_wif,
+ transactionURL: urlAppend(this.state.settings.explorerURL, 'address/') + c_addr,
+ confirmedBalance: 'loading...',
+ unconfirmedBalance: 'loading...'
+ };
}
// Set public address
@@ -47504,6 +47587,16 @@ var ZWallet = function (_React$Component9) {
publicAddresses: pa
});
}
+ }, {
+ key: 'setPublicAddressesKeyValue',
+ value: function setPublicAddressesKeyValue(address, key, value) {
+ var newPublicAddresses = this.state.publicAddresses;
+ newPublicAddresses[address][key] = value;
+
+ this.setState({
+ publicAddresses: newPublicAddresses
+ });
+ }
}, {
key: 'setInsightAPI',
value: function setInsightAPI(uri) {
@@ -47583,7 +47676,7 @@ var ZWallet = function (_React$Component9) {
null,
_react2.default.createElement(
_reactstrap.Col,
- { md: { size: 8, offset: 2 } },
+ null,
_react2.default.createElement(
'h1',
{ className: 'display-6' },
@@ -47610,7 +47703,7 @@ var ZWallet = function (_React$Component9) {
null,
_react2.default.createElement(
_reactstrap.Col,
- { md: { size: 8, offset: 2 } },
+ null,
this.state.publicAddresses === null ? _react2.default.createElement(ZWalletUnlockKey, {
handleUnlockPrivateKeys: this.handleUnlockPrivateKeys,
setPrivateKeys: this.setPrivateKeys,
@@ -47618,17 +47711,26 @@ var ZWallet = function (_React$Component9) {
}) : _react2.default.createElement(ZWalletTabs, {
publicAddresses: this.state.publicAddresses,
settings: this.state.settings,
+ setPublicAddressesKeyValue: this.setPublicAddressesKeyValue,
privateKeys: this.state.privateKeys
})
)
),
- this.state.settings.showWalletGen ? _react2.default.createElement(
- 'div',
+ _react2.default.createElement(
+ _reactstrap.Row,
null,
- _react2.default.createElement('br', null),
- _react2.default.createElement('hr', null),
- _react2.default.createElement(ZWalletGenerator, { settings: this.state.settings })
- ) : null
+ _react2.default.createElement(
+ _reactstrap.Col,
+ null,
+ this.state.settings.showWalletGen ? _react2.default.createElement(
+ 'div',
+ null,
+ _react2.default.createElement('br', null),
+ _react2.default.createElement('hr', null),
+ _react2.default.createElement(ZWalletGenerator, { settings: this.state.settings })
+ ) : null
+ )
+ )
);
}
}]);
@@ -66817,5 +66919,43 @@ var ZFooter = function (_React$Component) {
exports.default = ZFooter;
+/***/ }),
+/* 439 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+var _react = __webpack_require__(9);
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactIconBase = __webpack_require__(35);
+
+var _reactIconBase2 = _interopRequireDefault(_reactIconBase);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var MdRefresh = function MdRefresh(props) {
+ return _react2.default.createElement(
+ _reactIconBase2.default,
+ _extends({ viewBox: '0 0 40 40' }, props),
+ _react2.default.createElement(
+ 'g',
+ null,
+ _react2.default.createElement('path', { d: 'm29.5 10.5l3.9-3.9v11.8h-11.8l5.4-5.4c-1.8-1.8-4.3-3-7-3-5.5 0-10 4.5-10 10s4.5 10 10 10c4.4 0 8.1-2.7 9.5-6.6h3.4c-1.5 5.7-6.6 10-12.9 10-7.3 0-13.3-6.1-13.3-13.4s6-13.4 13.3-13.4c3.7 0 7 1.5 9.5 3.9z' })
+ )
+ );
+};
+
+exports.default = MdRefresh;
+module.exports = exports['default'];
+
/***/ })
/******/ ]);
\ No newline at end of file