|
|
|
@ -1,4 +1,5 @@ |
|
|
|
|
import assert from 'assert' |
|
|
|
|
import sinon from 'sinon' |
|
|
|
|
import selectors from '../send.selectors.js' |
|
|
|
|
const { |
|
|
|
|
accountsWithSendEtherInfoSelector, |
|
|
|
@ -20,7 +21,7 @@ const { |
|
|
|
|
getSelectedAddress, |
|
|
|
|
getSelectedIdentity, |
|
|
|
|
getSelectedToken, |
|
|
|
|
// getSelectedTokenContract,
|
|
|
|
|
getSelectedTokenContract, |
|
|
|
|
getSelectedTokenExchangeRate, |
|
|
|
|
getSelectedTokenToFiatRate, |
|
|
|
|
getSendAmount, |
|
|
|
@ -36,11 +37,23 @@ const { |
|
|
|
|
getTokenExchangeRate, |
|
|
|
|
getUnapprovedTxs, |
|
|
|
|
isSendFormInError, |
|
|
|
|
// transactionsSelector,
|
|
|
|
|
transactionsSelector, |
|
|
|
|
} = selectors |
|
|
|
|
import mockState from './send-selectors-test-data' |
|
|
|
|
|
|
|
|
|
describe('send selectors', () => { |
|
|
|
|
let tempGlobalEth = Object.assign({}, global.eth) |
|
|
|
|
beforeEach(() => { |
|
|
|
|
global.eth = { |
|
|
|
|
contract: sinon.stub().returns({ |
|
|
|
|
at: address => 'mockAt:' + address |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
afterEach(() => { |
|
|
|
|
global.eth = tempGlobalEth |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
describe('accountsWithSendEtherInfoSelector()', () => { |
|
|
|
|
it('should return an array of account objects with name info from identities', () => { |
|
|
|
@ -48,32 +61,32 @@ describe('send selectors', () => { |
|
|
|
|
accountsWithSendEtherInfoSelector(mockState), |
|
|
|
|
[ |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x47c9d71831c76efe', |
|
|
|
|
'nonce': '0x1b', |
|
|
|
|
'address': '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825', |
|
|
|
|
'name': 'Send Account 1', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x47c9d71831c76efe', |
|
|
|
|
nonce: '0x1b', |
|
|
|
|
address: '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825', |
|
|
|
|
name: 'Send Account 1', |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x37452b1315889f80', |
|
|
|
|
'nonce': '0xa', |
|
|
|
|
'address': '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', |
|
|
|
|
'name': 'Send Account 2', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x37452b1315889f80', |
|
|
|
|
nonce: '0xa', |
|
|
|
|
address: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', |
|
|
|
|
name: 'Send Account 2', |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x30c9d71831c76efe', |
|
|
|
|
'nonce': '0x1c', |
|
|
|
|
'address': '0x2f8d4a878cfa04a6e60d46362f5644deab66572d', |
|
|
|
|
'name': 'Send Account 3', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x30c9d71831c76efe', |
|
|
|
|
nonce: '0x1c', |
|
|
|
|
address: '0x2f8d4a878cfa04a6e60d46362f5644deab66572d', |
|
|
|
|
name: 'Send Account 3', |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x0', |
|
|
|
|
'nonce': '0x0', |
|
|
|
|
'address': '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
'name': 'Send Account 4', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x0', |
|
|
|
|
nonce: '0x0', |
|
|
|
|
address: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
name: 'Send Account 4', |
|
|
|
|
}, |
|
|
|
|
] |
|
|
|
|
) |
|
|
|
@ -95,8 +108,8 @@ describe('send selectors', () => { |
|
|
|
|
getAddressBook(mockState), |
|
|
|
|
[ |
|
|
|
|
{ |
|
|
|
|
'address': '0x06195827297c7a80a443b6894d3bdb8824b43896', |
|
|
|
|
'name': 'Address Book Account 1', |
|
|
|
|
address: '0x06195827297c7a80a443b6894d3bdb8824b43896', |
|
|
|
|
name: 'Address Book Account 1', |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
) |
|
|
|
@ -145,11 +158,11 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getCurrentAccountWithSendEtherInfo(mockState), |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x0', |
|
|
|
|
'nonce': '0x0', |
|
|
|
|
'address': '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
'name': 'Send Account 4', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x0', |
|
|
|
|
nonce: '0x0', |
|
|
|
|
address: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
name: 'Send Account 4', |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
@ -232,10 +245,10 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getSelectedAccount(mockState), |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x0', |
|
|
|
|
'nonce': '0x0', |
|
|
|
|
'address': '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x0', |
|
|
|
|
nonce: '0x0', |
|
|
|
|
address: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
@ -255,8 +268,8 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getSelectedIdentity(mockState), |
|
|
|
|
{ |
|
|
|
|
'address': '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
'name': 'Send Account 4', |
|
|
|
|
address: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
name: 'Send Account 4', |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
@ -267,18 +280,18 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getSelectedToken(mockState), |
|
|
|
|
{ |
|
|
|
|
'address': '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
'decimals': 4, |
|
|
|
|
'symbol': 'DEF', |
|
|
|
|
address: '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
decimals: 4, |
|
|
|
|
symbol: 'DEF', |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
it('should return the send token if none is currently selected, but a send token exists', () => { |
|
|
|
|
const mockSendToken = { |
|
|
|
|
'address': '0x123456708414189a58339873ab429b6c47ab92d3', |
|
|
|
|
'decimals': 4, |
|
|
|
|
'symbol': 'JKL', |
|
|
|
|
address: '0x123456708414189a58339873ab429b6c47ab92d3', |
|
|
|
|
decimals: 4, |
|
|
|
|
symbol: 'JKL', |
|
|
|
|
} |
|
|
|
|
const editedMockState = { |
|
|
|
|
metamask: Object.assign({}, mockState.metamask, { |
|
|
|
@ -295,15 +308,22 @@ describe('send selectors', () => { |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
|
// describe('getSelectedTokenContract()', () => {
|
|
|
|
|
// it('should', () => {
|
|
|
|
|
// assert.deepEqual(
|
|
|
|
|
// getSelectedTokenContract(mockState),
|
|
|
|
|
describe('getSelectedTokenContract()', () => { |
|
|
|
|
it('should return the contract at the selected token address', () => { |
|
|
|
|
assert.equal( |
|
|
|
|
getSelectedTokenContract(mockState), |
|
|
|
|
'mockAt:0x8d6b81208414189a58339873ab429b6c47ab92d3' |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
// )
|
|
|
|
|
// })
|
|
|
|
|
// })
|
|
|
|
|
it('should return null if no token is selected', () => { |
|
|
|
|
const modifiedMetamaskState = Object.assign({}, mockState.metamask, { selectedTokenAddress: false }) |
|
|
|
|
assert.equal( |
|
|
|
|
getSelectedTokenContract(Object.assign({}, mockState, { metamask: modifiedMetamaskState })), |
|
|
|
|
null |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
describe('getSelectedTokenExchangeRate()', () => { |
|
|
|
|
it('should return the exchange rate for the selected token', () => { |
|
|
|
@ -345,7 +365,7 @@ describe('send selectors', () => { |
|
|
|
|
it('should return the send.errors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getSendErrors(mockState), |
|
|
|
|
{ 'someError': null } |
|
|
|
|
{ someError: null } |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
@ -355,8 +375,8 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getSendFrom(mockState), |
|
|
|
|
{ |
|
|
|
|
'address': '0xabcdefg', |
|
|
|
|
'balance': '0x5f4e3d2c1', |
|
|
|
|
address: '0xabcdefg', |
|
|
|
|
balance: '0x5f4e3d2c1', |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
@ -390,8 +410,8 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getSendFromObject(mockState), |
|
|
|
|
{ |
|
|
|
|
'address': '0xabcdefg', |
|
|
|
|
'balance': '0x5f4e3d2c1', |
|
|
|
|
address: '0xabcdefg', |
|
|
|
|
balance: '0x5f4e3d2c1', |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
@ -407,11 +427,11 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getSendFromObject(editedMockState), |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x0', |
|
|
|
|
'nonce': '0x0', |
|
|
|
|
'address': '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
'name': 'Send Account 4', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x0', |
|
|
|
|
nonce: '0x0', |
|
|
|
|
address: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
name: 'Send Account 4', |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
@ -441,36 +461,36 @@ describe('send selectors', () => { |
|
|
|
|
getSendToAccounts(mockState), |
|
|
|
|
[ |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x47c9d71831c76efe', |
|
|
|
|
'nonce': '0x1b', |
|
|
|
|
'address': '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825', |
|
|
|
|
'name': 'Send Account 1', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x47c9d71831c76efe', |
|
|
|
|
nonce: '0x1b', |
|
|
|
|
address: '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825', |
|
|
|
|
name: 'Send Account 1', |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x37452b1315889f80', |
|
|
|
|
'nonce': '0xa', |
|
|
|
|
'address': '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', |
|
|
|
|
'name': 'Send Account 2', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x37452b1315889f80', |
|
|
|
|
nonce: '0xa', |
|
|
|
|
address: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', |
|
|
|
|
name: 'Send Account 2', |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x30c9d71831c76efe', |
|
|
|
|
'nonce': '0x1c', |
|
|
|
|
'address': '0x2f8d4a878cfa04a6e60d46362f5644deab66572d', |
|
|
|
|
'name': 'Send Account 3', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x30c9d71831c76efe', |
|
|
|
|
nonce: '0x1c', |
|
|
|
|
address: '0x2f8d4a878cfa04a6e60d46362f5644deab66572d', |
|
|
|
|
name: 'Send Account 3', |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
'code': '0x', |
|
|
|
|
'balance': '0x0', |
|
|
|
|
'nonce': '0x0', |
|
|
|
|
'address': '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
'name': 'Send Account 4', |
|
|
|
|
code: '0x', |
|
|
|
|
balance: '0x0', |
|
|
|
|
nonce: '0x0', |
|
|
|
|
address: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
name: 'Send Account 4', |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
'address': '0x06195827297c7a80a443b6894d3bdb8824b43896', |
|
|
|
|
'name': 'Address Book Account 1', |
|
|
|
|
address: '0x06195827297c7a80a443b6894d3bdb8824b43896', |
|
|
|
|
name: 'Address Book Account 1', |
|
|
|
|
}, |
|
|
|
|
] |
|
|
|
|
) |
|
|
|
@ -500,26 +520,26 @@ describe('send selectors', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
getUnapprovedTxs(mockState), |
|
|
|
|
{ |
|
|
|
|
'4768706228115573': { |
|
|
|
|
'id': 4768706228115573, |
|
|
|
|
'time': 1487363153561, |
|
|
|
|
'status': 'unapproved', |
|
|
|
|
'gasMultiplier': 1, |
|
|
|
|
'metamaskNetworkId': '3', |
|
|
|
|
'txParams': { |
|
|
|
|
'from': '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', |
|
|
|
|
'to': '0x18a3462427bcc9133bb46e88bcbe39cd7ef0e761', |
|
|
|
|
'value': '0xde0b6b3a7640000', |
|
|
|
|
'metamaskId': 4768706228115573, |
|
|
|
|
'metamaskNetworkId': '3', |
|
|
|
|
'gas': '0x5209', |
|
|
|
|
}, |
|
|
|
|
'gasLimitSpecified': false, |
|
|
|
|
'estimatedGas': '0x5209', |
|
|
|
|
'txFee': '17e0186e60800', |
|
|
|
|
'txValue': 'de0b6b3a7640000', |
|
|
|
|
'maxCost': 'de234b52e4a0800', |
|
|
|
|
'gasPrice': '4a817c800', |
|
|
|
|
4768706228115573: { |
|
|
|
|
id: 4768706228115573, |
|
|
|
|
time: 1487363153561, |
|
|
|
|
status: 'unapproved', |
|
|
|
|
gasMultiplier: 1, |
|
|
|
|
metamaskNetworkId: '3', |
|
|
|
|
txParams: { |
|
|
|
|
from: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', |
|
|
|
|
to: '0x18a3462427bcc9133bb46e88bcbe39cd7ef0e761', |
|
|
|
|
value: '0xde0b6b3a7640000', |
|
|
|
|
metamaskId: 4768706228115573, |
|
|
|
|
metamaskNetworkId: '3', |
|
|
|
|
gas: '0x5209', |
|
|
|
|
}, |
|
|
|
|
gasLimitSpecified: false, |
|
|
|
|
estimatedGas: '0x5209', |
|
|
|
|
txFee: '17e0186e60800', |
|
|
|
|
txValue: 'de0b6b3a7640000', |
|
|
|
|
maxCost: 'de234b52e4a0800', |
|
|
|
|
gasPrice: '4a817c800', |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
@ -559,14 +579,131 @@ describe('send selectors', () => { |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
|
// describe('transactionsSelector()', () => {
|
|
|
|
|
// it('should', () => {
|
|
|
|
|
// assert.deepEqual(
|
|
|
|
|
// transactionsSelector(mockState),
|
|
|
|
|
describe('transactionsSelector()', () => { |
|
|
|
|
it('should return the selected addresses selected token transactions', () => { |
|
|
|
|
assert.deepEqual( |
|
|
|
|
transactionsSelector(mockState), |
|
|
|
|
[ |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx1', |
|
|
|
|
txParams: { |
|
|
|
|
to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
}, |
|
|
|
|
time: 1700000000000, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx3', |
|
|
|
|
txParams: { |
|
|
|
|
to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
}, |
|
|
|
|
time: 1500000000000, |
|
|
|
|
}, |
|
|
|
|
] |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
// )
|
|
|
|
|
// })
|
|
|
|
|
// })
|
|
|
|
|
it('should return all transactions if no token is selected', () => { |
|
|
|
|
const modifiedMetamaskState = Object.assign({}, mockState.metamask, { selectedTokenAddress: false }) |
|
|
|
|
const modifiedState = Object.assign({}, mockState, { metamask: modifiedMetamaskState }) |
|
|
|
|
assert.deepEqual( |
|
|
|
|
transactionsSelector(modifiedState), |
|
|
|
|
[ |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx1', |
|
|
|
|
time: 1700000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'unapprovedMessage1', |
|
|
|
|
time: 1650000000000, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx2', |
|
|
|
|
time: 1600000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0xafaketokenaddress', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'unapprovedMessage2', |
|
|
|
|
time: 1550000000000, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx3', |
|
|
|
|
time: 1500000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'unapprovedMessage3', |
|
|
|
|
time: 1450000000000, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'mockEthTx1', |
|
|
|
|
time: 1400000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
] |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
it('should return shapeshift transactions if current network is 1', () => { |
|
|
|
|
const modifiedMetamaskState = Object.assign({}, mockState.metamask, { selectedTokenAddress: false, network: '1' }) |
|
|
|
|
const modifiedState = Object.assign({}, mockState, { metamask: modifiedMetamaskState }) |
|
|
|
|
assert.deepEqual( |
|
|
|
|
transactionsSelector(modifiedState), |
|
|
|
|
[ |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx1', |
|
|
|
|
time: 1700000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
{ id: 'shapeShiftTx1', 'time': 1675000000000 }, |
|
|
|
|
{ |
|
|
|
|
id: 'unapprovedMessage1', |
|
|
|
|
time: 1650000000000, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx2', |
|
|
|
|
time: 1600000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0xafaketokenaddress', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
{ id: 'shapeShiftTx2', 'time': 1575000000000 }, |
|
|
|
|
{ |
|
|
|
|
id: 'unapprovedMessage2', |
|
|
|
|
time: 1550000000000, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'mockTokenTx3', |
|
|
|
|
time: 1500000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
{ id: 'shapeShiftTx3', 'time': 1475000000000 }, |
|
|
|
|
{ |
|
|
|
|
id: 'unapprovedMessage3', |
|
|
|
|
time: 1450000000000, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 'mockEthTx1', |
|
|
|
|
time: 1400000000000, |
|
|
|
|
txParams: { |
|
|
|
|
to: '0xd85a4b6a394794842887b8284293d69163007bbb', |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
] |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|