Here is a block diagram of the current design.
Here's a brief description of each element:
client program | written by the user; authenticates to market, uploads agent, provides UI and communicates with agent. |
client library | provides services to client program, handles networking and cryptography |
messaging | provides storage and sequencing of message being sent between the client, the agent, and the agent runtime; uses the database for stable storage |
database | PostgresSQL server; provides stable storage to the messaging module; stores information on the current status and history of all market-related values and statistics, including prices, trading volumes, and agent holdings |
market engine | standalone program; runs between "turns" of the market; determines which buy and sell orders are matched and at what price; determines dividends and interest payments due; maintains database information regarding market statistics, agent holdings, and history |
ML runtime | supports execution of the agent runtime (which is written in ML); provides a gateway from the agent runtime to external functions such as the messaging module, the database, and the market engine |
agent runtime | accepts and validates uploaded agents; provides an interpreter or compiler for the agent programming language; sequences the execution of the agent programs and the market engine; limits and accounts for resource usage by agents; written in ML |
agent program | behaves as an actor in the market, issuing buy and sell orders and executing strategies to maximize income; communicates with client program; written in the agent programming language |