forked from MetaMask/web3-provider-engine
/
etherscan.js
129 lines (117 loc) · 3.44 KB
/
etherscan.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const keccak256 = require('ethereumjs-util').keccak256;
const test = require('tape')
const ProviderEngine = require('../../index.js')
const createPayload = require('../../util/create-payload.js')
const EtherscanSubprovider = require('../../subproviders/etherscan')
test('etherscan eth_getBlockTransactionCountByNumber', function(t) {
t.plan(3)
var engine = new ProviderEngine()
var etherscan = new EtherscanSubprovider()
engine.addProvider(etherscan)
engine.start()
engine.sendAsync(createPayload({
method: 'eth_getBlockTransactionCountByNumber',
params: [
'0x132086'
],
}), function(err, response){
t.ifError(err, 'throw no error')
t.ok(response, 'has response')
t.equal(response.result, '0x8')
t.end()
})
})
test('etherscan eth_getTransactionByHash', function(t) {
t.plan(3)
var engine = new ProviderEngine()
var etherscan = new EtherscanSubprovider()
engine.addProvider(etherscan)
engine.start()
engine.sendAsync(createPayload({
method: 'eth_getTransactionByHash',
params: [
'0xe420d77c4f8b5bf95021fa049b634d5e3f051752a14fb7c6a8f1333c37cdf817'
],
}), function(err, response){
t.ifError(err, 'throw no error')
t.ok(response, 'has response')
t.equal(response.result.nonce, '0xd', 'nonce matches known nonce')
t.end()
})
})
test('etherscan eth_blockNumber', function(t) {
t.plan(3)
var engine = new ProviderEngine()
var etherscan = new EtherscanSubprovider()
engine.addProvider(etherscan)
engine.start()
engine.sendAsync(createPayload({
method: 'eth_blockNumber',
params: [],
}), function(err, response){
t.ifError(err, 'throw no error')
t.ok(response, 'has response')
t.notEqual(response.result, '0x', 'block number does not equal 0x')
t.end()
})
})
test('etherscan eth_getBlockByNumber', function(t) {
t.plan(3)
var engine = new ProviderEngine()
var etherscan = new EtherscanSubprovider()
engine.addProvider(etherscan)
engine.start()
engine.sendAsync(createPayload({
method: 'eth_getBlockByNumber',
params: [
'0x149a2a',
true
],
}), function(err, response){
t.ifError(err, 'throw no error')
t.ok(response, 'has response')
t.equal(response.result.nonce, '0x80fdd9b71954f9fc', 'nonce matches known nonce')
t.end()
})
})
test('etherscan eth_getBalance', function(t) {
t.plan(3)
var engine = new ProviderEngine()
var etherscan = new EtherscanSubprovider()
engine.addProvider(etherscan)
engine.start()
engine.sendAsync(createPayload({
method: 'eth_getBalance',
params: [
'0xa601ea86ae7297e78a54f4b6937fbc222b9d87f4',
'latest'
],
}), function(err, response){
t.ifError(err, 'throw no error')
t.ok(response, 'has response')
t.notEqual(response.result, '0', 'balance does not equal zero')
t.end()
})
})
test('etherscan eth_call', function(t) {
t.plan(3)
var signature = Buffer.concat([keccak256("getLatestBlock()")], 4).toString('hex');
var engine = new ProviderEngine()
var etherscan = new EtherscanSubprovider()
engine.addProvider(etherscan)
engine.start()
engine.sendAsync(createPayload({
method: 'eth_call',
params: [{
to: '0x4EECf99D543B278106ac0c0e8ffe616F2137f10a',
data : signature
},
'latest'
],
}), function(err, response){
t.ifError(err, 'throw no error')
t.ok(response, 'has response')
t.notEqual(response.result, '0x', 'eth_call to getLatestBlock() does not equal 0x')
t.end()
})
})