# User Guide All information for developers using `ethjs-provider-signer` should consult this document. ## Install ``` npm install --save ethjs-provider-signer ``` ## Usage ```js const SignerProvider = require('ethjs-provider-signer'); const sign = require('ethjs-signer').sign; const Eth = require('ethjs-query'); const provider = new SignerProvider('https://ropsten.infura.io', { signTransaction: (rawTx, cb) => cb(null, sign(rawTx, '0x...privateKey...')), }); const eth = new Eth(provider); eth.sendTransaction({ from: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', gas: 300000, data: '0x...', }, cb); // results null 0x... (transaction hash) ``` ## API Design ### constructor [index.js:ethjs-provider-signer](../../../blob/master/src/index.js "Source code on GitHub") Intakes a `provider` URL specified as a string, and an options object where the `privateKey` method is specified. **Parameters** - `provider` **String** the URL path to your local Http RPC enabled Ethereum node (e.g. `http://localhost:8545`) or a service node system like [Infura.io](http://infura.io) (e.g. `http://ropsten.infura.io`). - `options` **Object** the options object where the `signTransaction` method and `timeout` property is specified. Example options **Object**: ```js const options = { signTransaction: (rawTx, cb) => { if (rawTx.from === '0x...') { cb(null, sign(rawTx, '0x...privateKey...')); } else { cb('some error'); } }, timeout: 400, }; ``` Result `SignerProvider` **Object**. ```js const SignerProvider = require('ethjs-provider-signer'); const Eth = require('ethjs-query'); const eth = new Eth(new SignerProvider('http://ropsten.infura.io', { signTransaction: (rawTx, cb) => cb(null, SignerProvider.sign(rawTx, '0x...privateKey...')), })); eth.sendTransaction({ from: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', gas: 300000, data: '0x...', }, cb); // results null 0x... (transaction hash) ``` ## Browser Builds `ethjs` provides production distributions for all of its modules that are ready for use in the browser right away. Simply include either `dist/ethjs-provider-signer.js` or `dist/ethjs-provider-signer.min.js` directly into an HTML file to start using this module. Note, an `SignerProvider` object is made available globally. ```html ``` Note, even though `ethjs` should have transformed and polyfilled most of the requirements to run this module across most modern browsers. You may want to look at an additional polyfill for extra support. Use a polyfill service such as `Polyfill.io` to ensure complete cross-browser support: https://polyfill.io/ ## Webpack Figures ``` Hash: f8ea69e4b882307e0d88 Version: webpack 2.1.0-beta.15 Time: 144ms Asset Size Chunks Chunk Names ethjs-provider-signer.js 7.99 kB 0 [emitted] main ethjs-provider-signer.js.map 9.27 kB 0 [emitted] main [0] ./lib/index.js 2.45 kB {0} [built] [3] multi main 28 bytes {0} [built] + 2 hidden modules Asset Size Chunks Chunk Names ethjs-provider-signer.min.js 3.42 kB 0 [emitted] main [0] ./lib/index.js 2.45 kB {0} [built] [3] 1ms -> factory:16ms building:38ms = 55ms [3] multi main 28 bytes {0} [built] factory:0ms building:1ms = 1ms + 2 hidden modules ``` ## Other Awesome Modules, Tools and Frameworks - [web3.js](https://github.com/ethereum/web3.js) -- the original Ethereum swiss army knife **Ethereum Foundation** - [ethereumjs](https://github.com/ethereumjs) -- critical ethereumjs infrastructure **Ethereum Foundation** - [browser-solidity](https://ethereum.github.io/browser-solidity) -- an in browser Solidity IDE **Ethereum Foundation** - [wafr](https://github.com/silentcicero/wafr) -- a super simple Solidity testing framework - [truffle](https://github.com/ConsenSys/truffle) -- a solidity/js dApp framework - [embark](https://github.com/iurimatias/embark-framework) -- a solidity/js dApp framework - [dapple](https://github.com/nexusdev/dapple) -- a solidity dApp framework - [chaitherium](https://github.com/SafeMarket/chaithereum) -- a JS web3 unit testing framework - [contest](https://github.com/DigixGlobal/contest) -- a JS testing framework for contracts ## Our Relationship with Ethereum & EthereumJS We would like to mention that we are not in any way affiliated with the Ethereum Foundation or `ethereumjs`. However, we love the work they do and work with them often to make Ethereum great! Our aim is to support the Ethereum ecosystem with a policy of diversity, modularity, simplicity, transparency, clarity, optimization and extensibility. Many of our modules use code from `web3.js` and the `ethereumjs-` repositories. We thank the authors where we can in the relevant repositories. We use their code carefully, and make sure all test coverage is ported over and where possible, expanded on.