| .. | ||
| contract | ||
| format | ||
| local | ||
| rpc | ||
| subscriptions | ||
| transport | ||
| util | ||
| api.js | ||
| api.spec.js | ||
| index.js | ||
| package.json | ||
| README.md | ||
ethapi-js
A thin, fast, low-level Promise-based wrapper around the Ethereum APIs.
contributing
Clone the repo and install dependencies via npm install. Tests can be executed via
- npm run testOnce(100% covered unit tests)
- npm run testE2E(E2E against a running RPC-enabled testnet Parity/Geth instance,- parity --testnetand for WebScokets,- geth --testnet --ws --wsorigins '*' --rpc)
- setting the environment DEBUG=truewill display the RPC POST bodies and responses on E2E tests
installation
Install the package with npm install --save ethapi-js from the npm registry ethapi-js
usage
initialisation
// import the actual EthApi class
import EthApi from 'ethapi-js';
// do the setup
const transport = new EthApi.Transport.Http('http://localhost:8545');  // or .Ws('ws://localhost:8546')
const ethapi = new EthApi(transport);
You will require native Promises and fetch support (latest browsers only), they can be utilised by
import 'isomorphic-fetch';
import es6Promise from 'es6-promise';
es6Promise.polyfill();
making calls
perform a call
ethapi.eth
  .coinbase()
  .then((coinbase) => {
    console.log(`The coinbase is ${coinbase}`);
  });
multiple promises
Promise
  .all([
    ethapi.eth.coinbase(),
    ethapi.net.listening()
  ])
  .then(([coinbase, listening]) => {
    // do stuff here
  });
chaining promises
ethapi.eth
  .newFilter({...})
  .then((filterId) => ethapi.eth.getFilterChanges(filterId))
  .then((changes) => {
    console.log(changes);
  });
contracts
attach contract
const abi = [{ name: 'callMe', inputs: [{ type: 'bool', ...}, { type: 'string', ...}]}, ...abi...];
const contract = new ethapi.newContract(abi);
deploy
contract
  .deploy('0xc0de', [params], 'superPassword')
  .then((address) => {
    console.log(`the contract was deployed at ${address}`);
  });
attach a contract at address
// via the constructor & .at function
const contract = api.newContract(abi).at('0xa9280...7347b');
// or on an already initialised contract
contract.at('0xa9280...7347b');
// perform calls here
find & call a function
contract.named
  .callMe
  .call({ gas: 21000 }, [true, 'someString']) // or estimateGas or sendTransaction
  .then((result) => {
    console.log(`the result was ${result}`);
  });
parse events from transaction receipt
contract
  .parseTransactionEvents(txReceipt)
  .then((receipt) => {
    receipt.logs.forEach((log) => {
      console.log('log parameters', log.params);
    });
  });
apis
APIs implement the calls as exposed in the Ethcore JSON Ethereum RPC definitions. Mapping follows the naming conventions of the originals, i.e. eth_call becomes eth.call, personal_accounts becomes personal.accounts, etc.
- ethapi.db
- ethapi.eth
- ethapi.parity
- ethapi.net
- ethapi.personal
- ethapi.shh
- ethapi.signer
- ethapi.trace
- ethapi.web3
As a verification step, all exposed interfaces are tested for existing and pointing to the correct endpoints by using the generated interfaces from the above repo.