├── .bowerrc ├── .editorconfig ├── .gitignore ├── .jshintrc ├── .npmignore ├── .travis.yml ├── .versions ├── LICENSE ├── README.md ├── batch.js ├── bower.json ├── db.js ├── dist ├── web3-light.js ├── web3-light.min.js ├── web3.js ├── web3.js.map └── web3.min.js ├── eth.js ├── example ├── balance.html ├── contract.html ├── contract_array.html ├── event_inc.html ├── icap.html ├── namereg.html └── node-app.js ├── gulpfile.js ├── index.js ├── lib ├── contracts │ ├── GlobalRegistrar.json │ ├── ICAPRegistrar.json │ └── SmartExchange.json ├── solidity │ ├── address.js │ ├── bool.js │ ├── bytes.js │ ├── coder.js │ ├── dynamicbytes.js │ ├── formatters.js │ ├── int.js │ ├── param.js │ ├── real.js │ ├── string.js │ ├── type.js │ ├── uint.js │ └── ureal.js ├── utils │ ├── browser-bn.js │ ├── browser-xhr.js │ ├── config.js │ ├── isBigNumber.js │ ├── isChecksumAddress.js │ ├── isString.js │ ├── sha3.js │ ├── toBigNumber.js │ ├── toChecksumAddress.js │ ├── toDecimal.js │ └── utils.js ├── version.json ├── web3.js └── web3 │ ├── allevents.js │ ├── batch.js │ ├── contract.js │ ├── errors.js │ ├── event.js │ ├── extend.js │ ├── filter.js │ ├── formatters.js │ ├── function.js │ ├── httpprovider.js │ ├── iban.js │ ├── ipcprovider.js │ ├── jsonrpc.js │ ├── method.js │ ├── methods │ ├── db.js │ ├── eth.js │ ├── net.js │ ├── personal.js │ ├── shh.js │ └── watches.js │ ├── namereg.js │ ├── property.js │ ├── requestmanager.js │ ├── settings.js │ ├── syncing.js │ └── transfer.js ├── net.js ├── package-init.js ├── package.js ├── package.json ├── personal.js ├── property.js ├── sha3.js ├── ssh.js ├── styleguide.md ├── test ├── async.js ├── batch.js ├── coder.decodeParam.js ├── coder.encodeParam.js ├── contract.js ├── errors.js ├── event.decode.js ├── event.encode.js ├── formatters.inputAddressFormatter.js ├── formatters.inputDefaultBlockFormatter.js ├── formatters.inputPostFormatter.js ├── formatters.inputTransactionFormatter.js ├── formatters.outputBlockFormatter.js ├── formatters.outputLogFormatter.js ├── formatters.outputPostFormatter.js ├── formatters.outputTransactionFormatter.js ├── helpers │ ├── FakeHttpProvider.js │ ├── FakeHttpProvider2.js │ ├── FakeIpcRequest.js │ ├── FakeQtNavigator.js │ ├── FakeXMLHttpRequest.js │ ├── test.method.js │ └── test.utils.js ├── httpprovider.js ├── iban.createIndirect.js ├── iban.fromAddress.js ├── iban.isValid.js ├── iban.toAddress.js ├── ipcprovider.js ├── jsonrpc.id.js ├── jsonrpc.isValidResponse.js ├── jsonrpc.toBatchPayload.js ├── jsonrpc.toPayload.js ├── method.extractCallback.js ├── method.formatInput.js ├── method.formatOutput.js ├── method.getCall.js ├── method.validateArgs.js ├── mocha.opts ├── node │ ├── app.js │ └── package.json ├── polling.js ├── requestmanager.js ├── sha3.js ├── utils.extractDisplayName.js ├── utils.extractTypeName.js ├── utils.fromAscii.js ├── utils.fromDecimal.js ├── utils.fromUtf8.js ├── utils.fromWei.js ├── utils.isAddress.js ├── utils.isBigNumber.js ├── utils.isChecksumAddress.js ├── utils.isFunction.js ├── utils.isJson.js ├── utils.isStrictAddress.js ├── utils.isString.js ├── utils.toAscii.js ├── utils.toBigNumber.js ├── utils.toDecimal.js ├── utils.toHex.js ├── utils.toUtf8.js ├── utils.toWei.js ├── web3.db.getHex.js ├── web3.db.getString.js ├── web3.db.methods.js ├── web3.db.putHex.js ├── web3.db.putString.js ├── web3.eth.accounts.js ├── web3.eth.blockNumber.js ├── web3.eth.call.js ├── web3.eth.coinbase.js ├── web3.eth.contract.js ├── web3.eth.defaultBlock.js ├── web3.eth.estimateGas.js ├── web3.eth.filter.js ├── web3.eth.gasPrice.js ├── web3.eth.getBalance.js ├── web3.eth.getBlock.js ├── web3.eth.getBlockTransactionCount.js ├── web3.eth.getBlockUncleCount.js ├── web3.eth.getCode.js ├── web3.eth.getCompilers.js ├── web3.eth.getStorageAt.js ├── web3.eth.getTransaction.js ├── web3.eth.getTransactionFromBlock.js ├── web3.eth.getTransactionReceipt.js ├── web3.eth.getUncle.js ├── web3.eth.getWork.js ├── web3.eth.hashRate.js ├── web3.eth.isSyncing.js ├── web3.eth.methods.js ├── web3.eth.mining.js ├── web3.eth.sendIBANTransaction.js ├── web3.eth.submitWork.js ├── web3.extend.js ├── web3.fromICAP.js ├── web3.methods.js ├── web3.net.listening.js ├── web3.net.methods.js ├── web3.net.peerCount.js ├── web3.personal.listAccounts.js ├── web3.personal.methods.js ├── web3.personal.newAccount.js ├── web3.personal.unlockAccount.js ├── web3.sha3.js ├── web3.shh.filter.js ├── web3.shh.hasIdentity.js ├── web3.shh.methods.js └── web3.shh.post.js └── utils.js /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower", 3 | "cwd": "./", 4 | "analytics": false 5 | } 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | # 3 | # If you find yourself ignoring temporary files generated by your text editor 4 | # or operating system, you probably want to add a global ignore instead: 5 | # git config --global core.excludesfile ~/.gitignore_global 6 | 7 | *.swp 8 | /coverage 9 | /tmp 10 | */**/*un~ 11 | *un~ 12 | .DS_Store 13 | */**/.DS_Store 14 | ethereum/ethereum 15 | ethereal/ethereal 16 | example/js 17 | node_modules 18 | bower_components 19 | npm-debug.log 20 | /bower 21 | .npm/ 22 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "browserify": true, 3 | "bitwise": true, 4 | "camelcase": true, 5 | "eqeqeq": true, 6 | "freeze": true, 7 | "funcscope": false, 8 | "maxcomplexity": 4, /* our target is 3! */ 9 | "maxdepth": 3, 10 | "maxerr": 50, 11 | /*"maxlen": 80*/ /*this should be our goal*/ 12 | /*"maxparams": 3,*/ 13 | "nonew": true, 14 | "unused": true, 15 | "undef": true, 16 | "predef": [ 17 | "console" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | example/js 2 | node_modules 3 | test 4 | .gitignore 5 | .editorconfig 6 | .travis.yml 7 | .npmignore 8 | component.json 9 | testling.html -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "4.1" 4 | - "4.0" 5 | before_script: 6 | - npm install 7 | - npm install jshint 8 | - export DISPLAY=:99.0 9 | - sh -e /etc/init.d/xvfb start 10 | script: 11 | - "jshint *.js lib" 12 | after_script: 13 | - npm run-script build 14 | - npm run-script test-coveralls 15 | - cd test/node && npm install && node app.js 16 | 17 | -------------------------------------------------------------------------------- /.versions: -------------------------------------------------------------------------------- 1 | ethereum:web3@0.15.3 2 | meteor@1.1.10 3 | underscore@1.0.4 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This file is part of web3.js. 2 | 3 | web3.js is free software: you can redistribute it and/or modify 4 | it under the terms of the GNU Lesser General Public License as published by 5 | the Free Software Foundation, either version 3 of the License, or 6 | (at your option) any later version. 7 | 8 | web3.js is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU Lesser General Public License for more details. 12 | 13 | You should have received a copy of the GNU Lesser General Public License 14 | along with web3.js. If not, see . 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Migration 0.13.0 -> 0.14.0 2 | 3 | web3.js version 0.14.0 supports [multiple instances of web3](https://github.com/ethereum/web3.js/issues/297) object. 4 | To migrate to this version, please follow the guide: 5 | 6 | ```diff 7 | -var web3 = require('web3'); 8 | +var Web3 = require('web3'); 9 | +var web3 = new Web3(); 10 | ``` 11 | 12 | 13 | # Ethereum JavaScript API 14 | 15 | [![Join the chat at https://gitter.im/ethereum/web3.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ethereum/web3.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 16 | 17 | This is the Ethereum compatible [JavaScript API](https://github.com/ethereum/wiki/wiki/JavaScript-API) 18 | which implements the [Generic JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) spec. It's available on npm as a node module, for bower and component as an embeddable js and as a meteor.js package. 19 | 20 | [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![dependency status][dep-image]][dep-url] [![dev dependency status][dep-dev-image]][dep-dev-url][![Coverage Status][coveralls-image]][coveralls-url][![Stories in Ready][waffle-image]][waffle-url] 21 | 22 | 23 | 24 | You need to run a local Ethereum node to use this library. 25 | 26 | [Documentation](https://github.com/ethereum/wiki/wiki/JavaScript-API) 27 | 28 | ## Installation 29 | 30 | ### Node.js 31 | 32 | ```bash 33 | npm install web3 34 | ``` 35 | 36 | ### Meteor.js 37 | 38 | ```bash 39 | meteor add ethereum:web3 40 | ``` 41 | 42 | ### As Browser module 43 | Bower 44 | 45 | ```bash 46 | bower install web3 47 | ``` 48 | 49 | Component 50 | 51 | ```bash 52 | component install ethereum/web3.js 53 | ``` 54 | 55 | * Include `ethereum.min.js` in your html file. (not required for the meteor package) 56 | 57 | ## Usage 58 | Use the `web3` object directly from global namespace: 59 | 60 | ```js 61 | console.log(web3); // {eth: .., shh: ...} // it's here! 62 | ``` 63 | 64 | Set a provider (HttpProvider) 65 | 66 | ```js 67 | web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); 68 | ``` 69 | 70 | There you go, now you can use it: 71 | 72 | ```js 73 | var coinbase = web3.eth.coinbase; 74 | var balance = web3.eth.getBalance(coinbase); 75 | ``` 76 | 77 | You can find more examples in [`example`](https://github.com/ethereum/web3.js/tree/master/example) directory. 78 | 79 | 80 | ## Contribute! 81 | 82 | ### Requirements 83 | 84 | * Node.js 85 | * npm 86 | 87 | ```bash 88 | sudo apt-get update 89 | sudo apt-get install nodejs 90 | sudo apt-get install npm 91 | sudo apt-get install nodejs-legacy 92 | ``` 93 | 94 | ### Building (gulp) 95 | 96 | ```bash 97 | npm run-script build 98 | ``` 99 | 100 | 101 | ### Testing (mocha) 102 | 103 | ```bash 104 | npm test 105 | ``` 106 | 107 | [npm-image]: https://badge.fury.io/js/web3.png 108 | [npm-url]: https://npmjs.org/package/web3 109 | [travis-image]: https://travis-ci.org/ethereum/web3.js.svg 110 | [travis-url]: https://travis-ci.org/ethereum/web3.js 111 | [dep-image]: https://david-dm.org/ethereum/web3.js.svg 112 | [dep-url]: https://david-dm.org/ethereum/web3.js 113 | [dep-dev-image]: https://david-dm.org/ethereum/web3.js/dev-status.svg 114 | [dep-dev-url]: https://david-dm.org/ethereum/web3.js#info=devDependencies 115 | [coveralls-image]: https://coveralls.io/repos/ethereum/web3.js/badge.svg?branch=master 116 | [coveralls-url]: https://coveralls.io/r/ethereum/web3.js?branch=master 117 | [waffle-image]: https://badge.waffle.io/ethereum/web3.js.svg?label=ready&title=Ready 118 | [waffle-url]: http://waffle.io/ethereum/web3.js 119 | 120 | -------------------------------------------------------------------------------- /batch.js: -------------------------------------------------------------------------------- 1 | var Batch = require('./lib/web3/batch'); 2 | var createBatch = function () { 3 | return new Batch(this); 4 | }; 5 | 6 | module.exports = createBatch; 7 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web3", 3 | "namespace": "ethereum", 4 | "version": "0.15.3", 5 | "description": "Ethereum Compatible JavaScript API", 6 | "main": [ 7 | "./dist/web3.js", 8 | "./dist/web3.min.js" 9 | ], 10 | "dependencies": { 11 | "bignumber.js": ">=2.0.0", 12 | "crypto-js": "~3.1.4" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/ethereum/web3.js.git" 17 | }, 18 | "homepage": "https://github.com/ethereum/web3.js", 19 | "bugs": { 20 | "url": "https://github.com/ethereum/web3.js/issues" 21 | }, 22 | "keywords": [ 23 | "ethereum", 24 | "javascript", 25 | "API" 26 | ], 27 | "authors": [ 28 | { 29 | "name": "Marek Kotewicz", 30 | "email": "marek@ethdev.com", 31 | "homepage": "https://github.com/debris" 32 | }, 33 | { 34 | "name": "Marian Oancea", 35 | "email": "marian@ethdev.com", 36 | "homepage": "https://github.com/cubedro" 37 | }, 38 | { 39 | "name": "Fabian Vogelsteller", 40 | "email": "fabian@ethdev.com", 41 | "homepage": "https://github.com/frozeman" 42 | } 43 | ], 44 | "license": "LGPL-3.0", 45 | "ignore": [ 46 | "example", 47 | "lib", 48 | "node_modules", 49 | "package.json", 50 | "package.js", 51 | ".versions", 52 | ".bowerrc", 53 | ".editorconfig", 54 | ".gitignore", 55 | ".jshintrc", 56 | ".npmignore", 57 | ".travis.yml", 58 | "gulpfile.js", 59 | "index.js", 60 | "**/*.txt" 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /db.js: -------------------------------------------------------------------------------- 1 | var DB = require('./lib/web3/methods/db'); 2 | 3 | module.exports = DB; 4 | -------------------------------------------------------------------------------- /eth.js: -------------------------------------------------------------------------------- 1 | var Eth = require('./lib/web3/methods/eth'); 2 | 3 | module.exports = Eth; 4 | -------------------------------------------------------------------------------- /example/balance.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 28 | 29 | 30 |

coinbase balance

31 | 32 |
33 |
34 |
35 |
36 |
37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /example/contract.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 63 | 64 | 65 |

contract

66 |
67 |
68 |
69 | 70 |
71 | 74 |
75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /example/contract_array.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 64 | 65 | 66 |

contract

67 |
68 |
69 |
70 | 71 |
72 | 79 |
80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /example/event_inc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 74 | 75 | 76 | 77 |
78 |
79 | 80 |
81 |
82 | 83 |
84 |
85 |
86 |
87 | 88 | 89 | -------------------------------------------------------------------------------- /example/namereg.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 63 | 64 | 65 | This example shows only part of namereg functionalities. Namereg contract is available here 66 | 67 |

Namereg

68 |

Search for name

69 |
70 | Address: 71 | 72 | Name: 73 | 74 |
75 |

Search for address

76 |
77 | Name: 78 | 79 | Address: 80 | 81 |
82 |

Register name

83 |
84 | Check if name is available: 85 | 86 | 87 |
88 |
89 | 90 |
91 |

92 | If you own the name, you can also change the address it points to 93 |
94 | Address: 95 | 96 | 97 | Current address : 98 | 99 |
100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /example/node-app.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var Web3 = require('../index.js'); 4 | var web3 = new Web3(); 5 | 6 | web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); 7 | 8 | var coinbase = web3.eth.coinbase; 9 | console.log(coinbase); 10 | 11 | var balance = web3.eth.getBalance(coinbase); 12 | console.log(balance.toString(10)); 13 | 14 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | 5 | var version = require('./lib/version.json'); 6 | var path = require('path'); 7 | 8 | var del = require('del'); 9 | var gulp = require('gulp'); 10 | var browserify = require('browserify'); 11 | var jshint = require('gulp-jshint'); 12 | var uglify = require('gulp-uglify'); 13 | var rename = require('gulp-rename'); 14 | var source = require('vinyl-source-stream'); 15 | var exorcist = require('exorcist'); 16 | var bower = require('bower'); 17 | var streamify = require('gulp-streamify'); 18 | var replace = require('gulp-replace'); 19 | 20 | var DEST = path.join(__dirname, 'dist/'); 21 | var src = 'index'; 22 | var dst = 'web3'; 23 | var lightDst = 'web3-light'; 24 | 25 | var browserifyOptions = { 26 | debug: true, 27 | insert_global_vars: false, // jshint ignore:line 28 | detectGlobals: false, 29 | bundleExternal: true 30 | }; 31 | 32 | gulp.task('version', function(){ 33 | gulp.src(['./package.json']) 34 | .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) 35 | .pipe(gulp.dest('./')); 36 | gulp.src(['./bower.json']) 37 | .pipe(replace(/\"version\"\: \"([\.0-9]*)\"/, '"version": "'+ version.version + '"')) 38 | .pipe(gulp.dest('./')); 39 | gulp.src(['./package.js']) 40 | .pipe(replace(/version\: \'([\.0-9]*)\'/, "version: '"+ version.version + "'")) 41 | .pipe(gulp.dest('./')); 42 | }); 43 | 44 | gulp.task('bower', ['version'], function(cb){ 45 | bower.commands.install().on('end', function (installed){ 46 | console.log(installed); 47 | cb(); 48 | }); 49 | }); 50 | 51 | gulp.task('lint', [], function(){ 52 | return gulp.src(['./*.js', './lib/*.js']) 53 | .pipe(jshint()) 54 | .pipe(jshint.reporter('default')); 55 | }); 56 | 57 | gulp.task('clean', ['lint'], function(cb) { 58 | del([ DEST ]).then(cb.bind(null, null)); 59 | }); 60 | 61 | gulp.task('light', ['clean'], function () { 62 | return browserify(browserifyOptions) 63 | .require('./' + src + '.js', {expose: 'web3'}) 64 | .ignore('bignumber.js') 65 | .require('./lib/utils/browser-bn.js', {expose: 'bignumber.js'}) // fake bignumber.js 66 | .add('./' + src + '.js') 67 | .bundle() 68 | .pipe(exorcist(path.join( DEST, lightDst + '.js.map'))) 69 | .pipe(source(lightDst + '.js')) 70 | .pipe(gulp.dest( DEST )) 71 | .pipe(streamify(uglify())) 72 | .pipe(rename(lightDst + '.min.js')) 73 | .pipe(gulp.dest( DEST )); 74 | }); 75 | 76 | gulp.task('standalone', ['clean'], function () { 77 | return browserify(browserifyOptions) 78 | .require('./' + src + '.js', {expose: 'web3'}) 79 | .require('bignumber.js') // expose it to dapp users 80 | .add('./' + src + '.js') 81 | .ignore('crypto') 82 | .bundle() 83 | .pipe(exorcist(path.join( DEST, dst + '.js.map'))) 84 | .pipe(source(dst + '.js')) 85 | .pipe(gulp.dest( DEST )) 86 | .pipe(streamify(uglify())) 87 | .pipe(rename(dst + '.min.js')) 88 | .pipe(gulp.dest( DEST )); 89 | }); 90 | 91 | gulp.task('watch', function() { 92 | gulp.watch(['./lib/*.js'], ['lint', 'build']); 93 | }); 94 | 95 | gulp.task('default', ['version', 'lint', 'clean', 'light', 'standalone']); 96 | 97 | -------------------------------------------------------------------------------- /lib/contracts/ICAPRegistrar.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "constant": true, 4 | "inputs": [ 5 | { 6 | "name": "_name", 7 | "type": "bytes32" 8 | } 9 | ], 10 | "name": "owner", 11 | "outputs": [ 12 | { 13 | "name": "", 14 | "type": "address" 15 | } 16 | ], 17 | "type": "function" 18 | }, 19 | { 20 | "constant": false, 21 | "inputs": [ 22 | { 23 | "name": "_name", 24 | "type": "bytes32" 25 | }, 26 | { 27 | "name": "_refund", 28 | "type": "address" 29 | } 30 | ], 31 | "name": "disown", 32 | "outputs": [], 33 | "type": "function" 34 | }, 35 | { 36 | "constant": true, 37 | "inputs": [ 38 | { 39 | "name": "_name", 40 | "type": "bytes32" 41 | } 42 | ], 43 | "name": "addr", 44 | "outputs": [ 45 | { 46 | "name": "", 47 | "type": "address" 48 | } 49 | ], 50 | "type": "function" 51 | }, 52 | { 53 | "constant": false, 54 | "inputs": [ 55 | { 56 | "name": "_name", 57 | "type": "bytes32" 58 | } 59 | ], 60 | "name": "reserve", 61 | "outputs": [], 62 | "type": "function" 63 | }, 64 | { 65 | "constant": false, 66 | "inputs": [ 67 | { 68 | "name": "_name", 69 | "type": "bytes32" 70 | }, 71 | { 72 | "name": "_newOwner", 73 | "type": "address" 74 | } 75 | ], 76 | "name": "transfer", 77 | "outputs": [], 78 | "type": "function" 79 | }, 80 | { 81 | "constant": false, 82 | "inputs": [ 83 | { 84 | "name": "_name", 85 | "type": "bytes32" 86 | }, 87 | { 88 | "name": "_a", 89 | "type": "address" 90 | } 91 | ], 92 | "name": "setAddr", 93 | "outputs": [], 94 | "type": "function" 95 | }, 96 | { 97 | "anonymous": false, 98 | "inputs": [ 99 | { 100 | "indexed": true, 101 | "name": "name", 102 | "type": "bytes32" 103 | } 104 | ], 105 | "name": "Changed", 106 | "type": "event" 107 | } 108 | ] 109 | -------------------------------------------------------------------------------- /lib/contracts/SmartExchange.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "constant": false, 4 | "inputs": [ 5 | { 6 | "name": "from", 7 | "type": "bytes32" 8 | }, 9 | { 10 | "name": "to", 11 | "type": "address" 12 | }, 13 | { 14 | "name": "value", 15 | "type": "uint256" 16 | } 17 | ], 18 | "name": "transfer", 19 | "outputs": [], 20 | "type": "function" 21 | }, 22 | { 23 | "constant": false, 24 | "inputs": [ 25 | { 26 | "name": "from", 27 | "type": "bytes32" 28 | }, 29 | { 30 | "name": "to", 31 | "type": "address" 32 | }, 33 | { 34 | "name": "indirectId", 35 | "type": "bytes32" 36 | }, 37 | { 38 | "name": "value", 39 | "type": "uint256" 40 | } 41 | ], 42 | "name": "icapTransfer", 43 | "outputs": [], 44 | "type": "function" 45 | }, 46 | { 47 | "constant": false, 48 | "inputs": [ 49 | { 50 | "name": "to", 51 | "type": "bytes32" 52 | } 53 | ], 54 | "name": "deposit", 55 | "outputs": [], 56 | "type": "function" 57 | }, 58 | { 59 | "anonymous": false, 60 | "inputs": [ 61 | { 62 | "indexed": true, 63 | "name": "from", 64 | "type": "address" 65 | }, 66 | { 67 | "indexed": false, 68 | "name": "value", 69 | "type": "uint256" 70 | } 71 | ], 72 | "name": "AnonymousDeposit", 73 | "type": "event" 74 | }, 75 | { 76 | "anonymous": false, 77 | "inputs": [ 78 | { 79 | "indexed": true, 80 | "name": "from", 81 | "type": "address" 82 | }, 83 | { 84 | "indexed": true, 85 | "name": "to", 86 | "type": "bytes32" 87 | }, 88 | { 89 | "indexed": false, 90 | "name": "value", 91 | "type": "uint256" 92 | } 93 | ], 94 | "name": "Deposit", 95 | "type": "event" 96 | }, 97 | { 98 | "anonymous": false, 99 | "inputs": [ 100 | { 101 | "indexed": true, 102 | "name": "from", 103 | "type": "bytes32" 104 | }, 105 | { 106 | "indexed": true, 107 | "name": "to", 108 | "type": "address" 109 | }, 110 | { 111 | "indexed": false, 112 | "name": "value", 113 | "type": "uint256" 114 | } 115 | ], 116 | "name": "Transfer", 117 | "type": "event" 118 | }, 119 | { 120 | "anonymous": false, 121 | "inputs": [ 122 | { 123 | "indexed": true, 124 | "name": "from", 125 | "type": "bytes32" 126 | }, 127 | { 128 | "indexed": true, 129 | "name": "to", 130 | "type": "address" 131 | }, 132 | { 133 | "indexed": false, 134 | "name": "indirectId", 135 | "type": "bytes32" 136 | }, 137 | { 138 | "indexed": false, 139 | "name": "value", 140 | "type": "uint256" 141 | } 142 | ], 143 | "name": "IcapTransfer", 144 | "type": "event" 145 | } 146 | ] 147 | -------------------------------------------------------------------------------- /lib/solidity/address.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | /** 5 | * SolidityTypeAddress is a prootype that represents address type 6 | * It matches: 7 | * address 8 | * address[] 9 | * address[4] 10 | * address[][] 11 | * address[3][] 12 | * address[][6][], ... 13 | */ 14 | var SolidityTypeAddress = function () { 15 | this._inputFormatter = f.formatInputInt; 16 | this._outputFormatter = f.formatOutputAddress; 17 | }; 18 | 19 | SolidityTypeAddress.prototype = new SolidityType({}); 20 | SolidityTypeAddress.prototype.constructor = SolidityTypeAddress; 21 | 22 | SolidityTypeAddress.prototype.isType = function (name) { 23 | return !!name.match(/address(\[([0-9]*)\])?/); 24 | }; 25 | 26 | SolidityTypeAddress.prototype.staticPartLength = function (name) { 27 | return 32 * this.staticArrayLength(name); 28 | }; 29 | 30 | module.exports = SolidityTypeAddress; 31 | 32 | -------------------------------------------------------------------------------- /lib/solidity/bool.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | /** 5 | * SolidityTypeBool is a prootype that represents bool type 6 | * It matches: 7 | * bool 8 | * bool[] 9 | * bool[4] 10 | * bool[][] 11 | * bool[3][] 12 | * bool[][6][], ... 13 | */ 14 | var SolidityTypeBool = function () { 15 | this._inputFormatter = f.formatInputBool; 16 | this._outputFormatter = f.formatOutputBool; 17 | }; 18 | 19 | SolidityTypeBool.prototype = new SolidityType({}); 20 | SolidityTypeBool.prototype.constructor = SolidityTypeBool; 21 | 22 | SolidityTypeBool.prototype.isType = function (name) { 23 | return !!name.match(/^bool(\[([0-9]*)\])*$/); 24 | }; 25 | 26 | SolidityTypeBool.prototype.staticPartLength = function (name) { 27 | return 32 * this.staticArrayLength(name); 28 | }; 29 | 30 | module.exports = SolidityTypeBool; 31 | -------------------------------------------------------------------------------- /lib/solidity/bytes.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | /** 5 | * SolidityTypeBytes is a prootype that represents bytes type 6 | * It matches: 7 | * bytes 8 | * bytes[] 9 | * bytes[4] 10 | * bytes[][] 11 | * bytes[3][] 12 | * bytes[][6][], ... 13 | * bytes32 14 | * bytes64[] 15 | * bytes8[4] 16 | * bytes256[][] 17 | * bytes[3][] 18 | * bytes64[][6][], ... 19 | */ 20 | var SolidityTypeBytes = function () { 21 | this._inputFormatter = f.formatInputBytes; 22 | this._outputFormatter = f.formatOutputBytes; 23 | }; 24 | 25 | SolidityTypeBytes.prototype = new SolidityType({}); 26 | SolidityTypeBytes.prototype.constructor = SolidityTypeBytes; 27 | 28 | SolidityTypeBytes.prototype.isType = function (name) { 29 | return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/); 30 | }; 31 | 32 | SolidityTypeBytes.prototype.staticPartLength = function (name) { 33 | var matches = name.match(/^bytes([0-9]*)/); 34 | var size = parseInt(matches[1]); 35 | return size * this.staticArrayLength(name); 36 | }; 37 | 38 | module.exports = SolidityTypeBytes; 39 | -------------------------------------------------------------------------------- /lib/solidity/dynamicbytes.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | var SolidityTypeDynamicBytes = function () { 5 | this._inputFormatter = f.formatInputDynamicBytes; 6 | this._outputFormatter = f.formatOutputDynamicBytes; 7 | }; 8 | 9 | SolidityTypeDynamicBytes.prototype = new SolidityType({}); 10 | SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; 11 | 12 | SolidityTypeDynamicBytes.prototype.isType = function (name) { 13 | return !!name.match(/^bytes(\[([0-9]*)\])*$/); 14 | }; 15 | 16 | SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) { 17 | return 32 * this.staticArrayLength(name); 18 | }; 19 | 20 | SolidityTypeDynamicBytes.prototype.isDynamicType = function () { 21 | return true; 22 | }; 23 | 24 | module.exports = SolidityTypeDynamicBytes; 25 | 26 | -------------------------------------------------------------------------------- /lib/solidity/int.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | /** 5 | * SolidityTypeInt is a prootype that represents int type 6 | * It matches: 7 | * int 8 | * int[] 9 | * int[4] 10 | * int[][] 11 | * int[3][] 12 | * int[][6][], ... 13 | * int32 14 | * int64[] 15 | * int8[4] 16 | * int256[][] 17 | * int[3][] 18 | * int64[][6][], ... 19 | */ 20 | var SolidityTypeInt = function () { 21 | this._inputFormatter = f.formatInputInt; 22 | this._outputFormatter = f.formatOutputInt; 23 | }; 24 | 25 | SolidityTypeInt.prototype = new SolidityType({}); 26 | SolidityTypeInt.prototype.constructor = SolidityTypeInt; 27 | 28 | SolidityTypeInt.prototype.isType = function (name) { 29 | return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); 30 | }; 31 | 32 | SolidityTypeInt.prototype.staticPartLength = function (name) { 33 | return 32 * this.staticArrayLength(name); 34 | }; 35 | 36 | module.exports = SolidityTypeInt; 37 | -------------------------------------------------------------------------------- /lib/solidity/real.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | /** 5 | * SolidityTypeReal is a prootype that represents real type 6 | * It matches: 7 | * real 8 | * real[] 9 | * real[4] 10 | * real[][] 11 | * real[3][] 12 | * real[][6][], ... 13 | * real32 14 | * real64[] 15 | * real8[4] 16 | * real256[][] 17 | * real[3][] 18 | * real64[][6][], ... 19 | */ 20 | var SolidityTypeReal = function () { 21 | this._inputFormatter = f.formatInputReal; 22 | this._outputFormatter = f.formatOutputReal; 23 | }; 24 | 25 | SolidityTypeReal.prototype = new SolidityType({}); 26 | SolidityTypeReal.prototype.constructor = SolidityTypeReal; 27 | 28 | SolidityTypeReal.prototype.isType = function (name) { 29 | return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); 30 | }; 31 | 32 | SolidityTypeReal.prototype.staticPartLength = function (name) { 33 | return 32 * this.staticArrayLength(name); 34 | }; 35 | 36 | module.exports = SolidityTypeReal; 37 | -------------------------------------------------------------------------------- /lib/solidity/string.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | var SolidityTypeString = function () { 5 | this._inputFormatter = f.formatInputString; 6 | this._outputFormatter = f.formatOutputString; 7 | }; 8 | 9 | SolidityTypeString.prototype = new SolidityType({}); 10 | SolidityTypeString.prototype.constructor = SolidityTypeString; 11 | 12 | SolidityTypeString.prototype.isType = function (name) { 13 | return !!name.match(/^string(\[([0-9]*)\])*$/); 14 | }; 15 | 16 | SolidityTypeString.prototype.staticPartLength = function (name) { 17 | return 32 * this.staticArrayLength(name); 18 | }; 19 | 20 | SolidityTypeString.prototype.isDynamicType = function () { 21 | return true; 22 | }; 23 | 24 | module.exports = SolidityTypeString; 25 | 26 | -------------------------------------------------------------------------------- /lib/solidity/uint.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | /** 5 | * SolidityTypeUInt is a prootype that represents uint type 6 | * It matches: 7 | * uint 8 | * uint[] 9 | * uint[4] 10 | * uint[][] 11 | * uint[3][] 12 | * uint[][6][], ... 13 | * uint32 14 | * uint64[] 15 | * uint8[4] 16 | * uint256[][] 17 | * uint[3][] 18 | * uint64[][6][], ... 19 | */ 20 | var SolidityTypeUInt = function () { 21 | this._inputFormatter = f.formatInputInt; 22 | this._outputFormatter = f.formatOutputUInt; 23 | }; 24 | 25 | SolidityTypeUInt.prototype = new SolidityType({}); 26 | SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; 27 | 28 | SolidityTypeUInt.prototype.isType = function (name) { 29 | return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); 30 | }; 31 | 32 | SolidityTypeUInt.prototype.staticPartLength = function (name) { 33 | return 32 * this.staticArrayLength(name); 34 | }; 35 | 36 | module.exports = SolidityTypeUInt; 37 | -------------------------------------------------------------------------------- /lib/solidity/ureal.js: -------------------------------------------------------------------------------- 1 | var f = require('./formatters'); 2 | var SolidityType = require('./type'); 3 | 4 | /** 5 | * SolidityTypeUReal is a prootype that represents ureal type 6 | * It matches: 7 | * ureal 8 | * ureal[] 9 | * ureal[4] 10 | * ureal[][] 11 | * ureal[3][] 12 | * ureal[][6][], ... 13 | * ureal32 14 | * ureal64[] 15 | * ureal8[4] 16 | * ureal256[][] 17 | * ureal[3][] 18 | * ureal64[][6][], ... 19 | */ 20 | var SolidityTypeUReal = function () { 21 | this._inputFormatter = f.formatInputReal; 22 | this._outputFormatter = f.formatOutputUReal; 23 | }; 24 | 25 | SolidityTypeUReal.prototype = new SolidityType({}); 26 | SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; 27 | 28 | SolidityTypeUReal.prototype.isType = function (name) { 29 | return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); 30 | }; 31 | 32 | SolidityTypeUReal.prototype.staticPartLength = function (name) { 33 | return 32 * this.staticArrayLength(name); 34 | }; 35 | 36 | module.exports = SolidityTypeUReal; 37 | -------------------------------------------------------------------------------- /lib/utils/browser-bn.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = BigNumber; // jshint ignore:line 4 | 5 | -------------------------------------------------------------------------------- /lib/utils/browser-xhr.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // go env doesn't have and need XMLHttpRequest 4 | if (typeof XMLHttpRequest === 'undefined') { 5 | exports.XMLHttpRequest = {}; 6 | } else { 7 | exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line 8 | } 9 | 10 | -------------------------------------------------------------------------------- /lib/utils/config.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** @file config.js 18 | * @authors: 19 | * Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | /** 24 | * Utils 25 | * 26 | * @module utils 27 | */ 28 | 29 | /** 30 | * Utility functions 31 | * 32 | * @class [utils] config 33 | * @constructor 34 | */ 35 | 36 | 37 | /// required to define ETH_BIGNUMBER_ROUNDING_MODE 38 | var BigNumber = require('bignumber.js'); 39 | 40 | var ETH_UNITS = [ 41 | 'wei', 42 | 'kwei', 43 | 'Mwei', 44 | 'Gwei', 45 | 'szabo', 46 | 'finney', 47 | 'femtoether', 48 | 'picoether', 49 | 'nanoether', 50 | 'microether', 51 | 'milliether', 52 | 'nano', 53 | 'micro', 54 | 'milli', 55 | 'ether', 56 | 'grand', 57 | 'Mether', 58 | 'Gether', 59 | 'Tether', 60 | 'Pether', 61 | 'Eether', 62 | 'Zether', 63 | 'Yether', 64 | 'Nether', 65 | 'Dether', 66 | 'Vether', 67 | 'Uether' 68 | ]; 69 | 70 | module.exports = { 71 | ETH_PADDING: 32, 72 | ETH_SIGNATURE_LENGTH: 4, 73 | ETH_UNITS: ETH_UNITS, 74 | ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, 75 | ETH_POLLING_TIMEOUT: 1000/2, 76 | defaultBlock: 'latest', 77 | defaultAccount: undefined 78 | }; 79 | 80 | -------------------------------------------------------------------------------- /lib/utils/isBigNumber.js: -------------------------------------------------------------------------------- 1 | var BigNumber = require("bignumber.js"); 2 | 3 | /** 4 | * Returns true if object is BigNumber, otherwise false 5 | * 6 | * @method isBigNumber 7 | * @param {Object} 8 | * @return {Boolean} 9 | */ 10 | var isBigNumber = function (object) { 11 | return object instanceof BigNumber || 12 | (object && object.constructor && object.constructor.name === 'BigNumber'); 13 | }; 14 | 15 | module.exports = isBigNumber; 16 | -------------------------------------------------------------------------------- /lib/utils/isChecksumAddress.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Checks if the given string is a checksummed address 3 | * 4 | * @method isChecksumAddress 5 | * @param {String} address the given HEX adress 6 | * @return {Boolean} 7 | */ 8 | var isChecksumAddress = function (address) { 9 | // Check each case 10 | address = address.replace('0x',''); 11 | var addressHash = sha3(address.toLowerCase()); 12 | 13 | for (var i = 0; i < 40; i++ ) { 14 | // the nth letter should be uppercase if the nth digit of casemap is 1 15 | if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { 16 | return false; 17 | } 18 | } 19 | return true; 20 | }; 21 | 22 | module.exports = isChecksumAddress; 23 | -------------------------------------------------------------------------------- /lib/utils/isString.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns true if object is string, otherwise false 3 | * 4 | * @method isString 5 | * @param {Object} 6 | * @return {Boolean} 7 | */ 8 | var isString = function (object) { 9 | return typeof object === 'string' || 10 | (object && object.constructor && object.constructor.name === 'String'); 11 | }; 12 | 13 | module.exports = isString; 14 | -------------------------------------------------------------------------------- /lib/utils/sha3.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** 18 | * @file sha3.js 19 | * @author Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var CryptoJS = require('crypto-js'); 24 | var sha3 = require('crypto-js/sha3'); 25 | 26 | module.exports = function (value, options) { 27 | if (options && options.encoding === 'hex') { 28 | if (value.length > 2 && value.substr(0, 2) === '0x') { 29 | value = value.substr(2); 30 | } 31 | value = CryptoJS.enc.Hex.parse(value); 32 | } 33 | 34 | return sha3(value, { 35 | outputLength: 256 36 | }).toString(); 37 | }; 38 | 39 | -------------------------------------------------------------------------------- /lib/utils/toBigNumber.js: -------------------------------------------------------------------------------- 1 | var isBigNumber = require("./isBigNumber.js"); 2 | var isString = require("./isString.js"); 3 | 4 | /** 5 | * Takes an input and transforms it into an bignumber 6 | * 7 | * @method toBigNumber 8 | * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber 9 | * @return {BigNumber} BigNumber 10 | */ 11 | var toBigNumber = function(number) { 12 | /*jshint maxcomplexity:5 */ 13 | number = number || 0; 14 | if (isBigNumber(number)) 15 | return number; 16 | 17 | if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { 18 | return new BigNumber(number.replace('0x',''), 16); 19 | } 20 | 21 | return new BigNumber(number.toString(10), 10); 22 | }; 23 | 24 | module.exports = toBigNumber; 25 | -------------------------------------------------------------------------------- /lib/utils/toChecksumAddress.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Makes a checksum address 3 | * 4 | * @method toChecksumAddress 5 | * @param {String} address the given HEX adress 6 | * @return {String} 7 | */ 8 | var toChecksumAddress = function (address) { 9 | if (typeof address === 'undefined') return ''; 10 | 11 | address = address.toLowerCase().replace('0x',''); 12 | var addressHash = sha3(address); 13 | var checksumAddress = '0x'; 14 | 15 | for (var i = 0; i < address.length; i++ ) { 16 | // If ith character is 9 to f then make it uppercase 17 | if (parseInt(addressHash[i], 16) > 7) { 18 | checksumAddress += address[i].toUpperCase(); 19 | } else { 20 | checksumAddress += address[i]; 21 | } 22 | } 23 | return checksumAddress; 24 | }; 25 | -------------------------------------------------------------------------------- /lib/utils/toDecimal.js: -------------------------------------------------------------------------------- 1 | var toBigNumber = require('./toBigNumber.js'); 2 | 3 | /** 4 | * Converts value to it's decimal representation in string 5 | * 6 | * @method toDecimal 7 | * @param {String|Number|BigNumber} 8 | * @return {String} 9 | */ 10 | var toDecimal = function (value) { 11 | return toBigNumber(value).toNumber(); 12 | }; 13 | 14 | module.exports = toDecimal; 15 | -------------------------------------------------------------------------------- /lib/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.15.3" 3 | } 4 | -------------------------------------------------------------------------------- /lib/web3/allevents.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** 18 | * @file allevents.js 19 | * @author Marek Kotewicz 20 | * @date 2014 21 | */ 22 | 23 | var sha3 = require('../utils/sha3'); 24 | var SolidityEvent = require('./event'); 25 | var formatters = require('./formatters'); 26 | var utils = require('../utils/utils'); 27 | var Filter = require('./filter'); 28 | var watches = require('./methods/watches'); 29 | 30 | var AllSolidityEvents = function (requestManager, json, address) { 31 | this._requestManager = requestManager; 32 | this._json = json; 33 | this._address = address; 34 | }; 35 | 36 | AllSolidityEvents.prototype.encode = function (options) { 37 | options = options || {}; 38 | var result = {}; 39 | 40 | ['fromBlock', 'toBlock'].filter(function (f) { 41 | return options[f] !== undefined; 42 | }).forEach(function (f) { 43 | result[f] = formatters.inputBlockNumberFormatter(options[f]); 44 | }); 45 | 46 | result.address = this._address; 47 | 48 | return result; 49 | }; 50 | 51 | AllSolidityEvents.prototype.decode = function (data) { 52 | data.data = data.data || ''; 53 | data.topics = data.topics || []; 54 | 55 | var eventTopic = data.topics[0].slice(2); 56 | var match = this._json.filter(function (j) { 57 | return eventTopic === sha3(utils.transformToFullName(j)); 58 | })[0]; 59 | 60 | if (!match) { // cannot find matching event? 61 | console.warn('cannot find event for log'); 62 | return data; 63 | } 64 | 65 | var event = new SolidityEvent(this._requestManager, match, this._address); 66 | return event.decode(data); 67 | }; 68 | 69 | AllSolidityEvents.prototype.execute = function (options, callback) { 70 | 71 | if (utils.isFunction(arguments[arguments.length - 1])) { 72 | callback = arguments[arguments.length - 1]; 73 | if(arguments.length === 1) 74 | options = null; 75 | } 76 | 77 | var o = this.encode(options); 78 | var formatter = this.decode.bind(this); 79 | return new Filter(this._requestManager, o, watches.eth(), formatter, callback); 80 | }; 81 | 82 | AllSolidityEvents.prototype.attachToContract = function (contract) { 83 | var execute = this.execute.bind(this); 84 | contract.allEvents = execute; 85 | }; 86 | 87 | module.exports = AllSolidityEvents; 88 | 89 | -------------------------------------------------------------------------------- /lib/web3/batch.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** 18 | * @file batch.js 19 | * @author Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var Jsonrpc = require('./jsonrpc'); 24 | var errors = require('./errors'); 25 | 26 | var Batch = function (web3) { 27 | this.requestManager = web3._requestManager; 28 | this.requests = []; 29 | }; 30 | 31 | /** 32 | * Should be called to add create new request to batch request 33 | * 34 | * @method add 35 | * @param {Object} jsonrpc requet object 36 | */ 37 | Batch.prototype.add = function (request) { 38 | this.requests.push(request); 39 | }; 40 | 41 | /** 42 | * Should be called to execute batch request 43 | * 44 | * @method execute 45 | */ 46 | Batch.prototype.execute = function () { 47 | var requests = this.requests; 48 | this.requestManager.sendBatch(requests, function (err, results) { 49 | results = results || []; 50 | requests.map(function (request, index) { 51 | return results[index] || {}; 52 | }).forEach(function (result, index) { 53 | if (requests[index].callback) { 54 | 55 | if (!Jsonrpc.getInstance().isValidResponse(result)) { 56 | return requests[index].callback(errors.InvalidResponse(result)); 57 | } 58 | 59 | requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); 60 | } 61 | }); 62 | }); 63 | }; 64 | 65 | module.exports = Batch; 66 | 67 | -------------------------------------------------------------------------------- /lib/web3/errors.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** 18 | * @file errors.js 19 | * @author Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | module.exports = { 24 | InvalidNumberOfParams: function () { 25 | return new Error('Invalid number of input parameters'); 26 | }, 27 | InvalidConnection: function (host){ 28 | return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); 29 | }, 30 | InvalidProvider: function () { 31 | return new Error('Provider not set or invalid'); 32 | }, 33 | InvalidResponse: function (result){ 34 | var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); 35 | return new Error(message); 36 | } 37 | }; 38 | 39 | -------------------------------------------------------------------------------- /lib/web3/extend.js: -------------------------------------------------------------------------------- 1 | var formatters = require('./formatters'); 2 | var utils = require('./../utils/utils'); 3 | var Method = require('./method'); 4 | var Property = require('./property'); 5 | 6 | // TODO: refactor, so the input params are not altered. 7 | // it's necessary to make same 'extension' work with multiple providers 8 | var extend = function (web3) { 9 | /* jshint maxcomplexity:5 */ 10 | var ex = function (extension) { 11 | 12 | var extendedObject; 13 | if (extension.property) { 14 | if (!web3[extension.property]) { 15 | web3[extension.property] = {}; 16 | } 17 | extendedObject = web3[extension.property]; 18 | } else { 19 | extendedObject = web3; 20 | } 21 | 22 | if (extension.methods) { 23 | extension.methods.forEach(function (method) { 24 | method.attachToObject(extendedObject); 25 | method.setRequestManager(web3._requestManager); 26 | }); 27 | } 28 | 29 | if (extension.properties) { 30 | extension.properties.forEach(function (property) { 31 | property.attachToObject(extendedObject); 32 | property.setRequestManager(web3._requestManager); 33 | }); 34 | } 35 | }; 36 | 37 | ex.formatters = formatters; 38 | ex.utils = utils; 39 | ex.Method = Method; 40 | ex.Property = Property; 41 | 42 | return ex; 43 | }; 44 | 45 | 46 | 47 | module.exports = extend; 48 | 49 | -------------------------------------------------------------------------------- /lib/web3/jsonrpc.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** @file jsonrpc.js 18 | * @authors: 19 | * Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var Jsonrpc = function () { 24 | // singleton pattern 25 | if (arguments.callee._singletonInstance) { 26 | return arguments.callee._singletonInstance; 27 | } 28 | arguments.callee._singletonInstance = this; 29 | 30 | this.messageId = 1; 31 | }; 32 | 33 | /** 34 | * @return {Jsonrpc} singleton 35 | */ 36 | Jsonrpc.getInstance = function () { 37 | var instance = new Jsonrpc(); 38 | return instance; 39 | }; 40 | 41 | /** 42 | * Should be called to valid json create payload object 43 | * 44 | * @method toPayload 45 | * @param {Function} method of jsonrpc call, required 46 | * @param {Array} params, an array of method params, optional 47 | * @returns {Object} valid jsonrpc payload object 48 | */ 49 | Jsonrpc.prototype.toPayload = function (method, params) { 50 | if (!method) 51 | console.error('jsonrpc method should be specified!'); 52 | 53 | return { 54 | jsonrpc: '2.0', 55 | method: method, 56 | params: params || [], 57 | id: this.messageId++ 58 | }; 59 | }; 60 | 61 | /** 62 | * Should be called to check if jsonrpc response is valid 63 | * 64 | * @method isValidResponse 65 | * @param {Object} 66 | * @returns {Boolean} true if response is valid, otherwise false 67 | */ 68 | Jsonrpc.prototype.isValidResponse = function (response) { 69 | return !!response && 70 | !response.error && 71 | response.jsonrpc === '2.0' && 72 | typeof response.id === 'number' && 73 | response.result !== undefined; // only undefined is not valid json object 74 | }; 75 | 76 | /** 77 | * Should be called to create batch payload object 78 | * 79 | * @method toBatchPayload 80 | * @param {Array} messages, an array of objects with method (required) and params (optional) fields 81 | * @returns {Array} batch payload 82 | */ 83 | Jsonrpc.prototype.toBatchPayload = function (messages) { 84 | var self = this; 85 | return messages.map(function (message) { 86 | return self.toPayload(message.method, message.params); 87 | }); 88 | }; 89 | 90 | module.exports = Jsonrpc; 91 | 92 | -------------------------------------------------------------------------------- /lib/web3/methods/db.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** @file db.js 18 | * @authors: 19 | * Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var Method = require('../method'); 24 | 25 | var DB = function (web3) { 26 | this._requestManager = web3._requestManager; 27 | 28 | var self = this; 29 | 30 | methods().forEach(function(method) { 31 | method.attachToObject(self); 32 | method.setRequestManager(web3._requestManager); 33 | }); 34 | }; 35 | 36 | var methods = function () { 37 | var putString = new Method({ 38 | name: 'putString', 39 | call: 'db_putString', 40 | params: 3 41 | }); 42 | 43 | var getString = new Method({ 44 | name: 'getString', 45 | call: 'db_getString', 46 | params: 2 47 | }); 48 | 49 | var putHex = new Method({ 50 | name: 'putHex', 51 | call: 'db_putHex', 52 | params: 3 53 | }); 54 | 55 | var getHex = new Method({ 56 | name: 'getHex', 57 | call: 'db_getHex', 58 | params: 2 59 | }); 60 | 61 | return [ 62 | putString, getString, putHex, getHex 63 | ]; 64 | }; 65 | 66 | module.exports = DB; 67 | -------------------------------------------------------------------------------- /lib/web3/methods/net.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** @file eth.js 18 | * @authors: 19 | * Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var utils = require('../../utils/utils'); 24 | var Property = require('../property'); 25 | 26 | var Net = function (web3) { 27 | this._requestManager = web3._requestManager; 28 | 29 | var self = this; 30 | 31 | properties().forEach(function(p) { 32 | p.attachToObject(self); 33 | p.setRequestManager(web3._requestManager); 34 | }); 35 | }; 36 | 37 | /// @returns an array of objects describing web3.eth api properties 38 | var properties = function () { 39 | return [ 40 | new Property({ 41 | name: 'listening', 42 | getter: 'net_listening' 43 | }), 44 | new Property({ 45 | name: 'peerCount', 46 | getter: 'net_peerCount', 47 | outputFormatter: utils.toDecimal 48 | }) 49 | ]; 50 | }; 51 | 52 | module.exports = Net; 53 | -------------------------------------------------------------------------------- /lib/web3/methods/personal.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** 18 | * @file eth.js 19 | * @author Marek Kotewicz 20 | * @author Fabian Vogelsteller 21 | * @date 2015 22 | */ 23 | 24 | "use strict"; 25 | 26 | var Method = require('../method'); 27 | var Property = require('../property'); 28 | var formatters = require('../formatters'); 29 | 30 | function Personal(web3) { 31 | this._requestManager = web3._requestManager; 32 | 33 | var self = this; 34 | 35 | methods().forEach(function(method) { 36 | method.attachToObject(self); 37 | method.setRequestManager(self._requestManager); 38 | }); 39 | 40 | properties().forEach(function(p) { 41 | p.attachToObject(self); 42 | p.setRequestManager(self._requestManager); 43 | }); 44 | } 45 | 46 | var methods = function () { 47 | var newAccount = new Method({ 48 | name: 'newAccount', 49 | call: 'personal_newAccount', 50 | params: 1, 51 | inputFormatter: [null] 52 | }); 53 | 54 | var unlockAccount = new Method({ 55 | name: 'unlockAccount', 56 | call: 'personal_unlockAccount', 57 | params: 3, 58 | inputFormatter: [formatters.inputAddressFormatter, null, null] 59 | }); 60 | 61 | var lockAccount = new Method({ 62 | name: 'lockAccount', 63 | call: 'personal_lockAccount', 64 | params: 1, 65 | inputFormatter: [formatters.inputAddressFormatter] 66 | }); 67 | 68 | return [ 69 | newAccount, 70 | unlockAccount, 71 | lockAccount 72 | ]; 73 | }; 74 | 75 | var properties = function () { 76 | return [ 77 | new Property({ 78 | name: 'listAccounts', 79 | getter: 'personal_listAccounts' 80 | }) 81 | ]; 82 | }; 83 | 84 | 85 | module.exports = Personal; 86 | -------------------------------------------------------------------------------- /lib/web3/methods/shh.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** @file shh.js 18 | * @authors: 19 | * Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var Method = require('../method'); 24 | var formatters = require('../formatters'); 25 | var Filter = require('../filter'); 26 | var watches = require('./watches'); 27 | 28 | var Shh = function (web3) { 29 | this._requestManager = web3._requestManager; 30 | 31 | var self = this; 32 | 33 | methods().forEach(function(method) { 34 | method.attachToObject(self); 35 | method.setRequestManager(self._requestManager); 36 | }); 37 | }; 38 | 39 | Shh.prototype.filter = function (fil, callback) { 40 | return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback); 41 | }; 42 | 43 | var methods = function () { 44 | 45 | var post = new Method({ 46 | name: 'post', 47 | call: 'shh_post', 48 | params: 1, 49 | inputFormatter: [formatters.inputPostFormatter] 50 | }); 51 | 52 | var newIdentity = new Method({ 53 | name: 'newIdentity', 54 | call: 'shh_newIdentity', 55 | params: 0 56 | }); 57 | 58 | var hasIdentity = new Method({ 59 | name: 'hasIdentity', 60 | call: 'shh_hasIdentity', 61 | params: 1 62 | }); 63 | 64 | var newGroup = new Method({ 65 | name: 'newGroup', 66 | call: 'shh_newGroup', 67 | params: 0 68 | }); 69 | 70 | var addToGroup = new Method({ 71 | name: 'addToGroup', 72 | call: 'shh_addToGroup', 73 | params: 0 74 | }); 75 | 76 | return [ 77 | post, 78 | newIdentity, 79 | hasIdentity, 80 | newGroup, 81 | addToGroup 82 | ]; 83 | }; 84 | 85 | module.exports = Shh; 86 | 87 | -------------------------------------------------------------------------------- /lib/web3/methods/watches.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** @file watches.js 18 | * @authors: 19 | * Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var Method = require('../method'); 24 | 25 | /// @returns an array of objects describing web3.eth.filter api methods 26 | var eth = function () { 27 | var newFilterCall = function (args) { 28 | var type = args[0]; 29 | 30 | switch(type) { 31 | case 'latest': 32 | args.shift(); 33 | this.params = 0; 34 | return 'eth_newBlockFilter'; 35 | case 'pending': 36 | args.shift(); 37 | this.params = 0; 38 | return 'eth_newPendingTransactionFilter'; 39 | default: 40 | return 'eth_newFilter'; 41 | } 42 | }; 43 | 44 | var newFilter = new Method({ 45 | name: 'newFilter', 46 | call: newFilterCall, 47 | params: 1 48 | }); 49 | 50 | var uninstallFilter = new Method({ 51 | name: 'uninstallFilter', 52 | call: 'eth_uninstallFilter', 53 | params: 1 54 | }); 55 | 56 | var getLogs = new Method({ 57 | name: 'getLogs', 58 | call: 'eth_getFilterLogs', 59 | params: 1 60 | }); 61 | 62 | var poll = new Method({ 63 | name: 'poll', 64 | call: 'eth_getFilterChanges', 65 | params: 1 66 | }); 67 | 68 | return [ 69 | newFilter, 70 | uninstallFilter, 71 | getLogs, 72 | poll 73 | ]; 74 | }; 75 | 76 | /// @returns an array of objects describing web3.shh.watch api methods 77 | var shh = function () { 78 | var newFilter = new Method({ 79 | name: 'newFilter', 80 | call: 'shh_newFilter', 81 | params: 1 82 | }); 83 | 84 | var uninstallFilter = new Method({ 85 | name: 'uninstallFilter', 86 | call: 'shh_uninstallFilter', 87 | params: 1 88 | }); 89 | 90 | var getLogs = new Method({ 91 | name: 'getLogs', 92 | call: 'shh_getMessages', 93 | params: 1 94 | }); 95 | 96 | var poll = new Method({ 97 | name: 'poll', 98 | call: 'shh_getFilterChanges', 99 | params: 1 100 | }); 101 | 102 | return [ 103 | newFilter, 104 | uninstallFilter, 105 | getLogs, 106 | poll 107 | ]; 108 | }; 109 | 110 | module.exports = { 111 | eth: eth, 112 | shh: shh 113 | }; 114 | 115 | -------------------------------------------------------------------------------- /lib/web3/namereg.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** 18 | * @file namereg.js 19 | * @author Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); 24 | var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); 25 | 26 | var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; 27 | var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; 28 | 29 | module.exports = { 30 | global: { 31 | abi: globalRegistrarAbi, 32 | address: globalNameregAddress 33 | }, 34 | icap: { 35 | abi: icapRegistrarAbi, 36 | address: icapNameregAddress 37 | } 38 | }; 39 | 40 | -------------------------------------------------------------------------------- /lib/web3/settings.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var Settings = function () { 4 | this.defaultBlock = 'latest'; 5 | this.defaultAccount = undefined; 6 | }; 7 | 8 | module.exports = Settings; 9 | 10 | -------------------------------------------------------------------------------- /lib/web3/syncing.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** @file syncing.js 18 | * @authors: 19 | * Fabian Vogelsteller 20 | * @date 2015 21 | */ 22 | 23 | var formatters = require('./formatters'); 24 | var utils = require('../utils/utils'); 25 | 26 | var count = 1; 27 | 28 | /** 29 | Adds the callback and sets up the methods, to iterate over the results. 30 | 31 | @method pollSyncing 32 | @param {Object} self 33 | */ 34 | var pollSyncing = function(self) { 35 | 36 | var onMessage = function (error, sync) { 37 | if (error) { 38 | return self.callbacks.forEach(function (callback) { 39 | callback(error); 40 | }); 41 | } 42 | 43 | if(utils.isObject(sync) && sync.startingBlock) 44 | sync = formatters.outputSyncingFormatter(sync); 45 | 46 | self.callbacks.forEach(function (callback) { 47 | if (self.lastSyncState !== sync) { 48 | 49 | // call the callback with true first so the app can stop anything, before receiving the sync data 50 | if(!self.lastSyncState && utils.isObject(sync)) 51 | callback(null, true); 52 | 53 | // call on the next CPU cycle, so the actions of the sync stop can be processes first 54 | setTimeout(function() { 55 | callback(null, sync); 56 | }, 0); 57 | 58 | self.lastSyncState = sync; 59 | } 60 | }); 61 | }; 62 | 63 | self.requestManager.startPolling({ 64 | method: 'eth_syncing', 65 | params: [], 66 | }, self.pollId, onMessage, self.stopWatching.bind(self)); 67 | 68 | }; 69 | 70 | var IsSyncing = function (requestManager, callback) { 71 | this.requestManager = requestManager; 72 | this.pollId = 'syncPoll_'+ count++; 73 | this.callbacks = []; 74 | this.addCallback(callback); 75 | this.lastSyncState = false; 76 | pollSyncing(this); 77 | 78 | return this; 79 | }; 80 | 81 | IsSyncing.prototype.addCallback = function (callback) { 82 | if(callback) 83 | this.callbacks.push(callback); 84 | return this; 85 | }; 86 | 87 | IsSyncing.prototype.stopWatching = function () { 88 | this.requestManager.stopPolling(this.pollId); 89 | this.callbacks = []; 90 | }; 91 | 92 | module.exports = IsSyncing; 93 | 94 | -------------------------------------------------------------------------------- /lib/web3/transfer.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of web3.js. 3 | 4 | web3.js is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Lesser General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | web3.js is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public License 15 | along with web3.js. If not, see . 16 | */ 17 | /** 18 | * @file transfer.js 19 | * @author Marek Kotewicz 20 | * @date 2015 21 | */ 22 | 23 | var Iban = require('./iban'); 24 | var exchangeAbi = require('../contracts/SmartExchange.json'); 25 | 26 | /** 27 | * Should be used to make Iban transfer 28 | * 29 | * @method transfer 30 | * @param {String} from 31 | * @param {String} to iban 32 | * @param {Value} value to be tranfered 33 | * @param {Function} callback, callback 34 | */ 35 | var transfer = function (eth, from, to, value, callback) { 36 | var iban = new Iban(to); 37 | if (!iban.isValid()) { 38 | throw new Error('invalid iban address'); 39 | } 40 | 41 | if (iban.isDirect()) { 42 | return transferToAddress(eth, from, iban.address(), value, callback); 43 | } 44 | 45 | if (!callback) { 46 | var address = eth.icapNamereg().addr(iban.institution()); 47 | return deposit(eth, from, address, value, iban.client()); 48 | } 49 | 50 | eth.icapNamereg().addr(iban.institution(), function (err, address) { 51 | return deposit(eth, from, address, value, iban.client(), callback); 52 | }); 53 | 54 | }; 55 | 56 | /** 57 | * Should be used to transfer funds to certain address 58 | * 59 | * @method transferToAddress 60 | * @param {String} from 61 | * @param {String} to 62 | * @param {Value} value to be tranfered 63 | * @param {Function} callback, callback 64 | */ 65 | var transferToAddress = function (eth, from, to, value, callback) { 66 | return eth.sendTransaction({ 67 | address: to, 68 | from: from, 69 | value: value 70 | }, callback); 71 | }; 72 | 73 | /** 74 | * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) 75 | * 76 | * @method deposit 77 | * @param {String} from 78 | * @param {String} to 79 | * @param {Value} value to be transfered 80 | * @param {String} client unique identifier 81 | * @param {Function} callback, callback 82 | */ 83 | var deposit = function (eth, from, to, value, client, callback) { 84 | var abi = exchangeAbi; 85 | return eth.contract(abi).at(to).deposit(client, { 86 | from: from, 87 | value: value 88 | }, callback); 89 | }; 90 | 91 | module.exports = transfer; 92 | 93 | -------------------------------------------------------------------------------- /net.js: -------------------------------------------------------------------------------- 1 | var Net = require('./lib/web3/methods/net'); 2 | 3 | module.exports = Net; 4 | -------------------------------------------------------------------------------- /package-init.js: -------------------------------------------------------------------------------- 1 | /* jshint ignore:start */ 2 | 3 | 4 | // Browser environment 5 | if(typeof window !== 'undefined') { 6 | Web3 = (typeof window.Web3 !== 'undefined') ? window.Web3 : require('web3'); 7 | BigNumber = (typeof window.BigNumber !== 'undefined') ? window.BigNumber : require('bignumber.js'); 8 | } 9 | 10 | 11 | // Node environment 12 | if(typeof global !== 'undefined') { 13 | Web3 = (typeof global.Web3 !== 'undefined') ? global.Web3 : require('web3'); 14 | BigNumber = (typeof global.BigNumber !== 'undefined') ? global.BigNumber : require('bignumber.js'); 15 | } 16 | 17 | /* jshint ignore:end */ -------------------------------------------------------------------------------- /package.js: -------------------------------------------------------------------------------- 1 | /* jshint ignore:start */ 2 | Package.describe({ 3 | name: 'ethereum:web3', 4 | version: '0.15.3', 5 | summary: 'Ethereum JavaScript API, middleware to talk to a ethreum node over RPC', 6 | git: 'https://github.com/ethereum/ethereum.js', 7 | // By default, Meteor will default to using README.md for documentation. 8 | // To avoid submitting documentation, set this field to null. 9 | documentation: 'README.md' 10 | }); 11 | 12 | Npm.depends({ 13 | "xmlhttprequest": "1.7.0" 14 | }); 15 | 16 | 17 | Package.onUse(function(api) { 18 | api.versionsFrom('1.0.3.2'); 19 | 20 | // api.use('3stack:bignumber@2.0.0', 'client'); 21 | 22 | api.export(['Web3', 'BigNumber'], ['client', 'server']); 23 | 24 | api.addFiles('dist/web3.js', ['client', 'server']); 25 | api.addFiles('package-init.js', ['client', 'server']); 26 | }); 27 | 28 | // Package.onTest(function(api) { 29 | // api.use('tinytest'); 30 | // api.use('test'); 31 | // api.addFiles('test-tests.js'); 32 | // }); 33 | /* jshint ignore:end */ 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web3", 3 | "namespace": "ethereum", 4 | "version": "0.15.3", 5 | "description": "Ethereum JavaScript API, middleware to talk to a ethereum node over RPC", 6 | "main": "./index.js", 7 | "directories": { 8 | "lib": "./lib" 9 | }, 10 | "dependencies": { 11 | "bignumber.js": "git+https://github.com/debris/bignumber.js#master", 12 | "crypto-js": "^3.1.4", 13 | "utf8": "^2.1.1", 14 | "xmlhttprequest": "*" 15 | }, 16 | "browser": { 17 | "xmlhttprequest": "./lib/utils/browser-xhr.js" 18 | }, 19 | "devDependencies": { 20 | "bower": ">=1.4.1", 21 | "browserify": ">=10.0", 22 | "chai": "^3.0.0", 23 | "coveralls": "^2.11.2", 24 | "del": ">=2.0.2", 25 | "exorcist": "^0.4.0", 26 | "gulp": ">=3.9.0", 27 | "gulp-jshint": ">=1.5.0", 28 | "gulp-rename": ">=1.2.0", 29 | "gulp-replace": "^0.5.3", 30 | "gulp-streamify": "0.0.5", 31 | "gulp-uglify": ">=1.2.0", 32 | "istanbul": "^0.3.5", 33 | "jshint": ">=2.5.0", 34 | "mocha": ">=2.3.3", 35 | "sandboxed-module": "^2.0.2", 36 | "vinyl-source-stream": "^1.1.0" 37 | }, 38 | "scripts": { 39 | "build": "gulp", 40 | "watch": "gulp watch", 41 | "lint": "jshint *.js lib", 42 | "test": "mocha", 43 | "test-coveralls": "istanbul cover _mocha -- -R spec && cat coverage/lcov.info | coveralls --verbose" 44 | }, 45 | "repository": { 46 | "type": "git", 47 | "url": "https://github.com/ethereum/web3.js.git" 48 | }, 49 | "homepage": "https://github.com/ethereum/web3.js", 50 | "bugs": { 51 | "url": "https://github.com/ethereum/web3.js/issues" 52 | }, 53 | "keywords": [ 54 | "ethereum", 55 | "javascript", 56 | "API" 57 | ], 58 | "author": "ethdev.com", 59 | "authors": [ 60 | { 61 | "name": "Marek Kotewicz", 62 | "email": "marek@ethdev.com", 63 | "url": "https://github.com/debris" 64 | }, 65 | { 66 | "name": "Fabian Vogelsteller", 67 | "email": "fabian@ethdev.com", 68 | "homepage": "http://frozeman.de" 69 | }, 70 | { 71 | "name": "Marian Oancea", 72 | "email": "marian@ethdev.com", 73 | "url": "https://github.com/cubedro" 74 | }, 75 | { 76 | "name": "Gav Wood", 77 | "email": "g@ethdev.com", 78 | "homepage": "http://gavwood.com" 79 | }, 80 | { 81 | "name": "Jeffery Wilcke", 82 | "email": "jeff@ethdev.com", 83 | "url": "https://github.com/obscuren" 84 | } 85 | ], 86 | "license": "LGPL-3.0" 87 | } 88 | -------------------------------------------------------------------------------- /personal.js: -------------------------------------------------------------------------------- 1 | var Personal = require('./lib/web3/methods/personal'); 2 | 3 | module.exports = Personal; 4 | -------------------------------------------------------------------------------- /property.js: -------------------------------------------------------------------------------- 1 | var Property = require('./lib/web3/property'); 2 | 3 | module.exports = Property; 4 | -------------------------------------------------------------------------------- /sha3.js: -------------------------------------------------------------------------------- 1 | var sha3 = require('./lib/utils/sha3'); 2 | 3 | module.exports = sha3; 4 | -------------------------------------------------------------------------------- /ssh.js: -------------------------------------------------------------------------------- 1 | var Shh = require('./lib/web3/methods/shh'); 2 | 3 | module.exports = Shh; 4 | -------------------------------------------------------------------------------- /test/async.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | // use sendTransaction as dummy 8 | var method = 'sendTransaction'; 9 | 10 | var tests = [{ 11 | input: { 12 | 'from': 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', 13 | 'to': 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS' 14 | }, 15 | formattedInput: { 16 | 'from': '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 17 | 'to': '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8' 18 | }, 19 | result: '0xb', 20 | formattedResult: '0xb', 21 | call: 'eth_'+ method 22 | }]; 23 | 24 | describe('async', function () { 25 | tests.forEach(function (test, index) { 26 | it('test: ' + index, function (done) { 27 | 28 | // given 29 | var provider = new FakeHttpProvider(); 30 | web3.setProvider(provider); 31 | provider.injectResult(test.result); 32 | provider.injectValidation(function (payload) { 33 | assert.equal(payload.jsonrpc, '2.0'); 34 | assert.equal(payload.method, test.call); 35 | assert.deepEqual(payload.params, [test.formattedInput]); 36 | }); 37 | 38 | // when 39 | web3.eth[method](test.input, function(error, result){ 40 | 41 | // then 42 | assert.isNull(error); 43 | assert.strictEqual(test.formattedResult, result); 44 | 45 | done(); 46 | }); 47 | 48 | }); 49 | 50 | it('error test: ' + index, function (done) { 51 | 52 | // given 53 | var provider = new FakeHttpProvider(); 54 | web3.setProvider(provider); 55 | provider.injectError({ 56 | message: test.result, 57 | code: -32603 58 | }); 59 | provider.injectValidation(function (payload) { 60 | assert.equal(payload.jsonrpc, '2.0'); 61 | assert.equal(payload.method, test.call); 62 | assert.deepEqual(payload.params, [test.formattedInput]); 63 | }); 64 | 65 | // when 66 | web3.eth[method](test.input, function(error, result){ 67 | 68 | // then 69 | assert.isUndefined(result); 70 | assert.strictEqual(test.formattedResult, error.message); 71 | 72 | done(); 73 | }); 74 | 75 | }); 76 | }); 77 | }); 78 | 79 | -------------------------------------------------------------------------------- /test/errors.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var errors = require('../lib/web3/errors'); 4 | 5 | describe('lib/web3/method', function () { 6 | describe('getCall', function () { 7 | 8 | for(var key in errors) { 9 | it('should return and error', function () { 10 | 11 | assert.instanceOf(errors[key](), Error); 12 | }); 13 | } 14 | 15 | }); 16 | }); 17 | 18 | -------------------------------------------------------------------------------- /test/formatters.inputAddressFormatter.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var formatters = require('../lib/web3/formatters.js'); 4 | var BigNumber = require('bignumber.js'); 5 | 6 | var tests = [ 7 | { input: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', result: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8' }, 8 | { input: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', result: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8'}, 9 | { input: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', result: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8'}, 10 | { input: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', result: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' } 11 | ]; 12 | 13 | var errorTests = [ 14 | '0x0c5496aee77c1ba1f0854206a26dda82a81d6d8', 15 | '0x0c5496aee77c1ba1f0854206a26dda82a81d6d8', 16 | '00c5496aee77c1ba1f0854206a26dda82a81d6d', 17 | 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZE', 18 | '0x' 19 | ] 20 | 21 | describe('formatters', function () { 22 | describe('inputAddressFormatter', function () { 23 | tests.forEach(function(test){ 24 | it('should return the correct value', function () { 25 | assert.deepEqual(formatters.inputAddressFormatter(test.input), test.result); 26 | }); 27 | }); 28 | }); 29 | }); 30 | 31 | 32 | describe('formatters', function () { 33 | describe('inputAddressFormatter', function () { 34 | errorTests.forEach(function(test){ 35 | it('should throw an exception', function () { 36 | assert.throws(function () { 37 | formatters.inputAddressFormatter(test); 38 | }); 39 | }); 40 | }); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /test/formatters.inputDefaultBlockFormatter.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var formatters = require('../lib/web3/formatters'); 4 | 5 | var tests = [ 6 | { value: 'latest', expected: 'latest' }, 7 | { value: 'pending', expected: 'pending' }, 8 | { value: 'earliest', expected: 'earliest' }, 9 | { value: 1, expected: '0x1' }, 10 | { value: '0x1', expected: '0x1' } 11 | ]; 12 | 13 | describe('lib/web3/formatters', function () { 14 | describe('inputDefaultBlockNumberFormatter', function () { 15 | tests.forEach(function (test) { 16 | it('should turn ' + test.value + ' to ' + test.expected, function () { 17 | assert.strictEqual(formatters.inputDefaultBlockNumberFormatter(test.value), test.expected); 18 | }); 19 | }); 20 | }); 21 | }); 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /test/formatters.inputPostFormatter.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var formatters = require('../lib/web3/formatters.js'); 4 | 5 | describe('formatters', function () { 6 | describe('inputPostFormatter', function () { 7 | it('should return the correct value', function () { 8 | 9 | // input as strings and numbers 10 | assert.deepEqual(formatters.inputPostFormatter({ 11 | from: '0x00000', 12 | to: '0x00000', 13 | payload: '0x7b2274657374223a2274657374227d',//{test: 'test'}, 14 | ttl: 200, 15 | priority: 1000, 16 | topics: ['hello','mytopics'] 17 | }), { 18 | from: '0x00000', 19 | to: '0x00000', 20 | payload: '0x7b2274657374223a2274657374227d', 21 | ttl: '0xc8', 22 | priority: '0x3e8', 23 | topics: ['0x68656c6c6f','0x6d79746f70696373'], 24 | workToProve: '0x0' 25 | }); 26 | 27 | }); 28 | }); 29 | }); 30 | 31 | -------------------------------------------------------------------------------- /test/formatters.inputTransactionFormatter.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var formatters = require('../lib/web3/formatters.js'); 4 | var BigNumber = require('bignumber.js'); 5 | 6 | var tests = [{ 7 | input: { 8 | data: '0x34234bf23bf4234', 9 | value: new BigNumber(100), 10 | from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 11 | to: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 12 | nonce: 1000, 13 | gas: 1000, 14 | gasPrice: new BigNumber(1000) 15 | }, 16 | result: { 17 | data: '0x34234bf23bf4234', 18 | value: '0x64', 19 | from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 20 | to: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 21 | nonce: '0x3e8', 22 | gas: '0x3e8', 23 | gasPrice: '0x3e8' 24 | } 25 | },{ 26 | input: { 27 | data: '0x34234bf23bf4234', 28 | value: new BigNumber(100), 29 | from: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', 30 | to: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', 31 | }, 32 | result: { 33 | data: '0x34234bf23bf4234', 34 | value: '0x64', 35 | from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 36 | to: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 37 | } 38 | },{ 39 | input: { 40 | data: '0x34234bf23bf4234', 41 | value: new BigNumber(100), 42 | from: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', 43 | to: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', 44 | gas: '1000', 45 | gasPrice: new BigNumber(1000) 46 | }, 47 | result: { 48 | data: '0x34234bf23bf4234', 49 | value: '0x64', 50 | from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 51 | to: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 52 | gas: '0x3e8', 53 | gasPrice: '0x3e8' 54 | }, 55 | }, { 56 | input: { 57 | data: '0x34234bf23bf4234', 58 | value: new BigNumber(100), 59 | from: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', 60 | to: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', 61 | gas: '1000', 62 | gasPrice: new BigNumber(1000) 63 | }, 64 | result: { 65 | data: '0x34234bf23bf4234', 66 | value: '0x64', 67 | from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 68 | to: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 69 | gas: '0x3e8', 70 | gasPrice: '0x3e8' 71 | }, 72 | }, { 73 | input: { 74 | data: '0x34234bf23bf4234', 75 | value: new BigNumber(100), 76 | from: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', 77 | gas: '1000', 78 | gasPrice: new BigNumber(1000) 79 | }, 80 | result: { 81 | data: '0x34234bf23bf4234', 82 | value: '0x64', 83 | from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 84 | gas: '0x3e8', 85 | gasPrice: '0x3e8' 86 | } 87 | }]; 88 | 89 | describe('formatters', function () { 90 | describe('inputTransactionFormatter', function () { 91 | tests.forEach(function(test){ 92 | it('should return the correct value', function () { 93 | assert.deepEqual(formatters.inputTransactionFormatter(test.input), test.result); 94 | }); 95 | }); 96 | }); 97 | }); 98 | -------------------------------------------------------------------------------- /test/formatters.outputLogFormatter.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var formatters = require('../lib/web3/formatters.js'); 3 | 4 | describe('formatters', function () { 5 | describe('outputLogFormatter', function () { 6 | it('should return the correct value', function () { 7 | 8 | assert.deepEqual(formatters.outputLogFormatter({ 9 | transactionIndex: '0x3e8', 10 | logIndex: '0x3e8', 11 | blockNumber: '0x3e8', 12 | transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 13 | blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 14 | data: '0x7b2274657374223a2274657374227', 15 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 16 | }), { 17 | transactionIndex: 1000, 18 | logIndex: 1000, 19 | blockNumber: 1000, 20 | transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 21 | blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 22 | data: '0x7b2274657374223a2274657374227', 23 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 24 | }); 25 | }); 26 | it('should return the correct value, when null values are present', function () { 27 | 28 | assert.deepEqual(formatters.outputLogFormatter({ 29 | transactionIndex: null, 30 | logIndex: null, 31 | blockNumber: null, 32 | transactionHash: null, 33 | blockHash: null, 34 | data: '0x7b2274657374223a2274657374227', 35 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 36 | }), { 37 | transactionIndex: null, 38 | logIndex: null, 39 | blockNumber: null, 40 | transactionHash: null, 41 | blockHash: null, 42 | data: '0x7b2274657374223a2274657374227', 43 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 44 | }); 45 | }); 46 | }); 47 | }); 48 | -------------------------------------------------------------------------------- /test/formatters.outputPostFormatter.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var formatters = require('../lib/web3/formatters.js'); 3 | 4 | describe('formatters', function () { 5 | describe('outputPostFormatter', function () { 6 | it('should return the correct value', function () { 7 | 8 | assert.deepEqual(formatters.outputPostFormatter({ 9 | expiry: '0x3e8', 10 | sent: '0x3e8', 11 | ttl: '0x3e8', 12 | workProved: '0x3e8', 13 | payload: '0x7b2274657374223a2274657374227d', 14 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 15 | }), { 16 | expiry: 1000, 17 | sent: 1000, 18 | ttl: 1000, 19 | workProved: 1000, 20 | payload: '0x7b2274657374223a2274657374227d',//{test: 'test'}, 21 | //payloadRaw: '0x7b2274657374223a2274657374227d', 22 | topics: ['hello','mytopics'] 23 | }); 24 | }); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/formatters.outputTransactionFormatter.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var formatters = require('../lib/web3/formatters.js'); 3 | var BigNumber = require('bignumber.js'); 4 | 5 | describe('formatters', function () { 6 | describe('outputTransactionFormatter', function () { 7 | it('should return the correct value', function () { 8 | 9 | assert.deepEqual(formatters.outputTransactionFormatter({ 10 | input: '0x3454645634534', 11 | from: '0x00000', 12 | to: '0x00000', 13 | value: '0x3e8', 14 | gas: '0x3e8', 15 | gasPrice: '0x3e8', 16 | nonce: '0xb', 17 | transactionIndex: '0x1', 18 | blockNumber: '0x3e8', 19 | blockHash: '0xc9b9cdc2092a9d6589d96662b1fd6949611163fb3910cf8a173cd060f17702f9' 20 | }), { 21 | input: '0x3454645634534', 22 | from: '0x00000', 23 | to: '0x00000', 24 | value: new BigNumber(1000), 25 | gas: 1000, 26 | gasPrice: new BigNumber(1000), 27 | nonce: 11, 28 | blockNumber: 1000, 29 | blockHash: '0xc9b9cdc2092a9d6589d96662b1fd6949611163fb3910cf8a173cd060f17702f9', 30 | transactionIndex: 1 31 | }); 32 | }); 33 | 34 | it('should return the correct value, when null values are present', function () { 35 | 36 | assert.deepEqual(formatters.outputTransactionFormatter({ 37 | input: '0x3454645634534', 38 | from: '0x00000', 39 | to: null, 40 | value: '0x3e8', 41 | gas: '0x3e8', 42 | gasPrice: '0x3e8', 43 | nonce: '0xb', 44 | transactionIndex: null, 45 | blockNumber: null, 46 | blockHash: null 47 | }), { 48 | input: '0x3454645634534', 49 | from: '0x00000', 50 | to: null, 51 | value: new BigNumber(1000), 52 | gas: 1000, 53 | gasPrice: new BigNumber(1000), 54 | nonce: 11, 55 | blockNumber: null, 56 | blockHash: null, 57 | transactionIndex: null 58 | }); 59 | }); 60 | }); 61 | }); 62 | -------------------------------------------------------------------------------- /test/helpers/FakeHttpProvider.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = require('assert'); 3 | var utils = require('../../lib/utils/utils'); 4 | 5 | countId = 1; 6 | 7 | var getResponseStub = function () { 8 | return { 9 | jsonrpc: '2.0', 10 | id: countId++, 11 | result: null 12 | }; 13 | }; 14 | 15 | var getErrorStub = function () { 16 | return { 17 | jsonrpc: '2.0', 18 | countId: countId++, 19 | error: { 20 | code: 1234, 21 | message: 'Stub error' 22 | } 23 | }; 24 | }; 25 | 26 | var FakeHttpProvider = function () { 27 | this.response = getResponseStub(); 28 | this.error = null; 29 | this.validation = null; 30 | }; 31 | 32 | FakeHttpProvider.prototype.send = function (payload) { 33 | assert.equal(utils.isArray(payload) || utils.isObject(payload), true); 34 | // TODO: validate jsonrpc request 35 | if (this.error) { 36 | throw this.error; 37 | } 38 | if (this.validation) { 39 | // imitate plain json object 40 | this.validation(JSON.parse(JSON.stringify(payload))); 41 | } 42 | 43 | return this.getResponse(payload); 44 | }; 45 | 46 | FakeHttpProvider.prototype.sendAsync = function (payload, callback) { 47 | assert.equal(utils.isArray(payload) || utils.isObject(payload), true); 48 | assert.equal(utils.isFunction(callback), true); 49 | if (this.validation) { 50 | // imitate plain json object 51 | this.validation(JSON.parse(JSON.stringify(payload)), callback); 52 | } 53 | 54 | var response = this.getResponse(payload); 55 | var error = this.error; 56 | setTimeout(function(){ 57 | callback(error, response); 58 | },1); 59 | }; 60 | 61 | FakeHttpProvider.prototype.injectResponse = function (response) { 62 | this.response = response; 63 | }; 64 | 65 | FakeHttpProvider.prototype.injectResult = function (result) { 66 | this.response = getResponseStub(); 67 | this.response.result = result; 68 | }; 69 | 70 | FakeHttpProvider.prototype.injectBatchResults = function (results, error) { 71 | this.response = results.map(function (r) { 72 | if(error) { 73 | var response = getErrorStub(); 74 | response.error.message = r; 75 | } else { 76 | var response = getResponseStub(); 77 | response.result = r; 78 | } 79 | return response; 80 | }); 81 | }; 82 | 83 | FakeHttpProvider.prototype.getResponse = function (payload) { 84 | 85 | if(this.response) { 86 | if(utils.isArray(this.response)) { 87 | this.response = this.response.map(function(response, index) { 88 | response.id = payload[index] ? payload[index].id : countId++; 89 | return response; 90 | }); 91 | } else 92 | this.response.id = payload.id; 93 | } 94 | 95 | return this.response; 96 | }; 97 | 98 | FakeHttpProvider.prototype.injectError = function (error) { 99 | this.error = error; 100 | }; 101 | 102 | FakeHttpProvider.prototype.injectValidation = function (callback) { 103 | this.validation = callback; 104 | }; 105 | 106 | module.exports = FakeHttpProvider; 107 | 108 | -------------------------------------------------------------------------------- /test/helpers/FakeHttpProvider2.js: -------------------------------------------------------------------------------- 1 | var FakeHttpProvider = require('./FakeHttpProvider'); 2 | 3 | var FakeHttpProvider2 = function () { 4 | this.counter = 0; 5 | this.resultList = []; 6 | }; 7 | 8 | FakeHttpProvider2.prototype = new FakeHttpProvider(); 9 | FakeHttpProvider2.prototype.constructor = FakeHttpProvider2; 10 | 11 | FakeHttpProvider2.prototype.injectResultList = function (list) { 12 | this.resultList = list; 13 | }; 14 | 15 | FakeHttpProvider2.prototype.getResponse = function () { 16 | var result = this.resultList[this.counter]; 17 | this.counter++; 18 | 19 | // add fallback result value 20 | if(!result) 21 | result = { 22 | result: undefined 23 | }; 24 | 25 | if (result.type === 'batch') { 26 | this.injectBatchResults(result.result); 27 | } else { 28 | this.injectResult(result.result); 29 | } 30 | 31 | this.counter = 0; 32 | 33 | return this.response; 34 | }; 35 | 36 | module.exports = FakeHttpProvider2; 37 | 38 | -------------------------------------------------------------------------------- /test/helpers/FakeIpcRequest.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | 4 | var FakeIpcRequest = function () { 5 | this._handle = {fd: {}}; 6 | this.callbacks = []; 7 | 8 | return this 9 | }; 10 | 11 | FakeIpcRequest.prototype.connect = function (path) { 12 | assert.notEqual(path, undefined); 13 | 14 | return this; 15 | }; 16 | 17 | FakeIpcRequest.prototype.on = function(name, callback) { 18 | if(name === 'data'){ 19 | this.callbacks.push(callback); 20 | } 21 | }; 22 | 23 | FakeIpcRequest.prototype.writeSync = function (payload) { 24 | assert.equal(typeof payload, 'string'); 25 | return payload; 26 | }; 27 | 28 | FakeIpcRequest.prototype.write = function (payload) { 29 | assert.equal(typeof payload, 'string'); 30 | 31 | this.callbacks.forEach(function(cb){ 32 | setTimeout(function(){ 33 | cb(payload); 34 | }, 100); 35 | }); 36 | 37 | }; 38 | 39 | module.exports = FakeIpcRequest; 40 | 41 | -------------------------------------------------------------------------------- /test/helpers/FakeQtNavigator.js: -------------------------------------------------------------------------------- 1 | 2 | var navigator = { 3 | qt: { 4 | callMethod: function (payload) { 5 | return "{}"; 6 | } 7 | } 8 | }; 9 | 10 | module.exports = navigator; 11 | 12 | -------------------------------------------------------------------------------- /test/helpers/FakeXMLHttpRequest.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | 4 | var FakeXMLHttpRequest = function () { 5 | this.responseText = "{}"; 6 | this.readyState = 4; 7 | this.onreadystatechange = null; 8 | this.async = false; 9 | this.headers = { 10 | 'Content-Type': 'text/plain' 11 | }; 12 | }; 13 | 14 | FakeXMLHttpRequest.prototype.open = function (method, host, async) { 15 | assert.equal(method, 'POST'); 16 | assert.notEqual(host, null); 17 | assert.equal(async === false || async === true, true); 18 | this.async = async; 19 | }; 20 | 21 | FakeXMLHttpRequest.prototype.setRequestHeader = function(name, value) { 22 | this.headers[name] = value; 23 | }; 24 | 25 | FakeXMLHttpRequest.prototype.send = function (payload) { 26 | assert.equal(typeof payload, 'string'); 27 | if (this.async) { 28 | assert.equal(typeof this.onreadystatechange, 'function'); 29 | this.onreadystatechange(); 30 | return; 31 | } 32 | return this.responseText; 33 | }; 34 | 35 | module.exports = { 36 | XMLHttpRequest: FakeXMLHttpRequest 37 | }; 38 | 39 | -------------------------------------------------------------------------------- /test/helpers/test.method.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../../index'); 4 | 5 | var FakeHttpProvider = require('./FakeHttpProvider'); 6 | var clone = function (object) { return JSON.parse(JSON.stringify(object)); }; 7 | 8 | var runTests = function (obj, method, tests) { 9 | 10 | var testName = obj ? 'web3.' + obj : 'web'; 11 | 12 | describe(testName, function () { 13 | describe(method, function () { 14 | tests.forEach(function (test, index) { 15 | it('sync test: ' + index, function () { 16 | 17 | // given 18 | var provider = new FakeHttpProvider(); 19 | var web3 = new Web3(provider); 20 | provider.injectResult(test.result); 21 | provider.injectValidation(function (payload) { 22 | assert.equal(payload.jsonrpc, '2.0'); 23 | assert.equal(payload.method, test.call); 24 | assert.deepEqual(payload.params, test.formattedArgs); 25 | }); 26 | 27 | var args = clone(test.args) 28 | 29 | // when 30 | if (obj) { 31 | var result = web3[obj][method].apply(web3[obj], args); 32 | } else { 33 | var result = web3[method].apply(web3, args); 34 | } 35 | // when 36 | //var result = (obj) 37 | //? web3[obj][method].apply(null, test.args.slice(0)) 38 | //: web3[method].apply(null, test.args.slice(0)); 39 | 40 | // then 41 | assert.deepEqual(test.formattedResult, result); 42 | }); 43 | 44 | it('async test: ' + index, function (done) { 45 | 46 | // given 47 | var provider = new FakeHttpProvider(); 48 | var web3 = new Web3(provider); 49 | provider.injectResult(test.result); 50 | provider.injectValidation(function (payload) { 51 | assert.equal(payload.jsonrpc, '2.0'); 52 | assert.equal(payload.method, test.call); 53 | assert.deepEqual(payload.params, test.formattedArgs); 54 | }); 55 | 56 | var args = clone(test.args); 57 | 58 | // add callback 59 | args.push(function (err, result) { 60 | assert.deepEqual(test.formattedResult, result); 61 | done(); 62 | }); 63 | 64 | // when 65 | if (obj) { 66 | web3[obj][method].apply(web3[obj], args); 67 | } else { 68 | web3[method].apply(web3, args); 69 | } 70 | }); 71 | }); 72 | }); 73 | }); 74 | 75 | }; 76 | 77 | module.exports = { 78 | runTests: runTests 79 | } 80 | 81 | -------------------------------------------------------------------------------- /test/helpers/test.utils.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | //var web3 = require('../../index'); 4 | 5 | var FakeHttpProvider = require('./FakeHttpProvider'); 6 | 7 | var methodExists = function (object, method) { 8 | it('should have method ' + method + ' implemented', function() { 9 | //web3.setProvider(null); 10 | assert.equal('function', typeof object[method], 'method ' + method + ' is not implemented'); 11 | }); 12 | }; 13 | 14 | var propertyExists = function (object, property) { 15 | it('should have property ' + property + ' implemented', function() { 16 | // set dummy providor, to prevent error 17 | //web3.setProvider(new FakeHttpProvider()); 18 | assert.notEqual('undefined', typeof object[property], 'property ' + property + ' is not implemented'); 19 | }); 20 | }; 21 | 22 | module.exports = { 23 | methodExists: methodExists, 24 | propertyExists: propertyExists 25 | }; 26 | 27 | -------------------------------------------------------------------------------- /test/httpprovider.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var SandboxedModule = require('sandboxed-module'); 4 | 5 | SandboxedModule.registerBuiltInSourceTransformer('istanbul'); 6 | var HttpProvider = SandboxedModule.require('../lib/web3/httpprovider', { 7 | requires: { 8 | 'xmlhttprequest': require('./helpers/FakeXMLHttpRequest') 9 | } 10 | }); 11 | 12 | describe('lib/web3/httpprovider', function () { 13 | describe('send', function () { 14 | it('should send basic request', function () { 15 | var provider = new HttpProvider(); 16 | var result = provider.send({}); 17 | 18 | assert.equal(typeof result, 'object'); 19 | }); 20 | }); 21 | 22 | describe('sendAsync', function () { 23 | it('should send basic async request', function (done) { 24 | var provider = new HttpProvider(); 25 | 26 | provider.sendAsync({}, function (err, result) { 27 | assert.equal(typeof result, 'object'); 28 | done(); 29 | }); 30 | }); 31 | }); 32 | 33 | describe('isConnected', function () { 34 | it('should return a boolean', function () { 35 | var provider = new HttpProvider(); 36 | 37 | assert.isBoolean(provider.isConnected()); 38 | }); 39 | }); 40 | }); 41 | 42 | -------------------------------------------------------------------------------- /test/iban.createIndirect.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Iban = require('../lib/web3/iban.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { institution: 'XREG', identifier: 'GAVOFYORK', expected: 'XE81ETHXREGGAVOFYORK'} 7 | ]; 8 | 9 | describe('lib/web3/iban', function () { 10 | describe('createIndirect', function () { 11 | tests.forEach(function (test) { 12 | it('shoud create indirect iban: ' + test.expected, function () { 13 | assert.deepEqual(Iban.createIndirect({ 14 | institution: test.institution, 15 | identifier: test.identifier 16 | }), new Iban(test.expected)); 17 | }); 18 | }); 19 | }); 20 | }); 21 | 22 | -------------------------------------------------------------------------------- /test/iban.fromAddress.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Iban = require('../lib/web3/iban.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { address: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'}, 7 | { address: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'}, 8 | { address: '0x11c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE1222Q908LN1QBBU6XUQSO1OHWJIOS46OO'}, 9 | { address: '0x52dc504a422f0e2a9e7632a34a50f1a82f8224c7', expected: 'XE499OG1EH8ZZI0KXC6N83EKGT1BM97P2O7'}, 10 | { address: '0x0000a5327eab78357cbf2ae8f3d49fd9d90c7d22', expected: 'XE0600DQK33XDTYUCRI0KYM5ELAKXDWWF6'} 11 | ]; 12 | 13 | describe('lib/web3/iban', function () { 14 | describe('fromAddress', function () { 15 | tests.forEach(function (test) { 16 | it('shoud create indirect iban: ' + test.expected, function () { 17 | assert.deepEqual(Iban.fromAddress(test.address), new Iban(test.expected)); 18 | }); 19 | }); 20 | }); 21 | }); 22 | 23 | -------------------------------------------------------------------------------- /test/iban.isValid.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Iban = require('../lib/web3/iban.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { obj: function () {}, is: false}, 7 | { obj: new Function(), is: false}, 8 | { obj: 'function', is: false}, 9 | { obj: {}, is: false}, 10 | { obj: '[]', is: false}, 11 | { obj: '[1, 2]', is: false}, 12 | { obj: '{}', is: false}, 13 | { obj: '{"a": 123, "b" :3,}', is: false}, 14 | { obj: '{"c" : 2}', is: false}, 15 | { obj: 'XE81ETHXREGGAVOFYORK', is: true}, 16 | { obj: 'XE82ETHXREGGAVOFYORK', is: false}, // control number is invalid 17 | { obj: 'XE81ETCXREGGAVOFYORK', is: false}, 18 | { obj: 'XE81ETHXREGGAVOFYORKD', is: false}, 19 | { obj: 'XE81ETHXREGGaVOFYORK', is: false}, 20 | { obj: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', is: true}, 21 | { obj: 'XE7438O073KYGTWWZN0F2WZ0R8PX5ZPPZS', is: false}, // control number is invalid 22 | { obj: 'XD7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', is: false}, 23 | { obj: 'XE1222Q908LN1QBBU6XUQSO1OHWJIOS46OO', is: true} 24 | ]; 25 | 26 | describe('lib/web3/iban', function () { 27 | describe('isValid', function () { 28 | tests.forEach(function (test) { 29 | it('shoud test if value ' + test.obj + ' is iban: ' + test.is, function () { 30 | assert.equal(Iban.isValid(test.obj), test.is); 31 | }); 32 | }); 33 | }); 34 | }); 35 | 36 | -------------------------------------------------------------------------------- /test/iban.toAddress.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Iban = require('../lib/web3/iban.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { direct: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', address: '00c5496aee77c1ba1f0854206a26dda82a81d6d8'} 7 | ]; 8 | 9 | describe('lib/web3/iban', function () { 10 | describe('toAddress', function () { 11 | tests.forEach(function (test) { 12 | it('shoud transform iban to address: ' + test.address, function () { 13 | var iban = new Iban(test.direct); 14 | assert.deepEqual(iban.address(), test.address); 15 | }); 16 | }); 17 | }); 18 | }); 19 | 20 | -------------------------------------------------------------------------------- /test/ipcprovider.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var SandboxedModule = require('sandboxed-module'); 4 | var FakeIpcRequest = require('./helpers/FakeIpcRequest') 5 | var net = new FakeIpcRequest(); 6 | 7 | SandboxedModule.registerBuiltInSourceTransformer('istanbul'); 8 | var IpcProvider = SandboxedModule.require('../lib/web3/ipcprovider', { 9 | requires: { 10 | 'bignumber.js': require('bignumber.js'), 11 | } 12 | }); 13 | 14 | describe('lib/web3/ipcprovider', function () { 15 | describe('send', function () { 16 | it('should send basic request', function () { 17 | var provider = new IpcProvider('', net); 18 | var result = provider.send({id: 1, method: 'eth_test'}); 19 | 20 | assert.isObject(result); 21 | }); 22 | }); 23 | 24 | describe('sendAsync', function () { 25 | it('should send basic async request', function (done) { 26 | var provider = new IpcProvider('', net); 27 | provider.sendAsync({id: 1, method: 'eth_test'}, function (err, result) { 28 | assert.isObject(result); 29 | done(); 30 | }); 31 | }); 32 | }); 33 | 34 | describe('isConnected', function () { 35 | it('should return a boolean', function () { 36 | var provider = new IpcProvider('', net); 37 | 38 | assert.isBoolean(provider.isConnected()); 39 | }); 40 | 41 | it('should return false', function () { 42 | var provider = new IpcProvider('', net); 43 | 44 | provider.connection.writable = false; 45 | 46 | assert.isFalse(provider.isConnected()); 47 | }); 48 | 49 | it('should return true, when a net handle is set', function () { 50 | var provider = new IpcProvider('', net); 51 | 52 | provider.connection.writable = true; 53 | 54 | assert.isTrue(provider.isConnected()); 55 | }); 56 | }); 57 | }); 58 | 59 | -------------------------------------------------------------------------------- /test/jsonrpc.id.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Jsonrpc = require('../lib/web3/jsonrpc'); 4 | 5 | describe('lib/web3/jsonrpc', function () { 6 | describe('id', function () { 7 | it('should increment the id', function () { 8 | 9 | // given 10 | var a = Jsonrpc.getInstance(); 11 | var b = Jsonrpc.getInstance(); 12 | var method = 'm'; 13 | 14 | // when 15 | var p1 = a.toPayload(method); 16 | var p2 = b.toPayload(method); 17 | 18 | // then 19 | assert.equal(p2.id, p1.id + 1); 20 | }); 21 | }); 22 | }); 23 | 24 | -------------------------------------------------------------------------------- /test/jsonrpc.toBatchPayload.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var jsonrpc = require('../lib/web3/jsonrpc'); 3 | jsonrpc = new jsonrpc(); 4 | 5 | describe('jsonrpc', function () { 6 | describe('toBatchPayload', function () { 7 | it('should create basic batch payload', function () { 8 | 9 | // given 10 | var messages = [{ 11 | method: 'helloworld' 12 | }, { 13 | method: 'test2', 14 | params: [1] 15 | }]; 16 | 17 | // when 18 | var payload = jsonrpc.toBatchPayload(messages); 19 | 20 | // then 21 | assert.equal(payload instanceof Array, true); 22 | assert.equal(payload.length, 2); 23 | assert.equal(payload[0].jsonrpc, '2.0'); 24 | assert.equal(payload[1].jsonrpc, '2.0'); 25 | assert.equal(payload[0].method, 'helloworld'); 26 | assert.equal(payload[1].method, 'test2'); 27 | assert.equal(payload[0].params instanceof Array, true); 28 | assert.equal(payload[1].params.length, 1); 29 | assert.equal(payload[1].params[0], 1); 30 | assert.equal(typeof payload[0].id, 'number'); 31 | assert.equal(typeof payload[1].id, 'number'); 32 | assert.equal(payload[0].id + 1, payload[1].id); 33 | }); 34 | 35 | it('should create batch payload for empty input array', function () { 36 | 37 | // given 38 | var messages = []; 39 | 40 | // when 41 | var payload = jsonrpc.toBatchPayload(messages); 42 | 43 | // then 44 | assert.equal(payload instanceof Array, true); 45 | assert.equal(payload.length, 0); 46 | }); 47 | }); 48 | }); 49 | -------------------------------------------------------------------------------- /test/jsonrpc.toPayload.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var jsonrpc = require('../lib/web3/jsonrpc'); 4 | jsonrpc = new jsonrpc(); 5 | 6 | describe('jsonrpc', function () { 7 | describe('toPayload', function () { 8 | it('should create basic payload', function () { 9 | 10 | // given 11 | var method = 'helloworld'; 12 | 13 | // when 14 | var payload = jsonrpc.toPayload(method); 15 | 16 | // then 17 | assert.equal(payload.jsonrpc, '2.0'); 18 | assert.equal(payload.method, method); 19 | assert.equal(payload.params instanceof Array, true); 20 | assert.equal(payload.params.length, 0); 21 | assert.equal(typeof payload.id, 'number'); 22 | }); 23 | 24 | it('should create payload with params', function () { 25 | 26 | // given 27 | var method = 'helloworld1'; 28 | var params = [123, 'test']; 29 | 30 | // when 31 | var payload = jsonrpc.toPayload(method, params); 32 | 33 | // then 34 | assert.equal(payload.jsonrpc, '2.0'); 35 | assert.equal(payload.method, method); 36 | assert.equal(payload.params.length, 2); 37 | assert.equal(payload.params[0], params[0]); 38 | assert.equal(payload.params[1], params[1]); 39 | assert.equal(typeof payload.id, 'number'); 40 | }); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /test/method.extractCallback.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Method = require('../lib/web3/method'); 4 | 5 | describe('lib/web3/method', function () { 6 | describe('extractCallback', function () { 7 | it('should extract callback', function () { 8 | 9 | // given 10 | var method = new Method({}); 11 | var callback = function () { }; 12 | var args = [1, callback] 13 | 14 | // when 15 | var result = method.extractCallback(args); 16 | 17 | // then 18 | assert.equal(args.length, 1); 19 | assert.equal(callback, result); 20 | }); 21 | 22 | it('should extract callback created using newFunction', function () { 23 | 24 | // given 25 | var method = new Method({}); 26 | var callback = new Function (); 27 | var args = [1, callback] 28 | 29 | // when 30 | var result = method.extractCallback(args); 31 | 32 | // then 33 | assert.equal(args.length, 1); 34 | assert.equal(callback, result); 35 | }); 36 | 37 | it('should not extract the callback', function () { 38 | 39 | // given 40 | var method = new Method({}); 41 | var args = [1, 2] 42 | 43 | // when 44 | var result = method.extractCallback(args); 45 | 46 | // then 47 | assert.equal(args.length, 2); 48 | assert.equal(result, null); 49 | }); 50 | }); 51 | }); 52 | 53 | -------------------------------------------------------------------------------- /test/method.formatInput.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Method = require('../lib/web3/method'); 4 | 5 | describe('lib/web3/method', function () { 6 | describe('formatInput', function () { 7 | it('should format plain input', function () { 8 | 9 | // given 10 | var star = function (arg) { 11 | return arg + '*'; 12 | }; 13 | 14 | var method = new Method({ 15 | inputFormatter: [star, star, star] 16 | }); 17 | var args = ['1','2','3']; 18 | var expectedArgs = ['1*', '2*', '3*']; 19 | 20 | // when 21 | var result = method.formatInput(args); 22 | 23 | // then 24 | assert.deepEqual(result, expectedArgs); 25 | }); 26 | 27 | it('should do nothing if there is no formatter', function () { 28 | 29 | // given 30 | var method = new Method({}); 31 | var args = [1,2,3]; 32 | 33 | // when 34 | var result = method.formatInput(args); 35 | 36 | // then 37 | assert.deepEqual(result, args); 38 | }); 39 | }); 40 | }); 41 | 42 | -------------------------------------------------------------------------------- /test/method.formatOutput.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Method = require('../lib/web3/method'); 4 | 5 | describe('lib/web3/method', function () { 6 | describe('formatOutput', function () { 7 | it('should format plain output', function () { 8 | 9 | // given 10 | var formatter = function (args) { 11 | return args.map(function (arg) { 12 | return arg + '*'; 13 | }); 14 | }; 15 | 16 | var method = new Method({ 17 | outputFormatter: formatter 18 | }); 19 | var args = ['1','2','3']; 20 | var expectedArgs = ['1*', '2*', '3*']; 21 | 22 | // when 23 | var result = method.formatOutput(args); 24 | 25 | // then 26 | assert.deepEqual(result, expectedArgs); 27 | }); 28 | 29 | it('should do nothing if there is no formatter', function () { 30 | 31 | // given 32 | var method = new Method({}); 33 | var args = [1,2,3]; 34 | 35 | // when 36 | var result = method.formatOutput(args); 37 | 38 | // then 39 | assert.deepEqual(result, args); 40 | }); 41 | }); 42 | }); 43 | 44 | -------------------------------------------------------------------------------- /test/method.getCall.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Method = require('../lib/web3/method'); 4 | 5 | describe('lib/web3/method', function () { 6 | describe('getCall', function () { 7 | it('should return call name', function () { 8 | 9 | // given 10 | var call = 'hello_call_world'; 11 | var method = new Method({ 12 | call: call 13 | }); 14 | 15 | // when 16 | var result = method.getCall(); 17 | 18 | // then 19 | assert.equal(call, result); 20 | }); 21 | 22 | it('should return call based on args', function () { 23 | 24 | // given 25 | var call = function (args) { 26 | return args ? args.length.toString() : '0'; 27 | }; 28 | 29 | var method = new Method({ 30 | call: call 31 | }); 32 | 33 | // when 34 | var r0 = method.getCall(); 35 | var r1 = method.getCall([1]); 36 | var r2 = method.getCall([1, 2]); 37 | 38 | // then 39 | assert.equal(r0, '0'); 40 | assert.equal(r1, '1'); 41 | assert.equal(r2, '2'); 42 | 43 | }); 44 | }); 45 | }); 46 | 47 | -------------------------------------------------------------------------------- /test/method.validateArgs.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Method = require('../lib/web3/method'); 4 | var errors = require('../lib/web3/errors'); 5 | 6 | describe('lib/web3/method', function () { 7 | describe('validateArgs', function () { 8 | it('should pass', function () { 9 | 10 | // given 11 | var method = new Method({ 12 | params: 1 13 | }); 14 | 15 | var args = [1]; 16 | var args2 = ['heloas']; 17 | 18 | // when 19 | var test = function () { method.validateArgs(args); }; 20 | var test2 = function () { method.validateArgs(args2); }; 21 | 22 | // then 23 | assert.doesNotThrow(test); 24 | assert.doesNotThrow(test2); 25 | }); 26 | 27 | it('should return call based on args', function () { 28 | 29 | // given 30 | var method = new Method({ 31 | params: 2 32 | }); 33 | 34 | var args = [1]; 35 | var args2 = ['heloas', '12', 3]; 36 | 37 | // when 38 | var test = function () { method.validateArgs(args); }; 39 | var test2 = function () { method.validateArgs(args2); }; 40 | 41 | // then 42 | assert.throws(test, errors.InvalidNumberOfParams().message); 43 | assert.throws(test2, errors.InvalidNumberOfParams().message); 44 | }); 45 | }); 46 | }); 47 | 48 | -------------------------------------------------------------------------------- /test/mocha.opts: -------------------------------------------------------------------------------- 1 | --reporter spec 2 | -------------------------------------------------------------------------------- /test/node/app.js: -------------------------------------------------------------------------------- 1 | var web3 = require('web3'); 2 | 3 | console.log(web3.version.api); 4 | 5 | 6 | -------------------------------------------------------------------------------- /test/node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "web3": "ethereum/web3.js#master" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /test/requestmanager.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var RequestManager = require('../lib/web3/requestmanager'); 4 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 5 | 6 | // TODO: handling errors! 7 | // TODO: validation of params! 8 | 9 | describe('lib/web3/requestmanager', function () { 10 | describe('send', function () { 11 | it('should return expected result synchronously', function () { 12 | var provider = new FakeHttpProvider(); 13 | var manager = new RequestManager(provider); 14 | var expected = 'hello_world'; 15 | provider.injectResult(expected); 16 | 17 | var result = manager.send({ 18 | method: 'test', 19 | params: [1,2,3] 20 | }); 21 | 22 | assert.equal(expected, result); 23 | }); 24 | 25 | it('should return expected result asynchronously', function (done) { 26 | var provider = new FakeHttpProvider(); 27 | var manager = new RequestManager(provider); 28 | var expected = 'hello_world'; 29 | provider.injectResult(expected); 30 | 31 | manager.sendAsync({ 32 | method: 'test', 33 | params: [1,2,3] 34 | }, function (error, result) { 35 | assert.equal(error, null); 36 | assert.equal(expected, result); 37 | done(); 38 | }); 39 | }); 40 | }); 41 | }); 42 | 43 | -------------------------------------------------------------------------------- /test/sha3.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var sha3 = require('../lib/utils/sha3'); 4 | var web3 = require('../index'); 5 | 6 | describe('lib/utils/sha3', function () { 7 | var test = function (v, e, o) { 8 | it('should encode ' + v + ' to ' + e, function () { 9 | assert.equal(sha3(v, o), e); 10 | }); 11 | }; 12 | 13 | test('test123', 'f81b517a242b218999ec8eec0ea6e2ddbef2a367a14e93f4a32a39e260f686ad'); 14 | test('test(int)', 'f4d03772bec1e62fbe8c5691e1a9101e520e8f8b5ca612123694632bf3cb51b1'); 15 | test('0x80', '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', { encoding: 'hex' }); 16 | test('0x80', '6b03a5eef7706e3fb52a61c19ab1122fad7237726601ac665bd4def888f0e4a0'); 17 | test('0x3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1', '82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28', { encoding: 'hex' }); 18 | }); 19 | 20 | -------------------------------------------------------------------------------- /test/utils.extractDisplayName.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var utils = require('../lib/utils/utils.js'); 3 | 4 | describe('lib/utils/utils', function () { 5 | describe('extractDisplayName', function () { 6 | it('should extract display name from method with no params', function () { 7 | 8 | // given 9 | var test = 'helloworld()'; 10 | 11 | // when 12 | var displayName = utils.extractDisplayName(test); 13 | 14 | // then 15 | assert.equal(displayName, 'helloworld'); 16 | }); 17 | 18 | it('should extract display name from method with one param' , function () { 19 | 20 | // given 21 | var test = 'helloworld1(int)'; 22 | 23 | // when 24 | var displayName = utils.extractDisplayName(test); 25 | 26 | // then 27 | assert.equal(displayName, 'helloworld1'); 28 | }); 29 | 30 | it('should extract display name from method with two params' , function () { 31 | 32 | // given 33 | var test = 'helloworld2(int,string)'; 34 | 35 | // when 36 | var displayName = utils.extractDisplayName(test); 37 | 38 | // then 39 | assert.equal(displayName, 'helloworld2'); 40 | }); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /test/utils.extractTypeName.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var utils = require('../lib/utils/utils.js'); 3 | 4 | describe('lib/utils/utils', function () { 5 | describe('extractTypeName', function () { 6 | it('should extract type name from method with no params', function () { 7 | 8 | // given 9 | var test = 'helloworld()'; 10 | 11 | // when 12 | var typeName = utils.extractTypeName(test); 13 | 14 | // then 15 | assert.equal(typeName, ''); 16 | }); 17 | 18 | it('should extract type name from method with one param', function () { 19 | 20 | // given 21 | var test = 'helloworld1(int)'; 22 | 23 | // when 24 | var typeName = utils.extractTypeName(test); 25 | 26 | // then 27 | assert.equal(typeName, 'int'); 28 | }); 29 | 30 | it('should extract type name from method with two params', function () { 31 | 32 | // given 33 | var test = 'helloworld2(int,string)'; 34 | 35 | // when 36 | var typeName = utils.extractTypeName(test); 37 | 38 | // then 39 | assert.equal(typeName, 'int,string'); 40 | }); 41 | 42 | it('should extract type name from method with spaces between params', function () { 43 | 44 | // given 45 | var test = 'helloworld3(int, string)'; 46 | 47 | // when 48 | var typeName = utils.extractTypeName(test); 49 | 50 | // then 51 | assert.equal(typeName, 'int,string'); 52 | }); 53 | 54 | }); 55 | }); 56 | -------------------------------------------------------------------------------- /test/utils.fromAscii.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var BigNumber = require('bignumber.js'); 3 | var utils = require('../lib/utils/utils.js'); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { value: 'myString', expected: '0x6d79537472696e67'}, 8 | { value: 'myString\x00', expected: '0x6d79537472696e6700'}, 9 | { value: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ', 10 | expected: '0x0300000035e8c6d54c5d127c9dcebe9e1a37ab9b05321128d097590a3c100000000000006521df642ff1f5ec0c3a7aa6cea6b1e7b7f7cda2cbdf07362a85088e97f19ef94331c955c0e9321ad386428c'} 11 | ]; 12 | 13 | describe('lib/utils/utils', function () { 14 | describe('fromAscii', function () { 15 | tests.forEach(function (test) { 16 | it('should turn ' + test.value + ' to ' + test.expected, function () { 17 | assert.strictEqual(utils.fromAscii(test.value), test.expected); 18 | }); 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /test/utils.fromDecimal.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { value: 1, expected: '0x1' }, 7 | { value: '1', expected: '0x1' }, 8 | { value: '0x1', expected: '0x1'}, 9 | { value: '0x01', expected: '0x1'}, 10 | { value: 15, expected: '0xf'}, 11 | { value: '15', expected: '0xf'}, 12 | { value: '0xf', expected: '0xf'}, 13 | { value: '0x0f', expected: '0xf'}, 14 | { value: -1, expected: '-0x1'}, 15 | { value: '-1', expected: '-0x1'}, 16 | { value: '-0x1', expected: '-0x1'}, 17 | { value: '-0x01', expected: '-0x1'}, 18 | { value: -15, expected: '-0xf'}, 19 | { value: '-15', expected: '-0xf'}, 20 | { value: '-0xf', expected: '-0xf'}, 21 | { value: '-0x0f', expected: '-0xf'}, 22 | { value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}, 23 | { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, 24 | { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}, 25 | { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, 26 | { value: 0, expected: '0x0'}, 27 | { value: '0', expected: '0x0'}, 28 | { value: '0x0', expected: '0x0'}, 29 | { value: -0, expected: '0x0'}, 30 | { value: '-0', expected: '0x0'}, 31 | { value: '-0x0', expected: '0x0'} 32 | ]; 33 | 34 | describe('lib/utils/utils', function () { 35 | describe('fromDecimal', function () { 36 | tests.forEach(function (test) { 37 | it('should turn ' + test.value + ' to ' + test.expected, function () { 38 | assert.equal(utils.fromDecimal(test.value), test.expected); 39 | }); 40 | }); 41 | }); 42 | }); 43 | 44 | -------------------------------------------------------------------------------- /test/utils.fromUtf8.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var BigNumber = require('bignumber.js'); 3 | var utils = require('../lib/utils/utils.js'); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { value: 'myString', expected: '0x6d79537472696e67'}, 8 | { value: 'myString\x00', expected: '0x6d79537472696e67'}, 9 | { value: 'expected value\u0000\u0000\u0000', expected: '0x65787065637465642076616c7565'} 10 | ]; 11 | 12 | describe('lib/utils/utils', function () { 13 | describe('fromUtf8', function () { 14 | tests.forEach(function (test) { 15 | it('should turn ' + test.value + ' to ' + test.expected, function () { 16 | assert.strictEqual(utils.fromUtf8(test.value), test.expected); 17 | }); 18 | }); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /test/utils.fromWei.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var utils = require('../lib/utils/utils.js'); 3 | 4 | describe('lib/utils/utils', function () { 5 | describe('fromWei', function () { 6 | it('should return the correct value', function () { 7 | 8 | assert.equal(utils.fromWei(1000000000000000000, 'wei'), '1000000000000000000'); 9 | assert.equal(utils.fromWei(1000000000000000000, 'kwei'), '1000000000000000'); 10 | assert.equal(utils.fromWei(1000000000000000000, 'mwei'), '1000000000000'); 11 | assert.equal(utils.fromWei(1000000000000000000, 'gwei'), '1000000000'); 12 | assert.equal(utils.fromWei(1000000000000000000, 'szabo'), '1000000'); 13 | assert.equal(utils.fromWei(1000000000000000000, 'finney'), '1000'); 14 | assert.equal(utils.fromWei(1000000000000000000, 'ether'), '1'); 15 | assert.equal(utils.fromWei(1000000000000000000, 'kether'), '0.001'); 16 | assert.equal(utils.fromWei(1000000000000000000, 'grand'), '0.001'); 17 | assert.equal(utils.fromWei(1000000000000000000, 'mether'), '0.000001'); 18 | assert.equal(utils.fromWei(1000000000000000000, 'gether'), '0.000000001'); 19 | assert.equal(utils.fromWei(1000000000000000000, 'tether'), '0.000000000001'); 20 | }); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/utils.isAddress.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { value: function () {}, is: false}, 7 | { value: new Function(), is: false}, 8 | { value: 'function', is: false}, 9 | { value: {}, is: false}, 10 | { value: '0xc6d9d2cd449a754c494264e1809c50e34d64562b', is: true }, 11 | { value: 'c6d9d2cd449a754c494264e1809c50e34d64562b', is: true } 12 | ]; 13 | 14 | describe('lib/utils/utils', function () { 15 | describe('isAddress', function () { 16 | tests.forEach(function (test) { 17 | it('shoud test if value ' + test.value + ' is address: ' + test.is, function () { 18 | assert.equal(utils.isAddress(test.value), test.is); 19 | }); 20 | }); 21 | }); 22 | }); 23 | 24 | -------------------------------------------------------------------------------- /test/utils.isBigNumber.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var BigNumber = require('bignumber.js'); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { value: function () {}, is: false}, 8 | { value: new Function(), is: false}, 9 | { value: 'function', is: false}, 10 | { value: {}, is: false}, 11 | { value: new String('hello'), is: false}, 12 | { value: new BigNumber(0), is: true}, 13 | { value: 132, is: false}, 14 | { value: '0x12', is: false}, 15 | 16 | ]; 17 | 18 | describe('lib/utils/utils', function () { 19 | describe('isBigNumber', function () { 20 | tests.forEach(function (test) { 21 | it('shoud test if value ' + test.func + ' is BigNumber: ' + test.is, function () { 22 | assert.equal(utils.isBigNumber(test.value), test.is); 23 | }); 24 | }); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/utils.isChecksumAddress.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { value: '0x52908400098527886E0F7030069857D2E4169EE7', is: true }, 7 | { value: '0x8617E340B3D01FA5F11F306F4090FD50E238070D', is: true }, 8 | { value: '0xde709f2102306220921060314715629080e2fb77', is: true }, 9 | { value: '0x27b1fdb04752bbc536007a920d24acb045561c26', is: true }, 10 | { value: '0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed', is: true }, 11 | { value: '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', is: true }, 12 | { value: '0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB', is: true }, 13 | { value: '0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', is: true }, 14 | { value: '0XD1220A0CF47C7B9BE7A2E6BA89F429762E7B9ADB', is: false }, 15 | { value: '0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', is: false } 16 | ]; 17 | 18 | describe('lib/utils/utils', function () { 19 | describe('isChecksumAddress', function () { 20 | tests.forEach(function (test) { 21 | it('shoud test if address ' + test.value + ' passes checksum: ' + test.is, function () { 22 | assert.equal(utils.isChecksumAddress(test.value), test.is); 23 | }); 24 | }); 25 | }); 26 | }); 27 | 28 | -------------------------------------------------------------------------------- /test/utils.isFunction.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { func: function () {}, is: true}, 7 | { func: new Function(), is: true}, 8 | { func: 'function', is: false}, 9 | { func: {}, is: false} 10 | ]; 11 | 12 | describe('lib/utils/utils', function () { 13 | describe('isFunction', function () { 14 | tests.forEach(function (test) { 15 | it('shoud test if value ' + test.func + ' is function: ' + test.is, function () { 16 | assert.equal(utils.isFunction(test.func), test.is); 17 | }); 18 | }); 19 | }); 20 | }); 21 | 22 | -------------------------------------------------------------------------------- /test/utils.isJson.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { obj: function () {}, is: false}, 7 | { obj: new Function(), is: false}, 8 | { obj: 'function', is: false}, 9 | { obj: {}, is: false}, 10 | { obj: '[]', is: true}, 11 | { obj: '[1, 2]', is: true}, 12 | { obj: '{}', is: true}, 13 | { obj: '{"a": 123, "b" :3,}', is: false}, 14 | { obj: '{"c" : 2}', is: true} 15 | ]; 16 | 17 | describe('lib/utils/utils', function () { 18 | describe('isJson', function () { 19 | tests.forEach(function (test) { 20 | it('shoud test if value ' + test.obj + ' is json: ' + test.is, function () { 21 | assert.equal(utils.isJson(test.obj), test.is); 22 | }); 23 | }); 24 | }); 25 | }); 26 | 27 | -------------------------------------------------------------------------------- /test/utils.isStrictAddress.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { value: function () {}, is: false}, 7 | { value: new Function(), is: false}, 8 | { value: 'function', is: false}, 9 | { value: {}, is: false}, 10 | { value: '0xc6d9d2cd449a754c494264e1809c50e34d64562b', is: true }, 11 | { value: 'c6d9d2cd449a754c494264e1809c50e34d64562b', is: false } 12 | ]; 13 | 14 | describe('lib/utils/utils', function () { 15 | describe('isStrictAddress', function () { 16 | tests.forEach(function (test) { 17 | it('shoud test if value ' + test.value + ' is address: ' + test.is, function () { 18 | assert.equal(utils.isStrictAddress(test.value), test.is); 19 | }); 20 | }); 21 | }); 22 | }); 23 | 24 | -------------------------------------------------------------------------------- /test/utils.isString.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var assert = chai.assert; 4 | 5 | var tests = [ 6 | { value: function () {}, is: false}, 7 | { value: new Function(), is: false}, 8 | { value: 'function', is: true}, 9 | { value: {}, is: false}, 10 | { value: new String('hello'), is: true} 11 | ]; 12 | 13 | describe('lib/utils/utils', function () { 14 | describe('isString', function () { 15 | tests.forEach(function (test) { 16 | it('shoud test if value ' + test.func + ' is string: ' + test.is, function () { 17 | assert.equal(utils.isString(test.value), test.is); 18 | }); 19 | }); 20 | }); 21 | }); 22 | 23 | -------------------------------------------------------------------------------- /test/utils.toAscii.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var BigNumber = require('bignumber.js'); 3 | var utils = require('../lib/utils/utils.js'); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { value: '0x6d79537472696e67', expected: 'myString'}, 8 | { value: '0x6d79537472696e6700', expected: 'myString\u0000'}, 9 | { value: "0x0300000035e8c6d54c5d127c9dcebe9e1a37ab9b05321128d097590a3c100000000000006521df642ff1f5ec0c3a7aa6cea6b1e7b7f7cda2cbdf07362a85088e97f19ef94331c955c0e9321ad386428c", 10 | expected: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ'} 11 | ]; 12 | 13 | describe('lib/utils/utils', function () { 14 | describe('toAscii', function () { 15 | tests.forEach(function (test) { 16 | it('should turn ' + test.value + ' to ' + test.expected, function () { 17 | assert.strictEqual(utils.toAscii(test.value), test.expected); 18 | }); 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /test/utils.toBigNumber.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils.js'); 3 | var BigNumber = require('bignumber.js'); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { value: 1, expected: '1' }, 8 | { value: '1', expected: '1' }, 9 | { value: '0x1', expected: '1'}, 10 | { value: '0x01', expected: '1'}, 11 | { value: 15, expected: '15'}, 12 | { value: '15', expected: '15'}, 13 | { value: '0xf', expected: '15'}, 14 | { value: '0x0f', expected: '15'}, 15 | { value: new BigNumber('f', 16), expected: '15'}, 16 | { value: -1, expected: '-1'}, 17 | { value: '-1', expected: '-1'}, 18 | { value: '-0x1', expected: '-1'}, 19 | { value: '-0x01', expected: '-1'}, 20 | { value: -15, expected: '-15'}, 21 | { value: '-15', expected: '-15'}, 22 | { value: '-0xf', expected: '-15'}, 23 | { value: '-0x0f', expected: '-15'}, 24 | { value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, 25 | { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, 26 | { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, 27 | { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, 28 | { value: 0, expected: '0'}, 29 | { value: '0', expected: '0'}, 30 | { value: '0x0', expected: '0'}, 31 | { value: -0, expected: '0'}, 32 | { value: '-0', expected: '0'}, 33 | { value: '-0x0', expected: '0'}, 34 | { value: new BigNumber(0), expected: '0'} 35 | ]; 36 | 37 | describe('lib/utils/utils', function () { 38 | describe('toBigNumber', function () { 39 | tests.forEach(function (test) { 40 | it('should turn ' + test.value + ' to ' + test.expected, function () { 41 | assert.equal(utils.toBigNumber(test.value).toString(10), test.expected); 42 | }); 43 | }); 44 | }); 45 | }); 46 | -------------------------------------------------------------------------------- /test/utils.toDecimal.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | var utils = require('../lib/utils/utils.js'); 3 | 4 | describe('lib/utils/utils', function () { 5 | describe('toDecimal', function () { 6 | it('should return the correct value', function () { 7 | 8 | assert.equal(utils.toDecimal("0x3e8"), '1000'); 9 | // allow compatiblity 10 | assert.equal(utils.toDecimal(100000), '100000'); 11 | assert.equal(utils.toDecimal('100000'), '100000'); 12 | }); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /test/utils.toHex.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils'); 3 | var BigNumber = require('bignumber.js'); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { value: 1, expected: '0x1' }, 8 | { value: '1', expected: '0x1' }, 9 | { value: '0x1', expected: '0x1'}, 10 | { value: '15', expected: '0xf'}, 11 | { value: '0xf', expected: '0xf'}, 12 | { value: -1, expected: '-0x1'}, 13 | { value: '-1', expected: '-0x1'}, 14 | { value: '-0x1', expected: '-0x1'}, 15 | { value: '-15', expected: '-0xf'}, 16 | { value: '-0xf', expected: '-0xf'}, 17 | { value: '0x657468657265756d', expected: '0x657468657265756d'}, 18 | { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, 19 | { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}, 20 | { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, 21 | { value: 0, expected: '0x0'}, 22 | { value: '0', expected: '0x0'}, 23 | { value: '0x0', expected: '0x0'}, 24 | { value: -0, expected: '0x0'}, 25 | { value: '-0', expected: '0x0'}, 26 | { value: '-0x0', expected: '0x0'}, 27 | { value: [1,2,3,{test: 'data'}], expected: '0x5b312c322c332c7b2274657374223a2264617461227d5d'}, 28 | { value: {test: 'test'}, expected: '0x7b2274657374223a2274657374227d'}, 29 | { value: '{"test": "test"}', expected: '0x7b2274657374223a202274657374227d'}, 30 | { value: 'myString', expected: '0x6d79537472696e67'}, 31 | { value: new BigNumber(15), expected: '0xf'}, 32 | { value: true, expected: '0x1'}, 33 | { value: false, expected: '0x0'}, 34 | { value: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ', 35 | expected: '0x0300000035e8c6d54c5d127c9dcebe9e1a37ab9b05321128d097590a3c100000000000006521df642ff1f5ec0c3a7aa6cea6b1e7b7f7cda2cbdf07362a85088e97f19ef94331c955c0e9321ad386428c'} 36 | ]; 37 | 38 | describe('lib/utils/utils', function () { 39 | describe('toHex', function () { 40 | tests.forEach(function (test) { 41 | it('should turn ' + test.value + ' to ' + test.expected, function () { 42 | assert.strictEqual(utils.toHex(test.value), test.expected); 43 | }); 44 | }); 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /test/utils.toUtf8.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var BigNumber = require('bignumber.js'); 3 | var utils = require('../lib/utils/utils.js'); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { value: '0x6d79537472696e67', expected: 'myString'}, 8 | { value: '0x6d79537472696e6700', expected: 'myString'}, 9 | { value: '0x65787065637465642076616c7565000000000000000000000000000000000000', expected: 'expected value'} 10 | ]; 11 | 12 | describe('lib/utils/utils', function () { 13 | describe('toUtf8', function () { 14 | tests.forEach(function (test) { 15 | it('should turn ' + test.value + ' to ' + test.expected, function () { 16 | assert.strictEqual(utils.toUtf8(test.value), test.expected); 17 | }); 18 | }); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /test/utils.toWei.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var utils = require('../lib/utils/utils'); 3 | var assert = chai.assert; 4 | 5 | describe('lib/utils/utils', function () { 6 | describe('toWei', function () { 7 | it('should return the correct value', function () { 8 | 9 | assert.equal(utils.toWei(1, 'wei'), '1'); 10 | assert.equal(utils.toWei(1, 'kwei'), '1000'); 11 | assert.equal(utils.toWei(1, 'Kwei'), '1000'); 12 | assert.equal(utils.toWei(1, 'babbage'), '1000'); 13 | assert.equal(utils.toWei(1, 'mwei'), '1000000'); 14 | assert.equal(utils.toWei(1, 'Mwei'), '1000000'); 15 | assert.equal(utils.toWei(1, 'lovelace'), '1000000'); 16 | assert.equal(utils.toWei(1, 'gwei'), '1000000000'); 17 | assert.equal(utils.toWei(1, 'Gwei'), '1000000000'); 18 | assert.equal(utils.toWei(1, 'shannon'), '1000000000'); 19 | assert.equal(utils.toWei(1, 'szabo'), '1000000000000'); 20 | assert.equal(utils.toWei(1, 'finney'), '1000000000000000'); 21 | assert.equal(utils.toWei(1, 'ether'), '1000000000000000000'); 22 | assert.equal(utils.toWei(1, 'kether'), '1000000000000000000000'); 23 | assert.equal(utils.toWei(1, 'grand'), '1000000000000000000000'); 24 | assert.equal(utils.toWei(1, 'mether'), '1000000000000000000000000'); 25 | assert.equal(utils.toWei(1, 'gether'), '1000000000000000000000000000'); 26 | assert.equal(utils.toWei(1, 'tether'), '1000000000000000000000000000000'); 27 | 28 | assert.equal(utils.toWei(1, 'kwei'), utils.toWei(1, 'femtoether')); 29 | assert.equal(utils.toWei(1, 'szabo'), utils.toWei(1, 'microether')); 30 | assert.equal(utils.toWei(1, 'finney'), utils.toWei(1, 'milliether')); 31 | assert.equal(utils.toWei(1, 'milli'), utils.toWei(1, 'milliether')); 32 | assert.equal(utils.toWei(1, 'milli'), utils.toWei(1000, 'micro')); 33 | 34 | assert.throws(function () {utils.toWei(1, 'wei1');}, Error); 35 | }); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /test/web3.db.getHex.js: -------------------------------------------------------------------------------- 1 | var testMethod = require('./helpers/test.method.js'); 2 | 3 | var method = 'getHex'; 4 | 5 | var tests = [{ 6 | args: ['myDB', 'myKey'], 7 | formattedArgs: ['myDB', 'myKey'], 8 | result: '0xf', 9 | formattedResult: '0xf', 10 | call: 'db_'+ method 11 | }]; 12 | 13 | testMethod.runTests('db', method, tests); 14 | 15 | -------------------------------------------------------------------------------- /test/web3.db.getString.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var testMethod = require('./helpers/test.method.js'); 3 | 4 | var method = 'getString'; 5 | 6 | var tests = [{ 7 | args: ['myDB', 'myKey'], 8 | formattedArgs: ['myDB', 'myKey'], 9 | result: 'myValue', 10 | formattedResult: 'myValue', 11 | call: 'db_'+ method 12 | }]; 13 | 14 | testMethod.runTests('db', method, tests); 15 | 16 | -------------------------------------------------------------------------------- /test/web3.db.methods.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index.js'); 4 | var web3 = new Web3(); 5 | var u = require('./helpers/test.utils.js'); 6 | 7 | describe('web3.db', function() { 8 | describe('methods', function() { 9 | u.methodExists(web3.db, 'putHex'); 10 | u.methodExists(web3.db, 'getHex'); 11 | u.methodExists(web3.db, 'putString'); 12 | u.methodExists(web3.db, 'getString'); 13 | }); 14 | }); 15 | 16 | -------------------------------------------------------------------------------- /test/web3.db.putHex.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'putHex'; 6 | 7 | var tests = [{ 8 | args: ['myDB', 'myKey', '0xb'], 9 | formattedArgs: ['myDB', 'myKey', '0xb'], 10 | result: true, 11 | formattedResult: true, 12 | call: 'db_'+ method 13 | }]; 14 | 15 | testMethod.runTests('db', method, tests); 16 | 17 | -------------------------------------------------------------------------------- /test/web3.db.putString.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'putString'; 6 | 7 | var tests = [{ 8 | args: ['myDB', 'myKey', 'myValue'], 9 | formattedArgs: ['myDB', 'myKey', 'myValue'], 10 | result: true, 11 | formattedResult: true, 12 | call: 'db_'+ method 13 | }]; 14 | 15 | testMethod.runTests('db', method, tests); 16 | 17 | -------------------------------------------------------------------------------- /test/web3.eth.accounts.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'accounts'; 8 | 9 | var tests = [{ 10 | result: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 11 | formattedResult: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 12 | call: 'eth_'+ method 13 | }]; 14 | 15 | describe('web3.eth', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.eth[method]; 32 | 33 | // then 34 | assert.deepEqual(test.formattedResult, result); 35 | }); 36 | }); 37 | }); 38 | }); 39 | 40 | -------------------------------------------------------------------------------- /test/web3.eth.blockNumber.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'blockNumber'; 8 | 9 | var tests = [{ 10 | result: '0xb', 11 | formattedResult: 11, 12 | call: 'eth_'+ method 13 | }]; 14 | 15 | describe('web3.eth', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.eth[method]; 32 | 33 | // then 34 | assert.strictEqual(test.formattedResult, result); 35 | }); 36 | 37 | it('async get property test: ' + index, function (done) { 38 | 39 | // given 40 | var provider = new FakeHttpProvider(); 41 | web3.setProvider(provider); 42 | provider.injectResult(test.result); 43 | provider.injectValidation(function (payload) { 44 | assert.equal(payload.jsonrpc, '2.0'); 45 | assert.equal(payload.method, test.call); 46 | assert.deepEqual(payload.params, []); 47 | }); 48 | 49 | // when 50 | web3.eth.getBlockNumber(function (err, result) { 51 | assert.strictEqual(test.formattedResult, result); 52 | done(); 53 | }); 54 | 55 | }); 56 | }); 57 | }); 58 | }); 59 | 60 | -------------------------------------------------------------------------------- /test/web3.eth.call.js: -------------------------------------------------------------------------------- 1 | var testMethod = require('./helpers/test.method.js'); 2 | 3 | var method = 'call'; 4 | 5 | var tests = [{ 6 | args: [{ 7 | to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', 8 | data: '0x23455654', 9 | gas: 11, 10 | gasPrice: 11 11 | }], 12 | formattedArgs: [{ 13 | to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', 14 | data: '0x23455654', 15 | gas: '0xb', 16 | gasPrice: '0xb' 17 | }, 'latest'], 18 | result: '0x31981', 19 | formattedResult: '0x31981', 20 | call: 'eth_'+ method 21 | },{ 22 | args: [{ 23 | to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', 24 | data: '0x23455654', 25 | gas: 11, 26 | gasPrice: 11 27 | }, 11], 28 | formattedArgs: [{ 29 | to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', 30 | data: '0x23455654', 31 | gas: '0xb', 32 | gasPrice: '0xb' 33 | }, '0xb'], 34 | result: '0x31981', 35 | formattedResult: '0x31981', 36 | call: 'eth_'+ method 37 | }]; 38 | 39 | testMethod.runTests('eth', method, tests); 40 | 41 | -------------------------------------------------------------------------------- /test/web3.eth.coinbase.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'coinbase'; 8 | 9 | var tests = [{ 10 | result: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 11 | formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 12 | call: 'eth_'+ method 13 | }]; 14 | 15 | describe('web3.eth', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.eth[method]; 32 | 33 | // then 34 | assert.deepEqual(test.formattedResult, result); 35 | }); 36 | }); 37 | }); 38 | }); 39 | 40 | -------------------------------------------------------------------------------- /test/web3.eth.defaultBlock.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | 6 | describe('web3.eth', function () { 7 | describe('defaultBlock', function () { 8 | it('should check if defaultBlock is set to proper value', function () { 9 | assert.equal(web3.eth.defaultBlock, 'latest'); 10 | }); 11 | }); 12 | }); 13 | 14 | -------------------------------------------------------------------------------- /test/web3.eth.estimateGas.js: -------------------------------------------------------------------------------- 1 | var web3 = require('../index'); 2 | var testMethod = require('./helpers/test.method.js'); 3 | 4 | var method = 'estimateGas'; 5 | 6 | var tests = [{ 7 | args: [{ 8 | to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', 9 | data: '0x23455654', 10 | gas: 11, 11 | gasPrice: 11 12 | }], 13 | formattedArgs: [{ 14 | to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', 15 | data: '0x23455654', 16 | gas: '0xb', 17 | gasPrice: '0xb' 18 | }], 19 | result: '0x31981', 20 | formattedResult: 203137, 21 | call: 'eth_'+ method 22 | }]; 23 | 24 | testMethod.runTests('eth', method, tests); 25 | 26 | -------------------------------------------------------------------------------- /test/web3.eth.filter.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Web3 = require('../index'); 3 | var web3 = new Web3(); 4 | var assert = chai.assert; 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'filter'; 8 | 9 | var tests = [{ 10 | args: [{ 11 | fromBlock: 0, 12 | toBlock: 10, 13 | address: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855' 14 | }], 15 | formattedArgs: [{ 16 | fromBlock: '0x0', 17 | toBlock: '0xa', 18 | address: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 19 | topics: [] 20 | }], 21 | result: '0xf', 22 | formattedResult: '0xf', 23 | call: 'eth_newFilter' 24 | },{ 25 | args: [{ 26 | fromBlock: 'latest', 27 | toBlock: 'latest', 28 | address: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855' 29 | }], 30 | formattedArgs: [{ 31 | fromBlock: 'latest', 32 | toBlock: 'latest', 33 | address: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 34 | topics: [] 35 | }], 36 | result: '0xf', 37 | formattedResult: '0xf', 38 | call: 'eth_newFilter' 39 | },{ 40 | args: ['latest'], 41 | formattedArgs: [], 42 | result: '0xf', 43 | formattedResult: '0xf', 44 | call: 'eth_newBlockFilter' 45 | },{ 46 | args: ['pending'], 47 | formattedArgs: [], 48 | result: '0xf', 49 | formattedResult: '0xf', 50 | call: 'eth_newPendingTransactionFilter' 51 | }]; 52 | 53 | describe('web3.eth', function () { 54 | describe(method, function () { 55 | tests.forEach(function (test, index) { 56 | it('property test: ' + index, function () { 57 | 58 | // given 59 | var provider = new FakeHttpProvider(); 60 | web3.reset(); 61 | web3.setProvider(provider); 62 | provider.injectResult(test.result); 63 | provider.injectValidation(function (payload) { 64 | assert.equal(payload.jsonrpc, '2.0'); 65 | assert.equal(payload.method, test.call); 66 | assert.deepEqual(payload.params, test.formattedArgs); 67 | }); 68 | 69 | // call 70 | var filter = web3.eth[method].apply(web3.eth, test.args); 71 | 72 | // test filter.get 73 | if(typeof test.args === 'object') { 74 | 75 | var logs = [{data: '0xb'}, {data: '0x11'}]; 76 | 77 | provider.injectResult(logs); 78 | provider.injectValidation(function (payload) { 79 | assert.equal(payload.jsonrpc, '2.0'); 80 | assert.equal(payload.method, 'eth_getFilterLogs'); 81 | assert.deepEqual(payload.params, [test.formattedResult]); 82 | }); 83 | 84 | // sync should throw an error 85 | try { 86 | assert.throws(filter.get()); 87 | } catch(e){ 88 | assert.instanceOf(e, Error); 89 | } 90 | 91 | // async should get the fake logs 92 | filter.get(function(e, res){ 93 | assert.equal(logs, res); 94 | web3.reset(); 95 | done(); 96 | }); 97 | } 98 | }); 99 | }); 100 | }); 101 | }); 102 | 103 | -------------------------------------------------------------------------------- /test/web3.eth.gasPrice.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var BigNumber = require('bignumber.js'); 6 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 7 | 8 | var method = 'gasPrice'; 9 | 10 | var tests = [{ 11 | result: '0x15f90', 12 | formattedResult: new BigNumber(90000), 13 | call: 'eth_'+ method 14 | }]; 15 | 16 | describe('web3.eth', function () { 17 | describe(method, function () { 18 | tests.forEach(function (test, index) { 19 | it('property test: ' + index, function () { 20 | 21 | // given 22 | var provider = new FakeHttpProvider(); 23 | web3.setProvider(provider); 24 | provider.injectResult(test.result); 25 | provider.injectValidation(function (payload) { 26 | assert.equal(payload.jsonrpc, '2.0'); 27 | assert.equal(payload.method, test.call); 28 | assert.deepEqual(payload.params, []); 29 | }); 30 | 31 | // when 32 | var result = web3.eth[method]; 33 | 34 | // then 35 | assert.deepEqual(test.formattedResult, result); 36 | }); 37 | }); 38 | }); 39 | }); 40 | 41 | -------------------------------------------------------------------------------- /test/web3.eth.getBalance.js: -------------------------------------------------------------------------------- 1 | var BigNumber = require('bignumber.js'); 2 | var Web3 = require('../index'); 3 | var web3 = new Web3(); 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | var method = 'getBalance'; 7 | 8 | var tests = [{ 9 | args: ['0x000000000000000000000000000000000000012d', 2], 10 | formattedArgs: ['0x000000000000000000000000000000000000012d', '0x2'], 11 | result: '0x31981', 12 | formattedResult: new BigNumber('0x31981', 16), 13 | call: 'eth_'+ method 14 | },{ 15 | args: ['0x000000000000000000000000000000000000012d', '0x1'], 16 | formattedArgs: ['0x000000000000000000000000000000000000012d', '0x1'], 17 | result: '0x31981', 18 | formattedResult: new BigNumber('0x31981', 16), 19 | call: 'eth_'+ method 20 | }, { 21 | args: ['0x000000000000000000000000000000000000012d', 0x1], 22 | formattedArgs: ['0x000000000000000000000000000000000000012d', '0x1'], 23 | result: '0x31981', 24 | formattedResult: new BigNumber('0x31981', 16), 25 | call: 'eth_'+ method 26 | }, { 27 | args: ['0x000000000000000000000000000000000000012d'], 28 | formattedArgs: ['0x000000000000000000000000000000000000012d', web3.eth.defaultBlock], 29 | result: '0x31981', 30 | formattedResult: new BigNumber('0x31981', 16), 31 | call: 'eth_'+ method 32 | }, { 33 | args: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', 0x1], 34 | formattedArgs: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', '0x1'], 35 | result: '0x31981', 36 | formattedResult: new BigNumber('0x31981', 16), 37 | call: 'eth_'+ method 38 | }, { 39 | args: ['dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', 0x1], 40 | formattedArgs: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', '0x1'], 41 | result: '0x31981', 42 | formattedResult: new BigNumber('0x31981', 16), 43 | call: 'eth_'+ method 44 | }, { 45 | args: ['0x000000000000000000000000000000000000012d', 0x1], 46 | formattedArgs: ['0x000000000000000000000000000000000000012d', '0x1'], 47 | result: '0x31981', 48 | formattedResult: new BigNumber('0x31981', 16), 49 | call: 'eth_'+ method 50 | }, { 51 | args: ['0x000000000000000000000000000000000000012d'], 52 | formattedArgs: ['0x000000000000000000000000000000000000012d', 'latest'], 53 | result: '0x31981', 54 | formattedResult: new BigNumber('0x31981', 16), 55 | call: 'eth_'+ method 56 | }, { 57 | args: ['000000000000000000000000000000000000012d'], 58 | formattedArgs: ['0x000000000000000000000000000000000000012d', 'latest'], 59 | result: '0x31981', 60 | formattedResult: new BigNumber('0x31981', 16), 61 | call: 'eth_'+ method 62 | }, { 63 | args: ['XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'], 64 | formattedArgs: ['0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 'latest'], 65 | result: '0x31981', 66 | formattedResult: new BigNumber('0x31981', 16), 67 | call: 'eth_'+ method 68 | }]; 69 | 70 | testMethod.runTests('eth', method, tests); 71 | 72 | -------------------------------------------------------------------------------- /test/web3.eth.getBlockTransactionCount.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'getBlockTransactionCount'; 6 | 7 | 8 | var tests = [{ 9 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 10 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 11 | result: '0xb', 12 | formattedResult: 11, 13 | call: 'eth_getBlockTransactionCountByHash' 14 | },{ 15 | args: [436], 16 | formattedArgs: ['0x1b4'], 17 | result: '0xb', 18 | formattedResult: 11, 19 | call: 'eth_getBlockTransactionCountByNumber' 20 | },{ 21 | args: ['pending'], 22 | formattedArgs: ['pending'], 23 | result: '0xb', 24 | formattedResult: 11, 25 | call: 'eth_getBlockTransactionCountByNumber' 26 | }]; 27 | 28 | testMethod.runTests('eth', method, tests); 29 | 30 | -------------------------------------------------------------------------------- /test/web3.eth.getBlockUncleCount.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var method = 'getBlockUncleCount'; 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | 7 | var tests = [{ 8 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 9 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 10 | result: '0xb', 11 | formattedResult: 11, 12 | call: 'eth_getUncleCountByBlockHash' 13 | },{ 14 | args: [436], 15 | formattedArgs: ['0x1b4'], 16 | result: '0xb', 17 | formattedResult: 11, 18 | call: 'eth_getUncleCountByBlockNumber' 19 | },{ 20 | args: ['pending'], 21 | formattedArgs: ['pending'], 22 | result: '0xb', 23 | formattedResult: 11, 24 | call: 'eth_getUncleCountByBlockNumber' 25 | }]; 26 | 27 | testMethod.runTests('eth', method, tests); 28 | -------------------------------------------------------------------------------- /test/web3.eth.getCode.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Web3 = require('../index'); 3 | var web3 = new Web3(); 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | var method = 'getCode'; 7 | 8 | 9 | var tests = [{ 10 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 11 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', web3.eth.defaultBlock], 12 | result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 13 | formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 14 | call: 'eth_'+ method 15 | },{ 16 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 2], 17 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0x2'], 18 | result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 19 | formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 20 | call: 'eth_'+ method 21 | }]; 22 | 23 | testMethod.runTests('eth', method, tests); 24 | 25 | -------------------------------------------------------------------------------- /test/web3.eth.getCompilers.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'getCompilers'; 6 | 7 | 8 | var tests = [{ 9 | args: [], 10 | formattedArgs: [], 11 | result: ['solidity'], 12 | formattedResult: ['solidity'], 13 | call: 'eth_'+ method 14 | },{ 15 | args: [], 16 | formattedArgs: [], 17 | result: ['solidity'], 18 | formattedResult: ['solidity'], 19 | call: 'eth_'+ method 20 | }]; 21 | 22 | testMethod.runTests('eth', method, tests); 23 | 24 | -------------------------------------------------------------------------------- /test/web3.eth.getStorageAt.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Web3 = require('../index'); 3 | var web3 = new Web3(); 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | var method = 'getStorageAt'; 7 | 8 | 9 | var tests = [{ 10 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 2], 11 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0x2', web3.eth.defaultBlock], 12 | result: '0x47d33b2', 13 | formattedResult: '0x47d33b2', 14 | call: 'eth_'+ method 15 | },{ 16 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 2, 0], 17 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0x2', '0x0'], 18 | result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 19 | formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 20 | call: 'eth_'+ method 21 | },{ 22 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 0xb, 0x0], 23 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', '0x0'], 24 | result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 25 | formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 26 | call: 'eth_'+ method 27 | }, { 28 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 0xb, 'latest'], 29 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], 30 | result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 31 | formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', 32 | call: 'eth_'+ method 33 | }]; 34 | 35 | testMethod.runTests('eth', method, tests); 36 | 37 | -------------------------------------------------------------------------------- /test/web3.eth.getTransaction.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var BigNumber = require('bignumber.js'); 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | var method = 'getTransaction'; 7 | 8 | var txResult = { 9 | "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", 10 | "nonce":"0x5", 11 | "blockHash": "0x6fd9e2a26ab", 12 | "blockNumber": "0x15df", 13 | "transactionIndex": "0x1", 14 | "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", 15 | "to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1", 16 | "value":"0x7f110", 17 | "gas": "0x7f110", 18 | "gasPrice":"0x09184e72a000", 19 | "input":"0x603880600c6000396000f30060" 20 | }; 21 | var formattedTxResult = { 22 | "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", 23 | "nonce":5, 24 | "blockHash": "0x6fd9e2a26ab", 25 | "blockNumber": 5599, 26 | "transactionIndex": 1, 27 | "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", 28 | "to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1", 29 | "value": new BigNumber(520464), 30 | "gas": 520464, 31 | "gasPrice": new BigNumber(10000000000000), 32 | "input":"0x603880600c6000396000f30060" 33 | }; 34 | 35 | var tests = [{ 36 | args: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855'], 37 | formattedArgs: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855'], 38 | result: txResult, 39 | formattedResult: formattedTxResult, 40 | call: 'eth_'+ method + 'ByHash' 41 | }]; 42 | 43 | testMethod.runTests('eth', method, tests); 44 | 45 | -------------------------------------------------------------------------------- /test/web3.eth.getTransactionFromBlock.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var BigNumber = require('bignumber.js'); 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | var method = 'getTransactionFromBlock'; 7 | 8 | var txResult = { 9 | "status": "mined", 10 | "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", 11 | "nonce":"0xb", 12 | "blockHash": "0x6fd9e2a26ab", 13 | "blockNumber": "0x15df", 14 | "transactionIndex": "0x1", 15 | "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", 16 | "to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1", 17 | "value":"0x7f110", 18 | "gas": "0x7f110", 19 | "gasPrice":"0x09184e72a000", 20 | "input":"0x603880600c6000396000f30060" 21 | }; 22 | var formattedTxResult = { 23 | "status": "mined", 24 | "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", 25 | "nonce":11, 26 | "blockHash": "0x6fd9e2a26ab", 27 | "blockNumber": 5599, 28 | "transactionIndex": 1, 29 | "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", 30 | "to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1", 31 | "value": new BigNumber(520464), 32 | "gas": 520464, 33 | "gasPrice": new BigNumber(10000000000000), 34 | "input":"0x603880600c6000396000f30060" 35 | }; 36 | 37 | var tests = [{ 38 | args: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855', 2], 39 | formattedArgs: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855', '0x2'], 40 | result: txResult, 41 | formattedResult: formattedTxResult, 42 | call: 'eth_getTransactionByBlockHashAndIndex' 43 | },{ 44 | args: [436, 11], 45 | formattedArgs: ['0x1b4', '0xb'], 46 | result: txResult, 47 | formattedResult: formattedTxResult, 48 | call: 'eth_getTransactionByBlockNumberAndIndex' 49 | }]; 50 | 51 | testMethod.runTests('eth', method, tests); 52 | 53 | -------------------------------------------------------------------------------- /test/web3.eth.getTransactionReceipt.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var BigNumber = require('bignumber.js'); 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | var method = 'getTransactionReceipt'; 7 | 8 | var txResult = { 9 | "blockHash": "0x6fd9e2a26ab", 10 | "blockNumber": "0x15df", 11 | "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", 12 | "transactionIndex": "0x1", 13 | "contractAddress":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", 14 | "cumulativeGasUsed":"0x7f110", 15 | "gasUsed": "0x7f110", 16 | "logs": [{ 17 | transactionIndex: '0x3e8', 18 | logIndex: '0x3e8', 19 | blockNumber: '0x3e8', 20 | transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 21 | blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 22 | data: '0x7b2274657374223a2274657374227', 23 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 24 | },{ 25 | transactionIndex: null, 26 | logIndex: null, 27 | blockNumber: null, 28 | transactionHash: null, 29 | blockHash: null, 30 | data: '0x7b2274657374223a2274657374227', 31 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 32 | }] 33 | }; 34 | var formattedTxResult = { 35 | "blockHash": "0x6fd9e2a26ab", 36 | "blockNumber": 5599, 37 | "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", 38 | "transactionIndex": 1, 39 | "contractAddress":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", 40 | "cumulativeGasUsed": 520464, 41 | "gasUsed": 520464, 42 | "logs": [{ 43 | transactionIndex: 1000, 44 | logIndex: 1000, 45 | blockNumber: 1000, 46 | transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 47 | blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', 48 | data: '0x7b2274657374223a2274657374227', 49 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 50 | },{ 51 | transactionIndex: null, 52 | logIndex: null, 53 | blockNumber: null, 54 | transactionHash: null, 55 | blockHash: null, 56 | data: '0x7b2274657374223a2274657374227', 57 | topics: ['0x68656c6c6f','0x6d79746f70696373'] 58 | }] 59 | }; 60 | 61 | var tests = [{ 62 | args: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855'], 63 | formattedArgs: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855'], 64 | result: txResult, 65 | formattedResult: formattedTxResult, 66 | call: 'eth_'+ method 67 | }]; 68 | 69 | testMethod.runTests('eth', method, tests); 70 | 71 | -------------------------------------------------------------------------------- /test/web3.eth.getWork.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'getWork'; 6 | 7 | var tests = [{ 8 | args: [], 9 | formattedArgs: [], 10 | result: true, 11 | formattedResult: true, 12 | call: 'eth_'+ method 13 | }]; 14 | 15 | testMethod.runTests('eth', method, tests); 16 | 17 | -------------------------------------------------------------------------------- /test/web3.eth.hashRate.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'hashrate'; 8 | 9 | var tests = [{ 10 | result: '0x788a8', 11 | formattedResult: 493736, 12 | call: 'eth_'+ method 13 | }]; 14 | 15 | describe('web3.eth', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.eth[method]; 32 | 33 | // then 34 | assert.strictEqual(test.formattedResult, result); 35 | 36 | // clear the validation 37 | provider.injectValidation(function () {}); 38 | web3.reset(); 39 | }); 40 | }); 41 | }); 42 | }); 43 | 44 | -------------------------------------------------------------------------------- /test/web3.eth.isSyncing.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Web3 = require('../index'); 3 | var assert = chai.assert; 4 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 5 | 6 | var method = 'isSyncing'; 7 | 8 | var tests = [{ 9 | args: [], 10 | formattedArgs: [], 11 | result: [{ 12 | startingBlock: '0xb', 13 | currentBlock: '0xb', 14 | highestBlock: '0xb' 15 | }], 16 | formattedResult: { 17 | startingBlock: 11, 18 | currentBlock: 11, 19 | highestBlock: 11 20 | }, 21 | call: 'eth_syncing' 22 | }]; 23 | 24 | describe('eth', function () { 25 | describe(method, function () { 26 | tests.forEach(function (test, index) { 27 | it('property test: ' + index, function (done) { 28 | // given 29 | var provider = new FakeHttpProvider(); 30 | var web3 = new Web3(provider); 31 | provider.injectBatchResults(test.result); 32 | provider.injectValidation(function(payload) { 33 | assert.equal(payload[0].jsonrpc, '2.0', 'failed'); 34 | assert.equal(payload[0].method, test.call); 35 | assert.deepEqual(payload[0].params, test.formattedArgs); 36 | }); 37 | 38 | var count = 1; 39 | 40 | // TODO results seem to be overwritten 41 | 42 | 43 | // call 44 | var syncing = web3.eth[method](function(e, res){ 45 | if(count === 1) { 46 | assert.isTrue(res); 47 | count++; 48 | } else { 49 | assert.deepEqual(res, test.formattedResult); 50 | syncing.stopWatching(); 51 | done(); 52 | } 53 | }); 54 | 55 | }); 56 | }); 57 | }); 58 | }); 59 | 60 | -------------------------------------------------------------------------------- /test/web3.eth.methods.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index.js'); 4 | var web3 = new Web3(); 5 | var u = require('./helpers/test.utils.js'); 6 | 7 | describe('web3.eth', function() { 8 | describe('methods', function() { 9 | u.methodExists(web3.eth, 'getBalance'); 10 | u.methodExists(web3.eth, 'getStorageAt'); 11 | u.methodExists(web3.eth, 'getTransactionCount'); 12 | u.methodExists(web3.eth, 'getCode'); 13 | u.methodExists(web3.eth, 'sendTransaction'); 14 | u.methodExists(web3.eth, 'call'); 15 | u.methodExists(web3.eth, 'getBlock'); 16 | u.methodExists(web3.eth, 'getTransaction'); 17 | u.methodExists(web3.eth, 'getUncle'); 18 | u.methodExists(web3.eth, 'getCompilers'); 19 | u.methodExists(web3.eth.compile, 'lll'); 20 | u.methodExists(web3.eth.compile, 'solidity'); 21 | u.methodExists(web3.eth.compile, 'serpent'); 22 | u.methodExists(web3.eth, 'getBlockTransactionCount'); 23 | u.methodExists(web3.eth, 'getBlockUncleCount'); 24 | u.methodExists(web3.eth, 'filter'); 25 | u.methodExists(web3.eth, 'contract'); 26 | 27 | u.propertyExists(web3.eth, 'coinbase'); 28 | u.propertyExists(web3.eth, 'mining'); 29 | u.propertyExists(web3.eth, 'gasPrice'); 30 | u.propertyExists(web3.eth, 'accounts'); 31 | u.propertyExists(web3.eth, 'defaultBlock'); 32 | u.propertyExists(web3.eth, 'blockNumber'); 33 | }); 34 | }); 35 | 36 | -------------------------------------------------------------------------------- /test/web3.eth.mining.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'mining'; 8 | 9 | var tests = [{ 10 | result: true, 11 | formattedResult: true, 12 | call: 'eth_'+ method 13 | }]; 14 | 15 | describe('web3.eth', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.eth[method]; 32 | 33 | // then 34 | assert.deepEqual(test.formattedResult, result); 35 | }); 36 | }); 37 | }); 38 | }); 39 | 40 | -------------------------------------------------------------------------------- /test/web3.eth.sendIBANTransaction.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider2 = require('./helpers/FakeHttpProvider2'); 6 | 7 | describe('web3.eth.sendIBANTransaction', function () { 8 | it('should send transaction', function () { 9 | 10 | var iban = 'XE81ETHXREGGAVOFYORK'; 11 | var address = '0x1234567890123456789012345678901234500000'; 12 | var exAddress = '0x1234567890123456789012345678901234567890' 13 | 14 | var provider = new FakeHttpProvider2(); 15 | web3.setProvider(provider); 16 | web3.reset(); 17 | 18 | provider.injectResultList([{ 19 | result: exAddress 20 | }, { 21 | result: '' 22 | }]); 23 | 24 | var step = 0; 25 | provider.injectValidation(function (payload) { 26 | if (step === 0) { 27 | step++; 28 | assert.equal(payload.method, 'eth_call'); 29 | assert.deepEqual(payload.params, [{ 30 | data: "0x3b3b57de5852454700000000000000000000000000000000000000000000000000000000", 31 | to: web3.eth.icapNamereg().address 32 | }, "latest"]); 33 | 34 | return; 35 | } 36 | assert.equal(payload.method, 'eth_sendTransaction'); 37 | assert.deepEqual(payload.params, [{ 38 | data: '0xb214faa54741564f46594f524b0000000000000000000000000000000000000000000000', 39 | from: address, 40 | to: exAddress, 41 | value: payload.params[0].value // don't check this 42 | }]); 43 | }); 44 | 45 | web3.eth.sendIBANTransaction(address, iban, 10000); 46 | 47 | }); 48 | }); 49 | 50 | -------------------------------------------------------------------------------- /test/web3.eth.submitWork.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'submitWork'; 6 | 7 | var tests = [ 8 | { 9 | args: ['0x567890abcdef5555', '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', '0xcdef1234567890abcdef1234567890abcdef0x1234567890abcf1234567890ab'], 10 | formattedArgs: ['0x567890abcdef5555', '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', '0xcdef1234567890abcdef1234567890abcdef0x1234567890abcf1234567890ab'], 11 | result: true, 12 | formattedResult: true, 13 | call: 'eth_'+ method 14 | }]; 15 | 16 | testMethod.runTests('eth', method, tests); 17 | 18 | -------------------------------------------------------------------------------- /test/web3.extend.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 4 | var Web3 = require('../lib/web3'); 5 | var web3 = new Web3(); 6 | 7 | 8 | var tests = [{ 9 | properties: [new web3._extend.Property({ 10 | name: 'gasPrice', 11 | getter: 'eth_gasPrice', 12 | outputFormatter: web3._extend.formatters.outputBigNumberFormatter 13 | })] 14 | },{ 15 | methods: [new web3._extend.Method({ 16 | name: 'getBalance', 17 | call: 'eth_getBalance', 18 | params: 2, 19 | inputFormatter: [web3._extend.utils.toAddress, web3._extend.formatters.inputDefaultBlockNumberFormatter], 20 | outputFormatter: web3._extend.formatters.outputBigNumberFormatter 21 | })] 22 | },{ 23 | property: 'admin', 24 | properties: [new web3._extend.Property({ 25 | name: 'gasPrice', 26 | getter: 'eth_gasPrice', 27 | outputFormatter: web3._extend.formatters.outputBigNumberFormatter 28 | })], 29 | methods: [new web3._extend.Method({ 30 | name: 'getBalance', 31 | call: 'eth_getBalance', 32 | params: 2, 33 | inputFormatter: [web3._extend.utils.toAddress, web3._extend.formatters.inputDefaultBlockNumberFormatter], 34 | outputFormatter: web3._extend.formatters.outputBigNumberFormatter 35 | })] 36 | }]; 37 | 38 | describe('web3', function () { 39 | describe('_extend', function () { 40 | tests.forEach(function (test, index) { 41 | it('test no: ' + index, function () { 42 | web3._extend(test); 43 | 44 | 45 | if(test.properties) 46 | test.properties.forEach(function(property){ 47 | 48 | var provider = new FakeHttpProvider(); 49 | web3.setProvider(provider); 50 | provider.injectResult(''); 51 | provider.injectValidation(function (payload) { 52 | assert.equal(payload.jsonrpc, '2.0'); 53 | assert.equal(payload.method, property.getter); 54 | }); 55 | 56 | if(test.property) { 57 | assert.isObject(web3[test.property][property.name]); 58 | assert.isFunction(web3[test.property]['get'+ property.name.charAt(0).toUpperCase() + property.name.slice(1)]); 59 | } else { 60 | assert.isObject(web3[property.name]); 61 | assert.isFunction(web3['get'+ property.name.charAt(0).toUpperCase() + property.name.slice(1)]); 62 | } 63 | }); 64 | 65 | if(test.methods) 66 | test.methods.forEach(function(property){ 67 | if(test.property) 68 | assert.isFunction(web3[test.property][property.name]); 69 | else 70 | assert.isFunction(web3[property.name]); 71 | }); 72 | 73 | }); 74 | }); 75 | }); 76 | }); 77 | 78 | -------------------------------------------------------------------------------- /test/web3.fromICAP.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Web3 = require('../index'); 3 | var web3 = new Web3(); 4 | var assert = chai.assert; 5 | 6 | var tests = [ 7 | { direct: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', address: '00c5496aee77c1ba1f0854206a26dda82a81d6d8'} 8 | ]; 9 | 10 | describe('web3', function () { 11 | describe('fromICAP', function () { 12 | tests.forEach(function (test) { 13 | it('shoud transform iban to address: ' + test.address, function () { 14 | assert.deepEqual(web3.fromICAP(test.direct), test.address); 15 | }); 16 | }); 17 | }); 18 | }); 19 | 20 | -------------------------------------------------------------------------------- /test/web3.methods.js: -------------------------------------------------------------------------------- 1 | var Web3 = require('../index.js'); 2 | var web3 = new Web3(); 3 | var u = require('./helpers/test.utils.js'); 4 | 5 | describe('web3', function() { 6 | describe('methods', function () { 7 | u.methodExists(web3, 'sha3'); 8 | u.methodExists(web3, 'toAscii'); 9 | u.methodExists(web3, 'fromAscii'); 10 | u.methodExists(web3, 'toDecimal'); 11 | u.methodExists(web3, 'fromDecimal'); 12 | u.methodExists(web3, 'fromWei'); 13 | u.methodExists(web3, 'toWei'); 14 | u.methodExists(web3, 'toBigNumber'); 15 | u.methodExists(web3, 'isAddress'); 16 | u.methodExists(web3, 'setProvider'); 17 | u.methodExists(web3, 'reset'); 18 | 19 | u.propertyExists(web3, 'providers'); 20 | u.propertyExists(web3, 'eth'); 21 | u.propertyExists(web3, 'db'); 22 | u.propertyExists(web3, 'shh'); 23 | }); 24 | }); 25 | 26 | -------------------------------------------------------------------------------- /test/web3.net.listening.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'listening'; 8 | 9 | var tests = [{ 10 | result: true, 11 | formattedResult: true, 12 | call: 'net_'+ method 13 | }]; 14 | 15 | describe('web3.net', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.net[method]; 32 | 33 | // then 34 | assert.deepEqual(test.formattedResult, result); 35 | }); 36 | }); 37 | }); 38 | }); 39 | 40 | -------------------------------------------------------------------------------- /test/web3.net.methods.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index.js'); 4 | var web3 = new Web3(); 5 | var u = require('./helpers/test.utils.js'); 6 | 7 | describe('web3.net', function() { 8 | describe('methods', function() { 9 | u.propertyExists(web3.net, 'listening'); 10 | u.propertyExists(web3.net, 'peerCount'); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /test/web3.net.peerCount.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'peerCount'; 8 | 9 | var tests = [{ 10 | result: '0xf', 11 | formattedResult: 15, 12 | call: 'net_'+ method 13 | }]; 14 | 15 | describe('web3.net', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.net[method]; 32 | 33 | // then 34 | assert.deepEqual(test.formattedResult, result); 35 | }); 36 | }); 37 | }); 38 | }); 39 | 40 | -------------------------------------------------------------------------------- /test/web3.personal.listAccounts.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var web3 = new Web3(); 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'listAccounts'; 8 | 9 | var tests = [{ 10 | result: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 11 | formattedResult: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 12 | call: 'personal_'+ method 13 | }]; 14 | 15 | describe('web3.personal', function () { 16 | describe(method, function () { 17 | tests.forEach(function (test, index) { 18 | it('property test: ' + index, function () { 19 | 20 | // given 21 | var provider = new FakeHttpProvider(); 22 | web3.setProvider(provider); 23 | provider.injectResult(test.result); 24 | provider.injectValidation(function (payload) { 25 | assert.equal(payload.jsonrpc, '2.0'); 26 | assert.equal(payload.method, test.call); 27 | assert.deepEqual(payload.params, []); 28 | }); 29 | 30 | // when 31 | var result = web3.personal[method]; 32 | 33 | // then 34 | assert.deepEqual(test.formattedResult, result); 35 | }); 36 | }); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /test/web3.personal.methods.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index.js'); 4 | var web3 = new Web3(); 5 | var u = require('./helpers/test.utils.js'); 6 | 7 | describe('web3.net', function() { 8 | describe('methods', function() { 9 | u.propertyExists(web3.personal, 'listAccounts'); 10 | u.methodExists(web3.personal, 'newAccount'); 11 | u.methodExists(web3.personal, 'unlockAccount'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /test/web3.personal.newAccount.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'newAccount'; 6 | 7 | var tests = [{ 8 | args: ['P@ssw0rd!'], 9 | formattedArgs: ['P@ssw0rd!'], 10 | result: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 11 | formattedResult: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], 12 | call: 'personal_'+ method 13 | }]; 14 | 15 | testMethod.runTests('personal', method, tests); 16 | -------------------------------------------------------------------------------- /test/web3.personal.unlockAccount.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'unlockAccount'; 6 | 7 | var tests = [{ 8 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 'P@ssw0rd!'], 9 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 'P@ssw0rd!', null], 10 | result: true, 11 | formattedResult: true, 12 | call: 'personal_'+ method 13 | },{ 14 | args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 'P@ssw0rd!', 10], 15 | formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 'P@ssw0rd!', 10], 16 | result: true, 17 | formattedResult: true, 18 | call: 'personal_'+ method 19 | }]; 20 | 21 | testMethod.runTests('personal', method, tests); 22 | -------------------------------------------------------------------------------- /test/web3.sha3.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index'); 4 | var sha3 = require('../lib/utils/sha3'); 5 | var web3 = new Web3(); 6 | 7 | var method = 'sha3'; 8 | 9 | describe('web3.sha3', function () { 10 | it('should return sha3 with hex prefix', function() { 11 | test1 = web3.sha3('test123'); 12 | test2 = web3.sha3('test(int)'); 13 | test3 = web3.sha3('0x80', {encoding: 'hex'}); 14 | test4 = web3.sha3('0x3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1', {encoding: 'hex'}); 15 | assert.deepEqual(test1, '0x' + sha3('test123')); 16 | assert.deepEqual(test2, '0x' + sha3('test(int)')); 17 | assert.deepEqual(test3, '0x' + sha3('0x80', {encoding: 'hex'})); 18 | assert.deepEqual(test4, '0x' + sha3('0x3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1', {encoding: 'hex'})); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /test/web3.shh.filter.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Web3 = require('../index'); 3 | var web3 = new Web3(); 4 | var assert = chai.assert; 5 | var FakeHttpProvider = require('./helpers/FakeHttpProvider'); 6 | 7 | var method = 'filter'; 8 | 9 | var tests = [{ 10 | args: [{ 11 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 12 | topics: ['0x324f5435', '0x564b4566f3453'] 13 | }], 14 | formattedArgs: [{ 15 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 16 | topics: ['0x324f5435', '0x564b4566f3453'] 17 | }], 18 | result: '0xf', 19 | formattedResult: '0xf', 20 | call: 'shh_newFilter' 21 | }, 22 | { 23 | args: [{ 24 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 25 | topics: ['0x324f5435', ['0x564b4566f3453', '0x345345343453']] 26 | }], 27 | formattedArgs: [{ 28 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 29 | topics: ['0x324f5435', ['0x564b4566f3453', '0x345345343453']] 30 | }], 31 | result: '0xf', 32 | formattedResult: '0xf', 33 | call: 'shh_newFilter' 34 | }, 35 | { 36 | args: [{ 37 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 38 | topics: ['0x324f5435', null, ['0x564b4566f3453', '0x345345343453']] 39 | }], 40 | formattedArgs: [{ 41 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 42 | topics: ['0x324f5435', null, ['0x564b4566f3453', '0x345345343453']] 43 | }], 44 | result: '0xf', 45 | formattedResult: '0xf', 46 | call: 'shh_newFilter' 47 | }, 48 | { 49 | args: [{ 50 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 51 | topics: ['myString', 11, '23', null] 52 | }], 53 | formattedArgs: [{ 54 | to: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 55 | topics: ['0x6d79537472696e67', '0x3131', '0x3233', null] 56 | }], 57 | result: '0xf', 58 | formattedResult: '0xf', 59 | call: 'shh_newFilter' 60 | }]; 61 | 62 | describe('shh', function () { 63 | describe(method, function () { 64 | tests.forEach(function (test, index) { 65 | it('property test: ' + index, function () { 66 | 67 | // given 68 | var provider = new FakeHttpProvider(); 69 | web3.setProvider(provider); 70 | web3.reset(); 71 | provider.injectResult(test.result); 72 | provider.injectValidation(function (payload) { 73 | assert.equal(payload.jsonrpc, '2.0'); 74 | assert.equal(payload.method, test.call); 75 | assert.deepEqual(payload.params, test.formattedArgs); 76 | }); 77 | 78 | // call 79 | web3.shh[method].apply(web3.shh, test.args); 80 | 81 | }); 82 | }); 83 | }); 84 | }); 85 | 86 | -------------------------------------------------------------------------------- /test/web3.shh.hasIdentity.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var web3 = require('../index'); 3 | var testMethod = require('./helpers/test.method.js'); 4 | 5 | var method = 'hasIdentity'; 6 | 7 | var tests = [{ 8 | args: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855'], 9 | formattedArgs: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855'], 10 | result: true, 11 | formattedResult: true, 12 | call: 'shh_'+ method 13 | }]; 14 | 15 | testMethod.runTests('shh', method, tests); 16 | 17 | -------------------------------------------------------------------------------- /test/web3.shh.methods.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var assert = chai.assert; 3 | var Web3 = require('../index.js'); 4 | var web3 = new Web3(); 5 | var u = require('./helpers/test.utils.js'); 6 | 7 | describe('web3.shh', function() { 8 | describe('methods', function() { 9 | u.methodExists(web3.shh, 'post'); 10 | u.methodExists(web3.shh, 'newIdentity'); 11 | u.methodExists(web3.shh, 'hasIdentity'); 12 | u.methodExists(web3.shh, 'newGroup'); 13 | u.methodExists(web3.shh, 'addToGroup'); 14 | u.methodExists(web3.shh, 'filter'); 15 | }); 16 | }); 17 | 18 | -------------------------------------------------------------------------------- /test/web3.shh.post.js: -------------------------------------------------------------------------------- 1 | var chai = require('chai'); 2 | var Web3 = require('../index'); 3 | var web3 = new Web3(); 4 | var testMethod = require('./helpers/test.method.js'); 5 | 6 | var method = 'post'; 7 | 8 | var tests = [{ 9 | args: [{ 10 | from: '0x123123123', 11 | topics: ['hello_world'], 12 | payload: web3.toHex('12345'), 13 | ttl: 100, 14 | workToProve: 101 15 | }], 16 | formattedArgs: [{ 17 | from: '0x123123123', 18 | topics: [web3.fromAscii('hello_world')], 19 | payload: web3.toHex('12345'), 20 | ttl: web3.toHex('100'), 21 | workToProve: web3.toHex('101'), 22 | priority: '0x0' 23 | }], 24 | result: true, 25 | formattedResult: true, 26 | call: 'shh_'+ method 27 | }, { 28 | args: [{ 29 | from: '0x21312', 30 | topics: ['hello_world'], 31 | payload: '0x12345', 32 | ttl: 0x100, 33 | workToProve: 0x101, 34 | priority: 0x15 35 | }], 36 | formattedArgs: [{ 37 | from: '0x21312', 38 | topics: [web3.fromAscii('hello_world')], 39 | payload: '0x12345', 40 | ttl: '0x100', 41 | workToProve: '0x101', 42 | priority: '0x15' 43 | }], 44 | result: true, 45 | formattedResult: true, 46 | call: 'shh_'+ method 47 | }]; 48 | 49 | testMethod.runTests('shh', method, tests); 50 | 51 | -------------------------------------------------------------------------------- /utils.js: -------------------------------------------------------------------------------- 1 | var utils = require('./lib/utils/utils'); 2 | 3 | module.exports = utils; 4 | --------------------------------------------------------------------------------