1.15.1 • Published 7 months ago
coopjs v1.15.1
coopJS
CoopJS is universal core library for cooperatives
It is based on a singleton model that accepts a configuration and provides access to one or more blockchains and contracts.
Installation
yarn add coopjs>
Create a chainsMain.ts file with the following content:
import { ChainsSingleton } from 'coopjs'
import config from './config'
const instance = new ChainsSingleton()
instance.init(config)
export default instance
Config example:
export default {
chains: [
{
name: 'AXON',
rpcEndpoints: [
{
protocol: 'https',
host: 'api.samplesite.com',
port: 443,
},
],
explorerApiUrl: 'https://explorer.samplesite.com',
},
],
ual: {
rootChain: 'AXON',
},
tableCodeConfig: {
core: 'unicore',
staker: 'staker',
p2p: 'p2p',
reg: 'registrator',
part: 'part',
},
}
Usage
Just import chainsMain.ts
and call needed methods.
import { makePublicKeyByMnemonic } from 'unicore'
import Chains from '~/chainsMain'
const mnemonic = '...some mnemonic 12 words...'
// Convert mnemonic to public key string (EOS...)
const publicKey = await makePublicKeyByMnemonic(mnemonic)
// You can get root chain
const rootChain = Chains.getRootChain()
// Or by name
const eywaChain = Chains.getChainByName('EYWA')
// Get account name by publicKey
const {account_names: [account]} = await rootChain.readApi.getKeyAccounts(publicKey)
// Get account stats by eosjs-api
const accountStats = await rootChain.readApi.getAccount(account)
// Get global eosio data
const eosioGlobalData = await rootChain.eosioContract.getGlobalData()
// Get account partner data
const partnerData = await rootChain.partnersContract.getAccountPartner(account)
Additional contracts
You can use your own contracts.
Example:
Create eosioContract.ts:
import {
BaseContract,
ReadApi,
TableCodeConfig,
} from 'unicore'
interface EosioGlobalData {
base_per_transaction_net_usage: number
context_free_discount_net_usage_den: number
}
class EosioContract extends BaseContract {
constructor(api: ReadApi, tableCodeConfig: TableCodeConfig) {
super(api, tableCodeConfig, 'eosio')
}
getGlobalData(): Promise<EosioGlobalData> {
return this.getSingleTableRow<EosioGlobalData>({
table: 'global',
})
}
}
export default EosioContract
And use it:
import Chains from '~/chainsMain'
import EosioContract from '~/eosioContract'
const rootChain = Chains.getRootChain()
const eosioContract = rootChain.applyContract(EosioContract)
const data = await eosioContract.getGlobalData()
1.15.1
7 months ago