First of all, I don't mean to implement interest in the same way
ripplepay does. As I've told you before, I wouldn't even have trust
lines nor currencies (the 3 letter tag), only currencies (each address
is one) and exchange rates (orders). That's what we have planed for freicoin,
maybe you can reuse somethign from our design in the makings.
> There are two possibilities:
>
> If you know what the time horizon for the loan is, you don't need an
> interest rate. You can just charge more for the credit.
>
> If you don't know what the time horizon for the loan is, charging interest
> breaks everything. For example, say someone owes you $10 at 15% APR. The
> Ripple network could either discharge this loan or pay you $12. Which would
>
> you prefer? Without knowing the time horizon, there is no way to know. Or
> say you could pay for a book either using $10 at 15% from one person or $9
> at 11% from another person. If you don't know which person is likely to pay
>
> you back first, how can you know which is the better deal?
You're only considering the use case of the payer paying at interest,
which I don't consider very important. Anyway, since you don't know the time
horizon, I would say a century would be a safe default.
Would many people pay anything at 1% interest for one century?
I don't think so, but what's the problem?
After all, the payer always choses the path, different clients can
have different settings depending on the user. But that's just about
defaults and clients, shouldn't be a concern for the server part.
> So with interest, you'd have to set time horizons on everything and you'd
> lose money if you guessed wrong. With a charge for the credit, you don't
> have to set time horizons on anything, but you can still lose money if you
> guess wrong and underprice or overvalue.
Without interest you're not taking time into account. Ripple as it is
cannot be used for p2p lending or implementing local demurrage
currencies, for example.
We plan to support both things in Freicoin.
> We plan to support charging interest through the contracts system, but it
> seems to me that it's a vastly inferior mechanism to simply charging for
> the extension of credit based on the expected time horizon. It's certainly
> easier than having to manually guess the time horizon for every single
> obligation and set it somehow.
Forget about time horizons and let's play with some use cases.
I'm assuming each address is a currency and each address has a fixed
interest/demurrage rate.
No I want to borrow 100 bitstampUSD at 5% interest.
I create a new account timonUSD5 with 5% interest.
I create an offer "100 bitstampUSD for timonUSD5".
You want to lend me those 100 usd, so you accept it.
I will have 100 bitstampUSD and you will have 100 timonUSD that grow
at 5%.
Now you set an offer "all my timonUSD5 for bitstampUSD at 1:1"
To pay you back, I only have to buy my IOUs back from you. The earlier
I buy them back, the less interest I pay.
Any problem with this so far?
Another use case, let's say I start a freicoin gateway. I create a new
account with the same demurrage Freicoin has, to be applied each 10
minutes.
Say someone has an offer "1000 timonFRC for 10 davidUSD"
That offer can be rippled without any problem, but there's two
possibilities here:
1) When the account making the offer has less than 1000 timonFRC, the
order gets unfunded and thus cancelled.
2) (The one that we've chosed for FRC) The amount of timonFRC in the
order is adjusted throughout time for demurage, but the rate
(100:1) remains constant.
Maybe there's another better way to do this within Ripple so that you
don't have to refactor the whole server, but I think this is certainly
the best thing for "ripplecoin".
We're still designing (Mark and I), but you can have a look at what we have
specified so far (sorry, still a little bit dirty):
https://docs.google.com/document/d/1nnul3oDO5z8sspWBKgTKKSjQ7dWoOqU4Pd8DILLmFN8
One of the things we don't have ready yet, but that I want to do since
quite a while is to support private transactions ala Ryan's two phase
commit, using the chain as commit method as default. Not only that, I
want atomic hybrid Ripple transactions with private and public parts
in it.
Feedback welcomed. I would also be pleased to help you integrate
whatever parts you find interesting into your own design however I
can. I want "full ripple" (as I see it idealized in my mind) to be in both PoW
chains and in ledger consensus. The closer both designs are, the more
easily inter-operable they will be. And the more synergies we can have.
I think Ripple could support interest and hybrid public/private
transactions like we want for Freicoin. You would need something
different from refHeight though, as ledgers don't tend to be 10 min
distanced of one another (by the way, we're going to change the
difficulty filter on Freicoin).
Feel free to ask anything about our design.