BitcoinWiki - All About Cryptocurrency

Running a Bitcoin node on a $11.99 SBC

Running a Bitcoin node on a $11.99 SBC
Just wanted to let you guys know that I'm successfully running a (pruned) Bitcoin node + TOR on a $11.99 single board computer (Rock Pi S).
The SBC contains a Rockchip RK3308 Quad A35 64bit processor, 512MB RAM, RJ45 Ethernet and USB2 port and I'm using a 64GB SDCard. It runs a version of Armbian (410MB free). There's a new version available that even gives you 480MB RAM, but I'm waiting for Bitcoin Core 0.19 before upgrading.
To speed things up I decided to run Bitcoin Core on a more powerful device to sync the whole blockchain to an external HDD. After that I made a copy and ran it in pruned mode to end up with the last 5GB of the blockchain. I copied the data to the SD card and ran it on the Rock Pi S. After verifying all blocks it runs very smoothly. Uptime at the moment is 15 days.
I guess you could run a full node as well if you put in a 512GB SDcard.
The Rock Pi S was sold out, but if anybody is interested, they started selling a new batch of Rock Pi S v1.2 from today.
Screenshot of resources being used
Bitcoin Core info
Around 1.5 GB is being transferred every day
---
Some links and a short How to for people that want to give it a try:
  1. This is the place where I bought the Rock Pi S.
  2. Here you find more information about Armbian on the Rock Pi S. Flash it to your SDCard. Follow these instructions.
  3. Disable ZRAM swap on Armbian. If you don't do this eventually Bitcoin Core will crash. nano /etc/default/armbian-zram-config ENABLED=false
  4. Enable SWAP on Armbian sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo swapon --show sudo cp /etc/fstab /etc/fstab.bak echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  5. Set up UFW Firewall sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh # we want to allow ssh connections or else we won’t be able to login. sudo ufw allow 8333 # port 8333 is used for bitcoin nodes sudo ufw allow 9051 # port 9051 is used for tor sudo ufw logging on sudo ufw enable sudo ufw status
  6. Add user Satoshi so you don't run the Bitcoin Core as root sudo adduser satoshi --home /home/satoshi --disabled-login sudo passwd satoshi # change passwd sudo usermod -aG sudo satoshi # add user to sudo group
  7. Download (ARM64 version) and install Bitcoin Core Daemon
  8. Download and install TOR (optional). I followed two guides. This one and this one.
  9. Create a bitcoin.conf config file in the .bitcoin directory. Mine looks like this: daemon=1 prune=5000 dbcache=300 maxmempool=250 onlynet=onion proxy=127.0.0.1:9050 bind=127.0.0.1 #Add seed nodes seednode=wxvp2d4rspn7tqyu.onion seednode=bk5ejfe56xakvtkk.onion seednode=bpdlwholl7rnkrkw.onion seednode=hhiv5pnxenvbf4am.onion seednode=4iuf2zac6aq3ndrb.onion seednode=nkf5e6b7pl4jfd4a.onion seednode=xqzfakpeuvrobvpj.onion seednode=tsyvzsqwa2kkf6b2.onion #And/or add some nodes addnode=gyn2vguc35viks2b.onion addnode=kvd44sw7skb5folw.onion addnode=nkf5e6b7pl4jfd4a.onion addnode=yu7sezmixhmyljn4.onion addnode=3ffk7iumtx3cegbi.onion addnode=3nmbbakinewlgdln.onion addnode=4j77gihpokxu2kj4.onion addnode=5at7sq5nm76xijkd.onion addnode=77mx2jsxaoyesz2p.onion addnode=7g7j54btiaxhtsiy.onion ddnode=a6obdgzn67l7exu3.onion
  10. Start Bitcoin Daemon with the command bitcoind -listenonion
Please note that I'm not a professional. So if anything above is not 100% correct, let me know and I will change it, but this is my setup at the moment.
submitted by haste18 to Bitcoin [link] [comments]

⚡ Lightning Network Megathread ⚡

Last updated 2018-01-29
This post is a collaboration with the Bitcoin community to create a one-stop source for Lightning Network information.
There are still questions in the FAQ that are unanswered, if you know the answer and can provide a source please do so!

⚡What is the Lightning Network? ⚡

Explanations:

Image Explanations:

Specifications / White Papers

Videos

Lightning Network Experts on Reddit

  • starkbot - (Elizabeth Stark - Lightning Labs)
  • roasbeef - (Olaoluwa Osuntokun - Lightning Labs)
  • stile65 - (Alex Akselrod - Lightning Labs)
  • cfromknecht - (Conner Fromknecht - Lightning Labs)
  • RustyReddit - (Rusty Russell - Blockstream)
  • cdecker - (Christian Decker - Blockstream)
  • Dryja - (Tadge Dryja - Digital Currency Initiative)
  • josephpoon - (Joseph Poon)
  • fdrn - (Fabrice Drouin - ACINQ )
  • pmpadiou - (Pierre-Marie Padiou - ACINQ)

Lightning Network Experts on Twitter

  • @starkness - (Elizabeth Stark - Lightning Labs)
  • @roasbeef - (Olaoluwa Osuntokun - Lightning Labs)
  • @stile65 - (Alex Akselrod - Lightning Labs)
  • @bitconner - (Conner Fromknecht - Lightning Labs)
  • @johanth - (Johan Halseth - Lightning Labs)
  • @bvu - (Bryan Vu - Lightning Labs)
  • @rusty_twit - (Rusty Russell - Blockstream)
  • @snyke - (Christian Decker - Blockstream)
  • @JackMallers - (Jack Mallers - Zap)
  • @tdryja - (Tadge Dryja - Digital Currency Initiative)
  • @jcp - (Joseph Poon)
  • @alexbosworth - (Alex Bosworth - yalls.org)

Medium Posts

Learning Resources

Books

Desktop Interfaces

Web Interfaces

Tutorials and resources

Lightning on Testnet

Lightning Wallets

Place a testnet transaction

Altcoin Trading using Lightning

  • ZigZag - Disclaimer You must trust ZigZag to send to Target Address

Lightning on Mainnet

Warning - Testing should be done on Testnet

Atomic Swaps

Developer Documentation and Resources

Lightning implementations

  • LND - Lightning Network Daemon (Golang)
  • eclair - A Scala implementation of the Lightning Network (Scala)
  • c-lightning - A Lightning Network implementation in C
  • lit - Lightning Network node software (Golang)
  • lightning-onion - Onion Routed Micropayments for the Lightning Network (Golang)
  • lightning-integration - Lightning Integration Testing Framework
  • ptarmigan - C++ BOLT-Compliant Lightning Network Implementation [Incomplete]

Libraries

Lightning Network Visualizers/Explorers

Testnet

Mainnet

Payment Processors

  • BTCPay - Next stable version will include Lightning Network

Community

Slack

IRC

Slack Channel

Discord Channel

Miscellaneous

⚡ Lightning FAQs ⚡

If you can answer please PM me and include source if possible. Feel free to help keep these answers up to date and as brief but correct as possible
Is Lightning Bitcoin?
Yes. You pick a peer and after some setup, create a bitcoin transaction to fund the lightning channel; it’ll then take another transaction to close it and release your funds. You and your peer always hold a bitcoin transaction to get your funds whenever you want: just broadcast to the blockchain like normal. In other words, you and your peer create a shared account, and then use Lightning to securely negotiate who gets how much from that shared account, without waiting for the bitcoin blockchain.
Is the Lightning Network open source?
Yes, Lightning is open source. Anyone can review the code (in the same way as the bitcoin code)
Who owns and controls the Lightning Network?
Similar to the bitcoin network, no one will ever own or control the Lightning Network. The code is open source and free for anyone to download and review. Anyone can run a node and be part of the network.
I’ve heard that Lightning transactions are happening “off-chain”…Does that mean that my bitcoin will be removed from the blockchain?
No, your bitcoin will never leave the blockchain. Instead your bitcoin will be held in a multi-signature address as long as your channel stays open. When the channel is closed; the final transaction will be added to the blockchain. “Off-chain” is not a perfect term, but it is used due to the fact that the transfer of ownership is no longer reflected on the blockchain until the channel is closed.
Do I need a constant connection to run a lightning node?
Not necessarily,
Example: A and B have a channel. 1 BTC each. A sends B 0.5 BTC. B sends back 0.25 BTC. Balance should be A = 0.75, B = 1.25. If A gets disconnected, B can publish the first Tx where the balance was A = 0.5 and B = 1.5. If the node B does in fact attempt to cheat by publishing an old state (such as the A=0.5 and B=1.5 state), this cheat can then be detected on-chain and used to steal the cheaters funds, i.e., A can see the closing transaction, notice it's an old one and grab all funds in the channel (A=2, B=0). The time that A has in order to react to the cheating counterparty is given by the CheckLockTimeVerify (CLTV) in the cheating transaction, which is adjustable. So if A foresees that it'll be able to check in about once every 24 hours it'll require that the CLTV is at least that large, if it's once a week then that's fine too. You definitely do not need to be online and watching the chain 24/7, just make sure to check in once in a while before the CLTV expires. Alternatively you can outsource the watch duties, in order to keep the CLTV timeouts low. This can be achieved both with trusted third parties or untrusted ones (watchtowers). In the case of a unilateral close, e.g., you just go offline and never come back, the other endpoint will have to wait for that timeout to expire to get its funds back. So peers might not accept channels with extremely high CLTV timeouts. -- Source
What Are Lightning’s Advantages?
Tiny payments are possible: since fees are proportional to the payment amount, you can pay a fraction of a cent; accounting is even done in thousandths of a satoshi. Payments are settled instantly: the money is sent in the time it takes to cross the network to your destination and back, typically a fraction of a second.
Does Lightning require Segregated Witness?
Yes, but not in theory. You could make a poorer lightning network without it, which has higher risks when establishing channels (you might have to wait a month if things go wrong!), has limited channel lifetime, longer minimum payment expiry times on each hop, is less efficient and has less robust outsourcing. The entire spec as written today assumes segregated witness, as it solves all these problems.
Can I Send Funds From Lightning to a Normal Bitcoin Address?
No, for now. For the first version of the protocol, if you wanted to send a normal bitcoin transaction using your channel, you have to close it, send the funds, then reopen the channel (3 transactions). In future versions, you and your peer would agree to spend out of your lightning channel funds just like a normal bitcoin payment, allowing you to use your lightning wallet like a normal bitcoin wallet.
Can I Make Money Running a Lightning Node?
Not really. Anyone can set up a node, and so it’s a race to the bottom on fees. In practice, we may see the network use a nominal fee and not change very much, which only provides an incremental incentive to route on a node you’re going to use yourself, and not enough to run one merely for fees. Having clients use criteria other than fees (e.g. randomness, diversity) in route selection will also help this.
What is the release date for Lightning on Mainnet?
Lightning is already being tested on the Mainnet Twitter Link but as for a specific date, Jameson Lopp says it best
Would there be any KYC/AML issues with certain nodes?
Nope, because there is no custody ever involved. It's just like forwarding packets. -- Source
What is the delay time for the recipient of a transaction receiving confirmation?
Furthermore, the Lightning Network scales not with the transaction throughput of the underlying blockchain, but with modern data processing and latency limits - payments can be made nearly as quickly as packets can be sent. -- Source
How does the lightning network prevent centralization?
Bitcoin Stack Exchange Answer
What are Channel Factories and how do they work?
Bitcoin Stack Exchange Answer
How does the Lightning network work in simple terms?
Bitcoin Stack Exchange Answer
How are paths found in Lightning Network?
Bitcoin Stack Exchange Answer
How would the lightning network work between exchanges?
Each exchange will get to decide and need to implement the software into their system, but some ideas have been outlined here: Google Doc - Lightning Exchanges
Note that by virtue of the usual benefits of cost-less, instantaneous transactions, lightning will make arbitrage between exchanges much more efficient and thus lead to consistent pricing across exchange that adopt it. -- Source
How do lightning nodes find other lightning nodes?
Stack Exchange Answer
Does every user need to store the state of the complete Lightning Network?
According to Rusty's calculations we should be able to store 1 million nodes in about 100 MB, so that should work even for mobile phones. Beyond that we have some proposals ready to lighten the load on endpoints, but we'll cross that bridge when we get there. -- Source
Would I need to download the complete state every time I open the App and make a payment?
No you'd remember the information from the last time you started the app and only sync the differences. This is not yet implemented, but it shouldn't be too hard to get a preliminary protocol working if that turns out to be a problem. -- Source
What needs to happen for the Lightning Network to be deployed and what can I do as a user to help?
Lightning is based on participants in the network running lightning node software that enables them to interact with other nodes. This does not require being a full bitcoin node, but you will have to run "lnd", "eclair", or one of the other node softwares listed above.
All lightning wallets have node software integrated into them, because that is necessary to create payment channels and conduct payments on the network, but you can also intentionally run lnd or similar for public benefit - e.g. you can hold open payment channels or channels with higher volume, than you need for your own transactions. You would be compensated in modest fees by those who transact across your node with multi-hop payments. -- Source
Is there anyway for someone who isn't a developer to meaningfully contribute?
Sure, you can help write up educational material. You can learn and read more about the tech at http://dev.lightning.community/resources. You can test the various desktop and mobile apps out there (Lightning Desktop, Zap, Eclair apps). -- Source
Do I need to be a miner to be a Lightning Network node?
No -- Source
Do I need to run a full Bitcoin node to run a lightning node?
lit doesn't depend on having your own full node -- it automatically connects to full nodes on the network. -- Source
LND uses a light client mode, so it doesn't require a full node. The name of the light client it uses is called neutrino
How does the lightning network stop "Cheating" (Someone broadcasting an old transaction)?
Upon opening a channel, the two endpoints first agree on a reserve value, below which the channel balance may not drop. This is to make sure that both endpoints always have some skin in the game as rustyreddit puts it :-)
For a cheat to become worth it, the opponent has to be absolutely sure that you cannot retaliate against him during the timeout. So he has to make sure you never ever get network connectivity during that time. Having someone else also watching for channel closures and notifying you, or releasing a canned retaliation, makes this even harder for the attacker. This is because if he misjudged you being truly offline you can retaliate by grabbing all of its funds. Spotty connections, DDoS, and similar will not provide the attacker the necessary guarantees to make cheating worthwhile. Any form of uncertainty about your online status acts as a deterrent to the other endpoint. -- Source
How many times would someone need to open and close their lightning channels?
You typically want to have more than one channel open at any given time for redundancy's sake. And we imagine open and close will probably be automated for the most part. In fact we already have a feature in LND called autopilot that can automatically open channels for a user.
Frequency will depend whether the funds are needed on-chain or more useful on LN. -- Source
Will the lightning network reduce BTC Liquidity due to "locking-up" funds in channels?
Stack Exchange Answer
Can the Lightning Network work on any other cryptocurrency? How?
Stack Exchange Answer
When setting up a Lightning Network Node are fees set for the entire node, or each channel when opened?
You don't really set up a "node" in the sense that anyone with more than one channel can automatically be a node and route payments. Fees on LN can be set by the node, and can change dynamically on the network. -- Source
Can Lightning routing fees be changed dynamically, without closing channels?
Yes but it has to be implemented in the Lightning software being used. -- Source
How can you make sure that there will be routes with large enough balances to handle transactions?
You won't have to do anything. With autopilot enabled, it'll automatically open and close channels based on the availability of the network. -- Source
How does the Lightning Network stop flooding nodes (DDoS) with micro transactions? Is this even an issue?
Stack Exchange Answer

Unanswered Questions

How do on-chain fees work when opening and closing channels? Who pays the fee?
How does the Lightning Network work for mobile users?
What are the best practices for securing a lightning node?
What is a lightning "hub"?
How does lightning handle cross chain (Atomic) swaps?

Special Thanks and Notes

  • Many links found from awesome-lightning-network github
  • Everyone who submitted a question or concern!
  • I'm continuing to format for an easier Mobile experience!
submitted by codedaway to Bitcoin [link] [comments]

To signal non-support of Segwit2X, add uacomment=NO2X to bitcoin.conf and restart

Find your bitcoin.conf file, and add the following line:
uacomment=NO2X
Then restart your node.
https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File
You can also do this via the command line, eg:
bitcoind.exe -uacomment=NO2X
submitted by windsok to Bitcoin [link] [comments]

To signal non-support of Segwit2X, upgrade to 0.15, add uacomment=NO2X to bitcoin.conf and restart

To ensure you do not get forked onto the S2X chain, you do not need to do anything. If you want to be vocal about your non-support of NYA/S2X, then you can do the following.
Upgrade to Bitcoin 0.15 - https://bitcoin.org/en/download
Find your bitcoin.conf file, and add the following line:
uacomment=NO2X
Then restart your node.
https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File
You can also do this via the command line, eg:
bitcoind.exe -uacomment=NO2X
We are currently sitting at just over 100 NO2X nodes: https://bitnodes.21.co/nodes/?q=NO2X
as well as over 2000 0.15+ nodes
submitted by windsok to Bitcoin [link] [comments]

Anti-FUD: The BIP148 enforcing client - a walkthrough.

There seems to be a lot of FUD going around surrounding https://github.com/uasf/bitcoin/tree/0.14 <--that little guy. I'm a programmer, so let me walk you through what, exactly, is changed, and how you can verify what changes for yourself.
So, to get started, click on the 'Compare' button just below the green button that says 'clone or download'. link
This shows you every single change that has been merged between bitcoin core, in the 0.14 branch (the branch that was used to create the 0.14 Core client many of us use) and this repository's version of the 0.14 client, which requires any blocks after August 1, 2017 to support Segwit.
So, let's go through the page, top to bottom, and explain what it is telling you.
19 commits 4 files changed 3 commit comments 3 contributors 
That tells you that 19 times someone has changed something in the code base, in total, 4 files were changed by those 19 commits, 3 commit comments were made (think of these as replies to a thread on reddit), and 3 people total have made contributions to the code differences represented below.
Below that is a list of what commits were made on what day. You can click on the second column (BIP148 / Update client name to Satoshi BIP148 / etc) to see what changes were made in that version (compared to the version before it) specifically.
Scroll down until you hit
Showing with 19 additions and 5 deletions. 
This is where the 'fun' (programming) begins.

src/clientversion.cpp

-std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments) +std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments, const bool fBaseNameOnly) 
Red lines, which always start with a minus sign, means that line was removed from the file. Green lines, which always start with a + sign, mean that line was added. "But the line wasn't removed, just some stuff was added to the end!" Correct! This is a 'diff-ism'. Diff being the name of the program used to show differences between a file. Diff doesn't highlight just the part of the line that changed, it highlights the entire line, and leaves it to you to spot the changes in the line.
From the above, we can see a parameter was added to the end of the line. "But what does the line do!" Well, what you're looking at is a function declaration. What is a function? Well, imagine you wanted to build a robot to make sandwiches for you. You could make the sandwich yourself, but it's easier if an automated system does it for you. The function is like the robot; you put a specific set of tasks into the robot's programming, give it a specific set of inputs (bread, knife, meat/cheese/spreads/etc) and it returns the resultant sandwich. The way to read the declaration is this:
std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments, const bool fBaseNameOnly) 
  1. std::string The first argument is the return type of the function. In this case, a C++ string.
  2. FormatSubVersion This is the name of the function
  3. (const std::string& name, the first parameter of the function, since it is unchanged from Core, and unmodified by other changes in the file, I will not bother explaining what it does.
  4. int nClientVersion, Second parameter to the function. Same thing, original, unmodified, skipping.
  5. const std::vector& comments, Parameter 3, unchanged, skipping.
  6. , const bool fBaseNameOnly) Parameter 4, 'const bool' means two things: 1) we cannot change the value of this variable in the code. 2) it's a 'bool' type, which is short for boolean. It an either be true or false, those are the only values it can ever have. What does it do? Let's keep reading.

std::ostringstream ss; 
That's important for later, make note of it.
if (!fBaseNameOnly) ss << "UASF-Segwit:0.2(BIP148)/"; 
The above is the change uses the newly minted parameter 4 to add a bit of text into the output stream. Specifically, the string "UASF-Segwit:0.2(BIP148)/" is tacked on to whatever is ahead of it in the output stream. The net result of this change is that clients using this code will report their client version as '/Santoshi:0.14.0/UASF-Segwit:0.2(BIP148)/' instead of the standard value of '/Santoshi:0.14.0/'.
File complete! Next file.

src/clientversion.h

Within C or C++ programming, you have the concept of 'code files' (ending in .c or .cpp) and 'header files' (ending in .h). Strictly speaking, any code can be in either file and the compiler will figure it out (assuming you give it enough information to do so). However, programming conventions exist. Since I assume the readers of this post are (largely) not programmers, I won't bore you. It's a convention used for sanity only, and it is a convention followed by the bitcoin source code. In general, program code that 'does stuff' goes in .c and .cpp files, and the code needed to tell the compiler (compiler = the thing that converts these text files into a program) where to 'find stuff' goes into .h files.
-std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments); +std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments, bool fBaseNameOnly = false); 
Well, because this is the exact same function call we just talked about in the previous section, I'll skip going through the parameters one by one, and instead focus only on the change: , bool fBaseNameOnly = false).
"WAIT! It has 'const' before bool in the .cpp file! That's bad right!?" No. The compiler will see const in the .cpp file and mandate the variable be const.
"WAIT! Here it says '= false' and in the .cpp file it doesn't!" Again, not a problem. Remember how I said some code goes in .c/.cpp files, and some in .h files? Well, this is a case where which file contains what code actually does matter. Basically, you can't set a default value for a parameter inside a .c/.cpp file. You can only do that in a .h file. So...that's 100% correct. Here is the souce code for a quick little program to see this behavior:
--test.cpp--
#include "test.h" #include  #include  int main() { function(); } int function(const bool tmp) { tmp = !tmp; } 
---test.h---
int function(bool test = false); 
--If you tried to compile this, you'd get--
g++ test.cpp test.cpp: In function ‘int function(bool)’: test.cpp:12:6: error: assignment of read-only parameter ‘tmp’ tmp = !tmp; 
In this case, 'read only' means 'was declared const'.
Remember how a 4th parameter was added in the code above? Well, you have to tell the compiler to expect that parameter, which you do here, in the header file. That line of code tells the compiler to expect the 4th parameter. It also sets the default value of the parameter, should the caller not specify it, to be false.
Thus, you can call this function two ways:
  1. FormatSubVersion("Test", 99900, std::vector())
  2. FormatSubVersion("Test", 99900, std::vector(), true)
Using method 1 would result in a User Agent string of '/Test:99900/UASF-Segwit:0.2(BIP148)/', because the program uses the default value of 'false' and so it sticks in the bit about BIP148 support. Using method 2 would result in '/Test:99900/' "Wait, wait, how did you figure that out?" Look here, scroll to the bottom (line 88) and that is the FormatSubVersion function we went over above. All you do is built the string in steps as you read the code:
  1. Line 90: ""
  2. Line 91: "/"
  3. Line 92: "/Test:99900" {the 'Test' comes from the 'name' parameter, parameter 1. The : is statically coded (<< ":" <<) and the 99900 comes from nClientVersion, parameter 2}
  4. Line 93: From the function call, we see that parameter 3 is initialized 'std::vector()', this is an empty vector. If the vector had anything in it, it would look like this: std::vector('a')
  5. (because the if statement in line 93 fails, we go to: ) Line 101: "/Test:99900/"
  6. Line 102: (are we doing a version with or without the 4th parameter set to true?)
  7. Line 103: (if parameter 4 is false, line becomes "/Test:99900/UASF-Segwit:0.2(BIP148)/"
  8. Line 104: Convert the 'ss' variable to a standard C++ string and return the that string to whatever asked this function to be run.
SO, in total, this function literally just creates a string. Much like the robot-sandwich example, you give the function a client name, version, and list of comments and it builds you a string containing those things.

src/test/util_tests.cpp

This file is part of the automated testing for bitcoind/bitcoin-qt. When you compile the software, you'd typically run 'make check' before installing the software, to ensure that your changes didn't break anything and that your compile didn't go wrong. With the effort I've put into explaining the change to FormatSubVersion in the past two section, I believe you can now see that the only change made to this test is to ensure that the newly added code performs as expected.
That said, there is a 'defect' in this code. He should not have removed the 3 existing tests. He should have added 3 new tests. That way he'd have both 'positive' and 'negative' test case coverage. That said, it isn't something to fret about.

src/validation.cpp

All right, finally, the big file where all the cool shit happens!
+ // BIP148 mandatory segwit signalling. + if (pindex->GetMedianTimePast() >= 1501545600 && // Tue 1 Aug 2017 00:00:00 UTC + pindex->GetMedianTimePast() <= 1510704000 && // Wed 15 Nov 2017 00:00:00 UTC + !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) + { + // versionbits topbit and segwit flag must be set. + if ((pindex->nVersion & VERSIONBITS_TOP_MASK) != VERSIONBITS_TOP_BITS || + (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) == 0) { + return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit"); + } + } + 
The entire section is newly added. Anything it does will be 'in addition to' whatever is already done. Let's go through the change line by line:
"Ok, but what about 1501545600? How do we know that?" It's an epoch timestamp. Google 'epoch converter', copy-paste that number in, convert to UTC, and you'll see it is correct for what the comment says it is.
The '&&' at the end of the line means 'and'. So in this case, 'if the mean age of the past few blocks is greater than or equal to and ...'
You can see proof of this claim in the tests written in src/test/versionbits_tests.cpp lines 277-281. line 277 creates an 'old format' block, then (line 279) checks that the ComputeBlockVersion function works, then verifies that the bitwise-and function returns TOP_BITS, as expected.
If you are concerned that more might be needed to reject a block, simply view src/validation.cpp on line 1892 and see that standard bitcoin Core code rejects blocks in the same way as the SEGWIT patch does.
"So wait, what is the total requirement to reject a block again?"
  1. If the mean age of the past few blocks is greater than or equal to AND the mean age of the past few blocks is less than or equal to AND the previous block did not show that Segwit was in 'active' state:
  2. If all of the conditions in step 1 are met AND the block either does not support BIP9 messaging, or does not signal support for SEGWIT
  3. Then it will be rejected.
"So wait, what happens after the first segregated witness block pops across the network? Hasn't that already happened?" No. Blocks that support segwit have come across the network, but in order for IsWitnessEnabled to return 'true', the SEGWIT state would need to switch to 'active' (see BIP9 spec), which is the final state of any proposal, and the point at which the setting is considered an accepted part of the blockchain.

Conclusions

So, you see, no muss, no fuss. The day-1 bug where the logic was backwards has been fixed. There is nothing to fear. Feel free to ask questions and I'll explain them over the next few hours/days as I am able. I'll try to talk to your level if I can. I like teaching in general and abhor ignorance in all its forms. Understand: ignorance strictly means 'not knowing', rather than the typical 'negative' connotation it gets in English speaking society. I would like everyone to realize just how simple this UASF patch is and that the FUD surrounding it not being 'verified' is absolutely a bad joke.
edit: Logic fix thanks to Phil. Like shaolinfry, I had my negated logic backwards. Oops.
submitted by Kingdud to Bitcoin [link] [comments]

CypherPoker.JS Guide: Setting Up A Private Home Game

CypherPoker.JS Guide: Setting Up A Private Home Game
Hi everyone,
I've finally put together the first CypherPoker.JS guide that describes how to set up the Services Server (i.e. how to run your own private / home game).
I know that it looks long but most of the content consists of screencaps and much of those simply describe what to look for (as opposed to illustrating how to do something).
I've tried to make it as non-technical and simple as possible but that's from my own skewed perspective so I would greatly appreciate your feedback to help me improve this and future guides:
  • Is something not clear or not fully explained?
  • Did you encounter a problem or gotten stuck?
  • Was something too complex or convoluted (i.e. could it have been explained more succinctly)?
  • Were you expecting something based on a headetitle that turned out to be something different?
Here's the guide, as found on the CypherPoker.JS wiki: https://github.com/monicanagent/cypherpoker.js/wiki/Setting-up-a-private-home-game
This document will guide you through the process of setting up the CypherPoker.JS Services Server to host private home games.

1. Download and unzip the CypherPoker.JS Windows binary

https://preview.redd.it/g5b7eqacbkc31.png?width=1038&format=png&auto=webp&s=678950ec590b9d1d6d28fba5d96d8a09b27c41cb
  • Scroll down to the latest / newest release and download the .zip file ...
https://preview.redd.it/98s0b24gbkc31.png?width=1038&format=png&auto=webp&s=e7cef001f8b5ee9a927d35d3b4bfcc7dc44566a1
... to your desktop.
https://preview.redd.it/oujs2etjbkc31.png?width=781&format=png&auto=webp&s=09d7fdd55238b8a4a27add28826e71c062527732
  • Find the downloaded file on your desktop and unzip it.
https://preview.redd.it/1vyam2upbkc31.png?width=954&format=png&auto=webp&s=a797e2dc8f6125bc90a6e2538451657c7ba8212a

2. Make sure that blockchain functionality is enabled

  • Find the server folder inside the unzipped files. The full path is: ...\Desktop\CypherPokerJS_win64_0.5.1\CypherPokerJS\resources\app\server
https://preview.redd.it/ek2piibtbkc31.png?width=861&format=png&auto=webp&s=e77135f9ba6dd2a3bd6b986589a5b1154a745bb6
  • Using your favourite text editor (e.g. Notepad, Atom, etc.), open the config.json file in the server folder.
https://preview.redd.it/q65fn89wbkc31.png?width=777&format=png&auto=webp&s=876fba9d07877a7bbd2aab6fcf7fef4c47b95809
  • Scroll down to the handlers section and make sure that the "Blockstream API Bitcoin Handler" and "Bitcoin.com API Bitcoin Cash Handler" are enabled ("enabled": true).
    • The "CryptoAPIs Bitcoin Cash Handler". "BlockCypher API Cryptocurrency Handler", "Native Bitcoin Core (bitcoind) Handler", and "Native Bitcoin Cash (bitcoind) Handler" handlers should be disabled ("enabled": false).
https://preview.redd.it/cxxehz5zbkc31.png?width=777&format=png&auto=webp&s=8d5f41d72cc0e39efa2b5b66bfa9c2329b722161

3. Configure the HD wallets

  • Now scroll down to the wallets section. Note the bitcoin, test3, bitcoincash, and bchtest sections; these contain HD wallet information for Bitcoin, Bitcoin testnet (test3), Bitcoin Cash, and Bitcoin Cash testnet respectively. We will update these in the next step.
https://preview.redd.it/wxyzz513ckc31.png?width=807&format=png&auto=webp&s=b15afcb8b106d69057b5a3aa575b2c07ce253115
https://preview.redd.it/n544bib6ckc31.png?width=1180&format=png&auto=webp&s=cd271f6e1348387e4b775a1eb3501c1cbfd72089
  • For extra security it's recommended that you disconnect from any network you're connected to and generate new wallets by clicking the GENERATE NEW WALLETS button at the bottom of the page. MAKE SURE TO SAVE THIS INFORMATION TO A SECURE LOCATION! With these keys CypherPoker.JS can re-create all deposit addresses and associated accounts; without it, any deposits may be lost (inaccessible) forever. Seriously ... back it up now!
https://preview.redd.it/vky333dbckc31.png?width=1180&format=png&auto=webp&s=c7a363361373c98ebcd47a3fe591b4fe86399747
  • Now replace each "xprv" and "tprv" values in the config.json file's wallets section with ones generated using the HD Wallet generator.
    • Make sure that you're updating both the correct cryptocurrency as well as its associated network (mainnet or testnet). Recall that "bitcoin" is the Bitcoin mainnet, "test3" is the Bitcoin testnet, "bitcoincash" is the Bitcoin Cash mainnet, and "bchtest" is the Bitcoin Cash testnet.
    • Also make sure that the "xprv..." and "tprv..." values are surrounded by quotes.
https://preview.redd.it/ba9os00eckc31.png?width=807&format=png&auto=webp&s=b5d7229a0cdce1dc9b42b5c54bd5ba971a93ad46

4. Configure the Services fees

  • Scroll farther down the config.json file to the bitcoin and bitcoincash sections. Each contains a sub-section named defaults where you'll find a main (mainnet) and test3 or test section (testnet). Here you can specify both the minerFee and the depositfee for each cryptocurrency and their sub-types (networks).
    • Note that each fee is in satoshis and must be enclosed in quotes.
https://preview.redd.it/67jroiuickc31.png?width=807&format=png&auto=webp&s=b376ae14da5e672544fd00712aaf94e0f590f211
https://preview.redd.it/k7ymzaqyckc31.png?width=807&format=png&auto=webp&s=47148f2a0e2763d81ad279fe77132c6d77b695f4
  • Save and close the config.json file.

5. Start the Services server

  • Go back up a few folders to the main CypherPokerJS folder. Find the cypherpokerjs.exe file and run it.
https://preview.redd.it/2r6fb0l4dkc31.png?width=861&format=png&auto=webp&s=9a677494bdd945cd1ebb8262e66587df875a979f
  • In CypherPoker.JS' main menu, select CONNECTIVITY.
https://preview.redd.it/kamdk2s7dkc31.png?width=1086&format=png&auto=webp&s=ea5036854bd13dd999dc9a63cdecc85446558423
  • In the pulldown labeled "Enable external access to API / P2P services using", select the type of tunnel connection to open for players to connect to. Use "WSSTunnel" for universal connectivity (web and desktop), or select "SSHTunnel" if all players are using the desktop version.
https://preview.redd.it/wuasdi8adkc31.png?width=1086&format=png&auto=webp&s=230f60ed60fafddadd17a57e21046e81e92d7a12
  • Click the toggle button next to the pulldown to enable external access. The SDB connection string will appear in the text box below. Click on the COPY TO CLIPBOARD button to copy the SDB to your system clipboard.
https://preview.redd.it/ddxvdinddkc31.png?width=1086&format=png&auto=webp&s=3461d966c4d81a6231ca04d7fbd6cc189bb4c7d9
  • Send the SDB (via email, IM, etc.), to players who want to connect to and use your services. To connect, they will need to open the CONNECTIVITY panel from the MAIN MENU, paste the provided SDB into the "Connect using Services Descriptor Bundle (SDB)" field, and click CONNECT.
    • Note that the web version of CypherPoker.JS doesn't include the Services control portion of the CONNECTIVITY interface, only the desktop version does.
https://preview.redd.it/mrsfdi0hdkc31.png?width=1086&format=png&auto=webp&s=d44cdf868064c1b0025320b2fae29ae8d37b5ae8
  • Your CypherPoker.JS Services Server can now be used to create and manage accounts, play and settle games, etc. You don't have to play (although you can), just remember to keep the application running while there are players connected!
submitted by monican_agent to cypherpoker [link] [comments]

Every computer is the Bitcoin computer

Bitcoin doesn't require any special hardware, as it can be used on any device which can do computations. To make a Bitcoin transaction you need to create a ECDSA signature, which is just math, something which all computers do well. You can do it both on resource-constrained like smart cards (think SIM cards) and on large servers alike.
The idea that you need a special Bitcoin computer to use Bitcoin is outright harmful, as it limits your choices and dupes you into buying overpriced proprietary hardware which gives the vendor more control of what you can and cannot do. This is very much against the spirit of Bitcoin which can thrive only as an open system.
So yeah, that thing 21 inc is trying to sell makes no sense, whatsoever.
But a lot of people think that "there might be something in it", let me go through the theories of why this device makes sense:
  1. "It is a dev kit!". Let me guess, you aren't a programmer. Or if you're a programmer, you're a shitty programmer and should be ashamed of yourself. You do not need any dev kit for Bitcoin, all you need is open source software (and, maybe, some internet services, optionally). When I wanted to try to do something Bitcoin related back in 2011, all I needed was to download bitcoind and install it on my $10/month VPS. Then I looked through RPC API call list and made a Bitcoin-settled futures exchange. The whole thing took me only a week. I didn't need to pay $400 for a devkit. Learning how to work with bitcoind took less than a day. There are hundreds of Bitcoin companies and thousands of hobbyist working on Bitcoin projects, none of them needed any sort of a dev kit.
  2. "It is useful because it has APIs and pre-installed software!" No, see above. If needed, pre-installed software can be delivered in a form of a virtual machine (e.g. VirtualBox, VMware, etc), no need for a physical device.
  3. "It is useful because it comes with a micropayment service/API". Nope. These things can be done in software, no need for custom hardware. Obviously, a micropayment system can be more widely adopted when it is open. If it is tied to custom hardware (which I doubt) then you have a vendor lock-in which is exactly the thing we're trying to avoid with Bitcoin.
  4. "it comes with pre-installed marketplace". So what, we have marketplaces such as OpenBazaar. If there are useful features in the 21 inc's marketplace we can replicated them in open source software.
  5. "It's convenient for users!" Are you saying that a $400 device which you need to be connected to a laptop is more convenient than a service which can run in a browser?
  6. "It might offer better security". We already have devices such as Trezor which can protect bitcoins from unsecure operating system. Trezor costs much less than $400 and is actually useful. Even though it was done by a small company without much capital.
  7. "It can be used for applications like a reputation system, etc." When telecom companies wanted an ability to differentiate between users, they created smartcard-based SIM cards. This technology is many decades old. Using Bitcoin for a reputation system is a bad idea, as it is not designed for that. If device holds 1000 satoshi to give it an identity weight, a guy who has 1 bitcoin can impersonate 10000 such devices. It just not going to work.
  8. "A constant stream of bitcoins it mines is convenient for users." User has to pay for this device, he might as well just buy bitcoins. If it is necessary for bitcoins to be attached to hardware, this can be done using a tiny dongle which costs less than $1 to manufacture, or a smart card.
  9. "But this device got backed by VCs and large companies, there must be something to it, we are just too stupid to comprehend its greatness". Well...
There is, indeed, a very simple explanation of this device's existnce: Balaji's reality distortion field. He is a prominent VC, so it was relatively easy to convince others that it's a worthy idea. The big vision behind it -- the financial network of devices -- is actually great. And then there is a question of execution. A guy like Balaji is supposed to be an expert in assessing feasibility of execution. So, as we can guess, investors trusted him. As many VCs tell, they invest in people. They cannot examine nitty-gritty technical details, but just look at skills, track record, etc.
So the fact that it got large investments and generates a lot of hype doesn't mean much, there was a plenty of such companies during dotcom boom.
It's quite like :CueCat. As we now know, an ability to scan a printed code and open a web page which it points to is very useful, a lot of people use QR codes, they are ubiquitous. This was exactly the vision behind CueCat. But it was implemented as a dedicated hardware device, not as a smartphone app, as there were no smartphones at that time. So after a lot of hype and aggressive marketing the company failed, but just few years later their vision became realized in QR reader apps.
Hardware becomes increasingly irrelevant. As Mark Andreessen, Balaji's partner, [once said], software is eating the world. Solving problems which can be solved software using custom hardware is just silly.
Balaji talks about internet-of-things applications where devices mine bitcoins and use them to buy services they need to function. Well, in the end, user pays for that, as he pays for physical chips and electricity. It would be more efficient for him to pay directly than to use this mining-based scheme. And it's possible to do so using software. E.g. imagine you have a lot of smart devices which use external services in your home. It would be nice if you can just aggregate the bill and pay it off automatically, say $2/month. Why only $2? Well, if there is a device consuming $20/month, it needs some serious mining abilities, so it will cost much more than $20 in electricity bills...
Maybe 21 inc will eventually pivot into purely software solutions, they have a lot of money to play with. But the current generation of devices they make just makes no sense, whatsoever, and people who try to find something useful in them just waste their time.
EDIT: One plausible case for using custom hardware is a possibility of off-chain microtransactions using trusted hardware. Not unlike MintChip conceptually. But size of the device as well as its price is puzzling in this case, as this can be implemented (and was already implemented) in smart card form factor.
submitted by killerstorm to Bitcoin [link] [comments]

Trying to find old core executables?

Is there a repository of much older versions of bitcoin? possibly between 2009 and 2011?
I would like to download and run one to see how it worked.
submitted by strategosInfinitum to Bitcoin [link] [comments]

BitN00B: Help with Python/JSON call : getNewAddress(account) - fail

When making a JSON call, RPC to bitcoind, what is "account" parameter in getNewAddress(account).
Does anyone have actual code to demo this? This is frustrating given how much time I have spent ( a day ),
trying to get this to work in code, trying different things, googling all over, following things to a dead end.

In my Bitcoin QT, I see no reference to "account", I don't know what to put there as a parameter.

Reference:
https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list#Full_list

If I leave it blank, or I make up something to put there, I get a socket timeout.
I can successfully call: getblockchaininfo() (no params), and a few others with no socket timeout, but not getNewAddress. Anything and everything requiring a parameter fails.
--
Also if anyone can help, I please need a clear concise example of sending a transaction. I can find no good code examples on how to create a raw transaction and send with any Python/RPC/Bitcoind library out there. None. It should not take more than a few lines of code to send a transaction.
  1. set variables in a data structure
  2. make a call to send the transaction (that's it). The library will take params from the data structure, construct a raw transaction, convert that raw transaction to the format it needs when sending over http (json/rpc), as it does and I understand it to work that way.
    I would like to have the raw transaction printed out to debug, both raw transaction and the actual hex code that is sent.
    Thank You,
    JC
submitted by ThisCryptoFail to Bitcoin [link] [comments]

where can i get the latest version of command list of `bitcoin-cli`?

I tried command like getaccount, as listed in https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list.
but is deprecated when i use it in Bitcoin Core v0.17.0
> bitcoin-cli getaccount 18e9LCujZeNvdYh9WRcavPD2gizcNNB7rK error code: -32 error message: getaccount is deprecated and will be removed in V0.18. To use this command, start bitcoind with -deprecatedrpc=accounts. 
submitted by jasonzhouu to Bitcoin [link] [comments]

if I run a bitcoin core node with bitcoind and --disablewallet, which api commands get disabled?

According to the bitcoind API docs, the `-disablewallet` option will result in "not loading the wallet and disabling wallet RPC calls". However, I didn't find any information on which RPC calls are considered "wallet RPC calls".

Disclaimer: I searched the internet with no success and I'm not a native English speaker, so forgive me any probably existing mistakes I made.
submitted by redditeraya to Bitcoin [link] [comments]

How to scale transaction broadcasting and fetching

I'm working on a browser-based BTC wallet.
I understand that the original bitcoin core client (bitcoind) is not intended to be used across the network, except for whitelisted IP-addresses. This is due security concerns since a wallet can be safed on the bitcoin node.
However, in my case, the wallet is stored on the client/browser. Transactions are built within the browser wallet, but the browser depends on the node, for fetching transactions, UTXOs and broadcasting the transactions. Hence, no private keys or passwords are sent across the network.
What's the best way, to do this? Should I setup a full node? Are there any good bitcoin-node-as-a-services? Should I use alternative approches (such as SPV)?
submitted by redditeraya to Bitcoin [link] [comments]

Breaking 100 connections on my full-node

I haven't really checked the stats on my full node for a while, and noticed today that i'm running over 100 connections :) It's sitting around 106 right now, but I saw it get up to 120 earlier. It's really satisfying to see my node contributing. The node is running on my home server, and only takes up about 4-5% CPU.
Some more stats: https://iampat.no-ip.org
Get more nodes up people. The network is struggling to find more full-node operators. Help us :)
Edit: A lot of people are asking for more information about what this means, why they should participate, and how to participate. Here's a few links to get you started that can do a much better job explaining than I can.
Why/How-To: https://www.reddit.com/Bitcoin/comments/24645i/psa_the_amount_of_full_bitcoin_nodes_is_dropping/
Why: http://www.coindesk.com/bitcoin-nodes-need/
How-To: https://medium.com/@lopp/how-to-set-up-a-bitcoin-full-node-2dd1c09763d3
The semi-eli5 on this is that nodes on the bitcoin network verify transactions, prevent double-spending, and keep a record of the block-chain. Lightweight nodes don't keep copies of blocks from the block chain, and only download (not store) verified blocks from other full-nodes in order to parse them, and update their local copy of the blockchain. Lightweight nodes can't verify transactions because they don't have enough history to guarantee all the inputs are unspent. Full nodes download EVERY block (keep a complete history) and check them against Bitcoin's core rules. This means downloading and storing a copy of the entire block-chain (which is currently sitting at 33~GB).
Some more info from the wiki on full-nodes:
Hopefully this provides some more info, I wrote this up kind of quick.
Edit 2: The stats page I have is custom. It's just a PHP page that uses bitcoind's JSON API and this PHP class to connect to my daemon, grab the stats, and output some of them along with formatted HTML. The page is hosted on a simple lighttpd server.
submitted by IAmPat57 to Bitcoin [link] [comments]

Is my Tor Bitcoind full node seen by new normal nodes?

I've finished the setup of a bitcoind node behind Tor like in method 1 of this guide
I'd like to be as helpful as possible to the network and especially new nodes trying to sync but unfortunately I only see 10 people connected to my node ( I assume 8 of them I'm downloading from and only 2 of them I'm uploading to.
Are new nodes able to see me right from the bat even if my 8333 port is only open using a .onion ip address?
If I want to set up an electrum server (electrumx) using .onion address will it be easy for normal electrum wallets to connect to my machine?
Thanks
submitted by anonimousanonimous to Bitcoin [link] [comments]

TIL why Newbies still download the Bitcoin-QT client!

Because we told them to. Newbies don't start with reddit or bitcoinforums (unless they are redditors, of course). They start with what looks like an authoritative source. (And journalists do the same.) Let's have a look.
Bitcoin.org has a list of wallets and recommends two good options at the top, MultiBit or Schildbach, but if you take a look at the bottom, it prominently lists: Bitcoin-QT and Armory (which requires Bitcoin-QT/bitcoind). This is fine, I suppose, but it explains the popularity of Bitcoin-QT since most alternatives come with warnings.
weusecoins, a website that is prominently featured as a first stop for newbies, sends users dierectly to Bitcoin-QT, without any explanation or alternatives.
Bitcoin Wiki same same
This guarantees some bad user experience. Can we fix it? Who edits weusecoins.com and bitcoin.it?
submitted by arbeitslos to Bitcoin [link] [comments]

Scenario: I am using an 3rd party source for my addresses' utxo's. What is the most malicious thing that api provider could perform against me? (other than denial or service or possible

Experienced bitcoiners skip below below the line Very brief summary for those unfamiliar (not going too deep into it as they would be unlikely to produce a trustworthy answer to this question.)
The info required for a new transaction is essentially no more than: * What transaction output is unspent and capable of being used to fund your next transaction (aka user0 --1btc-> usera. Usera must look back and retrieve the serialized tx so usera knows: * The txid * The index of the output that refers sent to your address
Imagine a tx with addrM sending 0.1 each to addrx, addra, and addrz. Therefor the owner of addra must reference that transaction and their place on the list of outputs (0 = addrx, 1 = addra, 2 = addrz)
Here's an example of using bitcoind to create a new transaction using the txid and the addr index of which you want to spent coins from. bitcoind createrawtransaction '[{"txid":"a9d4599e15b53f3eb531608ddb31f48c695c3d0b3538a6bda871e8b34f2f430c","vout":0 <-- index 0}]' '{"mkZBYBiq6DNoQEKakpMJegyDbw2YiNQnHT":50 <-- the new transaction's recipient:amount to send}'
READ THIS FOR MORE INFO I didnt want to get into much more than an abstract

The point is....

One must have access to an up to date blockchain/UTXO set in order to be certain that the transaction you will broadcast is valid

*Suppose a malicious actor had the ability to falsify what data i put into the utxo's txid and index ((but not anything like the send to address or the scriptsig/redeemscript), *what is the most malicious thing they could do other thing simple denial of service by feeding you falsified utxo data and the tx's ending up getting rejected be the network.
But would it be possible to get someone to spend their own money as a miner fee by sending a utxo (the attacker must know that this particular utxo is redeemable by the victim) dataset that lowballs the utxo value--causing the victim to create a transaction where they are under the impression that, for example, the have 0.5 to spend and want to spend .45, but realistically that utxo is 2 bitcoins. sThe victim would create a tx that sends .45 to the intended recipient of that tx, then 0.0499 sent tto the victim's change address.
So to summarize:
Victim> hey source of blockchain data, gimme a utxo attacker> ok here you go, you were sent .5 btc to addr 123212321... index 4 Victim> thanks bro. im gonna broadcast this tx utilizing that utxo and it looks like the following
Victims understanding of the situation addr1 (0.5) > addrZ (0.45) > changeaddr1 (0.0499) fee = utxo - sum(outputs) fee = 0.5 - (0.45 + 0.0499) fee = 0.0001
What is actually happening:
addr1 (1.00) > addrZ (0.45) > changeaddr1 (0.0499) fee = utxo - sum(outputs) fee = 1.00 - (0.45 + 0.0499) fee = 0.5001
Thus despite the attack requiring one to be in a position like this anyways, the most likely attack scenario would involve a mining pool + online wallet operator. After solving a block, the pool owner withholds it and provides the fake utxo data to their wallet users and after the attacker ends up getting enough victims to have created these crazy high fee tx's, they then publish the block and reap the rewards from the users tricked into paying a crazy high fee.
Is what i'm saying making sense? is this attack--despite its specificity of situation--doable? The bottom line is what is the worst you risk when trusting a third party for utxo data.
I got progressively more and more tired through out this so i could have done a better job writing it--I hope people understand what im getting at.
Resources regarding these topics below
submitted by NYC_Prisoner to Bitcoin [link] [comments]

RPC tests; what are they, why do we care, can you help?

Some of you may have seen me tweeting about the RPC tests earlier today (which ended with https://twitter.com/dogecoin_devs/status/957634677380132865 ). This post is a bit to talk about the development process, a bit to update everyone, and a bit to track status for the other developers.
One of the issues we had with early Dogecoin releases was how to efficiently test compatibility of new releases with software such as mining pools. The RPC ( https://en.bitcoin.it/wiki/API_reference_(JSON-RPC) ) interface is extensive and the commands interact with each other, making it time consuming to test effectively. Bitcoin Core solved this by introducing a set of tests which emulate services using the RPC interface.
These are important because Bitcoin isn't designed to support restructuring it, as we do (although more recent releases are vastly easier to update), so some of the changes we make can interact in unexpected ways with the base code. Issues such as the memory usage of 1.10 were indicated by the RPC tests, although at the time we missed the connection between the test problems and memory.
Max has updated the majority of the tests, reducing numbers of blocks mined to match Dogecoin maturity numbers, increasing transaction amounts to compensate for differences in fee schemes, etc. However, we have a small number of tests which fail due to unclear reasons, plus others which fail intermittently. My current concern is https://github.com/dogecoin/dogecoin/blob/1.14-dev/qa/rpc-tests/p2p-fullblocktest.py , which fails when testing that coinbase (mining reward) payments cannot be spent too early. I've checked and re-checked the numbers and the logs and it looks correct, and have had to take a break for now.
If you want to dig into these, the tests are run by:
  1. Build 1.14-dev (note it creates bitcoind because it's not rebranded yet)
  2. Run qa/pull-testerpc-tests.py p2p-fullblocktest to run just the full block tests, or qa/pull-testerpc-tests.py to run the full standard test suite (this will highlight other failing tests to tackle later).
  3. Wait for ages for the first run (it's a bit faster on later runs), like seriously think about getting some food while this works.
  4. It will fail and report the error.
When the test fails, it will leave behind the generated node configurations, logs and wallets (the path is displayed at the start of the tests running). You can also get more detail by running the tests with the option --tracerpc.
The other major failing test I'm struggling with is fundrawtransaction, which seems to be highlighting some sort of issue with watch only addresses. On line 617 ( https://github.com/dogecoin/dogecoin/blob/1.14-dev/qa/rpc-tests/fundrawtransaction.py#L617 ) it fails while trying to spend funds that node 3 should have access to because node 0 sent them to an address node 3 is watching, however for whatever reason node 3 seems unaware of those funds. Checking the generated wallet seems to suggest the address is watched correctly, but it doesn't realise the transaction is relevant.
We're working on these, but if anyone wants to dig in, please do go for it :)
submitted by rnicoll to dogecoindev [link] [comments]

How Ulbricht paid ฿100 to learn about `bitcoind -rescan`

I was revisiting Gwern and my research into the Silk Road / Mt. Gox connection, found something very interesting on the '1MR6pXD' address. Oh Ulbricht...
xpost from this post:
Long-time readers may recall that among Ulbricht's problems with developing & running Silk Road, he had problems with theft from his MtGox account: "Silk Goxed: How DPR used Mtgox for hedging & lost big". We identified his accounts and deposits as part of that investigation.
Based on our findings, imposter has found a previously unknown Ross Ulbricht account on the Bitcoin Talk forums, used for tech support with SR1 problems: the user account "kohlanta" (posts), registered 19 August 2012. The name is a reference to a tourist destination in Thailand; Ulbricht was living in Australia around this time and traveled some places, apparently including Ko Lanta. This account must be Ulbricht because (1) who has ฿40,000 in a single address in August 2015? (2) the amount matches up exactly with the big transactions noted in 'Silk Goxed', and kohlanta's address 1MR..Y is the one involved in the Ulbricht withdrawals/deposits. (When he told me about this, I felt dumb - why hadn't I bothered to google 1MR..Y during our 'Silk Goxed' work to see if it had appeared anywhere else online?)
kohlanta's first question concerns the inability to move ฿40,000; this problem was solved by bitcoind -rescan, as pointed out by BT user fcmatt. (You can see he did indeed pay the ฿100 by noting that the amounts shrink by exactly that much.)
We can also see the trial testimony independently confirmed by kohlanta's further questions: questions about using curl, json-rpc, and versioning issues with the wallet.
There's nothing really important here that I can see, but it's interesting to see him panicking over the 1MR..Y, and it's definitely a reminder that Bitcoin addresses are only pseudonymous; once pseudonymity has been broken or damaged, you can continue to follow transactions & addresses to see what you can find.
submitted by impost_r to Bitcoin [link] [comments]

Limit number of Bitcoind connections

Bitcoind is bogging down my internet connection. How can I limit the number of connections to, say, 10 connections?
submitted by bobthesponge1 to Bitcoin [link] [comments]

Coding a game

Does anyone know how the http://bitcoingem.com/ is coded?
I don't want to make a copy of it, but I am interested in how they are able to take payments and send payments out automatically like that. I see a lot of game sthat do this, but I'm not sure how it is done.
submitted by velacreations to Bitcoin [link] [comments]

[uncensored-r/Bitcoin] ? Lightning Network Megathread ?

The following post by codedaway is being replicated because some comments within the post(but not the post itself) have been silently removed.
The original post can be found(in censored form) at this link:
np.reddit.com/ Bitcoin/comments/7ojkoz
The original post's content was as follows:
This post is a collaboration with the Bitcoin community to create a one-stop source for Lightning Network information.
There are still questions in the FAQ that are unanswered, if you know the answer and can provide a source please do so!

?What is the Lightning Network? ?

Explanations:

Specifications / White Papers

Videos

Lightning Network Experts on Reddit

Lightning Network Experts on Twitter

  • @rusty_twit - (Rusty Russell - Blockstream)
  • @starkness - (Elizabeth Stark - Lightning Labs)
  • @roasbeef - (Olaoluwa Osuntokun - Lightning Labs)
  • @snyke - (Christian Decker - Blockstream)
  • @JackMallers - (Jack Mallers - Zap)
  • @tdryja - (Tadge Dryja - Digital Currency Initiative)
  • @jcp - (Joseph Poon - Lightning Labs)
  • @stile65 - (Alex Akselrod - Lightning Labs)
  • @bitconner - (Conner Fromknecht - Lightning Labs)

Medium Posts

Learning Resources

Books

Desktop Interfaces

Web Interfaces

Tutorials and resources

Lightning on Testnet

Lightning Wallet
Place a transaction
Instant Swaps for Altcoins using Lightning

Lightning on Mainnet

Atomic Swaps

Developer Documentation and Resources

Lightning implementations:

  • LND - Lightning Network Daemon (Golang)
  • eclair - A Scala implementation of the Lightning Network (Scala)
  • lit - Lightning Network node software (Golang)
  • c-lightning - A Lightning Network implementation in C
  • lightning-onion - Onion Routed Micropayments for the Lightning Network (Golang)
  • lightning-integration - Lightning Integration Testing Framework
  • ptarmigan - C++ BOLT-Compliant Lightning Network Implementation [Incomplete]

Libraries

submitted by censorship_notifier to noncensored_bitcoin [link] [comments]

[Warning] basically every https site was vulnerable, every coin/bitcoin server was vulnerable too. Update private keys and certs.

Better summary and implications of same news, because I will ask mods to sticky this important warning.
Please, do copy this summary to other coin's channels subs; this is very wide spread bug affecting many projects.
There is a huge bug that causes most programs that do encryption like https, or bitcoin-API, or secured IRC, or many communicators, possibly also emails - to be vulnerable (links below)
Attacker could easily steal your identity, your passwords, your private keys, read your data from such programs, on most (all?) operating systems.
Fix is released just now, at least for linuxes, e.g. for Debian.
What to do about it.
  1. do not panick.
  2. If you run any https website - pool, exchange, download site with coin (e.g. bitcoin, dogecoin) software, forum, wiki, web wallet etc - you should consider past keys to be compromised. You should generate new SSL certificates. You should at some point get all users to reset passwords in secure way.
  3. If you USE any https website - pool, exchange, all of above, then you should make sure owners upgraded AND USE NEW CERTIFICATES. Otherwise it could be easy to hack such service with your data/money in it.
  4. If you use bitcoind/dogecoind (same for all coins) and possibly some of other clients/wallets that would open SSL even to localhost, then if you ever had non trusted program, local user or anything then you really must, and otherwise you should, consider the existing addresses as possibly burned.
To be really safe you should move the money carefully to new addresses, from new wallet (to not use the previously pre-generated pool of addresses etc).
You decide, if that is just few bucks worth of currency then maybe not, and if you have thousands euro worth then you will probably want to move this coins.
  1. communication channels like emails, IRC, IM (jabber and others) also were potentially exploited. Responsible operators of such servers should issue new certificates for their services, and ask you to reset passwords. For some time you should perhaps trust a less communication over this channels.
Luckily best methods already are prepared for "server got owned" scenarios: on jabber we have OTR encryption (didn't yet doublechecked if it is secure, but afair yes), and on irc #bitcoin-otr for example we had the bot requring GPG signed messages adding layer of protection.
LT;DR: demand upgraded certs in services you use, if you have (or plan to have) considerable amount of coins then you better move to new wallet (after upgrading system) and be more carefully about https, irc, chats etc.
Links:
Nice site describing the SSL bug in depth: http://heartbleed.com/
Bitcoin insightful technical discussion: http://www.reddit.com/Bitcoin/comments/22gquw/psa_vuln_in_libssl_allows_to_read_64kb_of/
Debian on some aspects of debugging this bug on linuxes: http://www.reddit.com/debian/comments/22gshl/critical_vulnerability_in_libssl_allows_to_read/
Mempo's (secure private linux) report: http://mempo.org/memposec/issue2.html
submitted by rafalfreeman to Bitcoin [link] [comments]

Bitcoin erklärt: Lohnt er sich als Geldanlage? - YouTube Bitcoin nasıl alınır? Bitcoin ve altcoin satın alma - YouTube BITCOIN IS SIMPLY BULLISH - YouTube bitcoin wiki - YouTube Andreas Popp: Was steckt hinter der Bitcoin-Hysterie ...

Bitcoind – a daemon program that implements the Bitcoin protocol, is controlled through the command line. It is one of the main components of the Bitcoin network node software. Bitcoin software exists in two forms: a GUI application and a background application (daemon on Unix, service on Windows). Bitcoin ist eine dezentralisierte Krypto-Währung erfunden durch den Programmierer Satoshi Nakamoto, welcher auch den Original Bitcoin Client erschuf. Es erlaubt anonymen und sicheren Besitz von Bitcoins, ohne auf einen zentralen Server angewiesen zu sein um Transaktionen durchführen zu können oder ein "Konto" aufzubewahren. Bitcoin (inoffizielle Abkürzung BTC) ist ein Open-Source-Softwareprojekt für die gleichnamige digitale Währung auf Peer-to-Peer (P2P) Basis, das 2009 von Satoshi Nakamoto ins Leben gerufen wurde. Über sogenannte Bitcoin-Adressen kann Geld anonym von einer Wallet-Datei (engl. Geldbörse) bzw. einem speziellen Service über das Netzwerk an andere Adressen überwiesen werden. Im Gegensatz zu ... History of Bitcoin cryptocurrency.Bitcoin is a decentralized cryptocurrency created in 2008 by the pseudonymous Satoshi Nakamoto.This account resumes the whole history of Bitcoin since 2008 to 2017 and 2018.. On 18 August 2008, the domain name bitcoin.org was registered.. Later that year on October 31st, a link to a paper authored by Satoshi Nakamoto titled Bitcoin: A Peer-to-Peer Electronic ... Bitcoin ist eine dezentrale digitale Währung, die von einer unbekannten Person oder einer Gruppe von Leuten unter dem Namen Satoshi Nakamoto erstellt und als Open-Source-Software im Jahr 2009 veröffentlicht wurde. Die Währung ist nicht auf einen zentralen Server angewiesen, um Transaktionen zu verarbeiten oder Fonds zu halten. Es gibt ein Maximum in der Höhe von 2.099.999.997.690.000 ...

[index] [24522] [15880] [51110] [4114] [14794] [43311] [28936] [12094] [314] [35372]

Bitcoin erklärt: Lohnt er sich als Geldanlage? - YouTube

LIMITED TIME ONLY - 40% OFF!! - CLOCK IS TICKING Diamond Combo 40% OFF!! https://www.cryptocrewuniversity.com/product/diamond-combo/ Gold Combo 40% OFF!! htt... https://shiftdelete.net/bitcoin-nasil-alinir-altcoin-satin-alma Bitcoin nasıl alınır diye merak ediyorsanız, hem BTC hem de altcoinlerin nasıl alınabildiğini... Gier frisst Hirn. Diese einfache Erkenntnis ist nicht neu. Denken wir nur an die börseneuphorische dot.com-Blase, die sich vor knapp 20 Jahren weltweit aufba... Thank you for watching my Bitcoin Robot Review! complete list of auto-trading software http://www.youtube.com/watch?v=EgoYtsLuEOo The First Bitcoin Robot is ... Support the stream: https://streamlabs.com/cryptocapitalventure Bitcoin has heavy price resistance at the 200 moving average on the daily chart. BTC needs to...

#