Bitcoin Forum
November 05, 2024, 11:39:40 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 [4] 5 6 7 8 9 10 »  All
  Print  
Author Topic: Gocoin - totally different bitcoin client with deterministic cold wallet  (Read 38566 times)
Tovadnok
Newbie
*
Offline Offline

Activity: 44
Merit: 0


View Profile
March 29, 2014, 09:53:40 PM
 #61

Meaningful commit messages would be great!
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
March 30, 2014, 07:55:04 AM
Last edit: March 30, 2014, 08:13:17 AM by piotr_n
 #62

So my implementation has not much to do with bitcoind, but instead it is focused on fulfilling my own personal needs, which might (by a chance) be similar with your needs

What do you mean ?
I said it below, in the same post: a possibility (though back then rather a limitation:)) to disable relying transactions, convenient cold wallets, network bandwidth usage limit.

On top of that I can add: quickly switching between wallets, coin control (when bitcoind didn't have it back then), web interface (so I can operate/monitor my node via network), tuning to fastest peers (by periodically dropping the slowest one), mining pool stats... the list is long; whatever feature I found useful or even interesting during the last year - it's there.

For me as a developer it is also very important to be able to quickly rebuild a software for trying any change - bitcoind is a nightmare when it comes to that. Go is just so much more convenient and its code much smaller and readable than C++, though still performing quite similar.

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
April 10, 2014, 03:53:21 PM
Last edit: April 11, 2014, 01:44:44 PM by piotr_n
 #63

In case if anyone had wondered:
No - Gocoin isn't anyhow vulnerable to the heartbleed attack. Smiley

But mark my words: expect more of openssl shit hitting the fan in a future.
And in the meantime: better watch your money - Gocoin can help you with this.

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
April 13, 2014, 07:37:51 PM
Last edit: April 13, 2014, 08:43:20 PM by piotr_n
 #64

Another monthly update on the development.
The previous one was on 0.9.3 - now 0.9.7 is about to be released.

Among the changes there isn't really anything big, rather gadgets though a few useful ones, so I think I will just quote the change log:
Code:
0.9.7
* Wallets tab of WebUI has an option to move an empty address to UNUSED wallet
* A user can quickly switch wallet being at any tab of the WebUI, as well as to reload it
* SendTx tab of WebUI refreshed Address Book using Ajax and addrs.xml
* Fixes and additional test cases around parsing of alert messages
* Added unit tests for "sighash.json" from the satoshi's repo and some more unit test rework
* A link to the user manual (served at google sites) in the header of each WebUI page

0.9.6 - 2014-04-02
* Client has a hammering protection (bans peers that keep trying to reconnect)
* Miners tab of WebUI does not show crap anymore is the chain isn't up do date.
* MakeTx tab of WebUI calculates estimated transaction size after signed (assumes compressed keys)
* Downloader can work with testnet and got a fix around an empty peers db after the headers stage
* New function "tools/utils/fetchtx.go", to download raw tx data from other websites
* If neccessary, FetchBal and FetchTx try several websites to fetch a raw transaction data

0.9.5 - 2014-03-24
* "MakeTx" tab of WebUI automatically recalculates the payment values to mBTC (for verification)
* The downloader does not have a default seed node anymore (you need to find one by youself)
* Do not block connections from 129.132.230.70-100 anymore
* Some changes in wallet's decode transaction functionality to better deal with non stardard txs
* "wallet -d <txfile.txt>" ignores spaces, tabs and EOLs in the hexdump of the transaction

0.9.4 - 2014-03-20
* The default "FeePerByte" changed from 10 to 1 (like they have done it in the reference client)
* The "-d" option of the wallet can now proparly decode coinbase transactions
* The client can work with multisig address description JSON files (place them in "wallet/multisig")
* Having the files in "wallet/multisig", MakeTx tab of client's WebUI can now create "multi2sign.txt"
  ... for the wallet, even properly mixing inputs from different addresses and address types.
* For multisig payments, "payment.zip" from the client contains "multi2sign.txt" and "multi_pay_cmd"
* The wallet can now deal with mixed (multisig and regular) inputs

Actually looking for the JSON files in "wallet/multisig" (added in 0.9.4) is a good stuff - quite convenient way of preparing multisig transactions for spending.
If I'd only used it myself... Smiley But if you are into multisig, have a look at this - you won't regret, I promise.

From other things, there is an updated User Manual, which I have spent some time on today. I described the WebUI and the client's config file. I believe it covers now the most important things on how to use gocoin, but I am open for any suggestions. I mean, it's kind of hard to write a manual for something that you know everything about, because you built it. So if you had any questions that it doesn't cover, or some feedback about parts that are not clear, I'd be happy to address it.

Also, apparently somebody reads this topic, because even though I wasn't asking for it the mods gave me back my Gocoin article on our wiki.
So if you'd like to contribute into that article, feel free. Just don't delete it to replace it with your ads, please - this time I already know where to go Wink

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
blackvoice
Newbie
*
Offline Offline

Activity: 56
Merit: 0


View Profile
April 21, 2014, 08:22:50 AM
 #65

If anyone is interested in my original implementation of a bitcoin client, feel invited to try Gocoin.

You can find the official webpage of the project at: http://www.assets-otc.com/gocoin/ - there is the User Manual and a lot of other info.

The source code is available at GitHub: https://github.com/piotrnar/gocoin

There is also a wiki article: https://en.bitcoin.it/wiki/Gocoin (feel welcome to contribute to it)

I provide no binaries, but building the client using Go compiler is quite an easy operation and unlike other bitcoin clients this one builds in a second. Just follow the instructions from README.md


General info
  • The solution is fully functional, but I like working on it, so please keep in mind that the HEAD is a work in progress and will probably always be. The source code gets tagged regularly, so if anything does not work for you with the latest version, try the previous tag. The database format is not supposed to change.
  • For me it is far more convenient solution than a cold wallet based on satoshi client, because gocoin's wallet does not need a full copy of the blockchain in order to spend its coins.
  • It also works with testnet, so you would probably prefer to start your gocoin adventure from it (use "-t" switch at the command line, for both client and wallet).
  • You do not need the client in order to use the wallet. You can use use FetchBal tool to fetch the balance of the addresses you own (read more here).

Client (the online bitcoin node)
  • It is a console application, like bitcoind, but it does not have an RPC interface. Instead it provides a text command interface (TextUI) and a web interface (WebUI) by default available at http://localhost:8833/.
  • The blocks on your disk are compressed, which saves about 30% of space.
  • If you have an existing Bitcoin database in the default folder, it is able to import the blocks from it at the first start. To do it later, delete gocoin folder from your bitcoin's data folder. You can also have a look at the importblocks tool.
  • TextUI provides defrag command, that purges orphaned blocks from the database.
  • Make sure your PC's clock is set more or less accurately (few minutes difference should be fine).

Wallet (secure your money offline)
  • It is a separate app meant to be used as a deterministic cold wallet (on an offline PC), though if you don't mind the risks nothing can stop you from using it on the online PC.
  • It has very little system requirements and should even work on platforms like Raspberry Pi.
  • The wallet's security does not rely on any random number source.
  • It is console only and does not have any user interface. Any operations on the wallet are driven by command line switches, plus you can put some defaults in a config file.
  • The wallet's private key pool is based on a seed-password, so as long as you remember it you don't need any backups (some people call it a brain-wallet).
  • Since the seed-password is basically a straight forward private key of your coins, make sure that it is complex enough and that nobody is able to peek at it.
  • By default the wallet works with 50 deterministic addresses. If you need more, set keycnt parameter in wallet.cfg to the number you need.
  • In addition to the deterministic key pool, you can import private keys generated elsewhere (they need to be in the base58 format).
  • It supports Type-2 deterministic mode, that allows you to calculate further public keys without having an access to the seed password (see the tool type2determ).
  • From version 0.9.3 it supports multisig addresses
----------------
very nice conception

I will in it
Tovadnok
Newbie
*
Offline Offline

Activity: 44
Merit: 0


View Profile
May 09, 2014, 02:05:32 AM
 #66

Is it possible to spend an unconfirmed transaction?
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 09, 2014, 09:26:05 AM
 #67

Is it possible to spend an unconfirmed transaction?
Not in the current implementation - not without modifying the source code..

Unless it would be an unspent transaction that you made yourself, using gocoin.

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 10, 2014, 06:13:02 PM
 #68

Recently I have reorganized the entire repo quite seriously.
The latest tag is 0.9.13.
There should be some performance improvements, because I moved all the EC math to the internal lib, the one based on ported sipa's code (before only EC_Verify was handled by it).

I also added a support for the stealth addresses - feel free to check it out as well, it's a really cool feature:
http://www.assets-otc.com/gocoin/manual/stealth-addresses

As for the rest; kill me, but all I remember is that there were plenty of useful changes and the time was flying when I was making them... Tongue

Anyway, I think this code will soon become Gocoin 1.0.0 - finally.
But first I need to test it a bit more, because the recent changes were really huge.
Huge enough to frighten even me.
Still so far it looks well, but if anyone could help me by giving feedback on whether the latest code still works good enough for him, I will really appreciate it.
Just please don't rush it - let it work for at least a day, before saying that it's fine.

Also please be careful - there were changes everywhere, and that includes the wallet part.
Triple check your signed transaction, before broadcasting it, making sure that it actually does what you needed it to do.

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
genjix
Legendary
*
Offline Offline

Activity: 1232
Merit: 1076


View Profile
May 10, 2014, 07:57:48 PM
 #69

I tried to install snappy but the page doesn't exist:

https://code.google.com/p/snappy-go/snappy

piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 10, 2014, 08:01:30 PM
 #70

I tried to install snappy but the page doesn't exist:

https://code.google.com/p/snappy-go/snappy

code.google.com/p/snappy-go/snappy - it is some kind of weird URL that go uses to call mercurial.
I dont know how they do it, but it works.

Install Mercurial in your OS and then just execute:
Code:
go get code.google.com/p/snappy-go/snappy
It should call "hg" with a proper arguments, download the package and build it.

It works here.

Also, before "go get", you may want to set env variable GOPATH to point to some user folder (so you don't need a root access to store the files).

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
genjix
Legendary
*
Offline Offline

Activity: 1232
Merit: 1076


View Profile
May 11, 2014, 10:52:29 PM
 #71

Code:
gocoin@testnet:~$ ls src/code.google.com/p/
go.crypto  snappy-go
gocoin@testnet:~$ cd src/github.com/piotrnar/gocoin/
gocoin@testnet:~/src/github.com/piotrnar/gocoin$ cd downloader/
gocoin@testnet:~/src/github.com/piotrnar/gocoin/downloader$ ls
addr.go  blks.go  hdrs.go  main.go  netw.go  ping.go  README.md  stat.go  usif.go
gocoin@testnet:~/src/github.com/piotrnar/gocoin/downloader$ go build
# github.com/piotrnar/gocoin/secp256k1
../secp256k1/num.go:85: new(big.Int).SetUint64 undefined (type *big.Int has no field or method SetUint64)
../secp256k1/num.go:85: new(big.Int).And(&num.Int, new(big.Int).SetUint64(1 << bits - 1)).Uint64 undefined (type *big.Int has no field or method Uint64)
# github.com/piotrnar/gocoin/others/sys
../others/sys/stuff.go:119: undefined: debug.FreeOSMemory
# github.com/piotrnar/gocoin/qdb
../qdb/db.go:83: function ends without a return statement
../qdb/index_disk.go:58: function ends without a return statement
gocoin@testnet:~/src/github.com/piotrnar/gocoin/downloader$
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 11, 2014, 11:24:14 PM
 #72

Wtf?
Make sure you have relatively fresh version of go. I'd advise 1.2 at least, though I think you rather have something pre 1.0

I was doing many changes today - could have broken something. If so, I'll fix it tomorrow.
But i'm pretty sure the last tag should build well, with a proper compiler.

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
Tovadnok
Newbie
*
Offline Offline

Activity: 44
Merit: 0


View Profile
May 17, 2014, 02:18:52 PM
 #73

When building client or wallet:

membind.go:63: cannot use _Ctype_size_t(v.datlen) (type C.size_t) as type C.ulong in function argument
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 17, 2014, 02:30:07 PM
Last edit: May 17, 2014, 02:42:52 PM by piotr_n
 #74

When building client or wallet:

membind.go:63: cannot use _Ctype_size_t(v.datlen) (type C.size_t) as type C.ulong in function argument
Thanks for reporting.
It must be specific for your libc, I cannot reproduce it here.
But I've just committed a possible fix - can you try now, please?

Otherwise you can always build it by overwriting membind.go (in qdb) with the one from no_gcc folder.
You just won't be able to enjoy the recent mem usage optimizations, but should build flawlessly then.

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
Tovadnok
Newbie
*
Offline Offline

Activity: 44
Merit: 0


View Profile
May 17, 2014, 03:54:42 PM
Last edit: May 17, 2014, 04:09:37 PM by Tovadnok
 #75

When building client or wallet:

membind.go:63: cannot use _Ctype_size_t(v.datlen) (type C.size_t) as type C.ulong in function argument
Thanks for reporting.
It must be specific for your libc, I cannot reproduce it here.
But I've just committed a possible fix - can you try now, please?

Otherwise you can always build it by overwriting membind.go (in qdb) with the one from no_gcc folder.
You just won't be able to enjoy the recent mem usage optimizations, but should build flawlessly then.

Seems to compile now... Thanks
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 17, 2014, 03:55:11 PM
 #76

cheers

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
Tovadnok
Newbie
*
Offline Offline

Activity: 44
Merit: 0


View Profile
May 17, 2014, 04:24:12 PM
 #77

Do you have any plans to allow scripts in transactions?
piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 17, 2014, 04:28:42 PM
 #78

Do you have any plans to allow scripts in transactions?
I don't think I understand this question, so please precise.

But I have another answer to your previous question - times time a positive one Smiley

Is it possible to spend an unconfirmed transaction?
Not in the current implementation - not without modifying the source code..

Unless it would be an unspent transaction that you made yourself, using gocoin.
Actually, it is possible.
It just came to my mind.
The fetchbal tool - it can fetch unconfirmed balance.
And then, having your unconfirmed transaction in the balance folder, you can just use it on the wallet (it won't see a difference).

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
Tovadnok
Newbie
*
Offline Offline

Activity: 44
Merit: 0


View Profile
May 17, 2014, 04:37:46 PM
 #79

Do you have any plans to allow scripts in transactions?
I don't think I understand this question, so please precise.

But I have another answer to your previous question - times time a positive one Smiley

Is it possible to spend an unconfirmed transaction?
Not in the current implementation - not without modifying the source code..

Unless it would be an unspent transaction that you made yourself, using gocoin.
Actually, it is possible.
It just came to my mind.
The fetchbal tool - it can fetch unconfirmed balance.
And then, having your unconfirmed transaction in the balance folder, you can just use it on the wallet (it won't see a difference).

Thanks for clarifying regarding unconfirmed transactions.

What I meant about the scripts is to enable transactions that contain bitcoin scripts such as time constraints, and other bitcoin contracts as described here:
https://en.bitcoin.it/wiki/Contracts

piotr_n (OP)
Legendary
*
Offline Offline

Activity: 2055
Merit: 1359


aka tonikt


View Profile WWW
May 17, 2014, 04:48:44 PM
Last edit: May 17, 2014, 05:02:58 PM by piotr_n
 #80

Well, you can put any kind of scripts into the wallet's code, but without a specific application (a user case), I don't see how I could add anything more.
So far gocoin supports the following output scripts:
* P2KH address (a regular bitcoin address)
* P2SH address (that's for multisig)
* NULL output describing the next one's encrypted constant (for stealth payments)
* NULL output with an arbitrary data (e.g. to attach text messages to transactions)
Adding other kind of output scripts is not really a challenge, but I need a specific application for it, before I can put it in.

As from the node's side.
Gocoin node (unlike bitcoin-qt) does not split transactions into "standard" and "non-standard".
As long as the fee per byte is sufficient (plus some other rules are met), it will get routed, despite of the content of a script.

EDIT:
Personally I think that dividing transaction into "standard" and "non-standard" has been a really stupid idea and I just cannot believe that instead of abandoning it they are just adjusting the rules of the standardness - that's crazy! It would be nice though to measure txs by how much CPU power they require to get verified - and then check the fee not only against the size, but also against the CPU required. But that seems like a too much advanced solution for the mainstream - it will take them at least 5 years to find out that this is an idea worth exploring Wink

Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.
PGP fingerprint: AB9E A551 E262 A87A 13BB  9059 1BE7 B545 CDF3 FD0E
Pages: « 1 2 3 [4] 5 6 7 8 9 10 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!