
Eosjs
General purpose library for the EOS blockchain.
Usage (read-only)
Eos = require('eosjs')
let eos = Eos.Testnet()
eos.getBlock()
eos.getBlock(1).then(result => {console.log(result)})
eos.getBlock({block_num_or_id: 1}).then(result => console.log(result))
callback = (err, res) => {err ? console.error(err) : console.log(res)}
eos.getBlock(1, callback)
eos.getBlock({block_num_or_id: 1}, callback)
eos.getInfo({}).then(result => {console.log(result)})
API methods and documentation are generated from:
Configuration
Eos = require('eosjs')
config = {
keyProvider: ['PrivateKeys...'],
httpEndpoint: 'http://127.0.0.1:8888',
mockTransactions: () => 'pass',
transactionHeaders: (expireInSeconds, callback) => {
callback(null, headers)
},
expireInSeconds: 60,
broadcast: true,
debug: false,
sign: true
}
eos = Eos.Localnet(config)
-
mockTransactions
(optional)
pass
- do not broadcast, always pretend that the transaction workedfail
- do not broadcast, pretend the transaction failednull|undefined
- broadcast as usual
-
transactionHeaders
(optional) - manually calculate transaction header. This
may be provided so eosjs does not need to make header related API calls to
eosd. This callback is called for every transaction.
Headers are documented here eosjs-api#headers.
Options
Options may be provided immediately after parameters.
Example: eos.transfer(params, options)
options = {
broadcast: true,
sign: true,
authorization: null
}
- authorization
{array<auth>|auth}
- identifies the
signing account and permission typically in a multi-sig
configuration. Authorization may be a string formatted as
account@permission
or an object<{actor: account, permission}>
.
- If missing default authorizations will be calculated.
- If provided additional authorizations will not be added.
- Sorting is always performed (by account name).
Usage (read/write)
If you use the Testnet, you'll need to replace the private key in keyProvider.
Eos = require('eosjs')
eos = Eos.Localnet({keyProvider: '5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'})
eos.transfer()
options = {broadcast: false}
eos.transfer({from: 'inita', to: 'initb', quantity: '1 EOS', memo: ''}, options)
eos.transfer('inita', 'initb', '2 EOS', 'memo', options)
eos.transfer('inita', 'initb', '1 EOS', '', false)
Read-write API methods and documentation are generated from this schema.
For more advanced signing, see keyProvider
in
eosjs-keygen or
unit test.
Shorthand
Shorthand is available for some types such as Asset and Authority.
For example:
- deposit:
'1 EOS'
is shorthand for 1.0000 EOS
- owner:
'EOS6MRy..'
is shorthand for {threshold: 1, keys: [key: 'EOS6MRy..', weight: 1]}
- recovery:
inita
or inita@active
is shorthand
{{threshold: 1, accounts: [..actor: inita, permission: active, weight: 1]}}
inita@other
would replace the permission active
with other
Eos = require('eosjs')
initaPrivate = '5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'
initaPublic = 'EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV'
keyProvider = initaPrivate
eos = Eos.Localnet({keyProvider})
eos.newaccount({
creator: 'inita',
name: 'mynewacct',
owner: initaPublic,
active: initaPublic,
recovery: 'inita'
})
Contract
Deploy a smart contract.
The setcode
command accepts WASM text and converts this to binary before
signing and broadcasting. For this, the Binaryen library is used. Because
this is a large library it is not included in eosjs
by default.
Add binaryen to your project:
npm i binaryen
Import and include the library when you configure Eos:
binaryen = require('binaryen')
eos = Eos.Testnet({..., binaryen})
Complete example:
Eos = require('eosjs')
let {ecc} = Eos.modules
initaPrivate = '5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'
currencyPrivate = ecc.seedPrivate('currency')
currencyPublic = ecc.privateToPublic(currencyPrivate)
keyProvider = [initaPrivate, currencyPrivate]
binaryen = require('binaryen')
eos = Eos.Localnet({keyProvider, binaryen})
eos.newaccount({
creator: 'inita',
name: 'currency',
owner: currencyPublic,
active: currencyPublic,
recovery: 'inita'
})
contractDir = `${process.env.HOME}/eosio/dawn3/build/contracts/currency`
wast = fs.readFileSync(`${contractDir}/currency.wast`)
abi = fs.readFileSync(`${contractDir}/currency.abi`)
eos.setcode('currency', 0, 0, wast)
eos.setabi('currency', JSON.parse(abi))
currency = null
eos.contract('currency').then(contract => currency = contract)
currency.issue('inita', '1000.0000 CUR', {authorization: 'currency'})
Atomic Operations
Blockchain level atomic operations. All will pass or fail.
Eos = require('eosjs')
keyProvider = [
'5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3',
Eos.modules.ecc.seedPrivate('currency')
]
eos = Eos.Localnet({keyProvider})
eos.transaction(eos =>
{
eos.transfer('inita', 'initb', '1 EOS', '')
eos.transfer('inita', 'initc', '1 EOS', '')
}
)
eos.transaction('currency', currency => {
currency.transfer('inita', 'initb', '1 CUR', '')
})
eos.transaction(['currency', 'eosio'], ({currency, eosio}) => {
currency.transfer('inita', 'initb', '1 CUR', '')
eosio.transfer('inita', 'initb', '1 EOS', '')
})
eos.contract('currency').then(currency => {
currency.transaction(cur => {
cur.transfer('inita', 'initb', '1 CUR', '')
cur.transfer('initb', 'initc', '1 CUR', '')
})
currency.transfer('inita', 'initb', '1 CUR', '')
})
Usage (manual)
A manual transaction provides for more flexibility.
Eos = require('eosjs')
eos = Eos.Localnet({keyProvider: '5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'})
eos.transaction({
actions: [
{
account: 'eosio',
name: 'transfer',
authorization: [{
actor: 'inita',
permission: 'active'
}],
data: {
from: 'inita',
to: 'initb',
quantity: '7 EOS',
memo: ''
}
}
]
})
Development
From time-to-time the eosjs and eosd binary format will change between releases
so you may need to start eosd
with the --skip-transaction-signatures
parameter
to get your transactions to pass.
Note, package.json
has a "main" pointing to ./lib
. The ./lib
folder is for
es2015 code built in a separate step. If your changing and testing code,
import from ./src
instead.
Eos = require('./src')
Use Node v8+ to package-lock.json
.
Related Libraries
These libraries are exported from eosjs
or may be used separately.
var {api, ecc, json, Fcbuffer, format} = Eos.modules
Browser
git clone https://github.com/EOSIO/eosjs.git
cd eosjs
npm install
npm run build
<script src="eos.js"></script>
<script>
var eos = Eos.Testnet()
</script>
Environment
Node 6+ and browser (browserify, webpack, etc)
React Native should work, create an issue if you find a bug.