LSB: A Lightweight Scalable Blockchain for IoT security
LSB: A Lightweight Scalable Blockchain for IoT security
LSB: A Lightweight Scalable Blockchain for IoT security
LSB: A Lightweight Scalable BlockChain for IoT Security
Blockchain Explorer - Search the Blockchain | BTC | ETH | BCH
(PDF) LSB: A Lightweight Scalable BlockChain for IoT
Claim Free Coins has removed it's timer
Claim Free Coins is the faucet for many cryptos which is connected to a faucethub account, and you used to have to wait 5 minutes between claims. Now there is no timer, just finish a captcha and after a short few seconds you get paid out. For instance, the bitcoin one allows me to earn between 5-10 satoshi every 15-20 seconds. Here are some links : Bitcoin Ethereum Doge Litecoin I don't know how long it'll last but if you're dedicated you can easily earn some crypto. The reason being, I assume, is because faucethub is being rebranded in a months time and that new site will only use Bitcoin and no altcoins. Still, no reason not to stock up on atleast BTC while you have the chance.
DispVM init.d not seeing installed phyton3 pip modules, working fine in template and AppVM
So I'm trying to create a disposable VM for Whonix+ZeroNet. It's working as a regular VM (created separate gw and ws templates, customized with the ZN software, then created VMs for both). I have an init.d file which has been working flawlessly to start ZN when the vm is opened up
However, in the DispVM, it fails giving errors that the modules aren't installed
Aug 14 02:36:46 host systemd: Starting LSB: ZeroNet... Aug 14 02:34:50 host zeronet: [02:34:50] PluginManager Plugin AnnounceBitTorrent load error: ModuleNotFoundError: No module named Aug 14 02:34:50 host zeronet: [02:34:50] PluginManager Plugin Bigfile load error: ModuleNotFoundError: No module named 'merkletool Aug 14 02:34:50 host zeronet: [02:34:50] - Libsecp256k1 load failed: No module named 'coincurve', try to load OpenSSL Aug 14 02:34:50 host zeronet: [02:34:50] - OpenSSL load failed: No module named 'bitcoin', falling back to slow bitcoin verify Aug 14 02:34:50 host zeronet: [02:34:50] - Unhandled exception: No module named 'geventwebsocket' Aug 14 02:34:50 host zeronet: Traceback (most recent call last): Aug 14 02:34:50 host zeronet: File "/opt/ZeroNet/zeronet.py", line 18, in main Aug 14 02:34:50 host zeronet: import main Aug 14 02:34:50 host zeronet: File "/opt/ZeroNet/src/main.py", line 63, in Aug 14 02:34:50 host zeronet: PluginManager.plugin_manager.loadPlugins() Aug 14 02:34:50 host zeronet: File "/opt/ZeroNet/src/Plugin/PluginManager.py", line 147, in loadPlugins Aug 14 02:34:50 host zeronet: func() Aug 14 02:34:50 host zeronet: File "/opt/ZeroNet/plugins/UiConfig/UiConfigPlugin.py", line 17, in importPluginnedClasses Aug 14 02:34:50 host zeronet: from Ui import UiWebsocket Aug 14 02:34:50 host zeronet: File "/opt/ZeroNet/src/Ui/__init__.py", line 1, in Aug 14 02:34:50 host zeronet: from .UiServer import UiServer Aug 14 02:34:50 host zeronet: File "/opt/ZeroNet/src/Ui/UiServer.py", line 10, in Aug 14 02:34:50 host zeronet: from geventwebsocket.handler import WebSocketHandler Aug 14 02:34:50 host zeronet: ModuleNotFoundError: No module named 'geventwebsocket' Aug 14 02:34:50 host zeronet: - Starting ZeroNet... Aug 14 02:34:50 host zeronet: --- Aug 14 02:34:50 host zeronet: Please report it: https://github.com/HelloZeroNet/ZeroNet/issues/new?assignees=&labels=&template=bug Aug 14 02:34:50 host systemd: Started LSB: ZeroNet.
however, from that same DispVM, if I fire up a terminal and manually run the zeronet.py file, it connects fine.
A full explanation of what Antpool is doing, how it harms the network, and what should be done (if anything) to make it irrelevant.
Hey bitcoin I saw a lot of people with the same questions about AntPool and what's happening. I had to dig hard to find halfway decent answers at times, and other times there was some hefty misinformation and unwarranted FUD in some corners. This is instead, a full explanation of what is happening and why you should and shouldn't be worried. Why is AntPool mining tiny blocks? This is an attack of sorts on bitcoin, but not in a straightforward manner. There is no immediate increase of fees because these blocks exist. In fact, all it means is that currently the network is mining with hashrate:
H - A
where H is the total hashrate and A is the hashrate of AntPool. AntPool doesn't change the overall hashrate of those cooperating with Bitcoin. If it doesn't effect transaction fees or times, why should I be worried? The long-term stability of the network is where this attack comes into play. The difficulty is re-targeted every 2016 blocks to make sure the difficulty stays as close to 10 minutes as possible. The AntPool blocks, despite their lack of transaction processing, will be included in this count. That means that as long as there are malicious miners, the effective transaction throughput will be:
10 min * (H / (H - A))
This is after re-targeting and if the attack has been going on for the entire 2016 block timeframe. Is this economically viable for miners? Perhaps, but to be a miner on AntPool, you'd have to be pretty much all-in on the other side of the chain with substantial holdings. The block reward is currently 12.5 bitcoin and there are around 4 bitcoin in transaction fees per block. if you decide to mine sub-optimally, you miss out on around $16k USD of effective reward for the transaction fees alone. That one block alone isn't going to vastly change the price, but mining a high percentage of blocks throughout the re-targeting period will. Let's say they effectively manage to mine 20% of blocks, that would be a transaction cost loss of around USD $6 Million for a mere 20% loss of network hashrate. While the network will be slower, you'd have to hold tens to hundreds of thousands of coins on the alternate chain for this attack to be viable. I noticed that AntPool doesn't always mine empty blocks, what gives? I noticed the same thing. Check over here: https://blockchain.info/blocks Sometimes AntPool mines a full block, sometimes they mine a partial block, and somtimes they mine an empty block. There's a chance that AntPool found a way to optimize hash hits by cycling number of transactions first instead of the nonce variable. (I can't for the life of me see how this optimization would be any quicker.) In any case, if this is what's happening, then the average AntPool block would be half as large as the average. The more likely possibility is that AntPool has 2 different versions of the mining software where you can opt-in to being malicious or they can turn it on and off at will or some systems had a mining error that fails to process transactions but still hashes. What can be done? Honestly, I don't think this will be a problem long-term. It's just (probably) not economically viable unless AntPool is trying to get enough miners off the main chain to take it over and run a 50% attack... Which will be very hard and still economically costly. If AntPool continues sub-optimal mining, a lot of miners will likely leave for a better (honest) pool. If this becomes a serious problem, what should be done? Honestly, adding a check-able hashed variable like:
to each block would be as ideal as possible. The check algorithm could have a pool factor like 1.5 or 2 so a few non-propagated transactions don't pull a false negative. This could even eat a bit of the signature field to keep block size the exact same.
The only difference is if the 1.5 or 2 factor is met in a local transaction pool, the miner would reject blocks with a 0 in the field. When recalculating difficulty, the network would not count non-full blocks where the bit is set towards the difficulty. This would mean that the only time the difficulty could be tampered with is when the mempool is 1Mb - 2Mb (max) Wouldn't that require a hard-fork? I unfortunately can't envision a way to implement without hard-forking, but the massive upside to this is that the difficulty of the (new) main chain would be lower overall so that miners who don't cooperate would be increasingly squeezed out of the old chain. The good news is... it likely doesn't matter. I'm relatively certain AntPool will have to mine at an economic deficit for too long for it to have any net positive for them. Edit 2 After thinking more about it, the new chain would still be valid on the other side - especially if old data locations were used such as the LSB of sig. Technically, this WOULD only be a soft fork because the older systems that find a block would have to orphan and swap to the new chain when they inevitably encounter a longer chain. user69213 may have a point that dummy transactions may be used in attack. I'll have to look back into how and when transactions are validated, but I think he does have a point. Still, other changes would also be sufficient to overcome this hurtle like PoW. (Although ASIC miners won't be happy about that and it would be a definitive hard-fork) TL;DR: What AntPool is doing willlikelyhave no long-term effect on Bitcoin, and if it does, there are at least some ways to make it not matter. Edit - Minor Text Fixes
I'm posting this just as much for my benefit as for everyone else's (so I can refer to it in the future), but this is the be-all-to-end-all on getting it set up easily and quickly. The Steps 1) Sign up for an account at berry.pw. Buy the one for $10 a year. When it asks for details like hostname and stuff, just enter random data like google.com. Remember your root password though. 2) Choose Ubuntu 14.04 LTS Server as the installation OS. Even if a newer version is released by the time you do this, don't use it. Just wait and use this version, because it is guaranteed to work. 3) Check your email for the login details. I wasted 4 hours talking to tech support (which is sub-par, but you should never have to talk to them if you follow these instructions) because of this: check your spam/junk folder. In the past, this has never happened on Gmail with me, but this email ended up wrongfully in the Junk folder. 4) In the email you got (subject: New Virtual Server Information), record the IP address titled "Main IP", and verify that the root password is correct. 5) Log into your server via SSH. On a Mac or Linux computer, run "ssh [email protected] IP", and enter your root password. On a Windows computer, look up how to log into an SSH server via "Putty". 6) Run "lsb_release -c" and remember what the Codename Output is (it should be "trusty", but if you installed a different version of Ubuntu, then just remember what that output says). 7) Run "apt-get install nano curl fail2ban". fail2ban is for protection to prevent brute for attacks. If you don't want this protection, you can just remove that word. I recommend you leave it, but it automatically blocks your IP if it is making too many requests to the server. To remove it later, run "apt-get remove fail2ban". 8) Run "nano /etc/apt/sources.list" 9) At the bottom, add the following line: deb http://deb.torproject.org/torproject.org trusty main 9a) If the Codename from 4 steps ago wasn't "Trusty", replace "trusty" in the above step with what ever it said, in all lower case. 9b) Exit nano by: Press Control-X, press enter, press Y, press enter. 10) Run the following commands one-by-one. If any give an error, comment to this post and I'll try to help.
11) Run "nano /etc/totorrc". Make the following changes by typing Control-W to search for keywords in the following changes (same as Find function in any modern text editor) 11a) Remove the "#" in front of each of the following lines:
#ORPort 9001 #DirPort 9030 #ExitPolicy accept *:6660-6667,reject *:* # allow irc ports but no more #ExitPolicy accept *:119 # accept nntp as well as default exit policy
11b) You can change the numbers after ORPort and DirPort to 443 and 80 if you want to help people behind firewalls (optional step). 11c) At the bottom, add the following line:
ContactInfo [an email address that can handle spam without brackets] - [Bitcoin Address if you have one for donations without brackets]
11d) Press Control-X, press enter, press Y, press enter. 12) Run "service tor reload". 13) View the log by running "cat /valog/tolog". You can run this in the future to view the log and make sure everything is working fine. 13a) However, there's an easier way to test the server. Go to this port checker, type in your main IP from the email at the beginning of the tutorial, and enter 9001 in the port box. Press enter, make sure it's working. Then do it with port 9030. If those both work, you're all set! If not, post in the Reddit and we'll try to fix it. 13b) Further testing: After a few hours (give it a minimum of 6 hours), search for your IP at the Tor node lookup service. If it's not there, check to make sure the ports are forwarded. Post here for help if you'd like. 14) Enjoy helping the world! In 365 days, you'll see your PayPal account another $10 lighter. But it's all worth it. Please donate with bitcoin and changetip if you like what I've done here. Thanks for reading. Resources:
Bitcoin doesn't scale. There's a lot of issues at hand here, but the most fundemental of them is that to create a block you need to update the state of the UTXO set, and the way Bitcoin is designed means that updating that state requires bandwidth equal to all the transaction volume to keep up with the changes to what set. Long story short, we get O(n2) scaling, which is just plain infeasible. So let's split up the transaction volume so every individual miner only needs to keep up with some portion. In a rough sense that's what alt-coins do - all the tipping microtransactions on Doge never have to hit the Bitcoin blockchain for instance, reducing pressure on the latter. But moving value between chains is inconvenient; right now moving value requires trusted third parties. Two-way atomic chain transfers does help here, but as recent discussions on the topic showed there's all sorts of edge cases with reorganizations that are tricky to handle; at worst they could lead to inflation. So what's the underlying issue there? The chains are too independent. Even with merge-mining there's no real link between one chain and another with regard to the order of transactions. Secondly merge-mining suffers from 51% attacks if the chain being merge-mined doesn't have a majority of total hashing power... which kinda defeats the point if we're worried about miner scalability.
Blocks and the TXO set as a binary radix tree
So how can we do better? Start with the "big picture" idea and take the linear blockchain and turn it into a tree:
Obviously if we could somehow split up the UTXO set such that individual miners/full nodes only had to deal with subsets of this tree we could significantly reduce the bandwidth that any one miner would need to process. Every transaction output would get a unique identifier, say txoutid=H(txout) and we put those outputs in blocks appropriately. We can't just wave a magic wand and say that every block has the above structure and all miners co-ordinate to generate all blocks in one go. Instead we'll do something akin to merge mining. Start with a linear blockchain with ten blocks. Arrows indicate hashing:
a0 ⇽ a1 ⇽ a2 ⇽ a3 ⇽ a4 ⇽ a5 ⇽ a6 ⇽ a7 ⇽ a8 ⇽ a9
The following data structure could be the block header in this scheme. We'll simplify things a bit and make up our own; obviously with some more effort the standard Satoshi structures can be used too:
For now we'll say this is a pure-proof-of-publication chain, so our block contents are very simple:
struct BlockContents: uint256 merkleRoot
As usual the PoW is valid if H(blockHeader) < blockHeader.target. Every block creates new txouts, and the union of all such txouts is the txout set. As shown previously(1) this basic proof-of-publication functionality is sufficient to build a crypto-currency even without actually validating the contents of the so-called transaction outputs. The scalability of this sucks, so let's add two more chains below the root to start forming a tree. For fairness we'll only allow miners to either mine a, a+b, or a+c; attempting to mine a block with both the b and c chains simultaneously is not allowed.
struct BlockContents: uint256 childBlockHash # may be null bool childSide # left or right uint256 merkleRoot
Furthermore we shard the TXO space by defining txoid = H(txout) and allowing any txout in chain a, and only txouts with LSB=0 in b, LSB=1 in c; the beginning of a binary radix tree. With some variance thrown in we get the following:
We now have three different versions of the TXO set: ∑a, ∑a + ∑b, and ∑a+∑c. Each of these versions is consistent in that for a given txoutid prefix we can achieve consensus over the contents of the TXO set. Of course, this definition is recursive:
Unicode unfortunately lacks 3D box drawing at present, so I've only shown left-sided child chains.
Herding the child-chains
If all we were doing was publishing data, this would suffice. But what if we want to syncronize our actions? For instance, we may want a new txout to only be published in one chain if the corresponding txout in another is marked spent. What we want is a reasonable rule for child-chains to be invalidated when their parents are invalidated so as to co-ordinate actions across distant child chains by relying on the existance of their parents. We start by removing the per-chain difficulties, leaving only a single master proof-of-work target. Solutions less than target itself are considered valid in the root chain, less than the target << 1 in the root's children, << 2 in the children's children etc. In children that means the header no longer contains a time, nonce, or target; the values in the root block header are used instead:
For a given chain we always choose the one with the most total work. But to get our ordering primitive we'll add a second, somewhat brutal, rule: Parent always wins. We achieve this moving the child block header into the parent block itself:
struct BlockContents: ChildBlockHeader childHeader # may be null (zeroed out) bool childSide # left or right bytes txout
Let's look at how this works. We start with a parent and a child chain:
a0 ⇽ a1 ⇽ a2 ⇽ a3 ↖ ↖ b0 ⇽ b1 ⇽ b2 ⇽ b3 ⇽ b4 ⇽ b5
First there is the obvious scenario where the parent chain is reorganized. Here our node learns of a2 ⇽ a3' ⇽ a4':
This behavior is easier to understand if you say instead that the node learned about block b2', which had more total work than b2 as the sum total of work done in the parent chain in blocks specifying the that particular child chain is considered before comparing the total work done in only the child chain. It's important to remember that the parent blockchain has and validates both childrens' block headers; it is not possible to mine a block with an invalid secret of child headers. For instance with the following:
We'll say transactions go in the tree-chain according to their prevTxHash, with the depth in the tree equal to the depth of the previous output. This means that you can prove an output was created by the existance of that transaction in the block with prefix matching H(tx.prevTxHash), and you can prove the transaction output is unspent by the non-existance of a transaction in the block with prefix matching H(tx). With our above re-organization rule everything is consistent too: if block bi contains tx1, then the corresponding block c_j can contain a valid tx2 spending tx1 provided that c_j depends on a_p and there is a path from a_p to b(i+k). Here's an example, starting with tx1 in c2:
b0 ⇽⇽⇽⇽⇽⇽ b1 ↙ a0 ⇽ a1 ⇽ a2 ↖ c0 ⇽ c1 ⇽ c2
Block b2 below can't yet contain tx2 because there is no path:
b0 ⇽⇽⇽⇽⇽⇽ b1 ⇽ b2 ↙ a0 ⇽ a1 ⇽ a2 ↖ c0 ⇽ c1 ⇽ c2
However now c3 is found, whose PoW solution was also valid for a3:
Now that a3 exists, block c2 can only be killed if a3 is, which would also kill b3 and thus destroy tx2.
Proving transaction output validity in a token transfer system
How cheap is it to prove the entire history of a token is valid from genesis? Perhaps surprisingly, without any cryptographic moon-math the cost is only linear! Remember that a transaction in a given chain has committed to the chain that it can be spent in. If Alice is to prove to Bob that the output she gave him is valid, she simply needs to prove that for every transaction in the histroy of the token the token was created, remained unspent, then finally was spent. Proving a token remained unspent between blocks b_n and b_m is trivially possible in linear size. Once the token is spent nothing about blocks beyond b_m is required. Even if miners do not validate transactions at all the proof size remains linear provided blocks themselves have a maximum size - at worst the proof contains some invalid transactions that can be shown to be false spends. While certainly inconvenient, it is interesting how such a simple system appears to in theory scale to unlimited numbers of transactions and with an appropriate exchange rate move unlimited amounts of value. A possible model would be for the the tokens themselves to have power of two values, and be split and combined as required.
The lost data problem
There is however a catch: What happens when blocks get lost? Parent blocks only contain their childrens' headers, not the block contents. At some point the difficulty of producing a block will drop sufficiently for malicious or accidental data loss to be possible. With the "parent chain wins" rule it must be possible to recover from that event for mining on the child to continue. Concretely, suppose you have tx1 in block c2, which can be spent on chain b. The contents of chain a is known to you, but the full contents of chain b are unavailable:
Blocks a3 and a4 are known to have children on b, but the contents of those children are unavailable. We can define some ratio of unknown to known blocks that must be proven for the proof to be valid. Here we show a 1:1 ratio:
The proof of now shows that while a3 and a4 has b-side blocks, by the time you reach b6 those two lost blocks were in the minority. Of course a real system needs to be careful that mining blocks and then discarding them isn't a profitably way to create coins out of thin air - ratios well in excess of 1:1 are likely to be required.
Another idea is to say if the parent blockchain's contents are known we can insert a challenge into it specifying that a particular child block be published verbatim in the parent. Once the challenge is published further parent blocks may not reference that children on that side until either the desired block is re-republished or some timeout is reached. If the timeout is reached, mining backtracks to some previously known child specified in the challenge. In the typical case the block is known to a majority of miners, and is published, essentially allowing new miners to force the existing ones to "cough up" blocks they aren't publishing and allow the new ones to continue mining. (obviously some care needs to be taken with regard to incentives here) While an attractive idea, this is our first foray into moon math. Suppose such a challenge was issued in block a2, asking for the contents of b1 to be published. Meanwhile tx1 is created in block c3, and can only be spent on a b-side chain:
b0 ⇽ b1 ↙ a0 ⇽ a1 ⇽ (a2) ⇽ a3 ↖ c0 ⇽ c1 ⇽ c2 ⇽ c3
The miners of the b-chain can violate the protocol by mining a4/b1', where b1' appears to contain valid transaction tx2:
A proof of tx2 as valid payment would entirely miss fact that the challenge was published and thus not know that b1' was invalid. While I'm sure the reader can come up with all kinds of complex and fragile way of proving fraud to cause chain a to be somehow re-organized, what we really want is some sub-linear proof of honest computation. Without getting into details, this is probably possible via some flavor of sub-linear moon-math proof-of-execution. But this paper is too long already to start getting snarky.
Beyond token transfer systems
We can extend our simple one txin, one txout token transfer transactions with merkle (sum) trees. Here's a rough sketch of the concept:
Where previously a transaction committed to a specific transaction output, we can make our transactions commit to a merkle-sum-tree of transaction outputs. To then redeem a transaction output you prove that enough prior outputs were spend to add up to the new output's value. The entire process can happen incrementally without any specific co-operation between miners on different parts of the chain, and inputs and outputs can come from any depth in the tree provided that care is taken to ensure that reorganization is not profitable. Like the token transfer system proving a given output is valid has cost linear with history. However we can improve on that using non-interactive proof techniques. For instance in the linear token transfer example the history only needs to be proven to a point where the transaction fees are higher than the value of the output. (easiest where the work required to spend a txout of a given value is well defined) A similar approach can be easily taken with the directed-acyclic-graph of mutliple-input-output transactions. Secondly non-interactive proof techniques can also be used, again out of the scope of this already long preliminary paper. 1) "Disentangling Crypto-Coin Mining: Timestamping, Proof-of-Publication, and Validation", http://www.mail-archive.com/bitcoin-development%40lists.sourceforge.net/msg03307.html
In Gavin's first proposal of BIP101 it was 0x20000004, then he changed it to 0x20000007 for allegedly better compatibility to legacy Bitcoin. If I understand right, the rightmost byte is 0x01=00000001 (v1), or 0x02=00000010 (v2), or 0x03=00000011 (v3) for legacy Bitcoin. I assume, Gavin just flipped the next bit (which was never used before) and kept the other two LSBs untouched, therefore 0x07=00000111. But what is the "2" then in the leftmost byte of the version number?! Does legacy bitcoin also use that field, and for which purpose?!? What does it mean? Any reference? And finally, what about the two center bytes, which are always 0x0000. Have they ever been different from 0x0000? Generally, I assume that the 32 bit for the version number is largely over-dimensioned, we have only used 2 bits for version numbers 1, 2 and 3 up to now as far as I know, and for future hard-forks one could also cycle the version number around (e.g. modulo 16 or modulo 256) because version numbers from the very past have long been extinct and can be re-used at some later point in time. So, many of these 32 bits in the version number could be used for other purposes? (maybe the "2" serves such other purpose already? But which?).
Bitcoin and since then has been widely used in other cryp- As was noted in Sections 2.1 and 3, LSB separates the. data ﬂow from the transaction ﬂow. While transactions are. The most popular and trusted block explorer and crypto transaction search engine. A.Dorri,S.S.Kanhere,R.Jurdaketal./JournalofParallelandDistributedComputing134(2019)180–197 183 Fig. 1. AnoverviewofLSB. Theaddressoftheburntransactionisusedastheinputof The stored data might be payment history, e.g. Bitcoin , or a contract or even personal data . In recent As noted in Section 1, in LSB, we propose a time-based consensus algorithm in place of the more resource-intensive alternatives such as PoW and PoS that are typically used in BC. The consensus algorithm must ensure a block generator is 1 INTRODUCTION B LOCKCHIAN (BC) is an immutable timestamp ledger of blocks that is used for storing and sharing data in a distributed manner . The stored data might be payment history, e.g. Bitcoin , or a contract  or even personal data . In recent years, BC has attracted tremendous at-tention from practitioners and academics in
How To Mine 1 Bitcoin in 10 Minutes Blockchain BTC Miner Pro
Bitcoin Update - just buy $1 worth of bitcoin please! - Duration: 6:24. davincij15 57,680 views. 6:24. Your Crypto Will Die - Here's Why - Duration: 7:37. Cedric Dahl 13,116 views. How To Mine 1 Bitcoin in 10 Minutes without Investment with Blockchain March 2020 Updated - Duration: 8:44. IT- Guy 90,199 views. 8:44. BTC MINER ULTIMATE Real or Fake ... The Future of Bitcoin - Why 1 BTC Might Reach $100 Million by 2030 - Duration: 10:23. Trinity Investment Project 8,985 views How To Mine 1 Bitcoin in 10 Minutes without Investment with Blockchain March 2020 Updated - Duration: 8:44. IT- Guy 93,812 views. 8:44. Make Money by Typing/Writing $200 to $800 per Day! EASY HACK! Bitcoin At $1 Million By 2020 Is Still Possible And Might Be A Discount Says James Altucher - Duration: 13:56. Kitco NEWS 206,654 views. 13:56.