Bedrock Ledger Agent
A bedrock module for the creation and management of Web Ledger Agents. The Web Ledger ecosystem consists of Ledger Agents, Ledger Nodes, Ledgers, Blocks, and Events.
The HTTP API
- GET /ledger-agents
- Get a list of all ledger agents
 
- POST /ledger-agents?owner={OWNER_ID}
- Create a new ledger agent
 
- GET /ledger-agent/{AGENT_ID}
- Get status information on a particular ledger agent
 
- POST /ledger-agent/{AGENT_ID}/config
- Add a new configuration
 
- POST /ledger-agent/{AGENT_ID}/operations
- Add a new operation
 
- GET /ledger-agent/{AGENT_ID}/events?id=EVENT_ID
- Get an existing event
 
- GET /ledger-agent/{AGENT_ID}/blocks?id=BLOCK_ID
- Get an existing block
 
- GET /ledger-agent/{AGENT_ID}/query
- Query the current state of an object in the system
 
The Ledger Agent API
- Ledger Agent API
- api.add(actor, ledgerNodeId, options, (err, ledgerAgent))
- api.get(actor, agentId, options, (err, ledgerAgent))
- api.remove(actor, agentId, options, callback(err))
- api.getAgentIterator(actor, options, callback(err, iterator))
 
Quick Examples
npm install bedrock-ledger-agent
const agent = require('bedrock-ledger-agent');
const actor = 'admin';
const agentId = 'https://example.com/ledger-agents/eb8c22dc';
const options = {};
agent.get(actor, agentId, options, (err, ledgerAgent) => {
  ledgerAgent.node.events.add( /* new ledger event details go here */);
    /* ... do other operations on the ledger */
  });
});
Configuration
For documentation on configuration, see config.js.
Ledger Agent API
Add a Ledger Agent
Create a new ledger agent given a set of options. If a ledgerNodeId is
provided, a new ledger agent will be created to connect to an
existing ledger. If a ledgerConfiguration is specified in the options,
a new ledger and corresponding ledger node will be created, ignoring
any specified ledgerNodeId.
- actor - the actor performing the action.
- ledgerNodeId - the ID for the ledger node to connect to.
- options - a set of options used when creating the agent.
- ledgerConfiguration - the configuration for the ledger.
- genesis - if true, create an entirely new genesis ledger (default: false).
- storage - the storage subsystem for the ledger (default: 'mongodb').
- public - if false, only the actor should be able to access the created ledger, if true, anyone can access (default: false).
 
- callback(err, ledger) - the callback to call when finished.
- err - An Error if an error occurred, null otherwise
- ledgerAgent - the ledger agent associated with the agent.
 
const ledgerConfiguration = {
  '@context': 'https://w3id.org/webledger/v1',
  type: 'WebLedgerConfiguration',
  ledger: 'did:v1:eb8c22dc-bde6-4315-92e2-59bd3f3c7d59',
  consensusMethod: 'UnilateralConsensus2017'
  ledgerConfigurationValidator: [{
    type: 'SignatureValidator2017',
    validatorFilter: [{
      type: 'ValidatorFilterByType',
      validatorFilterByType: ['WebLedgerConfiguration']
    }],
    approvedSigner: [
      'did:v1:53ebca61-5687-4558-b90a-03167e4c2838/keys/144'
    ],
    minimumSignaturesRequired: 1
  }],
  operationValidator: [{
    type: 'SignatureValidator2017',
    validatorFilter: [{
      type: 'ValidatorFilterByType',
      validatorFilterByType: ['CreateWebLedgerRecord']
    }],
    approvedSigner: [
      'did:v1:53ebca61-5687-4558-b90a-03167e4c2838/keys/144'
    ],
    minimumSignaturesRequired: 1
  }],
  proof: {
    type: 'RsaSignature2018',
    created: '2017-10-24T05:33:31Z',
    creator: 'did:v1:53ebca61-5687-4558-b90a-03167e4c2838/keys/144',
    domain: 'example.com',
    jws: 'eyiOiJJ0eXAK...EjXkgFWFO'
  }
};
const options = {
  ledgerConfiguration,
  genesis: true
};
agent.add(actor, null, options, (err, ledgerAgent) => {
  if(err) {
    throw new Error('Failed to create ledger agent:', err);
  }
  console.log('Ledger agent created:', ledgerAgent.id);
});
Get a Specific Ledger Agent
Gets a ledger agent given an agentId and a set of options.
- actor - the actor performing the action.
- agentId - the URI of the agent.
- options - a set of options used when creating the agent.
- callback(err, ledgerAgent) - the callback to call when finished.
- err - An Error if an error occurred, null otherwise
- ledgerAgent - A ledger agent that can be used to instruct the ledger node to perform certain actions.
 
const actor = 'admin';
const agentId = 'https://example.com/ledger-agents/eb8c22dc';
const options = {};
agent.get(actor, agentId, options, (err, ledgerAgent) => {
  if(err) {
    throw new Error('Failed to get ledger agent:', err);
  }
  console.log('Ledger agent retrieved', ledgerAgent.id);
});
Remove a Ledger Agent
Remove an existing ledger agent given an agentId and a set of options.
- actor - the actor performing the action.
- agentId - the URI of the agent.
- options - a set of options used when removing the agent.
- callback(err) - the callback to call when finished.
- err - An Error if an error occurred, null otherwise
 
const agentId = 'https://example.com/ledger-agents/eb8c22dc';
const options = {};
agent.remove(actor, agentId, options, err => {
  if(err) {
    throw new Error('Failed to remove ledger agent:', err);
  }
  console.log('Ledger agent removed.');
});
Iterate Through All Ledger Agents
Gets an iterator that will iterate over all ledger agents in the system. The iterator will return a ledger agent which can be used to operate on the corresponding ledger node.
- actor - the actor performing the action.
- options - a set of options to use when retrieving the list.
- callback(err, iterator) - the callback to call when finished.
- err - An Error if an error occurred, null otherwise
- iterator - An iterator that returns a list of ledger agents.
 
const actor = 'admin';
const options = {};
bedrockagent.getagentIterator(actor, options, (err, iterator) => {
  if(err) {
    throw new Error('Failed to fetch iterator for ledger agents:', err);
  }
  for(const ledgerAgent of iterator) {
    console.log('Ledger agent:',  ledgerAgent.id);
  }
});