Portfolio Planner

sequenceDiagram
  title subscribe and rebalance
  autonumber

  actor trader as trader
webUI
wallet box rgb(187, 45, 64) Agoric participant manager as portfolio
manager participant portfolio as trader
portfolio end participant EE EE -->> manager: rpc.subscribe(all block events) loop recover by polling balances EE -->> portfolio: rpc.queryBalances(portfolio$N) end %% Notation: ->> for initial message, -->> for consequences trader ->> manager: open($5000, default-goal) par initial funds manager -->> EE: vstorageAppend(portfolios, "portfolio1") EE -->> portfolio: vstorageGet(portfolio1 address) EE -->> EE: add portfolio1 address to event filter manager ->> portfolio: bank.Send(portfolio1, $5000) end loop inbound funds on portfolio$N trigger rebalance portfolio -->> EE: event(bank.Send, portfolio$N, $unknown) EE -->> portfolio: rpc.queryBalances(portfolio$N) EE -->> portfolio: vstorageGet(portfolio$N, goals) EE -->> manager: rebalanceTx(portfolio$N, next-goal
[{src: portfolio$N, dst: LCAorch$N, amt: $5000},
...goal-steps]) manager -->> portfolio: rebalance(steps) end

Node.js and yarn per agoric-sdk Prerequisites.

  1. Install dependencies:
yarn install
  1. Optionally run a local Docker version of the planner's dependencies:
yarn start:deps
yarn dev

This starts the development server with hot reloading.

yarn test

Environment variables:

  • AGORIC_NET: agoric.net subdomain for requesting URL path /network-config to identify chainName/rpcAddrs/etc. (main)
  • MNEMONIC: For the private key used to sign transactions
  • SPECTRUM_API_URL: URL for the Spectrum API (https://pools-api.spectrumnodes.com)
  • SPECTRUM_API_TIMEOUT: Milliseconds to wait for each Spectrum request (10000 = 10 seconds)
  • SPECTRUM_API_RETRIES: Retry count for Spectrum requests (3)
  • DOTENV: Path to environment file containing defaults of above (.env)

Apache-2.0