[Webfunds-users] router server API / Protocol idea

Vincent Youngs vincent@ricochet.net
Sat, 31 Mar 2001 09:12:15 -0800


There are some ideas I had before encountering Systemics that are similiar 
to theirs.  In fact, it was in my search for prior art related to my ideas that I 
found Systemics.  This is why I am so enthusiastic about the Systemics 
account server / exchange server - because I already had thought through 
the revolutionary potential of such a system, and was very happy to 
discover somebody was already implementing it.  I'd like to share my vision 
so you can see how similiar it is, and perhaps to think about how my idea 
of a router server might be implemented in the Systemics architecture.

Basically, my idea was to have account servers and exchange servers as 
separate off the shelf retail packages that would run on an ordinary server 
PC, and which would be modifiable for any financial instrument, currency, 
commodity, bonds, etc, with only a few user settings, no programming 
required.  So far, the same as Systemics.  I did not think through the idea 
of ricardian contracts at all as Systemics has done, and my idea of 
ensuring reliable instant clearing for exchange transactions was to have 
some kind of protocol between the exchange server and the account server 
where when a person entered an order on the exchange, the funds in the 
account server would be locked until the order was either executed or 
cancelled.  Systemics' solution to this problem is better than mine.  In my 
idea, any two account servers could be linked by an exchange server, or 
multiple exchange servers, without any involvement or even consent from 
the account server so long as they all obeyed the same protocol.  
(Systemics has already thought this through with the SOX protocol.)  So 
far, so good.

The next step in my thinking was to view account servers as nodes in a 
network, and exchange servers (trading exchanges) as links between 
nodes.  Because of the nature of trading exchanges, they provide 
maxiumum liquidity and convertibility between two instruments.  The more 
transaction volume on the exchange, the narrower the bid/ask spread, and 
the lower the cost of conversion between the two instruments.  Instant 
clearing will make this work even better.  So, an exchange server can be 
viewed simply as a link between two account servers.

An account server may be shares of stock, bonds, any commodity, 
currency, etc.  Also, there is no reason that shares of stock need to be in 
integer units.  Why not allow micropayments denominated in shares of 
stock?  Stock could be used as money this way.  Integer units of stock 
were necessary before computers to simplify dividend calculation, etc, but 
when a computer can automatically calculate dividends and credit 
accounts, then there is no reason an account couldn't have .00001 shares 
of stock, or spend the same.  What company wouldn't be pleased to have 
its stock circulating as money?  Liquidity is always an objective, and using 
stock as money would enhance liquidity.

By allowing micropayments of a wide variety of financial instruments, 
commodities, etc., this blurs the distinction between money and other 
financial instruments, and enhances liquidity throughout the system.  
Everything becomes indistinguishable from money and everything becomes 
usable as money.

So, in this network of account server nodes connected by exchange 
servers, the only thing that might distinguish a particular node as being 
"money" would be the number of other nodes that are connected to it via 
exchange servers, and the amount of transaction volume on the 
exchanges.  A dollar node, or an e-gold node, might be connected to 
thousands of other nodes (such as a node for every company's stock for 
instance).  A stock node might only be connected to a few nodes, such as 
a node for each currency which that stock is traded against.

This network of exchange has a robustness that exceeds the robustness 
of any particular currency or money.  Any form of money is just one node 
in a network where there are multiple paths to reach any node.  Therefore 
the failure of any particular money system is equivalent to the failure of a 
network node.  Just like the Internet, transactions will simply route around 
the failed node via a different path.

Now, this idea of a transaction network of connected nodes is getting 
closer and closer to being analogous to the Internet itself.  That's a clue: 
this network needs a router server.

The router server would be the final step in allowing anything to be used as 
money.  The router server would automatically route transactions from any 
node to any other node in the network, via the shortest path.  An Internet 
router keeps itself informed of the network topology and the cost, delay, or 
distance between other nodes in the network, and then it calculates the 
shortest route from this information.  In this transaction network, a router 
server could do something similiar.  It could keep itself informed of all 
account servers and all exchange servers, and the transaction fees 
charged by all account servers and exchange servers, and the current bid 
and ask prices posted on all exchange servers.  Then the router server 
could use this information to calculate the shortest path from any node to 
any other node.  The router server could then automatically execute the 
necessary transactions on exchange servers to move a specific amount of 
value from any source node to any destination node.

Here is an example of how this could work in practice to enable any node 
in the network to be used as money.  Suppose a man who lives in Ethiopia 
decides, for whatever reason, to keep all of his assets in the account 
server of a particular company's stock, call it XYZ company.  Maybe the 
man works for this company, or it is his favorite company, and he doesn't 
want to keep any of his assets in anything other than XYZ stock.  Fine, he 
can spend XYZ stock anywhere in the world, just like money, thanks to the 
router server.  He has a smart card and a contract with the router server.  
Say he is travelling in France, and he is shopping at a store, and for some 
reason this store only accepts payment in e-palladium, nothing else.  No 
problem, the man presents his smart card at the checkout counter and 
pays for his purchase in shares of XYZ.  The router server takes care of the 
rest.  The router server calculates the shortest network path to convert 
shares of XYZ into e-palladium, and the exact amount of shares of XYZ 
needed, and routes that transaction through a series of exchange servers 
and account servers to arrive at the e-palladium server used by the store in 
France.  The transaction could start first at the XYZ server, where the 
router server sells the correct amount of XYZ stock from the man's account 
on the XYZ stock / Ethiopian Birr exchange and puts it into a temporary 
account owned by the router on the Birr account server.  Then the router 
moves the Birr across a Birr / Dollar exchange server into a dollar 
denominated account server.  Then the router moves it across a dollar / e-
gold exchange server into an e-gold account.  Then the router moves it 
across an e-gold / palladium exchange server into an e-palladium account.  
Then it transfers the correct amount of e-palladium into the account of the 
store in France, the transaction clears, the clerk hands the man his smart 
card back, and the man walks out with the merchandise he has just 
purchased.

One problem with routing the transaction forward from the XYZ share server 
like this is the uncertainty in knowing exactly how many shares of XYZ to 
sell.  Although the router server can calculate a very good estimate, the 
bids and asks on some exchange servers may change by the time the 
transaction passes through them and the final amount of e-palladium at the 
end of the chain may be off a little bit from what was required.  The solution 
to this is to route the transaction backward as a debit, instead of forward 
as a credit.  The router server knows exactly how much e-palladium is 
needed (a debit amount of e-palladium), so it purchases the exact amount 
needed on the e-palladium / e-gold exchange.  Now the debit is on the e-
gold server, and again the router knows exactly how much e-gold is 
needed, so it purchases the exact amount of e-gold needed to clear the 
negative e-gold ballance on the e-gold / dollar server.  Then it clears the 
negative dollar balance by purchasing the exact amount of dollars needed 
on the dollar / Birr server.  Then it clears the negative Birr balance by 
selling the exact amount of shares of XYZ needed on the Birr / XYZ 
exchange.  Of course, most of these account servers will not allow 
negative balances.  That could be worked around by the smart card 
company itself keeping positive balances on major nodes and temporarily 
loaning from its own positive balances.

It is true that credit card companies already allow instant conversion 
between major currencies, and perhaps CashBox will allow something like 
this,but the solutions offered by these companies are limited to the 
markets that they themselves are willing to make.  Such plans only allow 
spends from such limited nodes as these companies decide to hard-wire 
support for.  The router idea on the other hand does not require any hard-
wiring of specific nodes, and allows spends from any node to any other 
node.  No matter how remote any node is, every node is an integrated part 
of the money system.  As soon as somebody licenses another account 
server and issues their own financial instrument, and that instrument is 
linked to the network by at least one exchange server, it is immediately 
welcomed into the worldwide network and recognized as another form of 
money, spendable anywhere.

At this early stage, the router server is not necessary, and routing between 
different account servers will be done by hand, using the trader wallet and 
the exchange server.  However, it would be really cool if the programmers 
working at Systemics would put whatever is needed into the SOX protocol 
that would be needed to support router servers.

~ Vincent