
Version | EOSIO/eosjs | Npm | EOSIO/eos | Docker Hub | Node |
---|
dawn4.1 | tag: 12.x.x | npm install eosjs (version 12) | tag: dawn-v4.1.0 | eosio/eos:20180519 | local docker |
dawn4 | tag: 11.x.x | npm install eosjs@dawn4 (version 11) | tag: dawn-v4.0.0 | eosio/eos:dawn-v4.0.0 | local docker |
DAWN-2018-04-23-ALPHA | tag: 9.x.x | npm install eosjs@dawn3 (version 9) | tag: DAWN-2018-04-23-ALPHA | eosio/eos:DAWN-2018-04-23-ALPHA | local docker |
dawn3 | tag: 8.x.x | npm install eosjs@8 (version 8) | tag: dawn-v3.0.0 | eosio/eos:dawn3x | local docker |
dawn2 | branch: dawn2 | npm install eosjs | branch: dawn-2.x | eosio/eos:dawn2x | local docker |
Eosjs
General purpose library for the EOS blockchain.
Usage (read-only)
Eos = require('eosjs')
eos = Eos.Localnet()
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
nodeos. 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 SYS', memo: ''}, options)
eos.transfer('inita', 'initb', '2 SYS', 'memo', options)
eos.transfer('inita', 'initb', '1 SYS', '', false)
Read-write API methods and documentation are generated from the eosio_system 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:
- stake_net_quantity:
'1 SYS'
is shorthand for 1.0000 SYS
- owner:
'EOS6MRy..'
is shorthand for {threshold: 1, keys: [key: 'EOS6MRy..', weight: 1]}
- active:
inita
or inita@active
is shorthand for
{{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.transaction(tr => {
tr.newaccount({
creator: 'inita',
'mycontract11',
owner: pubkey,
active: pubkey
})
tr.buyrambytes({
payer: 'inita',
receiver: 'mycontract11',
bytes: 8192
})
tr.delegatebw({
from: 'inita',
receiver: 'mycontract11',
stake_net_quantity: '100.0000 SYS',
stake_cpu_quantity: '100.0000 SYS',
transfer: 0
})
})
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@37.0.0
Although the EOS back-end does seek to be up-to-date and have
binaryen backwards compatibility, new versions of binaryen may be
problematic.
Import and include the library when you configure Eos:
binaryen = require('binaryen')
eos = Eos.Localnet({..., 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
})
wast = fs.readFileSync(`docker/contracts/eosio.token/eosio.token.wast`)
abi = fs.readFileSync(`docker/contracts/eosio.token/eosio.token.abi`)
eos.setcode('currency', 0, 0, wast)
eos.setabi('currency', JSON.parse(abi))
currency = null
eos.contract('currency').then(c => currency = c)
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 SYS', '')
eos.transfer('inita', 'initc', '1 SYS', '')
}
)
eos.transaction('currency', currency => {
currency.transfer('inita', 'initb', '1 CUR', '')
})
eos.transaction(['currency', 'eosio.token'], ({currency, eosio_token}) => {
currency.transfer('inita', 'initb', '1 CUR', '')
eosio_token.transfer('inita', 'initb', '1 SYS', '')
})
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.token',
name: 'transfer',
authorization: [{
actor: 'inita',
permission: 'active'
}],
data: {
from: 'inita',
to: 'initb',
quantity: '7 SYS',
memo: ''
}
}
]
})
Development
From time-to-time the eosjs and nodeos binary format will change between releases
so you may need to start nodeos
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')
eos = Eos.Localnet()
The eos
instance can provide more convenient serialization:
nonce = {value: '..'}
nonceBuffer = eos.fc.toBuffer('nonce', nonce)
assert.deepEqual(nonce, eos.fc.fromBuffer('nonce', nonceBuffer))
eos.contract('currency', (error, c) => currency = c)
issue = {to: 'inita', quantity: '1.0000 CUR', memo: 'memo'}
issueBuffer = currency.fc.toBuffer('issue', issue)
assert.deepEqual(issue, currency.fc.fromBuffer('issue', issueBuffer))
Use Node v8+ to package-lock.json
.
Related Libraries
These libraries are integrated into eosjs
seamlessly so you probably do not
need to use them directly. They are exported here giving more API access or
in some cases may be used standalone.
var {api, ecc, json, Fcbuffer, format} = Eos.modules
Browser
git clone https://github.com/EOSIO/eosjs.git
cd eosjs
npm install
npm run build_browser
<script src="eos.js"></script>
<script>
var eos = Eos.Testnet()
</script>
Environment
Node and browser (es2015)