@bitbollo Hi pebwindkraft in which section Andreas Antonopoulos explain how to program on the blockchain? His book gives an overview of how the bitcoin world "works", and has many examples on the data structures and how they interact. It is not a book "how to program the blockchain" btw: I like achow101's comment on this But it helps you to understand the detail and if something is unclear, you can even use it as a reference.
|
|
|
... Got any recommendations on reading up on DAGs in the context of cryptocurrencies? I've been reading the Byteball whitepaper lately and I'm not quite sure what to make of it.
no, just this currently very active thread: https://bitcointalk.org/index.php?topic=1177633.0 and the usual suspects via Google. I read the whitepaper like 2 years ago, and couldn't make up my mind. "I feel more comfortable in the bitcoin world" just saw this one as well: https://bitcointalk.org/index.php?topic=1504649.0
|
|
|
what do you mean? Where to get the most value by entering into the domain? Crypto currencies all have different flavours, from blockchain timing, over blockchain design up to smart contracts. I'd recommend starting with Bitcoin. Thats like a foundation to the many crypto currencies, and go step by step. Once you grasped it, and can't get enough , continue with "smart contracts" (yes, Ether is a possibility, also AEON, written in ERLANG), and then maybe have a look at DAGs. There is plenty of room in this space
|
|
|
<snip>
Because old clients will not receive transactions in the segwit transaction format. Segwit transactions will only be sent in response to a getdata for inv type MSG_WITNESS_TX. However old nodes will not have that inv type in their getdata messages, only MSG_TX, which indicates to segwit capable nodes to send the transaction in the legacy format. So legacy bitcoin nodes will receive the same data, except without the witness data at the end, correct? I think I finally understand why it's called a soft fork now, these legacy nodes are virtually untouched through segwit. Am I correct on this, or did I still get it wrong? ok, I got that, with the MSG_TX and Segwit tx will only be sent in response to getdata. I still have to get the full picture... Assume I have a segwit capable client, created a segwit tx, and push it into the network. Potentially an "old" full client can fetch the tx. If so, what is he doing: rejecting the transaction, cause he receives "zero" TX_IN_Count ? p.s.: looked up communication between nodes (here it is getheaders): https://bitcointalk.org/index.php?topic=1573616.0, looks like I need to dive deeper...
|
|
|
I can't get the details to understand how old clients work with segwit transactions. I find phrases like <old clients see segwit tx as "anyone can spend">. And then phrases like "old clients don't forward segwit tx" (cause they are invalid?). So as usual I take a look into the description: ( https://bitcoin.org/en/developer-reference#raw-transaction-format) Name Data Type Description version uint32_t Transaction version number tx_in count compactSize uint Number of inputs in this transaction. tx_in txIn Transaction inputs as outpoint data structure ->prev_out outpoint Previous outpoint, beginning with tx ID hash ... Signed SegWit tx are serialized in this way ( https://bitcoincore.org/en/segwit_wallet_dev/): nVersion|marker|flag|txins|txouts|witness|nLockTime
Format of nVersion, txins, txouts, and nLockTime are same as the original format The marker MUST be 0x00 The flag MUST be 0x01 ... Looking at the way an old client would receive data, he would get serialized data: nVersion | Marker | flag | txins ... 01000000 00 01 ... So the old client would interprete the nVersion code correctly, but then would get a "00" (the marker field) as the "tx_in count", trying to get the following "01" as the tx_in structure. This tx_in structure begins with an outpoint, that has a tx ID hash as first element. So the "01" and subsequent hex characters would build the TX ID Hash (32Bytes). I would think, that already the marker field ("00") would make the tx invalid for an old client (zero input not allowed?), and then the tx_in structure (and the tx ID hash field) is filled with "garbled" data. How can this segwit tx then be seen as transparent to the old client? Wouldn't the old client simply mark it as invalid? thx
|
|
|
plus, any real developer can secure a windows server, it takes work but same applies to securing a linux distro.
no - sorry, no. I think this is too easy. Forces me into another comment (rant? ): Windows 10 comes per default with "calling home" functionlaity, and you can de-activate it. Yes, but that's not my point. Also not the ongoing automatic "security" updates (which proofs, that software wasn't written correctly - and this is from professinal enterprise software developpers). Without wanting to go into real details and the overhowling long history of vulnarabilities in the operating system, you cannot trust closed source systems and drivers. You almost never have the source code to evaluate the possibly of hidden malfunctions. Compare this to Unix or xBSD, deep down into the kernel. Ahh, the kernel... the windoofs kernel integrates sooooo many functions and drivers, that the layer of rights can be easily violated with a single piece of software, and you don't know it. In Linux and xBSD and OSX the underlying OS has an onion type approach, for segregation of duties (best is OpenBSD IMHO). Whereas in older times it was annoying, that you got a blue screen, and had to restart your machine, nowadays it became a threat. And this threat became very much clear with the audio driver on HP systems. The audio driver logged each (cool, eh?) keystroke. Well, one might ask, why does an audio driver need to log each keystroke, but that's not the point where I want to go to. Fact is, this happens all the time, and imagine you are typing in your privkey or seed, and it is logged into a data structure, where you don't know what happens with it. Bitcoin is well enough known today, to store enourmos amounts of money... How can someone evaluate a closed source driver update (for sure only for security reasons)? What I try to say: Windows might be ok, as an operating system for companies and enterprises, cause they can afford to calculate the risk against the necessary security extensions. Same for professional or enterprise devs: how much additional effort do I need to take, to make it secure? This does not prevent developpers from providing bad code (as we have seen with many failing exchanges), due to financial constraints. My personal view is: to store values as little as your fiat wallet, any wallet/OS like breadwalet or airbitz or even online wallets. I think this is ok. In the northern hermisphere, most of us can carry the risk to loose 50 or 100 Euros/Dollars/Pounds in Bitcoin. But when it comes to values like 1000 or 10.000 ? Then you won't trust blindly the underlying system. You want to take precaucious measurements. And as a developper you would want to provide (hopefully security audited) code to the community - and not a quick and dirty assembled piece of software error prone for the next buffer overflows. ok, enough ranting around, let's go to work! It is better to start coding, and then improve, as to buid an entry barrier that would make people scary and avoid diving into the crypto space. So remains only my personal view, and is by no means inetnded to be offensive to anyone...
|
|
|
We need more programmers in this exciting crypto currency world - welcome! There is a common understanding, that you need to have 5000 working hours to become an expert. And in crypto currency world, it is not only about programming, also you need to understand the eco system and the security - it's all about money, right ? On programming: no matter what language you go, I recommend a short training course. There are many, many courses (coursera, udemy, ...) online, or you go to your local school and verify opportunities. It makes sense to have people to exchange with, that makes learning easier. On crypt currencies: professionals usually start with reading before coding. This would bring you immedeatly to bitcoin.org, to understand the eco system. Then you could read probably the online book (or buy it) from Andreas: "Mastering Bitcoin", here: http://chimera.labs.oreilly.com/books/1234000001802/ It is available in many languages. Also there is the very good post from Ken: http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.htmlOn youtube you find Bitcoin 101, which explains alot.
|
|
|
there is something really wrong with this post , and it starts with the header. Then there is lot of bla bla about a big team. And the impression is given, that there is lots of experience and knowledge behind. Just to finalize with "code = doc?". And a certain lazyness attitude. This is all fairly ok for a newbie. But doesn't match with the intro words. You can certainly get better answers, if you stay away from storytails, and get to the points immedeatly. Welcome to the crazy world of crypto currency. So you want to deep dive into crypto? With C# using a windows machine??? Go and get some professional equipment first (Mac, Unix, OpenBSD,...), we are talking security here. Yes, there are some Java libraries, python codes and more, when you dig through the forum. ------ if a 'ground-up' approach IS necessary: --------
So, if i do need to start doing this all without an api, where do i start? im sure i can dig through qt's source but wow... there is a LOT to look through. and ift his is the case, how are wallets created? are they even a thing or is it all a matter of just storing public and private keys, decrypting, deserializing responses from the nodes, and handling however i like?
Professionals usually start with reading before coding. This would bring you immedeatly to bitcoin.org, to understand the eco system (and it's code). Then you could read probably the online book (or buy it) from Andreas: "Mastering Bitcoin", here: http://chimera.labs.oreilly.com/books/1234000001802/I recommend especially the chapter 4 on wallets. Also there is the very good post from Ken: http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.htmlOn youtube you find Bitcoin 101, which explains alot. what IS a wallet? does the blockchain/nodes/miners/etc... even recognize wallets or is it a construct we use for organizing the addresses like an account? is there an API for communicating with the nodes? how does something actually get sent to the blockchain? simple post request/response over http? im lost here. A wallet is in its simplest form just your priv key and some code to generate a transaction. With this privkey you can sign transactions, and send it to the network. For sure, today's wallets provide more functionality. But this is the basics. So you have a key store and some code. Miners or blockchain do not see, what wallet was used to generate a transaction. To integrate a tx in a block, the tx must follow specific rules with a layout of data, and the wallet software would help to do that. This question shows some missing knowledge on the basics of the network. Review the reading links Yup, and then there is a "send" function to the network. In this forum there was once some code, I just don't remember the link... So please, re-edit your post a bit, correct some wording, read the docs, and start to code. Become a valuable member of the community, and share some of your developments. Hint: SegWit wallets are still rare :-) A warm welcome to the community!
|
|
|
... In 58 times ?? Where such an exact number?
This is the character encoding (base58). The bitcoin alphabet has less chars than our normal alphabet, to avoid confusion between capital "o"s and zeros, or lower "L"s and "i". In some fonts they just look the same, and such a typing error could lead to a loss of your values.
|
|
|
People discussing security when using Windows - come on! Don't you see the gap here? Windows has a long, long record of insecurity, and there is no sign, that this will ever stop. (Oh, yes - Microsoft last recently announced, they'll embrace Linux. That might be a first step.) In the professional world of security you do not talk Windows. Otherwise it is snake oil (thx to Bruce Schneier for this wording). >> Saying no procedure is 100% safe sounds like speculation to me. this sentence makes me puzzled Security is not about emotions, not about opinions or speculation. it is a race between experience and development. Similiar to banks, who protect the wealth. The layers of protection were increased step by step, until it gets too expensive to try and steal money. So security is all about trade-offs: you have a certain amount of value to protect, then you also need to invest a certain amount for the protection layer. You can not protect a 1 million value with 5 cents of security thoughts. And then there is not only security against theft, it is also about privacy. So best practices might look a bit like this: Trades at the 100 Dollars/Yen/Euros/Satoshis level can be on a phone wallet. The 1000 range can start to be used with multisig. The 10.000 range requires some cold storage. All beyond requires cold storage and multisig. And when it comes to privacy, you may want to add a layer of tumbler/coinjoin/mimblewimble.
|
|
|
it depends - what else on the value you want to transfer. This has been discussed many many times, here in the forum and reddit, and Trace Mayer in his bitcoin podcasts repeats it every time - search for it Generally: for a couple of Euros/Pounds/Dollars (up to 100 maybe), it is ok to use a normal machine and wallet (or iPhone and Android). Similiar to your normal wallet for FIAT money. To then copy via USB, use a machine, that has been verified for malware. When you have values in the 1000 Euros/Pounds/Dollars range, you pay more attention, and copy this stuff from a secure, unixoide (xBSD or Linux LIVE CD) air gapped machine. At this point in time a cold storage wallet like Trezor or similiar has it's value. When you have more than 10.000, then you need to spend some time into re-thinking your store of value. Trezor is not secure enough, cause we cannot see, what is "below" the device. Here you would need to have your cold storage setup along with multisig. Do it yourself, make it trusted, and reliably tested. There is no final solution. Summary: low value, little effort in securing your keys, high values, much effort securing your keys. spend two dollars in security efforts for low bitcoin values, spend 1000 dollars for security when bitcoin values are above 10.000 Dollars, and yes, spend much more, when it's a million value. You are your own bank!
|
|
|
thank you for sharing. The Mac community will like it I used the pre-compiled binaries (and verified the checksums). Seems like I'm a bit too lazy, next time ...
|
|
|
Maybe A. Antonopolus "Mastering Bitcoin" - he describes very well the concept, and the book is available online in many languages. You can connect to UDEMY, do some online courses on Linnux (yes!), networks (IPv4 and IPv6), crypto, and don't forget information security or "ethical hacking". And youtube has tons of video - I like D'Angelo videos ("bitcoin james d'angelo"). Hope this helps to get a start.
|
|
|
it is worthwhile! Really, don't get discouraged. You learn alot about "how the system works". There is a testnet, that you can play with, so don't even need to fear loosing money while in early stage of dev. You never know where you end up. Maybe one day you're in, and we have a new core dev :-)
Hint1: you can't make money with wallets
Question: what do you intend to do, and what language? I think this was not answered ...
encouraging you, rgds, Volker
|
|
|
|