https://bitcointalksearch.org/topic/m.5500225http://arstechnica.com/security/2014/03/critical-crypto-bug-leaves-linux-hundreds-of-apps-open-to-eavesdropping/The above describe real world security fails. Critical that we make sure no such thing ever happens.
the problem is that protocols of gen1 coins are pretty complicated, leaving lots of room for errors:
https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_Calls_listhttps://en.bitcoin.it/wiki/Raw_TransactionsI am designing things to minimize changes needed to add support for another BTC (or even LTC) fork. However, since I am utilizing some advanced features, it is not clear which coins actually support what is needed. One major task that really is the thing that creates the most value is to simply install the daemon for as many coins as possible (in order of importance) and make sure it supports the required low level functions. A desktop with a few terabytes and good bandwidth is all that is needed.
Once we have someone that has dozens of daemons to test things with, we will need to make some small tools for him to be able to easily test if the required functions are there. It took me a while to figure out how to properly create 2 of 3 multisig accts, not to mention just making a rawtransaction. Whoever signs up for being the tool maker, I will PM the reference src needed to get started.
Ultimately, we will have the following topology:
We are currently working on the code for the three gateway servers. All relevant transactions will leave a record in blockchain using AM. So, we need somebody to monitor all the relevant AM's and create a "block explorer" equivalent. This will allow not only us to debug things, but it will create the transparency needed for a trustless system. Whoever signs up to do the website for this, I will PM the internal AM codes. For now, I will assume that Evil Bob wont be able to directly communicate with the gateway servers as they will only accept connections from the 100 guardians.
This means all inputs to the gateways are via AM. At first, I had a lot of client visible calls, but in the interest of simplicity, I reduced to down to just 2 for sending data to gateway and 1 for receiving data back:
#define GET_COINDEPOSIT_ADDRESS 'g'
#define BIND_DEPOSIT_ADDRESS 'b'
#define SET_COINWITHDRAW_ADDRESS 'w'
I expanded GET_COINDEPOSIT_ADDRESS to include the ability to set the withdraw address, so SET_COINWITHDRAW_ADDRESS is only needed to change the withdraw address, but for most people this will be rare. The most common use case is that the client software sends a GET_COINDEPOSIT_ADDRESS with their acct # and withdraw address. They then poll all the AM's for a BIND_DEPOSIT_ADDRESS AM to find out what their deposit address is.
After the wallet addresses are linked to account, everything is designed to be transparent. just send coin to the deposit address and it appears in the AE. just transfer from AE to original issuer (or gateway ID) and it appears in the coin wallet. I tried to achieve Apple level usability so as long as the GUI makes the address binding process as simple as the balance/finance pages on the centralized exchanges, nobody should get confused.
I had to put in a workaround due to the fact that assets do not have fractions at this point. Not sure if this will ever change, so any deposit that isnt a round number will get issued milliALT (or microBTC) for the fraction. I am hoping that assets will support fractions, so this is just a temporary workaround. When we can denominate AE bids in terms of other assets, we will be able to put in a bid of .001 ALT for 1 milliALT and this would allow people to easily convert their millis (and micros) to the full unit asset.
Now the ability to set the withdraw address is definitely an attack vector. Imagine if someone is able to change the wallet address where your withdrawals go to. We need to make sure we identify all attack vectors and really pound on the system to make sure we are not vulnerable. I think looking at the prior security incidents we can create a list of potential attack vectors and a test plan based on them. I need somebody to take charge of this as I will have blind spots on attack vectors on my design. I imagine we will need to use test programs that create AM's en masse to make sure Evil Bob wont succeed.
Finally, if anybody can figure out how to add an optional "comment" field to the transferAsset API
http://wiki.nxtcrypto.org/wiki/Nxt_API#Transfer_asset I will be able to implement a AE level atomic exchange between any two assets. It will require a private prearranged trade, but for large direct exchanges I dont think this is a barrier. As soon as the gateway is secure, assets are basically 1:1 for the real thing.
I am not familiar with everyone's skill set, so I am hoping that you will all self select tasks from the list and we can coordinate and clarify things on this thread.
a) massive installs and tests of bitcoin forks
b) tool maker
c) transaction explorer
d) attack vectors and Evil Bob attack programs
e) adding "comment" support to core
James
P.S. doing a dogecoind -reindex took a long time, but the unconfirming tx is gone and all three are in sync, so we now have a functional trio ready for testing. I havent verified
https://github.com/jl777/multigateway/blob/master/get_dogeaddr.c is up to date, so maybe someone can do that?