Bitcoin Forum
May 27, 2024, 12:50:32 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 ... 112 »
461  Local / Other languages/locations / Re: Eesti on: June 09, 2013, 03:54:30 PM
Hey Estonians, I'm doing a lecture this week in Kaunas, Lithuania: https://www.facebook.com/events/589384777760219/?ref=notif&notif_t=plan_user_joined
462  Local / Polski / Re: Polski! on: June 09, 2013, 03:53:03 PM
Hey, if anyone is nearby to Kaunas, Lithuania this week, I'll do a lecture there:

https://www.facebook.com/events/589384777760219/?ref=notif&notif_t=plan_user_joined

Let me know if you want to speak also about Bitcoin.
463  Local / Other languages/locations / Re: Lietuviai / Lithuania on: June 09, 2013, 03:51:29 PM
Hey, I'll do an event here this week:

https://www.facebook.com/events/589384777760219/?ref=notif&notif_t=plan_user_joined

If anyone will come along we can add you as a speaker too. Would be good to have some locals speaking too.
464  Bitcoin / Development & Technical Discussion / Re: Need C/C++ code for brain wallet function: any suggestions? on: June 04, 2013, 09:42:44 AM
http://libbitcoin.dyne.org/doc/crypto.html#deterministic-wallets

Python bindings too (see main page).
465  Bitcoin / Wallet software / Re: libbitcoin on: June 03, 2013, 10:56:03 PM
I think the Raspberry Pi uses the ARM processor. If you manage to get libbitcoin compiled and running on there, I'll happily add you a remove(tx_hash) method.

SQL is too slow when validating the blocks. Loading the entire blockchain into SQL will take a very long time. However there's a ready made schema there for you if you like.

libbitcoin uses a blockchain interface with different backends. As long as you implement the interface, you should be fine. If you're not too worried about validating blocks, then it should be quite easy (a week(end) of work).

I should comment that part. There's lots of comments in the API, but less so in the deeper parts of the internal machinery. I will get around to that.

You need to close the database handle before writing to it from an external context. That's dangerous otherwise. There should be a single environment open with LevelDB, and you don't want other async writes to conflict while you're doing stuff to the DB.

Finding unspent outputs means doing a linear scan through every output and seeing which ones do not have a corresponding spend entry. The comments for what the tables (called databases in LevelDB) do is in leveldb_blockchain.hpp
466  Bitcoin / Wallet software / Re: libbitcoin on: June 03, 2013, 06:04:41 PM
Yeah you can do that if you rebuild the database. That means creating a new database (see examples/initchain.cpp), then importing the old blocks into the new one. However block headers are only 80 bytes so you should keep those. In Bitcoin, this is what pruning outputs means (libbitcoin by default doesn't do that). I personally believe that disk space is not a big deal (current unmodified chain is 15 Gb). I'm more worried about fetch speed (not writes) and scalability.

I had a PostgreSQL database in the beginning (hence the bitcoin.sql file in the repo) but eventually moved to bdb. The postgres backend became unmaintained, the API changed a lot and it fell out of development before I dropped it entirely. SQL is too slow for blockchains.

There is a method to delete from the blockchain directly, but I haven't exposed that. It's used for blockchain reorgs. You can use that same code, but make sure you stop the blockchain object before modifying the database. You can then reopen it after:

Code:
leveldb_blockchain* chain = new leveldb_blockchain(pool);
chain->start(dbpath, blockchain_started);
// ... do stuff
// stop/join threadpools using the blockchain.
chain->stop();
delete chain;
// open database, delete whatever you want.
leveldb_blockchain* chain = new leveldb_blockchain(pool);
chain->start(dbpath, blockchain_started);
// continue from where you left off...

something like that.

see the method called "end_slice"

https://github.com/spesmilo/libbitcoin/blob/master/src/blockchain/leveldb/leveldb_chain_keeper.cpp

It's deleting a bunch of blocks from the end of the blockchain.

Also `bool leveldb_chain_keeper::clear_transaction_data(leveldb_transaction_batch& batch, const transaction_type& remove_tx)' (same file) might interest you too. It's deleting specific transactions from the database.
467  Bitcoin / Wallet software / Re: libbitcoin on: June 03, 2013, 12:37:31 PM
fullnode example using the python bindings:

https://gitorious.org/libbitcoin-bindings/libbitcoin-bindings/blobs/master/tests/fullnode.py

also if you expose libbitcoin through an RPC interface like Apache Thrift, and publish new confirmed blocks and new validated unconfirmed txs using ZeroMQ, then you get a nice piece of server middleware:

https://github.com/genjix/qlayer/tree/master/src

I've made this before in C++: https://github.com/genjix/query but I think it'd better be served being done in Python.

Also if you have an bunch of dumb slaves with their own blockchain, and they just synchronise with the master (see https://github.com/genjix/slave ) then it's a really fast way to serve the blockchain to tons of people. Since everything runs in its own process too, it's resilient and stable (parts can go offline and everything still functions). On the front you have a load balancer selecting which slave to distribute requests to.

We are porting this to a Python libbitcoin and Twisted (or maybe gevent) architecture. Not sure if we'll stick with Thrift/ZeroMQ.

Code:
import sys

from bitcoin import threadpool, hosts, handshake, network, protocol, session
from bitcoin import leveldb_blockchain, poller, transaction_pool, create_session_params
from bitcoin import hash_transaction
import time

def print_block(block):
    time.ctime(block.timestamp), block.merkle.encode('hex')

class fullnode(object):
    def __init__(self):
        self._net_pool = threadpool(1)
        self._disk_pool = threadpool(1)
        self._mem_pool = threadpool(1)
        self._hosts = hosts(self._net_pool)
        self._handshake = handshake(self._net_pool)
        self._network = network(self._net_pool)
        self._protocol = protocol(self._net_pool,
                                  self._hosts,
                                  self._handshake,
                                  self._network)
        self._chain = leveldb_blockchain(self._disk_pool)
        self._poller = poller(self._mem_pool, self._chain)
        self._txpool = transaction_pool(self._mem_pool, self._chain)
        pars = create_session_params(self._handshake,
     self._protocol,
     self._chain,
     self._poller,
     self._txpool)
        self._session = session(self._net_pool, pars)
        print "[fullnode] ok"

    def start(self):
        self._protocol.subscribe_channel(self.monitor_tx)
        self._chain.start('database', self.on_chain_start)
        self._chain.subscribe_reorganize(self.on_reorganize)
        self._txpool.start()
        self._session.start(self.on_session_start)
        print "[fullnode.start] ok"

    def stop(self):
        self._session.stop(self.on_session_stop)
        self._net_pool.stop()
        self._disk_pool.stop()
        self._mem_pool.stop()
        self._net_pool.join()
        self._disk_pool.join()
        self._mem_pool.join()
        self._chain.stop()
        print "[fullnode.stop] ok"

    def on_chain_start(self, ec):
        print "[fullnode.chain] started", ec

    def on_session_stop(self, ec):
        print "[fullnode.session] stopped", ec

    def on_session_start(self, ec):
        print "[fullnode.session] started", ec
        if ec:
            self.stop()
            sys.exit(1)

    def on_reorganize(self, ec, height, arrivals, replaced):
        print '[fullnode.reorganize]', height, str(ec), len(arrivals), len(replaced)
        if len(arrivals):
            print ' arrival', print_block(arrivals[0])
        if len(list2):
            print ' replaced', print_block(arrivals[1])
        self._chain.subscribe_reorganize(self.on_reorganize)

    def monitor_tx(self, node):
        print "(fullnode.tx)", node
        node.subscribe_transaction(lambda ec, tx: self.recv_tx(node, tx, ec))
        self._protocol.subscribe_channel(self.monitor_tx)

    def handle_confirm(self, ec):
        print "(fullnode.store) confirm", ec

    def recv_tx(self, node, tx, ec):
        print "(fullnode.recv_tx)", ec, tx
        if ec:
            print "error", ec
            return
        print ' *', len(tx.inputs), len(tx.outputs)
        self._txpool.store(tx, self.handle_confirm, lambda _ec, u: self.new_unconfirm_valid_tx(node, tx, u, _ec))
        node.subscribe_transaction(lambda _ec, _tx: self.recv_tx(node, _tx, _ec))

    def new_unconfirm_valid_tx(self, node, tx, unconfirmed, ec):
        print "(fullnode.valid_tx)", ec, tx, unconfirmed
        tx_hash = hash_transaction(tx)
        if ec:
            print "Error", ec
        else:
            print "Accepted transaction"
            print unconfirmed.__class__
            if not unconfirmed.empty():
               print "Unconfirmed"
               for idx in unconfirmed:
                   print ' ', idx
            print tx_hash


if __name__ == '__main__':
    app = fullnode()
    app.start()
    raw_input()
    app.stop()
 
468  Bitcoin / Wallet software / Re: libbitcoin on: June 03, 2013, 12:31:35 PM
is there any sample code demonstrating this? (Just to save me some time.)

I can promise I will put it to good use.


not for multisig. there is sample code for normal transactions: https://github.com/genjix/subvertx/blob/master/src/mktx.cpp

let me know if you have questions: amir@unsystem.net
469  Bitcoin / Wallet software / Re: libbitcoin on: June 03, 2013, 09:12:39 AM
Yes it can.

You create a transaction as you would with an output sending to a script hash address. You broadcast it to the network. To verify it was sent, you might listen to see if nodes respond back with an inventory and if not resend the transaction within a certain time. Then to release the funds, you'd all need to sign a transaction according to its rules.
470  Bitcoin / Wallet software / Re: libbitcoin on: June 02, 2013, 09:39:26 AM
We now have experimental Python bindings thanks to Pablo Martin (caedes)!

https://gitorious.org/libbitcoin-bindings/libbitcoin-bindings

Type "make compile" to compile them.

Full node example:

https://gitorious.org/libbitcoin-bindings/libbitcoin-bindings/blobs/master/tests/fullnode.py
471  Bitcoin / Wallet software / Re: libbitcoin on: June 01, 2013, 10:01:02 PM
Correct.

Also you need to run:

$ ./initchain database/

to initialize the blockchain.

Also if you want to full blockchain then it's available at: http://46.4.92.107/database.tar.bz2
472  Bitcoin / Bitcoin Discussion / Re: Matonis: "I am electing to take a brief break from commenting on this" on: June 01, 2013, 07:07:53 PM
He thinks he can do more good for the world by staying in the party. Maybe he has too much to lose and is willing to compromise over that.
473  Local / Other languages/locations / Re: Lietuviai / Lithuania on: May 29, 2013, 05:51:56 PM
I'm in Kaunas: amir@unsystem.net
474  Bitcoin / Project Development / Re: [WANTED] Wallet developer(s) on: May 20, 2013, 12:44:05 PM
I'll help out with this. Give me an email: amir@unsystem.net - send me a proposal for your thoughts and ideas.

My project: http://libbitcoin.dyne.org - I also did lots of work on Electrum, reworked the server and designed the lite GUI: http://electrum.org/media/litegui2.png
475  Economy / Service Discussion / Re: removed on: May 20, 2013, 12:13:15 PM
This post is by Donald. This whole thing caused him a lot of stress and paranoia.
476  Bitcoin / Bitcoin Discussion / Re: Putting a UK group together on: May 19, 2013, 04:43:21 PM
Give me a shout. I'm in London: amir@unsystem.net
477  Bitcoin / Press / Re: 2013-05-18 RT News (TV) - New segment, mostly a new interview with Amir Taaki on: May 19, 2013, 01:44:17 PM
Squatting is not illegal in the UK. Squatting commercial properties is fine. It's the police that are breaking the law. I've seen them do it many times against other people with no recourse against them.

And no, I won't stop talking about Bitcoin or my views to anyone who asks. Otherwise Bitcoin will become co-opted. The personal computer revolution of the 70s was hijacked in a similar way. The people who built the early technology failed to speak up, and the movement became co-opted by corporations. I could maybe buy the argument we should play it safe when Bitcoin was small, but not anymore. Everyone knows it exists. The highest echelons of government are inviting us to give presentations about Bitcoin to them (see http://www.ft.com/cms/s/2/42ca6762-bbfc-11e2-82df-00144feab7de.html#axzz2TGGzzaez ). Now is the time to push our message loudly. Bitcoin is a revolution in finance that undermines the whole industry. We are not aiming to make banking more efficient - we want to get rid of them. If you want to lie or say anything opposite then you are already co-opted and working against Bitcoin. Don't end the FED, bypass the FED. Real change comes from bottom up.

If you're trying to convince people, then you won't do that by dressing the same as every other banker on TV and saying Bitcoin is this new safe payments option. You have to be true to yourself. To speak with passion about things you feel, and tell people how it actually is. I don't buy this talk of hiding your true thoughts and feelings. Maybe you lose some votes, but you also gain the trust of the true people out there who are able to see you are a real person speaking truth, not a diplomat in a suit. I get emails from people reaching out to me from the darkness, and thanking me for my appearances. People see I'm carrying a message from the heart.

When I met Birgitta Jonsdottir (Icelandic politician), she was totally messy with torn clothes. I asked her doesn't she need to put on a show and dress nicely to win votes. She told me that's absolute rubbish. Real support is created by being open as a person, and not hiding who you are. And she has strong support globally because she's such a cool person that people trust her. She talks about things personal to herself. It comes from her heart.

That's my aim with unSYSTEM: http://unsystem.net - I want to make a conference which shows Bitcoin as cultural movement. Not a conference which is giving facts and info, but something which people feel and intuitively understand.

Nothing will slow Bitcoin's adoption now. It will grow regardless of what people say. The technology is so strong that it will win out by itself. If not Bitcoin, then another cryptocurrency. The idea is here to stay. What is dangerous is how it will grow. If Bitcoin grows completely in white market, becomes totally regulated and everything then we lose any power that we gained with Bitcoin. We have to stress and force its growth in the right direction otherwise the movement will become hijacked and amount to nothing useful whatsoever.

You know sometimes I go to these hackerspaces, and I see people working with technology, electronics, programming, industry, ... and I see powerful guys which can topple states or delete entire industries. Instead they waste their skill making pointless toys like moving cat ears. I want nothing to do with them. They are a waste of space and total zombies. You have such a big power and then use it to make toys instead of tools for people. The reason we have the internet now, and the reason it's so great is because the guys who made the internet imbued it with their ethics and morals. The internet could've turned out very differently. Instead we have an amazing world-changing tool for humanity. We have co-opted mercenary programmers making proprietary crap that goes into a corporate blackholes. They rationalise destruction of the world as saying they need to pay bills to look after their kids and wife. And loads of zombies do the same helping empower states and overly powerful corporations to oppress people. They're idiots, and if you have this amazing skill then you should be carrying the torch of the same scientists and technologists before you who created all this wealth for everyone. What are you doing with your life otherwise? Making money and getting along? Come on. Waste of space.

http://en.wikipedia.org/wiki/Community_Memory
478  Bitcoin / Wallet software / Re: libbitcoin on: May 09, 2013, 12:13:57 PM
Lots of new things coming. I'm at a basic milestone where I'm content with the overall internal architecture of the library now.

https://github.com/spesmilo/libbitcoin/commits/master

Next steps is Python bindings, and a blockchain query API. The Python bindings were done before but were experimental. We had some issues with asynchronous calls and the GIL. I'm thinking to simply turn all async calls into sync blocking ones for Python anyway (keep it simple).

The query layer is something really nice:
https://github.com/genjix/query-layer
(see the tutorial.py)
You can move around and examine it using logical Python constructs. I want to expand upon this and also give access to new blocks and verified transactions in the memory pool. Then create an Electrum server protocol implementation chained to this.

Also subvertx (command line tools for Bitcoin using libbitcoin) is a bit out of date and not actively developed. I would like to take that to something serious too but it needs time (if someone wants to volunteer, this is a cool project) to firstly create how the tools should look and then implement them. I can help someone with that if they know C++.
https://github.com/genjix/subvertx
https://bitcointalk.org/index.php?topic=50721.0

Finally I'm working on an Android wallet. It's not using libbitcoin currently, but eventually that will be needed in the future.

There's some other various small tools I've made too. One is a fast-monitor tool which sits in the Bitcoin network and looks at transaction outputs in new blocks and unconfirmed transactions for an address so it can tell a website of a new deposit. The tool doesn't validate the new blocks or transactions and is only meant to be a lightweight thing. I don't see it having too many uses except where a website has TONS of Bitcoin addresses and can't afford to poll the balance for all of them or something.
479  Economy / Service Discussion / Re: Coinlab are sneaky bastards, investors behind Bitcoinica on: May 06, 2013, 10:13:51 AM
BTW, I understand what some of you are going through. My father is nearly 70, and just lost all his money to property investments that never got built. The person responsible took lots of money from many people and ran away. He has nothing left anymore and cannot pay his mortgage on his home. He worked hard his whole life, and now is bust at an age where he cannot work. Now he wants to run off to a small remaining plot of land he has in Iran in some village and live out the rest of his days. He never had a boss and installed a hard work ethic in me and honest morals. We hadn't been speaking for many years before this because he never understood what I was about (why I preferred to write opensource for free instead of make money and get a degree).
480  Economy / Service Discussion / Re: Coinlab are sneaky bastards, investors behind Bitcoinica on: May 05, 2013, 08:03:50 PM
My explanation is to read my full post instead of taking snippets out of context.
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 ... 112 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!