References: https://github.com/ethereum/wiki/wiki/JavaScript-API
Version to use: 0.20.6 (don't use 1.0 yet, breaking changes, beta, without documentation) Install specifically 0.20.6 version
const Web3 = require('web3')Check what providers are provided
Web3.providers{ HttpProvider: [Function: HttpProvider], IpcProvider: [Function: IpcProvider] }const net = require('net')const web3 = new Web3(new Web3.providers.IpcProvider('/home/bing/.ethereum/testnet/geth.ipc', net))web3.version{ api: '0.20.6', node: [Getter], getNode: { [Function: get] request: [Function: bound ] }, network: [Getter], getNetwork: { [Function: get] request: [Function: bound ] }, ethereum: [Getter], getEthereum: { [Function: get] request: [Function: bound ] }, whisper: [Getter], getWhisper: { [Function: get] request: [Function: bound ] } }Check if we are connected & ontain some information from the node
// web3.version.node - this would throw error in IPC, only async version worksvar lastDatafunction cb (error, data){ if (error) { console.log("ERROR:"+JSON.stringify(error)) } else { console.log(data) lastData = data }}web3.version.getNode(cb)Geth/v1.8.16-stable-477eb093/linux-amd64/go1.10.1So when calling remotely via IPC don't use synchronous getter
web3.eth.getBlockNumber(cb)4111119web3.eth.getSyncing(cb) // it's not syncing, because it's a light client, and it still works!falsevar mainTest = "0x30514f8346771d10D8C74f873AbfC4050FB17aCB" // my main test account addressvar vscTokenAddr = "0xf5e888afb9d545300070887af6261f5c8f7a007c"var oneTxHash = "0x84bc81372d3500a871486c6b7651905521d10e62d7cc3ddacadc3e4aafd6853a"var oneTxBlock = 3397473var oneTxFrom = "0x627306090abab3a6e1400e9345bc60c78a8bef57"var oneTxTo = "0x30514f8346771d10d8c74f873abfc4050fb17acb"var vscAbi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]var vscContract = web3.eth.contract(vscAbi)var vscContractDeployedInst = vscContract.at(vscTokenAddr)web3.eth.getBalance(mainTest,undefined,cb)BigNumber { s: 1, e: 19, c: [ 414234, 2526400291376 ] }lastData.toString()'41423402526400291376'var options = { fromBlock: oneTxBlock-1, toBlock: oneTxBlock+1, address: vscTokenAddr}var filter = web3.eth.filter(options)filter.get(cb)Filter { requestManager: RequestManager { provider: IpcProvider { responseCallbacks: [Object], path: '/home/bing/.ethereum/testnet/geth.ipc', connection: [Object], lastChunk: null }, polls: {}, timeout: null }, options: { topics: [], from: undefined, to: undefined, address: '0xf5e888afb9d545300070887af6261f5c8f7a007c', fromBlock: '0x33d760', toBlock: '0x33d762' }, implementation: { newFilter: { [Function: send] request: [Function: bound ], call: [Function: newFilterCall] }, uninstallFilter: { [Function: send] request: [Function: bound ], call: 'eth_uninstallFilter' }, getLogs: { [Function: send] request: [Function: bound ], call: 'eth_getFilterLogs' }, poll: { [Function: send] request: [Function: bound ], call: 'eth_getFilterChanges' } }, filterId: '0x817e8e23a867f821267d493afe747cf9', callbacks: [], getLogsCallbacks: [], pollFilters: [], formatter: [Function: outputLogFormatter] }[ { address: '0xf5e888afb9d545300070887af6261f5c8f7a007c', topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57', '0x00000000000000000000000030514f8346771d10d8c74f873abfc4050fb17acb' ], data: '0x000000000000000000000000000000000000000000000000257853b1dd8e0000', blockNumber: 3397473, transactionHash: '0x84bc81372d3500a871486c6b7651905521d10e62d7cc3ddacadc3e4aafd6853a', transactionIndex: 5, blockHash: '0x08debcb7aec26474114c63681c947f99ece819796417b74aadec42a8c5177de5', logIndex: 21, removed: false } ]lastData[ { address: '0xf5e888afb9d545300070887af6261f5c8f7a007c', topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57', '0x00000000000000000000000030514f8346771d10d8c74f873abfc4050fb17acb' ], data: '0x000000000000000000000000000000000000000000000000257853b1dd8e0000', blockNumber: 3397473, transactionHash: '0x84bc81372d3500a871486c6b7651905521d10e62d7cc3ddacadc3e4aafd6853a', transactionIndex: 5, blockHash: '0x08debcb7aec26474114c63681c947f99ece819796417b74aadec42a8c5177de5', logIndex: 21, removed: false } ]lastData[0].address === vscTokenAddr && lastData[0].blockNumber === oneTxBlock && lastData[0].transactionHash === oneTxHashtrueconsole.log(web3.sha3('VscPurchase(address,address,uint256,uint256)'))console.log(web3.sha3('Transfer(address,address,uint256)'))0xb29a1ebb2cc4c2f224e1f61fbd81a023813c1eec8955b1ec1b6a3b339fea8ba30xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efvar transferEventFilter = vscContractDeployedInst.Transfer({},{ fromBlock: oneTxBlock-1, toBlock: oneTxBlock+1, })transferEventFilter.options // see what's the actual options like{ topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', null, null ], from: undefined, to: undefined, address: '0xf5e888afb9d545300070887af6261f5c8f7a007c', fromBlock: '0x33d760', toBlock: '0x33d762' }transferEventFilter.get(cb)Filter { requestManager: RequestManager { provider: IpcProvider { responseCallbacks: [Object], path: '/home/bing/.ethereum/testnet/geth.ipc', connection: [Object], lastChunk: null }, polls: {}, timeout: null }, options: { topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', null, null ], from: undefined, to: undefined, address: '0xf5e888afb9d545300070887af6261f5c8f7a007c', fromBlock: '0x33d760', toBlock: '0x33d762' }, implementation: { newFilter: { [Function: send] request: [Function: bound ], call: [Function: newFilterCall] }, uninstallFilter: { [Function: send] request: [Function: bound ], call: 'eth_uninstallFilter' }, getLogs: { [Function: send] request: [Function: bound ], call: 'eth_getFilterLogs' }, poll: { [Function: send] request: [Function: bound ], call: 'eth_getFilterChanges' } }, filterId: '0xbf9ede0690f22424eab36db16d9aaf92', callbacks: [], getLogsCallbacks: [], pollFilters: [], formatter: [Function: bound ] }[ { address: '0xf5e888afb9d545300070887af6261f5c8f7a007c', blockNumber: 3397473, transactionHash: '0x84bc81372d3500a871486c6b7651905521d10e62d7cc3ddacadc3e4aafd6853a', transactionIndex: 5, blockHash: '0x08debcb7aec26474114c63681c947f99ece819796417b74aadec42a8c5177de5', logIndex: 21, removed: false, event: 'Transfer', args: { from: '0x627306090abab3a6e1400e9345bc60c78a8bef57', to: '0x30514f8346771d10d8c74f873abfc4050fb17acb', value: [Object] } } ]lastData[ { address: '0xf5e888afb9d545300070887af6261f5c8f7a007c', blockNumber: 3397473, transactionHash: '0x84bc81372d3500a871486c6b7651905521d10e62d7cc3ddacadc3e4aafd6853a', transactionIndex: 5, blockHash: '0x08debcb7aec26474114c63681c947f99ece819796417b74aadec42a8c5177de5', logIndex: 21, removed: false, event: 'Transfer', args: { from: '0x627306090abab3a6e1400e9345bc60c78a8bef57', to: '0x30514f8346771d10d8c74f873abfc4050fb17acb', value: [Object] } } ]lastData[0].address === vscTokenAddr && lastData[0].blockNumber === oneTxBlock && lastData[0].transactionHash === oneTxHash && lastData[0].event === 'Transfer' && lastData[0].args.from === oneTxFrom && lastData[0].args.to === oneTxTo && lastData[0].args.value.toString() === '2700000000000000000'trueLessens learnt: