Pages:
Author

Topic: Gocoin - totally different bitcoin client with deterministic cold wallet - page 5. (Read 38577 times)

legendary
Activity: 2053
Merit: 1356
aka tonikt
So back to work and currently I'm busy testing 1.5.0 before tagging it.
There have been loads of changes.
Among them headers-first syncing with support for BIP-130.

I also added plenty of stuff related to the memory pool monitoring and calculation of proper fees - it's becoming more and more useful/needed.

So now you can e.g. see stats like this:


From the wallet's side, new transactions are by default created with a non-final sequence number (by default it's current unix time value), so their fee can be increased later (see BIP125)

I have not implemented BIP125 in at the node's memory pool yet.
I haven't seen many RBF transactions in the network, so I will just do it somewhere later, having more live stuff to test it against.

Same with Segregated Witness - I will wait for it to come live on the network and then add it to Gocoin.
legendary
Activity: 2053
Merit: 1356
aka tonikt
BTW, sorry for neglecting the development recently, but I've been traveling for awhile, mostly into places with shitty internet.

I'll be back home soon and I plan to work on headers-first syncing and segregated witness functionality, among others.

I've been also thinking on changing we web interface in a way that I can have the client node running on some VPS server while my wallet files would be fed to it from the browser (connecting there via sshd tunnel) whenever I need to check/fetch the balance.
During my travels I found it very inconvenient to re-synchronize the blockchain at my laptop's client, each time I was arriving at a new hotel (usually after a couple of days of no wifi access).
So I want to have a node running somewhere 24/7 but without the wallet files being stored there, as I don't like an idea that some Amazon or other company would be able to lurk at this data.

So stay tuned - Gocoin is not dead Wink
legendary
Activity: 2053
Merit: 1356
aka tonikt
Hi, do you have any idea how many running nodes currently live?
No idea.

But at least mine.
newbie
Activity: 1
Merit: 0
Despite of no update in this topic for almost a year, I want to assure that gocoin project is doing fine; being maintained and updated.

The last tagged version (1.2.0) already supports BIP66. Everything else is in the changelog file.
It's been my only bitcoin node for a long time so I can guarantee that it's fully functional and pretty cool. Smiley

Hi, do you have any idea how many running nodes currently live?
legendary
Activity: 2053
Merit: 1356
aka tonikt
Despite of no update in this topic for almost a year, I want to assure that gocoin project is doing fine; being maintained and updated.

The last tagged version (1.2.0) already supports BIP66. Everything else is in the changelog file.
It's been my only bitcoin node for a long time so I can guarantee that it's fully functional and pretty cool. Smiley
legendary
Activity: 2053
Merit: 1356
aka tonikt
Having compatibility with a known schema has the advantage having additional security if the wallet development abruptly disappears or some bugs appear making temporary unusable the software.
It is also more flexible if I could use for ex. elektrum and combining sometimes with gocoin just generating the seed containing my coins.
For example armory is a little bit heavy but I can generate a tree quickly from my seed with a brainwallet(for ex. brainwallet.org supports it), receive payments on the generated tree addresses and later I could import the seed in armory.
A different, new schema could have sense if presents some advantages which balances the lack of compatibility.

I have the wallet's type in the config file (so far only 1,2 and 3 are used) and I can add other algos easily.
I wouldn't mind adding new types (compatible with armory, electrum, or anything else), but the main problem is that none of it seems to be documented and there isn't really one established standard for it.
The HD wallets might be a good way to go on with a standard, though they don't seem to cover the calculation of the initial vectors from the seed password.

So it is an open topic and I think the software will eventually evolve to support other types of deterministic wallets, but I just don't want to add any new types without some strong user cases, because it would only create more mess.

But the code is open and fairly simple, so if anyone wants to put in his own method, just play with the function make_wallet(), in file gocoin/wallet/wallet.go
It is a dangerous place to play with, so feel free to post your changes here for an audit.
hero member
Activity: 504
Merit: 500
Just a question.
The password-seeding uses a known algorithm like that from elektrum or armory or it is an own schema ?
Thanks.

The default type 3 is my own schema. It goes like this:

Code:
seed_key = SHA256(SHA256(password)) /*the master seed*/
for n:=0; n  priv_key[n] = SHA256(SHA256(seed_key))
  seed_key = append(seed_key, byte(n))
}

Type 1 and 2 are also my own schemas, though they use different algos.
Thanks for the answer.
Having compatibility with a known schema has the advantage having additional security if the wallet development abruptly disappears or some bugs appear making temporary unusable the software.
It is also more flexible if I could use for ex. elektrum and combining sometimes with gocoin just generating the seed containing my coins.
For example armory is a little bit heavy but I can generate a tree quickly from my seed with a brainwallet(for ex. brainwallet.org supports it), receive payments on the generated tree addresses and later I could import the seed in armory.
A different, new schema could have sense if presents some advantages which balances the lack of compatibility.
legendary
Activity: 2053
Merit: 1356
aka tonikt
Just a question.
The password-seeding uses a known algorithm like that from elektrum or armory or it is an own schema ?
Thanks.

The default type 3 is my own schema. It goes like this:

Code:
seed_key = SHA256(SHA256(password)) /*the master seed*/
for n:=0; n  priv_key[n] = SHA256(SHA256(seed_key))
  seed_key = append(seed_key, byte(n))
}

Type 1 and 2 are also my own schemas, though they use different algos.
hero member
Activity: 504
Merit: 500
Just a question.
The password-seeding uses a known algorithm like that from elektrum or armory or it is an own schema ?
Thanks.
newbie
Activity: 23
Merit: 0
Ok thanks for helping me !
I'll checkout the tool and i let you know if there are problems.
i'll also check the ram settings.  Smiley
legendary
Activity: 2053
Merit: 1356
aka tonikt
Check out this tool: https://github.com/piotrnar/gocoin/blob/master/tools/bootdat_qt.go
Just tell it where is the gocoin's folder with the blockchain.dat + blockchain.new files and it will create the bootstrap.dat (in the current dir).

As for the memory consumption, I am aware of this issue. And that is why I have 12 GB on of RAM Tongue
I could try to tweak the garbage collector settings, but it will decrease performance in systems that have more memory.
You can actually play with the settings yourself - it is "-g" command line switch.
You can also try playing with "-m" and "-n".

Although, if you need the downloader only to produce the bootstrap.dat later, just start it with "-b" - that should help.
newbie
Activity: 23
Merit: 0
I need the bootstrap.dat function for creating my personal blockchian backups i'll really appreciate if you add this function.
Anyway i think the downloader needs a tweak because it uses way to much ram in my machine windows 7 64bits 4gb ram it makes the pc slow when the ram usage comes to 90%/95% . anyway the cpu usage is fine it's just 10%. Smiley (And yes i've compiled using the gcc in go)
Thanks in Advance
legendary
Activity: 2053
Merit: 1356
aka tonikt
as for the downloader producing the files for the bitcoin core.

what I can do quite easily is to add a command to write the current gocoin's block database as the bootstrap.dat file.
though, I don't know how much it would help you, since importing bootstrap.dat into bitcoin-qt is also quite painful.

playing with bitcoin-qt's chain/wallet state databases is just too much hassle for me - I won't do it, sorry.

anyway, if anyone would find such a feature (creating bootstrap.dat) useful, just let me know and I will add it.
legendary
Activity: 2053
Merit: 1356
aka tonikt
i'm asking if you can add to the downloader an function to select a different type of database.
sure I can.
the problem is that testing this would be very time consuming, so I am not very keen to start working on it, considering that it'd take lot of my time giving me back nothing I need myself.

but I will keep your request in mind and see what I can do.
cheers
newbie
Activity: 23
Merit: 0
hello piotr_n! Smiley
i've tried your gocoin client and works perfectly well.
i'm asking if you can add to the downloader an function to select a different type of database.
because i need to download the blockchian in the normal bitcoin format for creating  my bootstrap.dat files (also my normal bitcoin client is so slow , it does like a block per minute) also go coin i think is the only bitcoin client that have an downloader for the blockchian that i've found on the webs.
i'll really appreciate if you add this function to the downloader or creating a tool for that. Smiley
Thanks In Advance Cheesy
(sorry for my mispelling errors i'm not english)
legendary
Activity: 2053
Merit: 1356
aka tonikt
FYI, few days ago, after a longer period of testing, I released Gocoin version 1.0.0.

I have built binaries of this release for Windows and Linux. You can download them from here: https://sourceforge.net/projects/gocoin/files/?source=directory
Inside each archive there is a file with SHA-256 sums, signed with my bitcoin-otc PGP key.

The Linux execs require 64 bit OS.
Windows binaries require 64-bit platform for downloader in client, but the wallet and balio apps will also work on 32 bit systems.
If you need a binary for any other platform (OSX, FreeBSD, Linux i386, Linux ARM), let me know - I can build it for you.

When launching the client make sure to have the www/ folder in the place (it contains the WebUI app).

For the wallet there is an example config file (with all the config parameters are commented out).

Don't hesitate to give me a shout, if you'd experience any issues: [email protected]
legendary
Activity: 2053
Merit: 1356
aka tonikt
The new code seems quite stable already and soon I am going to merge unspent4 branch into the master.
It means that when you get it, it will have to rebuild your UTXO database, which may take up to one hour.

I could have put in a converter to speed up this process pretty much, but that will add an unnecessary code to the client, so I prefer not to.
The rebuilding of UTXO db is a one time operation and I just do not think it would be worth it.

This message is just a notice of my intent, and if you have any objections against what I am going to do, there is still time to raise them.
If you don't have any objections, just expect that at some time in a future (after you pull the most recent sources), your node may take up to an hour to launch for the first time.

Or if you prefer to get it over with now, checkout the unspent4 branch and build it - then starting the node will make then conversion for you already.
It doesn't remove unspent3 database, so after the conversion is done, you can still use the old gocoin node (tag 1.0.0rc7 or lower).
legendary
Activity: 2053
Merit: 1356
aka tonikt
sounds promising, I am interested in having gocoin running on a small 32 bit ARM hardware.
it was possible with original client, I gladly help with 32 bit experiments x86 / ARM.
free time shortage, but hopefully try something during the week.
best regards !
sure - it's always worth trying.
let me know if you needed any help.
and also how it went.

all I can say about 32-bit "incompatibility" is that when I build the node with 32-bit compiler and run it on my 64 bit windows, it crashes after awhile complaining something about memory allocation error.
but it does not seem to take more than 2GB of the system memory at any time, so that's kind of weird.
it may be only happening on windows - worth trying at a different OS.

also, in the testnet mode, it should work just fine on 32 bit OS.
the database isn't so big yet.
but who needs testnet mode for anything except testing.
sr. member
Activity: 259
Merit: 250
sounds promising, I am interested in having gocoin running on a small 32 bit ARM hardware.
it was possible with original client, I gladly help with 32 bit experiments x86 / ARM.
free time shortage, but hopefully try something during the week.
best regards !
legendary
Activity: 2053
Merit: 1356
aka tonikt
Update on the development.

I had said to myself that after I would have the current code running without any changes for like 2 weeks, then I would tag it as 1.0
And the problem is that I apparently don't have a patience for it - 2 weeks is just too long for me to not touch a code Smiley
So now I am already on 1.0.0-RC8, and again the code was hugely remade.

In rc8 I changed the format of UTXO database. Now it is kept in "gocoin/btcnet/unspent4/", while the old one was in unspent3.
The new format allowed me to further simplify the architecture, but also performs significantly better (e.g. the node starts faster).
But the most important thing is that it decreased memory consumption, from far over 2GB to slightly over 1GB. But it still does not work on 32-bit arch (too little memory space for Go framework, I guess).
Additionally the size of unspent4 folder is significantly lower, comparing to its predecessor.

I developed this version on a branch, because the new database format means that the node needs to rebuild the UTXO at the first launch.
It may take up to an hour, so I did not want to annoy anyone, especially when it wasn't all complete and stable yet.

But the current version seems to have all the old full functionality already.
If anyone would like to try it before I get to merge it with the master, to checkout the branch:
Code:
git checkout unspent4
...and then rebuild your binaries.

Any feedback welcome.

Oh, and there were plenty of changes since my last announcement on 0.9.13, though mostly of architecture / performance matter.
Not much visible on a user interface level, but really plenty of good stuff. As usually you can find a more detailed list in changelog.txt

Also, if you run it for the first time and have no fresh bitcoind to import your blocks from, make sure to try the downloader.
On my few yrs old i5 desktop PC, with 50Mb downlink, it fetches the current block chain (while building UTXO database) in about 90 minutes.
For comparison: on the same PC, bitcoin-qt needs like 6 hours to just re-index the chainstate (having the blocks on disk already).
Pages:
Jump to: