Miner fees - Bitcoin Wiki

Graphene got merged in Bitcoin Unlimited Client!! https://github.com/BitcoinUnlimited/BitcoinUnlimited/pull/973

Graphene got merged in Bitcoin Unlimited Client!! https://github.com/BitcoinUnlimited/BitcoinUnlimited/pull/973 submitted by rdar1999 to btc [link] [comments]

Can anyone explain to me why Bitcoin Cash choose not to implement SegWit?

For the last weeks I am trying to fully understand the block size debate (late to the party I know). As I understand the original Bitcoin split into two different versions: Bitcoin Core (BTC) with Segregated Witness (SegWit) and Bitcoin Cash (BCH) with bigger blocks.
But can anyone explain why SegWit was not implemented in Bitcoin Cash, or will it be implemented later on? Or is it a 'wrong solution' and if so, why? Wouldn't Bitcoin Cash with bigger blocks and SegWit be the best alternative?
Thank you in advance for answering these questions and giving your opinion!
submitted by Exbu to btc [link] [comments]

Technical: More channel mechanisms!

This is a followup of my older post about the history of payment channel mechanisms.
The "modern" payment channel system is Lightning Network, which uses bidirectional indefinite-lifetime channels, using HTLCs to trustlessly route through the network.
However, at least one other payment channel mechanism was developed at roughly the same time as Lightning, and there are also further proposals that are intended to replace the core payment channel mechanism in use by Lightning.
Now, in principle, the "magic" of Lightning lies in combining two ingredients:
  1. Offchain updateable systems.
  2. HTLCs to implement atomic cross-system swaps.
We can replace the exact mechanism implementing an offchain updateable system. Secondly we can replace the use of HTLCs with another atomic cross-system swap, which is what we would do when we eventually switch to payment points and scalars from payment hashes and preimages.
So let's clarify what I'll be discussing here:
Now I might use "we" here to refer to what "we" did to the design of Bitcoin, but it is only because "we" are all Satoshi, except for Craig Steven Wright.
So, let's present the other payment channel mechanisms. But first, a digression.

Digression: the new nSequence and OP_CHECKSEQUENCEVERIFY

The new relative-timelock semantics of nSequence.
Last time we used nSequence, we had the unfortunate problem that it would be easy to rip off people by offering a higher miner fee for older state where we own more funds, then convince the other side of the channel to give us goods in exchange for a new state with tiny miner fees, then publish both the old state and the new state, then taunt the miners with "so which state is gonna earn you more fees huh huh huh?".
This problem, originally failed by Satoshi, was such a massive facepalm that, in honor of miners doing the economically-rational thing in the face of developer and user demands when given a non-final nSequence, we decided to use nSequence as a flag for the opt-in replace-by-fee.
Basically, under opt-in replace-by-fee, if a transaction had an nSequence that was not 0xFFFFFFFF or 0xFFFFFFFE, then it was opt-in RBF (BIP125). Because you'd totally abuse nSequence to bribe miners in order to steal money from your bartender, especially if your bartender is not a werebear.
Of course, using a 4-byte field for a one-bit flag (to opt-in to RBF or not) was a massive waste of space, so when people started proposing relative locktimes, the nSequence field was repurposed.
Basically, in Bitcoin as of the time of this writing (early 2020) if nSequence is less than 0x80000000 it can be interpreted as a relative timelock. I'll spare you the details here, BIP68 has them, but basically nSequence can indicate (much like nLockTime) either a "real world" relative lock time (i.e. the output must have been confirmed for X seconds before it can be spent using a transaction with a non-zero nSequence) or the actual real world, which is measured in blocks (i.e. the output must have been confirmed for N blocks before it can be spent using a transaction with a non-zero nSequence). Of course, this is the Bitcoin universe and "seconds" is a merely human delusion, so we will use blocks exclusively.
And similarly to OP_CHECKLOCKTIMEVERIFY, we also added OP_CHECKSEQUENCEVERIFY in BIP112. This ensures that the nSequence field is a relative-locktime (i.e. less than 0x80000000) and that it is the specified type (block-based or seconds-based) and that it is equal or higher to the specified minimum relative locktime.
It is important to mention the new, modern meaning of nSequence, because it is central to many of the modern payment channel mechanisms, including Lightning Poon-Dryja.
Lessons learned?

Decker-Wattenhofer "Duplex Micropayment Channels"

Mechanisms-within-mechanisms for a punishment-free bidirectional indefinite-lifetime payment channel.
The Decker-Wattenhofer paper was published in 2015, but the Poon-Dryja "Lightning Network" paper was published in 2016. However, the Decker-Wattenhofer paper mentions the Lightning mechanism, specifically mentioning the need to store every old revocation key (i.e. the problem I mentioned last time that was solved using RustyReddit shachains). Maybe Poon-Dryja presented the Lightning Network before making a final published paper in 2016, or something. Either that or cdecker is the Bitcoin time traveler.
It's a little hard to get an online copy now, but as of late 2019 this seems to work: copy
Now the interesting bit is that Decker-Wattenhofer achieves its goals by combining multiple mechanisms that are, by themselves, workable payment channel mechanisms already, except each has some massive drawbacks. By combining them, we can minimize the drawbacks.
So let's go through the individual pieces.

Indefinite-lifetime Spilman channels

As mentioned before, Spilman channels have the drawback that they have a limited lifetime: the lock time indicated in the backoff transaction or backoff branch of the script. However, instead of an absolute lock time, we can use a relative locktime.
In order to do so, we use a "kickoff" transaction, between the backoff transaction and the funding transaction. Our opening ritual goes this way, between you and our gender-neutral bartender-bancho werebear:
  1. First, you compute the txid for the funding transaction and the kickoff transaction. The funding transaction takes some of your funds and puts it into a 2-of-2 between you and the bartender, and the kickoff is a 1-input 1-output transaction that spends the funding transaction and outputs to another 2-of-2 between you and the bartender.
  2. Then, you generate the backoff transaction, which spends the kickoff transaction and returns all the funds to you. The backoff has a non-zero nSequence, indicating a delay of a number of blocks agreed between you, which is a security/convenience tradeoff parameter
  3. You sign the backoff transaction, then send it to the bartender.
  4. The bartender signs the backoff, and gives back the fully-signed transaction to you.
  5. You sign the kickoff transaction, then send it to the bartender.
  6. The bartender signs the kickoff, and gives it back to you fully signed.
  7. You sign and broadcast the funding transaction, and both of you wait for the funding transaction to be deeply confirmed.
The above setup assumes you're using SegWit, because transaction malleability fix.
At any time, either you or the bartender can broadcast the kickoff transaction, and once that is done, this indicates closure of the channel. You do this if you have drunk enough alcoholic beverages, or the bartender could do this when he or she is closing the bar.
Now, to get your drinks, you do:
  1. Sign a transaction spending the kickoff, and adding more funds to the bartender, to buy a drink. This transaction is not encumbered with an nSequence.
  2. Hand the signed transaction to the bartender, who provides you with your next drink.
The channel is closed by publishing the kickoff transaction. Both of you have a fully-signed copy of the kickoff, so either of you can initiate the close.
On closure (publication and confirmation of the kickoff transaction), there are two cases:
  1. You fail to pick up any chicks at the bar (I prefer female humans of optimum reproductive age myself rather than nestling birds, but hey, you do you) so you didn't actually spend for drinks at all. In this case, the bartender is not holding any transactions that can spend the kickoff transaction. You wait for the agreed-upon delay after the kickoff is confirmed, and then publish the backoff transaction and get back all the funds that you didn't spend.
  2. You spend all your money on chicks and end up having to be kicked into a cab to get back to your domicile, because even juvenile birds can out-drink you, you pushover. The bartender then uses the latest transaction you gave (the one that gives the most money to him or her --- it would be foolish of him or her to use an earlier version with less money!), signs it, and broadcasts it to get his or her share of the money from the kickoff transaction.

Decrementing nSequence channels

Enforcing order by reducing relative locktimes.
I believe this to be novel to the Decker-Wattenhofer mechanism, though I might be missing some predecessor.
This again uses the new relative-locktime meaning of nSequence. As such, it also uses a kickoff transaction like the above indefinite-lifetime Spilman channel. Set up is very similar to the setup of the above indefinite-lifetime Spilman channel, except that because this is bidirectional, we can actually have both sides put money into the initial starting backoff transaction.
We also rename the "backoff" transaction to "state" transaction. Basically, the state transaction indicates how the money in the channel is divided up between the two participants. The "backoff" we sign during the funding ritual is now the first state transaction. Both sides keep track of the current state transaction (which is initialized to the first state transaction on channel establishment).
Finally, the starting nSequence of the first state transaction is very large (usually in the dozens or low hundreds of blocks).
Suppose one participant wants to pay the other. The ritual done is then:
  1. A new version of the current state transaction is created with more money in the payee side.
  2. This new version has nSequence that is one block lower than the current state transaction (in practice it should be a few blocks lower, not just one, because sometimes miners find blocks in quick succession).
  3. Both sides exchange signatures for the new state transaction.
  4. Both sides set the new state transaction as the current state transaction that will be the basis for the next payment.
When the channel is closed by publication of the kickoff transaction, then the transaction with the lowest nSequence becomes valid earlier than the other state transactions. This is enough to enforce that the most recent state transaction (the one with the lowest nSequence, and thus the first to become valid) is published.


Combining the ingredients of the Decker-Wattenhofer Duplex Micropayment Channels concoction.
Of note is that we can "chain" these mechanisms together in such a way that we strengthen their strengths while covering their weaknesses.
A note is that both the indefinite-lifetime nSequence Spilman variant, and the above decrementing nSequence mechanism, both have "kickoff" transactions.
However, when we chain the two mechanisms together, it turns out that the final transaction of one mechanism also serves as the kickoff of the next mechanism in the chain.
So for example, let's chain two of those decrementing nSequence channels together. Let's make them 144 blocks maximum delay each, and decrement in units of 4 blocks, so each of the chained mechanisms can do 37 updates each.
We start up a new channel with the following transactions:
  1. A funding transaction paying to a 2-of-2, confirmed deeply onchain. All other transactions are offchain until closure.
  2. A kickoff transaction spending the funding transaction output, paying to a 2-of-2.
  3. A "stage 1" decrementing nSequence state transaction, spending the kickoff, with current nSequence 144, paying to a 2-of-2.
  4. A "stage 2" decrementing nSequence state transaction, spending the stage 1, with current nSequence 144, paying to the initial state of the channel.
When we update this channel, we first update the "stage 2" state transaction, replacing it with an nSequence lower by 4 blocks. So after one update our transactions are:
  1. A funding transaction paying to a 2-of-2, confirmed deeply onchain. All other transactions are offchain until closure.
  2. A kickoff transaction spending the funding transaction output, paying to a 2-of-2.
  3. A "stage 1" decrementing nSequence state transaction, spending the kickoff, with current nSequence 144, paying to a 2-of-2.
  4. A "stage 2" decrementing nSequence state transaction, spending the stage 1, with current nSequence 140, paying to the second state of the channel.
The first 3 transactions are the same, only the last one is replaced with a state transaction with lower `nSequence.
Things become interesting when we reach the "stage 2" having nSequence 0. On the next update, we create a new "stage 1", with an nSequence that is 4 lower, and "reset" the "stage 2" back to an nSequence of 144.
This is safe because even though we have a "stage 2" with shorter nSequence, that stage 2 spends a stage 1 with an nSequence of 144, and the stage 1 with nSequence of 140 would beat it to the blockchain first.
This results in us having, not 36 + 36 updates, but instead 36 * 36 updates (1296 updates). 1296 updates is still kinda piddling, but that's much better than just a single-stage decrementing nSequence channel.
The number of stages can be extended indefinitely, and your only drawback would be the amount of blockchain space you'd spend for a unilateral close. Mutual cooperative closes can always shortcut the entire stack of staged transactions and cut it to a single mutual cooperative close transaction.
But that's not all! You might be wondering about the term "duplex" in the name "Duplex Micropayment Channels".
That's because the last decrementing nSequence stage does not hold the money of the participants directly. Instead, the last stage holds two indefinite-lifetime Spilman channels. As you might remember, Spilman channels are unidirectional, so the two Spilman channels represent both directions of the channel. Thus, duplex.
Let's go back to you and your favorite werebear bartender. If you were using a Decker-Wattenhofer Duplex Micropayment Channel, you'd have several stages of decrementing nSequence, terminated in two Spilman channels, a you-to-bartender channel and a bartender-to-you channel.
Suppose that, while drinking, the bartender offers you a rebate on each drink if you do some particular service for him or her. Let us not discuss what service this is and leave it to your imagination. So you pay for a drink, decide you want to get the rebate, and perform a service that the bartender finds enjoyable. So you transfer some funds on the you-to-bartender direction, and then later the bartender transfers some funds in the bartender-to-you channel after greatly enjoying your service.
Suppose you now exhaust the you-to-bartender direction. However, you note that the rebates you've earned are enough to buy a few more drinks. What you do instead is to update the staged decrementing nSequence mechanisms, and recreate the two Spilman directions such that the you-to-bartender direction contains all your current funds and the bartender-to-you direction contains all the bartender's funds. With this, you are now able to spend even the money you earned from rebates. At the same time, even if the staged decrementing nSequence mechanisms only have a few hundred thousand updates, you can still extend the practical number of updates as long as you don't have to reset the Spilman channels too often.

Burchert-Decker-Wattenhofer Channel Factories

Because you like channels so much, you put channels inside channels so you could pay while you pay. I N C E P T I O N
The Decker-Wattenhofer Duplex Micropayment Channels introduced the possibility of nesting a channel mechanism inside another channel mechanism. For example, it suggests nesting a decrementing-nSequence mechanism inside another decrementing-nSequence mechanism, and having as well an unlimited-lifetime Spilman channel at the end. In the Decker-Wattenhofer case, it is used to support the weakness of one mechanism with the strength of another mechanism.
One thing to note is that while the unlimited-lifetime Spilman channel variant used is inherently two-participant (there is one payer and one payee), the decrementing-nSequence channel mechanism can be multiparticipant.
Another thing of note is that nothing prevents one mechanism from hosting just one inner mechanism, just as it is perfectly fine for a Lightning Network channel to have multiple HTLCs in-flight, plus the money in your side, plus the money in the counterparty's side. As these are "just" Bitcoin-enforceable contracts, there is no fundamental difference between an HTLC, and a payment channel mechanism.
Thus the most basic idea of the Burchert-Decker-Wattenhofer Channel Factories paper is simply that we can have a multiparticipant update mechanism host multiple two-party update mechanisms. The outer multiparticipant update mechanism is called a "channel factory" while the inner two-party update mechanisms are called "channels".
The exact mechanism used in the Burchert-Decker-Wattenhofer paper uses several decrementing-nSequence mechanisms to implement the factory, and Decker-Wattenhofer Duplex Micropayment Channels to implement the channel layer.
However, as noted before, there is no fundamental difference between a Poon-Dryja channel and an HTLC. So it is in fact possible to have chained Decker-Wattenhofer decrementing-nSequence mechanisms to implement the factory level, while the channels are simply Poon-Dryja channels.


So this concludes for now an alternative mechanism to the classic Poon-Dryja that Lightning uses. The tradeoffs are significantly different between Decker-Wattenhofer vs Poon-Dryja:


Copyright 2020 Alan Manuel K. Gloria. Released under CC-BY.
submitted by almkglor to Bitcoin [link] [comments]

Technical: A Brief History of Payment Channels: from Satoshi to Lightning Network

Who cares about political tweets from some random country's president when payment channels are a much more interesting and are actually capable of carrying value?
So let's have a short history of various payment channel techs!

Generation 0: Satoshi's Broken nSequence Channels

Because Satoshi's Vision included payment channels, except his implementation sucked so hard we had to go fix it and added RBF as a by-product.
Originally, the plan for nSequence was that mempools would replace any transaction spending certain inputs with another transaction spending the same inputs, but only if the nSequence field of the replacement was larger.
Since 0xFFFFFFFF was the highest value that nSequence could get, this would mark a transaction as "final" and not replaceable on the mempool anymore.
In fact, this "nSequence channel" I will describe is the reason why we have this weird rule about nLockTime and nSequence. nLockTime actually only works if nSequence is not 0xFFFFFFFF i.e. final. If nSequence is 0xFFFFFFFF then nLockTime is ignored, because this if the "final" version of the transaction.
So what you'd do would be something like this:
  1. You go to a bar and promise the bartender to pay by the time the bar closes. Because this is the Bitcoin universe, time is measured in blockheight, so the closing time of the bar is indicated as some future blockheight.
  2. For your first drink, you'd make a transaction paying to the bartender for that drink, paying from some coins you have. The transaction has an nLockTime equal to the closing time of the bar, and a starting nSequence of 0. You hand over the transaction and the bartender hands you your drink.
  3. For your succeeding drink, you'd remake the same transaction, adding the payment for that drink to the transaction output that goes to the bartender (so that output keeps getting larger, by the amount of payment), and having an nSequence that is one higher than the previous one.
  4. Eventually you have to stop drinking. It comes down to one of two possibilities:
    • You drink until the bar closes. Since it is now the nLockTime indicated in the transaction, the bartender is able to broadcast the latest transaction and tells the bouncers to kick you out of the bar.
    • You wisely consider the state of your liver. So you re-sign the last transaction with a "final" nSequence of 0xFFFFFFFF i.e. the maximum possible value it can have. This allows the bartender to get his or her funds immediately (nLockTime is ignored if nSequence is 0xFFFFFFFF), so he or she tells the bouncers to let you out of the bar.
Now that of course is a payment channel. Individual payments (purchases of alcohol, so I guess buying coffee is not in scope for payment channels). Closing is done by creating a "final" transaction that is the sum of the individual payments. Sure there's no routing and channels are unidirectional and channels have a maximum lifetime but give Satoshi a break, he was also busy inventing Bitcoin at the time.
Now if you noticed I called this kind of payment channel "broken". This is because the mempool rules are not consensus rules, and cannot be validated (nothing about the mempool can be validated onchain: I sigh every time somebody proposes "let's make block size dependent on mempool size", mempool state cannot be validated by onchain data). Fullnodes can't see all of the transactions you signed, and then validate that the final one with the maximum nSequence is the one that actually is used onchain. So you can do the below:
  1. Become friends with Jihan Wu, because he owns >51% of the mining hashrate (he totally reorged Bitcoin to reverse the Binance hack right?).
  2. Slip Jihan Wu some of the more interesting drinks you're ordering as an incentive to cooperate with you. So say you end up ordering 100 drinks, you split it with Jihan Wu and give him 50 of the drinks.
  3. When the bar closes, Jihan Wu quickly calls his mining rig and tells them to mine the version of your transaction with nSequence 0. You know, that first one where you pay for only one drink.
  4. Because fullnodes cannot validate nSequence, they'll accept even the nSequence=0 version and confirm it, immutably adding you paying for a single alcoholic drink to the blockchain.
  5. The bartender, pissed at being cheated, takes out a shotgun from under the bar and shoots at you and Jihan Wu.
  6. Jihan Wu uses his mystical chi powers (actually the combined exhaust from all of his mining rigs) to slow down the shotgun pellets, making them hit you as softly as petals drifting in the wind.
  7. The bartender mutters some words, clothes ripping apart as he or she (hard to believe it could be a she but hey) turns into a bear, ready to maul you for cheating him or her of the payment for all the 100 drinks you ordered from him or her.
  8. Steely-eyed, you stand in front of the bartender-turned-bear, daring him to touch you. You've watched Revenant, you know Leonardo di Caprio could survive a bear mauling, and if some posh actor can survive that, you know you can too. You make a pose. "Drunken troll logic attack!"
  9. I think I got sidetracked here.
Lessons learned?

Spilman Channels

Incentive-compatible time-limited unidirectional channel; or, Satoshi's Vision, Fixed (if transaction malleability hadn't been a problem, that is).
Now, we know the bartender will turn into a bear and maul you if you try to cheat the payment channel, and now that we've revealed you're good friends with Jihan Wu, the bartender will no longer accept a payment channel scheme that lets one you cooperate with a miner to cheat the bartender.
Fortunately, Jeremy Spilman proposed a better way that would not let you cheat the bartender.
First, you and the bartender perform this ritual:
  1. You get some funds and create a transaction that pays to a 2-of-2 multisig between you and the bartender. You don't broadcast this yet: you just sign it and get its txid.
  2. You create another transaction that spends the above transaction. This transaction (the "backoff") has an nLockTime equal to the closing time of the bar, plus one block. You sign it and give this backoff transaction (but not the above transaction) to the bartender.
  3. The bartender signs the backoff and gives it back to you. It is now valid since it's spending a 2-of-2 of you and the bartender, and both of you have signed the backoff transaction.
  4. Now you broadcast the first transaction onchain. You and the bartender wait for it to be deeply confirmed, then you can start ordering.
The above is probably vaguely familiar to LN users. It's the funding process of payment channels! The first transaction, the one that pays to a 2-of-2 multisig, is the funding transaction that backs the payment channel funds.
So now you start ordering in this way:
  1. For your first drink, you create a transaction spending the funding transaction output and sending the price of the drink to the bartender, with the rest returning to you.
  2. You sign the transaction and pass it to the bartender, who serves your first drink.
  3. For your succeeding drinks, you recreate the same transaction, adding the price of the new drink to the sum that goes to the bartender and reducing the money returned to you. You sign the transaction and give it to the bartender, who serves you your next drink.
  4. At the end:
    • If the bar closing time is reached, the bartender signs the latest transaction, completing the needed 2-of-2 signatures and broadcasting this to the Bitcoin network. Since the backoff transaction is the closing time + 1, it can't get used at closing time.
    • If you decide you want to leave early because your liver is crying, you just tell the bartender to go ahead and close the channel (which the bartender can do at any time by just signing and broadcasting the latest transaction: the bartender won't do that because he or she is hoping you'll stay and drink more).
    • If you ended up just hanging around the bar and never ordering, then at closing time + 1 you broadcast the backoff transaction and get your funds back in full.
Now, even if you pass 50 drinks to Jihan Wu, you can't give him the first transaction (the one which pays for only one drink) and ask him to mine it: it's spending a 2-of-2 and the copy you have only contains your own signature. You need the bartender's signature to make it valid, but he or she sure as hell isn't going to cooperate in something that would lose him or her money, so a signature from the bartender validating old state where he or she gets paid less isn't going to happen.
So, problem solved, right? Right? Okay, let's try it. So you get your funds, put them in a funding tx, get the backoff tx, confirm the funding tx...
Once the funding transaction confirms deeply, the bartender laughs uproariously. He or she summons the bouncers, who surround you menacingly.
"I'm refusing service to you," the bartender says.
"Fine," you say. "I was leaving anyway;" You smirk. "I'll get back my money with the backoff transaction, and posting about your poor service on reddit so you get negative karma, so there!"
"Not so fast," the bartender says. His or her voice chills your bones. It looks like your exploitation of the Satoshi nSequence payment channel is still fresh in his or her mind. "Look at the txid of the funding transaction that got confirmed."
"What about it?" you ask nonchalantly, as you flip open your desktop computer and open a reputable blockchain explorer.
What you see shocks you.
"What the --- the txid is different! You--- you changed my signature?? But how? I put the only copy of my private key in a sealed envelope in a cast-iron box inside a safe buried in the Gobi desert protected by a clan of nomads who have dedicated their lives and their childrens' lives to keeping my private key safe in perpetuity!"
"Didn't you know?" the bartender asks. "The components of the signature are just very large numbers. The sign of one of the signature components can be changed, from positive to negative, or negative to positive, and the signature will remain valid. Anyone can do that, even if they don't know the private key. But because Bitcoin includes the signatures in the transaction when it's generating the txid, this little change also changes the txid." He or she chuckles. "They say they'll fix it by separating the signatures from the transaction body. They're saying that these kinds of signature malleability won't affect transaction ids anymore after they do this, but I bet I can get my good friend Jihan Wu to delay this 'SepSig' plan for a good while yet. Friendly guy, this Jihan Wu, it turns out all I had to do was slip him 51 drinks and he was willing to mine a tx with the signature signs flipped." His or her grin widens. "I'm afraid your backoff transaction won't work anymore, since it spends a txid that is not existent and will never be confirmed. So here's the deal. You pay me 99% of the funds in the funding transaction, in exchange for me signing the transaction that spends with the txid that you see onchain. Refuse, and you lose 100% of the funds and every other HODLer, including me, benefits from the reduction in coin supply. Accept, and you get to keep 1%. I lose nothing if you refuse, so I won't care if you do, but consider the difference of getting zilch vs. getting 1% of your funds." His or her eyes glow. "GENUFLECT RIGHT NOW."
Lesson learned?

CLTV-protected Spilman Channels

Using CLTV for the backoff branch.
This variation is simply Spilman channels, but with the backoff transaction replaced with a backoff branch in the SCRIPT you pay to. It only became possible after OP_CHECKLOCKTIMEVERIFY (CLTV) was enabled in 2015.
Now as we saw in the Spilman Channels discussion, transaction malleability means that any pre-signed offchain transaction can easily be invalidated by flipping the sign of the signature of the funding transaction while the funding transaction is not yet confirmed.
This can be avoided by simply putting any special requirements into an explicit branch of the Bitcoin SCRIPT. Now, the backoff branch is supposed to create a maximum lifetime for the payment channel, and prior to the introduction of OP_CHECKLOCKTIMEVERIFY this could only be done by having a pre-signed nLockTime transaction.
With CLTV, however, we can now make the branches explicit in the SCRIPT that the funding transaction pays to.
Instead of paying to a 2-of-2 in order to set up the funding transaction, you pay to a SCRIPT which is basically "2-of-2, OR this singlesig after a specified lock time".
With this, there is no backoff transaction that is pre-signed and which refers to a specific txid. Instead, you can create the backoff transaction later, using whatever txid the funding transaction ends up being confirmed under. Since the funding transaction is immutable once confirmed, it is no longer possible to change the txid afterwards.

Todd Micropayment Networks

The old hub-spoke model (that isn't how LN today actually works).
One of the more direct predecessors of the Lightning Network was the hub-spoke model discussed by Peter Todd. In this model, instead of payers directly having channels to payees, payers and payees connect to a central hub server. This allows any payer to pay any payee, using the same channel for every payee on the hub. Similarly, this allows any payee to receive from any payer, using the same channel.
Remember from the above Spilman example? When you open a channel to the bartender, you have to wait around for the funding tx to confirm. This will take an hour at best. Now consider that you have to make channels for everyone you want to pay to. That's not very scalable.
So the Todd hub-spoke model has a central "clearing house" that transport money from payers to payees. The "Moonbeam" project takes this model. Of course, this reveals to the hub who the payer and payee are, and thus the hub can potentially censor transactions. Generally, though, it was considered that a hub would more efficiently censor by just not maintaining a channel with the payer or payee that it wants to censor (since the money it owned in the channel would just be locked uselessly if the hub won't process payments to/from the censored user).
In any case, the ability of the central hub to monitor payments means that it can surveill the payer and payee, and then sell this private transactional data to third parties. This loss of privacy would be intolerable today.
Peter Todd also proposed that there might be multiple hubs that could transport funds to each other on behalf of their users, providing somewhat better privacy.
Another point of note is that at the time such networks were proposed, only unidirectional (Spilman) channels were available. Thus, while one could be a payer, or payee, you would have to use separate channels for your income versus for your spending. Worse, if you wanted to transfer money from your income channel to your spending channel, you had to close both and reshuffle the money between them, both onchain activities.

Poon-Dryja Lightning Network

Bidirectional two-participant channels.
The Poon-Dryja channel mechanism has two important properties:
Both the original Satoshi and the two Spilman variants are unidirectional: there is a payer and a payee, and if the payee wants to do a refund, or wants to pay for a different service or product the payer is providing, then they can't use the same unidirectional channel.
The Poon-Dryjam mechanism allows channels, however, to be bidirectional instead: you are not a payer or a payee on the channel, you can receive or send at any time as long as both you and the channel counterparty are online.
Further, unlike either of the Spilman variants, there is no time limit for the lifetime of a channel. Instead, you can keep the channel open for as long as you want.
Both properties, together, form a very powerful scaling property that I believe most people have not appreciated. With unidirectional channels, as mentioned before, if you both earn and spend over the same network of payment channels, you would have separate channels for earning and spending. You would then need to perform onchain operations to "reverse" the directions of your channels periodically. Secondly, since Spilman channels have a fixed lifetime, even if you never used either channel, you would have to periodically "refresh" it by closing it and reopening.
With bidirectional, indefinite-lifetime channels, you may instead open some channels when you first begin managing your own money, then close them only after your lawyers have executed your last will and testament on how the money in your channels get divided up to your heirs: that's just two onchain transactions in your entire lifetime. That is the potentially very powerful scaling property that bidirectional, indefinite-lifetime channels allow.
I won't discuss the transaction structure needed for Poon-Dryja bidirectional channels --- it's complicated and you can easily get explanations with cute graphics elsewhere.
There is a weakness of Poon-Dryja that people tend to gloss over (because it was fixed very well by RustyReddit):
Another thing I want to emphasize is that while the Lightning Network paper and many of the earlier presentations developed from the old Peter Todd hub-and-spoke model, the modern Lightning Network takes the logical conclusion of removing a strict separation between "hubs" and "spokes". Any node on the Lightning Network can very well work as a hub for any other node. Thus, while you might operate as "mostly a payer", "mostly a forwarding node", "mostly a payee", you still end up being at least partially a forwarding node ("hub") on the network, at least part of the time. This greatly reduces the problems of privacy inherent in having only a few hub nodes: forwarding nodes cannot get significantly useful data from the payments passing through them, because the distance between the payer and the payee can be so large that it would be likely that the ultimate payer and the ultimate payee could be anyone on the Lightning Network.
Lessons learned?


After LN, there's also the Decker-Wattenhofer Duplex Micropayment Channels (DMC). This post is long enough as-is, LOL. But for now, it uses a novel "decrementing nSequence channel", using the new relative-timelock semantics of nSequence (not the broken one originally by Satoshi). It actually uses multiple such "decrementing nSequence" constructs, terminating in a pair of Spilman channels, one in both directions (thus "duplex"). Maybe I'll discuss it some other time.
The realization that channel constructions could actually hold more channel constructions inside them (the way the Decker-Wattenhofer puts a pair of Spilman channels inside a series of "decrementing nSequence channels") lead to the further thought behind Burchert-Decker-Wattenhofer channel factories. Basically, you could host multiple two-participant channel constructs inside a larger multiparticipant "channel" construct (i.e. host multiple channels inside a factory).
Further, we have the Decker-Russell-Osuntokun or "eltoo" construction. I'd argue that this is "nSequence done right". I'll write more about this later, because this post is long enough.
Lessons learned?
submitted by almkglor to Bitcoin [link] [comments]

Mempool is down to <12sats/byte, but yet there are still services/wallet paying 100-1000 sats byte, what gives?

i understand that when you are moving large amounts of money youll gladly pay a high fee to get in the very next block, but paying such a huge fee really doesnt make sense to me when using a 50-100sat fee pretty much already gurantees youll get in the next block right now.
looking at these graphs it seems like the 10sat fee txs are getting eaten into, which would mean that if you pay more then 10sats, your pretty much guranteed to get into the next block... if you really want to be sure you can overpay by a lot, lets say 100sats, but why the hell would you ever pay 500sats? the 100sats transactions already all clear fully within 1 block
does anyone have any insight as to where these dumbass transactions are coming from? is it just wallets that still have a really really bad estimator? is it services that have set the fee static and havent adjusted it in a while?
blocks are getting mined right now that contain both <10sat/byte AND >800sat/byte transactions at the same time...
submitted by inb4_banned to Bitcoin [link] [comments]

The dangerously shifted incentives of SegWit

The dangerously shifted incentives of SegWit submitted by tomtomtom7 to btc [link] [comments]

BCC network was under transaction malleability attack which changes txid. We've temporarily suspended withdrawal and your assets are safe.

BCC network was under transaction malleability attack which changes txid. We've temporarily suspended withdrawal and your assets are safe. submitted by -Hayo- to Bitcoin [link] [comments]

The real reason why UAHF spec won't require replay prevention.

Instead of making their new sighash optional, they could easily make it mandatory and prevent unintentional replays...
I think I found out why.
  1. Alice is a long time hodler of bitcoin, she sees that segwit has done great things for bitcoin and decides to move her coins from her old paper wallet to a Bech32 scanned P2WPKH address that the new Trezor interface (in the future) let's her send to. The paper wallet sweeping app can send to P2WPKH properly. So she is able to simply send her 100000 BTC to her shiny new Segwit Trezor... yaaaaay!
  2. Bob sees the transaction being broadcasted without any OP_RETURN nonsense, and smirks to himself.
  3. Bob takes the txid of the transaction Alice sent and the index of the segwit output. Slaps on a null scriptSig, and adds an output spending the whole entirety of the output to his P2PKH utxo, and broadcasts Alice's transaction AND Bob's new transaction on the BCC blockchain where Segwit will not be activated, so Alice's P2WPKH is merely an ANYONE_CAN_PAY utxo.
So basically, any users that wish to use Segwit after the lockin period in late August will need to be certain to include the stupid childish OP_RETURN replay protection OR face having your segwit funds be stolen on the BCC side.
Also, to take it one step further, a miner could easily just steal the output and put its entirety into fees which they would use to line their own pockets and mix the coins in to make it look like the miners themselves didn't steal it.
You know, I was starting to support UAHF's actions because they seemed to be amicably splitting off and saying their goodbyes, though I thought it very strange they were making replay prevention optional....... then it hit me. This was their intention all along. A final middle finger to Segwit users.
UAHF needs to remedy this. Or else they lose all respect.
submitted by kinoshitajona to Bitcoin [link] [comments]

Bitcoin-SV: are terabyte blocks feasible?

Block propagation time and block processing time (to prepare & validate) are very crucial factors. Every node(miner) has an economic incentive in propagating its block as quickly as possible so that nodes would be more likely to build on this fork. But simultaneously having a very large number of transactions contained in the block increases the block propagation time, so a node has to optimally balance the number of transactions to include (block size) with transaction fees plus block reward so for the best outcome.
But BSVs scaling approach expects to have logical blocks at gigabytes/terabytes sizes in future, the problem outlined above can be a huge obstacle in getting there. This problem will be exacerbated when block sizes get too big and ultimately the rational economically motivated nodes begin to ration the number of transactions in a block.
I believe currently the time complexity of block propagation is at O(~n), where n is the number of transactions, as there is currently no block compression (like Graphene). Also, block processing time complexity is at O(~n) too as most of the processing is serial.
Compact blocks (BIP 152) as implemented currently in BitcoinSV already does a basic level of block compression by,
typically a Compact block is about 10 - 15 % of the full uncompressed legacy block & this reduces the effective propagation time; while this is probably good enough for Bitcoin-Core as they are not seeking to increase block size, its certainly not enough for Bitcoin-SV.
Graphene which uses Bloom filters and Invertible Bloom Lookup Tables (IBLTs) seems to provide an efficient solution to the transaction set reconciliation problem, and it offers additional (from Compact blocks) compression where a Graphene block is ~10% of the size of a typical Compact block (from the author's empirical tests)
With the above information and certain assumptions we can quickly calculate the demands of a terabyte node and its feasibility with current hardware & bandwidth limitations.
1 TB block ==> 100-150 GB Compact block ==> 10 - 15 GB Graphene block
Lets conservatively go with the low of 10 GB Graphene compressed block, 10GB/ 10 Gb/s = 8 secs
we still need 8 full seconds to propagate this block one hop to the next immediate peer. Also, note that we conveniently ignored the massive parallelization that would be needed for transaction and block processing which would likely involve techniques like mempool and UTXO set sharding in the node architecture.
But the point to take home is 8 seconds is exorbitant and we need a better workable compression algorithm irrespective of other architectural improvements under the outlined assumptions.
The above led me to begin work on an "ultra compression" algorithm which is a stateful protocol and highly parallelizable (places high memory & CPU demands) and fits with the goal of a horizontally scalable architecture built on affordable consumer grade h/w. The outline of the algorithm looks promising and seems to compress the block by factor of thousands if not more especially for the block publisher and although the block size grows as we head farther from the publishing node, its still reasonable IMO.
Now, before I go further down this rabbit hole I wanted you guys to poke holes into my assumptions, requirements & calculation outlines. Subsequently I will publish (semi-formal) a paper detailing the ultra compression algorithm and how it fits with the overall node architecture per ideas expressed above.
Would appreciate if someone could point/educate me to alternative practical solutions that have already been vetted and are in the dev pipeline.
submitted by stoichammer to bitcoincashSV [link] [comments]

Hard fork version of SegWit is "literally exactly the same (as softfork version) except with the added downsides and dangers of a hard fork" - Just looking for discussion. Can someone refute or support this?

submitted by gizram84 to btc [link] [comments]

Craig Steven Wright is Satoshi Nakamoto

A couple of years ago in the early months of the 2017, I published a piece called Abundance Via Cryptocurrencies (https://www.reddit.com/C\_S\_T/comments/69d12a/abundance\_via\_cryptocurrencies/) in which I kind of foresaw the crypto boom that had bitcoin go from $1k to $21k and the alt-coin economy swell up to have more than 60% of the bitcoin market capitalisation. At the time, I spoke of coming out from “the Pit” of conspiracy research and that I was a bit suss on bitcoin’s inception story. At the time I really didn’t see the scaling solution being put forward as being satisfactory and the progress on bitcoin seemed stifled by the politics of the social consensus on an open source protocol so I was looking into alt coins that I thought could perhaps improve upon the shortcomings of bitcoin. In the thread I made someone recommended to have a look at 4chan’s business and finance board. I did end up taking a look at it just as the bull market started to really surge. I found myself in a sea of anonymous posters who threw out all kinds of info and memes about the hundreds, thousands, tens of thousands of different shitcoins and why they’re all going to have lambos on the moon. I got right in to it, I loved the idea of filtering through all the shitposts and finding the nuggest of truth amongst it all and was deeply immersed in it all as the price of bitcoin surged 20x and alt coins surged 5-10 times against bitcoin themselves. This meant there were many people who chucked in a few grand and bought a stash of alt coins that they thought were gonna be the next big thing and some people ended up with “portfolios” 100-1000x times their initial investment.
To explain what it’s like to be on an anonymous business and finance board populated with incel neets, nazis, capitalist shit posters, autistic geniuses and whoever the hell else was using the board for shilling their coins during a 100x run up is impossible. It’s hilarious, dark, absurd, exciting and ultimately addictive as fuck. You have this app called blockfolio that you check every couple of minutes to see the little green percentages and the neat graphs of your value in dollars or bitcoin over day, week, month or year. Despite my years in the pit researching conspiracy, and my being suss on bitcoin in general I wasn’t anywhere near as distrustful as I should have been of an anonymous business and finance board and although I do genuinely think there are good people out there who are sharing information with one another in good faith and feel very grateful to the anons that have taken their time to write up quality content to educate people they don’t know, I wasn’t really prepared for the level of organisation and sophistication of the efforts groups would go to to deceive in this space.
Over the course of my time in there I watched my portfolio grow to ridiculous numbers relative to what I put in but I could never really bring myself to sell at the top of a pump as I always felt I had done my research on a coin and wanted to hold it for a long time so why would I sell? After some time though I would read about something new or I would find out of dodgy relationships of a coin I had and would want to exit my position and then I would rebalance my portfolio in to a coin I thought was either technologically superior or didn’t have the nefarious connections to people I had come across doing conspiracy research. Because I had been right in to the conspiracy and the decentralisation tropes I guess I always carried a bit of an antiauthoritarian/anarchist bias and despite participating in a ridiculously capitalistic market, was kind of against capitalism and looking to a blockchain protocol to support something along the lines of an open source anarchosyndicalist cryptocommune. I told myself I was investing in the tech and believed in the collective endeavour of the open source project and ultimately had faith some mysterious “they” would develop a protocol that would emancipate us from this debt slavery complex.
As I became more and more aware of how to spot artificial discussion on the chans, I began to seek out further some of the radical projects like vtorrent and skycoin and I guess became a bit carried away from being amidst such ridiculous overt shilling as on the boards so that if you look in my post history you can even see me promoting some of these coins to communities I thought might be sympathetic to their use case. I didn’t see it at the time because I always thought I was holding the coins with the best tech and wanted to ride them up as an investor who believed in them, but this kind of promotion is ultimately just part of a mentality that’s pervasive to the cryptocurrency “community” that insists because it is a decentralised project you have to in a way volunteer to inform people about the coin since the more decentralised ones without premines or DAO structures don’t have marketing budgets, or don’t have marketing teams. In the guise of cultivating a community, groups form together on social media platforms like slack, discord, telegram, twitter and ‘vote’ for different proposals, donate funds to various boards/foundations that are set up to give a “roadmap” for the coins path to greatness and organise marketing efforts on places like reddit, the chans, twitter. That’s for the more grass roots ones at least, there are many that were started as a fork of another coin, or a ICO, airdrop or all these different ways of disseminating a new cryptocurrency or raising funding for promising to develop one. Imagine the operations that can be run by a team that raised millions, hundreds of millions or even billions of dollars on their ICOs, especially if they are working in conjunction with a new niche of cryptocurrency media that’s all nepotistic and incestuous.
About a year and a half ago I published another piece called “Bitcoin is about to be dethroned” (https://www.reddit.com/C\_S\_T/comments/7ewmuu/bitcoin\_is\_about\_to\_be\_dethroned/) where I felt I had come to realise the scaling debate had been corrupted by a company called Blockstream and they had been paying for social media operations in a fashion not to dissimilar to correct the record or such to control the narrative around the scaling debate and then through deceit and manipulation curated an apparent consensus around their narrative and hijacked the bitcoin name and ticker (BTC). I read the post again just before posting this and decided to refer to it to to add some kind of continuity to my story and hopefully save me writing so much out. Looking back on something you wrote is always a bit cringey especially because I can see that although I had made it a premise post, I was acting pretty confident that I was right and my tongue was acidic because of so much combating of shills on /biz/ but despite the fact I was wrong about the timing I stand by much of what I wrote then and want to expand upon it a bit more now.
The fork of the bitcoin protocol in to bitcoin core (BTC) and bitcoin cash (BCH) is the biggest value fork of the many that have occurred. There were a few others that forked off from the core chain that haven’t had any kind of attention put on them, positive or negative and I guess just keep chugging away as their own implementation. The bitcoin cash chain was supposed to be the camp that backed on chain scaling in the debate, but it turned out not everyone was entirely on board with that and some players/hashpower felt it was better to do a layer two type solution themselves although with bigger blocks servicing the second layer. Throughout what was now emerging as a debate within the BCH camp, Craig Wright and Calvin Ayre of Coin Geek said they were going to support massive on chain scaling, do a node implementation that would aim to restore bitcoin back to the 0.1.0 release which had all kinds of functionality included in it that had later been stripped by Core developers over the years and plan to bankrupt the people from Core who changed their mind on agreeing with on-chain scaling. This lead to a fork off the BCH chain in to bitcoin satoshis vision (BSV) and bitcoin cash ABC.


The premise for this post is that Craig S Wright was Satoshi Nakamoto. It’s an interesting premise because depending upon your frame of reference the premise may either be a fact or to some too outrageous to even believe as a premise. Yesterday it was announced via CoinGeek that Craig Steven Wright has been granted the copyright claim for both the bitcoin white-paper under the pen name Satoshi Nakamoto and the original 0.1.0 bitcoin software (both of which were marked (c) copyright of satoshi nakamoto. The reactions to the news can kind of be classified in to four different reactions. Those who heard it and rejected it, those who heard it but remained undecided, those who heard it and accepted it, and those who already believed he was. Apparently to many the price was unexpected and such a revelation wasn’t exactly priced in to the market with the price immediately pumping nearly 100% upon the news breaking. However, to some others it was a vindication of something they already believed. This is an interesting phenomena to observe. For many years now I have always occupied a somewhat positively contrarian position to the default narrative put forward to things so it’s not entirely surprising that I find myself in a camp that holds the minority opinion. As you can see in the bitcoin dethroned piece I called Craig fake satoshi, but over the last year and bit I investigated the story around Craig and came to my conclusion that I believed him to be at least a major part of a team of people who worked on the protocol I have to admit that through reading his articles, I have kind of been brought full circle to where my contrarian opinion has me becoming somewhat of an advocate for “the system’.

When the news dropped, many took to social media to see what everyone was saying about it. On /biz/ a barrage of threads popped up discussing it with many celebrating and many rejecting the significance of such a copyright claim being granted. Immediately in nearly every thread there was a posting of an image of a person from twitter claiming that registering for copyright is an easy process that’s granted automatically unless challenged and so it doesn’t mean anything. This was enough for many to convince them of the insignificance of the revelation because of the comment from a person who claimed to have authority on twitter. Others chimed in to add that in fact there was a review of the copyright registration especially in high profile instances and these reviewers were satisfied with the evidence provided by Craig for the claim. At the moment Craig is being sued by Ira Kleiman for an amount of bitcoin that he believes he is entitled to because of Craig and Ira’s brother Dave working together on bitcoin. He is also engaged in suing a number of people from the cryptocurrency community for libel and defamation after they continued to use their social media/influencer positions to call him a fraud and a liar. He also has a number of patents lodged through his company nChain that are related to blockchain technologies. This has many people up in arms because in their mind Satoshi was part of a cypherpunk movement, wanted anonymity, endorsed what they believed to be an anti state and open source technologies and would use cryptography rather than court to prove his identity and would have no interest in patents.

If you listen to Craig with an open mind, what cannot be denied is the man is bloody smart. Whether he is honest or not is up to you to decide, but personally I try to give everyone the benefit of the doubt and then cut them off if i find them to be dishonest. What I haven’t really been able to do with my investigation of craig is cut him off. There have been many moments where I disagree with what he has had to say but I don’t think people having an opinion about something that I believe to be incorrect is the same as being a dishonest person. It’s very important to distinguish the two and if you are unable to do so there is a very real risk of you projecting expectations or ideals upon someone based off your ideas of who they are. Many times if someone is telling the truth but you don’t understand it, instead of acknowledging you don’t understand it, you label them as being stupid or dishonest. I think that has happened to an extreme extent with Craig. Let’s take for example the moment when someone in the slack channel asked Craig if he had had his IQ tested and what it was. Craig replied with 179. The vast majority of people on the internet have heard someone quote their IQ before in an argument or the IQ of others and to hear someone say such a score that is actually 6 standard deviations away from the mean score (so probably something like 1/100 000) immediately makes them reject it on the grounds of probability. Craig admits that he’s not the best with people and having worked with/taught many high functioning people (sometimes on the spectrum perhaps) on complex anatomical and physiological systems I have seen some that also share the same difficulties in relating to people and reconciling their genius and understandings with more average intelligences. Before rejecting his claim outright because we don’t understand much of what he says, it would be prudent to first check is there any evidence that may lend support to his claim of a one in a million intelligence quotient.

Craig has mentioned on a number of occasions that he holds a number of different degrees and certifications in relation to law, cryptography, statistics, mathematics, economics, theology, computer science, information technology/security. I guess that does sound like something someone with an extremely high intelligence could achieve. Now I haven’t validated all of them but from a simple check on Charles Sturt’s alumni portal using his birthday of 23rd of October 1970 we can see that he does in fact have 3 Masters and a PhD from Charles Sturt. Other pictures I have seen from his office at nChain have degrees in frames on the wall and a developer published a video titled Craig Wright is a Genius with 17 degrees where he went and validated at least 8 of them I believe. He is recently publishing his Doctorate of Theology through an on-chain social media page that you have to pay a little bit for access to sections of his thesis. It’s titled the gnarled roots of creation. He has also mentioned on a number of occasions his vast industry experience as both a security contractor and business owner. An archive from his LinkedIn can be seen below as well.

LinkedIn - https://archive.is/Q66Gl
https://youtu.be/nXdkczX5mR0 - Craig Wright is a Genius with 17 Degrees
https://www.yours.org/content/gnarled-roots-of-a-creation-mythos-45e69558fae0 - Gnarled Roots of Creation.
In fact here is an on chain collection of articles and videos relating to Craig called the library of craig - https://www.bitpaste.app/tx/94b361b205196560d1bd09e4e3b3ec7ad6bea478af204cabfe243efd8fc944dd

So there is a guy with 17 degrees, a self professed one in a hundred thousand IQ, who’s worked for Australian Federal Police, ASIO, NSA, NASA, ASX. He’s been in Royal Australian Air Force, operated a number of businesses in Australia, published half a dozen academic papers on networks, cryptography, security, taught machine learning and digital forensics at a number of universities and then another few hundred short articles on medium about his work in these various domains, has filed allegedly 700 patents on blockchain related technology that he is going to release on bitcoin sv, copyrighted the name so that he may prevent other competing protocols from using the brand name, that is telling you he is the guy that invented the technology that he has a whole host of other circumstantial evidence to support that, but people won’t believe that because they saw something that a talking head on twitter posted or that a Core Developer said, or a random document that appears online with a C S Wright signature on it that lists access to an address that is actually related to Roger Ver, that’s enough to write him off as a scam. Even then when he publishes a photo of the paper copy which appears to supersede the scanned one, people still don’t readjust their positions on the matter and resort back to “all he has to do is move the coins or sign a tx”.


Yes Craig was on the Cypherpunk mailing list back in the day, but that doesn’t mean that he was or is an anarchist. Or that he shares the same ideas that Code Is Law that many from the crypto community like to espouse. I myself have definitely been someone to parrot the phrase myself before reading lots of Craig’s articles and trying to understand where he is coming from. What I have come to learn from listening and reading the man, is that although I might be fed up with the systems we have in place, they still exist to perform important functions within society and because of that the tools we develop to serve us have to exist within that preexisting legal and social framework in order for them to have any chance at achieving global success in replacing fiat money with the first mathematically provably scarce commodity. He says he designed bitcoin to be an immutable data ledger where everyone is forced to be honest, and economically disincentivised to perform attacks within the network because of the logs kept in a Write Once Read Many (WORM) ledger with hierarchical cryptographic keys. In doing so you eliminate 99% of cyber crime, create transparent DAO type organisations that can be audited and fully compliant with legislature that’s developed by policy that comes from direct democratic voting software. Everyone who wants anonymous coins wants to have them so they can do dishonest things, illegal things, buy drugs, launder money, avoid taxes.

Now this triggers me a fair bit as someone who has bought drugs online, who probably hasn’t paid enough tax, who has done illegal things contemplating what it means to have that kind of an evidence ledger, and contemplate a reality where there are anonymous cryptocurrencies, where massive corporations continue to be able to avoid taxes, or where methamphetamine can be sold by the tonne, or where people can be bought and sold. This is the reality of creating technologies that can enable and empower criminals. I know some criminals and regard them as very good friends, but I know there are some criminals that I do not wish to know at all. I know there are people that do horrific things in the world and I know that something that makes it easier for them is having access to funds or the ability to move money around without being detected. I know arms, drugs and people are some of the biggest markets in the world, I know there is more than $50 trillion dollars siphoned in to off shore tax havens from the value generated as the product of human creativity in the economy and how much human charity is squandered through the NGO apparatus. I could go on and on about the crappy things happening in the world but I can also imagine them getting a lot worse with an anonymous cryptocurrency. Not to say that I don’t think there shouldn’t be an anonymous cryptocurrency. If someone makes one that works, they make one that works. Maybe they get to exist for a little while as a honeypot or if they can operate outside the law successfully longer, but bitcoin itself shouldn’t be one. There should be something a level playing field for honest people to interact with sound money. And if they operate within the law, then they will have more than adequate privacy, just they will leave immutable evidence for every transaction that can be used as evidence to build a case against you committing a crime.

His claim is that all the people that are protesting the loudest about him being Satoshi are all the people that are engaged in dishonest business or that have a vested interest in there not being one singular global ledger but rather a whole myriad of alternative currencies that can be pumped and dumped against one another, have all kinds of financial instruments applied to them like futures and then have these exchanges and custodial services not doing any Know Your Customer (KYC) or Anti Money Laundering (AML) processes. Bitcoin SV was delisted by a number of exchanges recently after Craig launched legal action at some twitter crypto influencetalking heads who had continued to call him a fraud and then didn’t back down when the CEO of one of the biggest crypto exchanges told him to drop the case or he would delist his coin. The trolls of twitter all chimed in in support of those who have now been served with papers for defamation and libel and Craig even put out a bitcoin reward for a DOX on one of the people who had been particularly abusive to him on twitter. A big european exchange then conducted a twitter poll to determine whether or not BSV should be delisted as either (yes, it’s toxic or no) and when a few hundred votes were in favour of delisting it (which can be bought for a couple of bucks/100 votes). Shortly after Craig was delisted, news began to break of a US dollar stable coin called USDT potentially not being fully solvent for it’s apparent 1:1 backing of the token to dollars in the bank. Binance suffered an alleged exchange hack with 7000 BTC “stolen” and the site suspending withdrawals and deposits for a week. Binance holds 800m USDT for their US dollar markets and immediately once the deposits and withdrawals were suspended there was a massive pump for BTC in the USDT markets as people sought to exit their potentially not 1:1 backed token for bitcoin. The CEO of this exchange has the business registered out of Malta, no physical premises, the CEO stays hotel room to hotel room around the world, has all kind of trading competitions and the binance launchpad, uses an unregistered security to collect fees ($450m during the bear market) from the trading of the hundreds of coins that it lists on its exchange and has no regard for AML and KYC laws. Craig said he himself was able to create 100 gmail accounts in a day and create binance accounts with each of those gmail accounts and from the same wallet, deposit and withdraw 1 bitcoin into each of those in one day ($8000 x 100) without facing any restrictions or triggering any alerts or such.
This post could ramble on for ever and ever exposing the complexities of the rabbit hole but I wanted to offer some perspective on what’s been happening in the space. What is being built on the bitcoin SV blockchain is something that I can only partially comprehend but even from my limited understanding of what it is to become, I can see that the entirety of the crypto community is extremely threatened as it renders all the various alt coins and alt coin exchanges obsolete. It makes criminals play by the rules, it removes any power from the developer groups and turns the blockchain and the miners in to economies of scale where the blockchain acts as a serverless database, the miners provide computational resources/storage/RAM and you interact with a virtual machine through a monitor and keyboard plugged in to an ethernet port. It will be like something that takes us from a type 0 to a type 1 civilisation. There are many that like to keep us in the quagmire of corruption and criminality as it lines their pockets. Much much more can be read about the Cartel in crypto in the archive below. Is it possible this cartel has the resources to mount such a successful psychological operation on the cryptocurrency community that they manage to convince everyone that Craig is the bad guy, when he’s the only one calling for regulation, the application of the law, the storage of immutable records onchain to comply with banking secrecy laws, for Global Sound Money?


Please note, where possible, images were uploaded onto the bitcoin sv blockchain through bitstagram paying about 10c a pop. If I wished I could then use an application etch and archive this post to the chain to be immutably stored. If this publishing forum was on chain too it would mean that when I do the archive the images that are in the bitstragram links (but stored in the bitcoin blockchain/database already) could be referenced in the archive by their txid so that they don’t have to be stored again and thus bringing the cost of the archive down to only the html and css.
submitted by whipnil to C_S_T [link] [comments]

A technical dive into CTOR

Over the last several days I've been looking into detail at numerous aspects of the now infamous CTOR change to that is scheduled for the November hard fork. I'd like to offer a concrete overview of what exactly CTOR is, what the code looks like, how well it works, what the algorithms are, and outlook. If anyone finds the change to be mysterious or unclear, then hopefully this will help them out.
This document is placed into public domain.

What is TTOR? CTOR? AOR?

Currently in Bitcoin Cash, there are many possible ways to order the transactions in a block. There is only a partial ordering requirement in that transactions must be ordered causally -- if a transaction spends an output from another transaction in the same block, then the spending transaction must come after. This is known as the Topological Transaction Ordering Rule (TTOR) since it can be mathematically described as a topological ordering of the graph of transactions held inside the block.
The November 2018 hard fork will change to a Canonical Transaction Ordering Rule (CTOR). This CTOR will enforce that for a given set of transactions in a block, there is only one valid order (hence "canonical"). Any future blocks that deviate from this ordering rule will be deemed invalid. The specific canonical ordering that has been chosen for November is a dictionary ordering (lexicographic) based on the transaction ID. You can see an example of it in this testnet block (explorer here, provided this testnet is still alive). Note that the txids are all in dictionary order, except for the coinbase transaction which always comes first. The precise canonical ordering rule can be described as "coinbase first, then ascending lexicographic order based on txid".
(If you want to have your bitcoin node join this testnet, see the instructions here. Hopefully we can get a public faucet and ElectrumX server running soon, so light wallet users can play with the testnet too.)
Another ordering rule that has been suggested is removing restrictions on ordering (except that the coinbase must come first) -- this is known as the Any Ordering Rule (AOR). There are no serious proposals to switch to AOR but it will be important in the discussions below.

Two changes: removing the old order (TTOR->AOR), and installing a new order (AOR->CTOR)

The proposed November upgrade combines two changes in one step:
  1. Removing the old causal rule: now, a spending transaction can come before the output that it spends from the same block.
  2. Adding a new rule that fixes the ordering of all transactions in the block.
In this document I am going to distinguish these two steps (TTOR->AOR, AOR->CTOR) as I believe it helps to clarify the way different components are affected by the change.

Code changes in Bitcoin ABC

In Bitcoin ABC, several thousand lines of code have been changed from version 0.17.1 to version 0.18.1 (the current version at time of writing). The differences can be viewed here, on github. The vast majority of these changes appear to be various refactorings, code style changes, and so on. The relevant bits of code that deal with the November hard fork activation can be found by searching for "MagneticAnomaly"; the variable magneticanomalyactivationtime sets the time at which the new rules will activate.
The main changes relating to transaction ordering are found in the file src/validation.cpp:
There are other changes as well:


Serial block processing (one thread)

One of the most important steps in validating blocks is updating the unspent transaction outputs (UTXO) set. It is during this process that double spends are detected and invalidated.
The standard way to process a block in bitcoin is to loop through transactions one-by-one, removing spent outputs and then adding new outputs. This straightforward approach requires exact topological order and fails otherwise (therefore it automatically verifies TTOR). In pseudocode:
for tx in transactions: remove_utxos(tx.inputs) add_utxos(tx.outputs) 
Note that modern implementations do not apply these changes immediately, rather, the adds/removes are saved into a commit. After validation is completed, the commit is applied to the UTXO database in batch.
By breaking this into two loops, it becomes possible to update the UTXO set in a way that doesn't care about ordering. This is known as the outputs-then-inputs (OTI) algorithm.
for tx in transactions: add_utxos(tx.outputs) for tx in transactions: remove_utxos(tx.inputs) 
Benchmarks by Jonathan Toomim with Bitcoin ABC, and by myself with ElectrumX, show that the performance penalty of OTI's two loops (as opposed to the one loop version) is negligible.

Concurrent block processing

The UTXO updates actually form a significant fraction of the time needed for block processing. It would be helpful if they could be parallelized.
There are some concurrent algorithms for block validation that require quasi-topological order to function correctly. For example, multiple workers could process the standard loop shown above, starting at the beginning. A worker temporarily pauses if the utxo does not exist yet, since it's possible that another worker will soon create that utxo.
There are issues with such order-sensitive concurrent block processing algorithms:
In contrast, the OTI algorithm's loops are fully parallelizable: the worker threads can operate in an independent manner and touch transactions in any order. Until recently, OTI was thought to be unable to verify TTOR, so one reason to remove TTOR was that it would allow changing to parallel OTI. It turns out however that this is not true: Jonathan Toomim has shown that TTOR enforcement is easily added by recording new UTXOs' indices within-block, and then comparing indices during the remove phase.
In any case, it appears to me that any concurrent validation algorithm would need such additional code to verify that TTOR is being exactly respected; thus for concurrent validation TTOR is a hindrance at best.

Advanced parallel techniques

With Bitcoin Cash blocks scaling to large sizes, it may one day be necessary to scale onto advanced server architectures involving sharding. A lot of discussion has been made over this possibility, but really it is too early to start optimizing for sharding. I would note that at this scale, TTOR is not going to be helpful, and CTOR may or may not lead to performance optimizations.

Block propagation (graphene)

A major bottleneck that exists in Bitcoin Cash today is block propagation. During the stress test, it was noticed that the largest blocks (~20 MB) could take minutes to propagate across the network. This is a serious concern since propagation delays mean increased orphan rates, which in turn complicate the economics and incentives of mining.
'Graphene' is a set reconciliation technique using bloom filters and invertible bloom lookup tables. It drastically reduces the amount of bandwidth required to communicate a block. Unfortunately, the core graphene mechanism does not provide ordering information, and so if many orderings are possible then ordering information needs to be appended. For large blocks, this ordering information makes up the majority of the graphene message.
To reduce the size of ordering information while keeping TTOR, miners could optionally decide to order their transactions in a canonical ordering (Gavin's order, for example) and the graphene protocol could be hard coded so that this kind of special order is transmitted in one byte. This would add a significant technical burden on mining software (to create blocks in such a specific unusual order) as well as graphene (which must detect this order, and be able to reconstruct it). It is not clear to me whether it would be possible to efficiently parallelize sorting algortithms that reconstruct these orderings.
The adoption of CTOR gives an easy solution to all this: there is only one ordering, so no extra ordering information needs to be appended. The ordering is recovered with a comparison sort, which parallelizes better than a topological sort. This should simplify the graphene codebase and it removes the need to start considering supporting various optional ordering encodings.

Reversibility and technical debt

Can the change to CTOR be undone at a later time? Yes and no.
For block validators / block explorers that look over historical blocks, the removal of TTOR will permanently rule out usage of the standard serial processing algorithm. This is not really a problem (aside from the one-time annoyance), since OTI appears to be just as efficient in serial, and it parallelizes well.
For anything that deals with new blocks (like graphene, network protocol, block builders for mining, new block validation), it is not a problem to change the ordering at a later date (to AOR / TTOR or back to CTOR again, or something else). These changes would add no long term technical debt, since they only involve new blocks. For past-block validation it can be retroactively declared that old blocks (older than a few months) have no ordering requirement.

Summary and outlook

Taking a broader view, graphene is not the magic bullet for network propagation. Even with the CTOR-improved graphene, we might not see vastly better performance right away. There is also work needed in the network layer to simply move the messages faster between nodes. In the last stress test, we also saw limitations on mempool performance (tx acceptance and relaying). I hope both of these fronts see optimizations before the next stress test, so that a fresh set of bottlenecks can be revealed.
submitted by markblundeberg to btc [link] [comments]

BTC Maximalists miner(s) tried to 51% BCH, Roger Ver pool and other BCH pool were prepared.

And that happened short after or short before the debate between Ver and Tone. That's suspicious... And then Tone tries to hide the TXID because he knew it was going to be discovered that his transaction was prioritized. Is OBVIOUS BCH blockchain is being attacked by BTC maximalists.

And to be fair BTC was attacked in a worst way in 2013 https://freedom-to-tinker.com/2015/07/28/analyzing-the-2013-bitcoin-fork-centralized-decision-making-saved-the-day/ where they had to act in conduction with a miner to save the day.

YES BTC is more secure for the hashing power, it is very expensive to do an attack. But in the long run, BCH will increase the hashing power to a point that BTC Maximalist can't attack it anymore or being controlled my roger ver or the other pool. Because everyone know now their true BTC maximalists faces and how they operate.
submitted by NEXOlover to btc [link] [comments]

Full malleability fix with BIP-134 hardfork

Is there any strong opposition to trying to activate BIP-134 on Bitcoin Cash, in a controlled manner (requiring overwhelming consensus, akin to BIP-9)?
BIP-134 (Flexible Transactions) is a new choice for transaction format, fixing all known kinds of transaction malleability and allowing for Lightning Network on Bitcoin Cash. It differs from Segwit because it is simply creates an alternative transaction format, requiring a hardfork and update of every software client, instead of using a convoluted trickery to fool old clients into accepting segwit transactions as valid.
The way I see it, many may believe it is not strictly needed (soft opposition), because we've already have a path for on-chain scalability, but I can't see why would someone think it is not desirable (hard opposition), because we already (hopefully) did overcome the psychological barrier against hardforks.
Such Pareto optimal improvement should be accepted by node runners without much resistance.
submitted by lcvella to btc [link] [comments]

Why the bitcoin fees are so low? 0.6 sat/byte

Why the bitcoin fees are so low? 0.6 sat/byte submitted by ayanamirs to btc [link] [comments]

Diskcoin will open source and Diskcoin Foundation will launch the Node Staking Reward Plan

Dear Diskcoin community members,
Diskcoin will open source on Oct. 20, 2019.
There is big potential risk for the whole bitcoin system since it's hashrate concentrate on the places with lower electricity price.
Diskcoin is a new attempt after Bitcoin. We hope to attract the power of the open source community. No matter which open source community you are in, we welcome you to join.
Diskcoin is very inclusive and scalable, and you can easily port code from other crypto currencies (such as btc, bch, burst, etc.).
Meanwhile, in order to better stimulate the development of node ecology, Diskcoin Foundation will launch a Node Staking Reward Plan, all issued Diskcoin rewards will be distributed by the Foundation, and all miners are welcome to submit application for rewards.

The Node Staking Reward Plan Rule:
  1. The plan is mainly for mining pools, wallets, exchanges and other institutions. Each Staking needs more than 1000DISC. The more Diskcoin you Staked, the more rewards you will get;
  2. The settlement time of the reward is after the start of the new DC;
  3. The reward plan will start from block height 27001;
  4. The Staking needs to last for at least 2 DC to receive a reward. The reward of the DC (N-2) will be settled at the beginning of the DC (N). For example, Staking statistics starts at block height 27001, settle after 30,600, and issue reward for the 16th DC (block height 27001~28800). Once unstaked before 30600, there is no reward;
  5. Online submission of the Staked txid participating in the reward plan;
  6. The reward will be issued to the stake out address;
  7. The reward rate for the 16th DC is 2%. For example, if you Staked 1000 DISC in 16th DC and does not unstake until the end of 17th DC, the 16th DC reward is 1000*2% = 20 DISC.And the incentive rate is reduced by 10% for every five DC thereafter, that is, the reward rate for 21st DC is 1.8%. For example, if you Staked 1000 DISC in 21st DC and does not unstake until the end of 22nd DC, the 21st DC reward is 18 DISC.For more details: https://www.diskcoin.org/staker

Thanks for your support and attention!
submitted by Diskcoin to DiskcoinOrg [link] [comments]

Any plans of Dogecoin integrating SegWit?

submitted by CryptoMatrix to dogecoin [link] [comments]

WitLess Mining - Removing Signatures from Bitcoin Cash

WitLess Mining

A Selfish Miner Variant to Remove Signatures from Bitcoin Cash
WitLess Mining is a hypothetical adversarial hybrid fork leveraging a variant of the selfish miner strategy to remove signatures from Bitcoin Cash. By orphaning blocks produced by miners unwilling to blindly accept WitLess blocks without validation, a miner or cartel of collaborating miners with a substantial, yet less than majority, share of the total Bitcoin Cash network hash power can alter the Nash equilibrium of Bitcoin Cash’s economic incentives, enticing otherwise honest miners to engage in non-validated mining. Once a majority of network hash power has switched to non-validated mining it will be possible to steal arbitrary UTXOs using invalid signatures - even non-existent signatures. As miners would risk losing all of their prior rewards and fees were signatures to be released that prove their malfeasance, it could even be possible to steal coins using non-existent transactions, leaving victims no evidence to prove the theft occurred.
WitLess Mining introduces two new data structures, the WitLess Transaction (wltx) and the WitLess Transaction Input (wltxin). These data structures are modifications of their standard counterpart data structures, Transaction (tx) and Transaction Input (txin), and can be used as drop-in replacements to create a WitLess Block (wlblock). These new structures provide WitLess Miners signature-withheld (WitLess) transaction data sufficient to reliably update their local UTXO sets based on the transactions contained within a WitLess block while preventing validation of the transaction signature scripts.
The specific mechanism by which WitLess Mining transaction and block data will be communicated among WitLess miners is left as an exercise for the reader. The author suggests it may be possible to extend the existing Bitcoin Cash gossip network protocol to handle the new WitLess data structures. Until WitLess Mining becomes well-adopted, it may be preferable to implement an out-of-band mechanism for releasing WitLess transactions and blocks as service. In order to offset potential revenue reduction due to the selfish mining strategy, the WitLess Mining cartel might provide a distribution service under a subscription model, offering earlier updates for higher tiers. An advanced distribution system could even implement a per-block bidding option, creating a WitLess information market.
Regardless of the distribution mechanism chosen, the risk having their blocks orphaned will provide strong economic incentive for rational short-term profit-maximizing agents to seek out WitLess transaction and block data. To encourage other segments of the Bitcoin Cash ecosystem to adopt WitLess Mining, the WitLess data structures are designed specifically to facilitating malicous fee-based transaction replacement:
It is expected that fee-based transaction replacement will be particularly popular among malicious users wishing to defraud 0-conf accepting merchants as well as the vulnerable merchants themselves. The feature is likely to encourage higher fees from the users resulting in their WitLess transaction data fetching a premium price under subscription- or market-based distribution. Malicious users may also be interested in subscribing directly to a WitLess Mining distribution service in order to receive notification when the cartel is in a position to reliably orphan non-compliant blocks, during which time their efforts will be most effective.

WitLess Block - wlblock

The wlblock is an alternate serialization of a standard block, containing the set of wltx as a direct replacement of the tx records. The hashMerkleRoot of a wlblock should be identical to the corresponding value in the standard block and can verified to apply to a set of txid by constructing a Merkelized root of txid_commitments from the wltx set. The same proof of work validation that applies to the standard block header also ensures legitimacy of the wltx set thanks to a WitLess Commitment included as an input to the coinbase tx.

WitLess Transaction - wltx

Field Size Description Data type Comments
4 version int32_t Transaction data format version as it appears in the corresponding tx
2 flag uint8_t[2] Always 0x5052 and indicates that the transaction is WitLess
1+ wltx_in count var_int Number of WitLess transaction inputs (never zero)
41+ wltx_in wtx_in[] A list of 1 or more WitLess transaction inputs or sources for coins
1+ tx_out count var_int Number of transaction outputs as it appears in the corresponding tx
9+ tx_out tx_out[] A list of 1 or more transaction outputs or destinations for coins as it appears in the corresponding tx
4 lock_time uint32_t The block number or timestamp at which this transaction is unlocked. This can vary from the corresponding tx, with the higher of the two taking precedence.
Each wltx can be referenced by a wltxid generated in way similar to the standard txid.

WitLess Transaction Input - wltxin

Field Size Description Data type Comments
36 previous_output outpoint The previous output transaction reference as it appears in the corresponding txin
1+ script length var_int The length of the signature script as it appears in the corresponding txin
32 or 0 txid_commitment char[32] Only for the first the wltxin of a transaction, the txid of the tx containing the corresponding txin; omitted for all subsequent wltxin entries
4 sequence uint32_t Transaction version as defined by the sender. Intended for replacement of transactions when sender wants to defraud 0-conf merchants. This can vary from the corresponding txin, with the lower of the two taking precedence.

WitLess Commitment Structure

A new block rule is added which requires a commitment to the wltxid. The wltxid of coinbase WitLess transaction is assumed to be 0x828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe.
A witless root hash is calculated with all those wltxid as leaves, in a way similar to the hashMerkleRoot in the block header.
The commitment is recorded in a scriptPubKey of the coinbase tx. It must be at least 42 bytes, with the first 10-byte of 0x6a284353573e3d534e43, that is:
 1-byte - OP_RETURN (0x6a) 1-byte - Push the following 40 bytes (0x28) 8-byte - WitLess Commitment header (0x4353573e3d534e43) 32-byte - WitLess Commitment hash: Double-SHA256(witless root hash) 43rd byte onwards: Optional data with no consensus meaning 
If there are more than one scriptPubKey matching the pattern, the one with highest output index is assumed to be the WitLess commitment.
submitted by tripledogdareya to btc [link] [comments]

ShionCoin Console Basics

The following is a brief overview of the commands provided by the "shc" utility console program.
The utility program "shc" communication with the server (shcoind) are restricted to the local host that the service is running. You must use the stratum API in order to access the server from a remote machine.
A sub-set of all the commands are provided here. This guide attempts to concentrate on commonly used commands that are useful. Run "shc help" for a full list of commands. Run "shc help " for details about running that particular command.
You can enter an interactive mode by running "shc --prompt".
Run the daemon with "shcoind --debug" in order to print additional information to the log file (on linux, "/valib/share/shcoind.log") for diagnostic purposes.
ShionCoin "pub-key" coin addresses typically starts with "S" or "R". A "script address" will start with "1" and a seg-wit address will start with "3". Coin addresses are verified when entered on the command-line in order to ensure that the address is prudent in respect to the coin interface.
All fees for extended transactions, such as creating context and aliases, are either stored (for update purposes) in a local extended account and/or are provided as mining fees. You can use the "wallet.donate" command to intentionally create a transaction which includes a specified mining reward value.

Wallet Commands

The wallet commands provides capabilities to transfer funds and manage accounts. Each account can contain several coin addresses and has a counter-part "extended account" that is not visible.
Wallet Info: wallet.info
Display statistical and runtime information on wallet operations.
shc wallet.info { "version": 3010000, "walletversion": 60000, "balance": 658, "keypoololdest": 1517000561, "keypoolsize": 101 }
Create Coin Address: wallet.new
The "wallet.new" command is used to create a normal (non seg-wit) coin address and associate it with an account name. Coin addresses may be automatically generated for accounts, for example in order to return "change" in a fund transfer transaction. All change is directly returned to the associated account.
shc wallet.new test S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci
List Accounts: wallet.list
The "wallet.list" command provides a balance of all accounts in the coin wallet.
shc wallet.list { "": 0, "bank": 658, "system": 0 }
Three accounts are created by default. The "" account receives coinbase rewards which are then distributed to users based on their stratum stats. The "bank" account is a 0.1% cut of the rewards received from the stratum mining pool. The "system" account is currently reserved for a cpu-miner which attempts a single mining operation each time new task work is assigned to miners. The frequency of how often this occurs is based on tracking the "luck" of past attempts.
List Coin Addresses: wallet.listaddr
The "wallet.listaddr" command will list all of the coin addresses associated with an account.
shc wallet.listaddr test ["S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci"]
Create Transaction: wallet.send
The "wallet.send" command is the primary method of sending funds.
All ShionCoin transactions are sent with at least the 0.0001 SHC minimum fee. Providing the minimum fee is provided, any fee can is permitted and affects the priority of the transaction.
shc wallet.send bank S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci 10 307711dace8c0583b744af8acd1df2073e36b0c7a54b8830a15ae146f8c22ddb
Test Create Transaction: wallet.tsend
You can "test send" a transaction in order to determine the aproximate fee and size that would result.
shc wallet.tsend bank SLbnKamvSx8FhaBNpHUwffFDLZ16J8phdX 10 { "amount": 10, "tx-amount": 98.999900, "size": 300, "virt-size": 226, "fee": 0.000100, "inputs": 1, "priority": 1085539000000 }
Create Batch Transaction(s): wallet.bsend
The "wallet.bsend" command allows you to transfer funds that are more complicated than would be permitted in a single transaction. Multiple transactions will be created, as neccessary, in order to send the specified coin value. The total value commited to be sent may be lower than the value requested under certain circumstances.
Create Certified Transaction: wallet.csend
The "wallet.csend" associated a pre-created certificate with the coin transfer. The certificate may be used to associate with the certificate, or provide a method to identity the source of the funds.
shc wallet.csend bank SLbnKamvSx8FhaBNpHUwffFDLZ16J8phdX 10
Create Stamp Transaction: wallet.stamp
The "wallet.stamp" command allows you to create a short message (up to 135 characters), or reference a geodetic location, to associate with a local coin address. The stamp transaction is the exclusive method of claiming spring matix location coins. Creating a stamp in the format "geo:," will result in a single SHC coin, once processed on the network, being rewarded for all locations not yet discovered in the spring matrix. A minimum transaction fee (0.0001) is applied for each stamp transaction created.
Use the "ctx.findloc" command in order to search for locations active in the sprint matrix.
Validate Address: wallet.donate
Donated coins are added to the upcoming block reward. Donations may be optionally associated with a certificate. The maximum donation value in a single transaction is 500 coins. Donations are associated with the coin address that generates them, and may contain a geodetic stamp depending on configuration and availability.
The total cost will include the donation coin value specified plus a minimum transaction fee (0.0001 SHC).
{ "version": 1, "flag": 1025, "txid": "ace04609d0eca593b73a3f1afb1dcfeb10049c4ab4098ff9b17e01da65bf2ec6", .. "ident": { "version": 3, "expire": " ", "geo": "46.770000,113.980000", "addr": "SFrXpo9ykcSeycTdMaFu3xWwJFxN5gkUH4" } }
Validate Address: wallet.validate
The "wallet.validate" command returns general information about the coin address specified, including whether the coin address is contained in the local wallet.
shc wallet.validate SLbnKamvSx8FhaBNpHUwffFDLZ16J8phdX { "isvalid": true, "address": "SLbnKamvSx8FhaBNpHUwffFDLZ16J8phdX", "ismine": true, "account": "system" }
Validate Address: wallet.key
Obtain a code that identifies the private key of a coin address.
Validate Address: wallet.setkey
Create a new coin address, for the specified account, with a private key code.
Validate Address: wallet.keyphrase
Obtain a set of phrases that identify the private key associated with a coin address.
Validate Address: wallet.setkeyphrase
Create a coin address in the wallet given a key phrase.
Export Wallet (json): wallet.export
Creates a JSON formatted backup of all the accounts managed.
Export Wallet (datafile): wallet.exportdat
Creates a binary backup, in the tradition bitcoin wallet format, of all the accounts in the wallet.
Import Wallet (json): wallet.import
Creates a JSON formatted backup of all the accounts managed.
Scan Wallet: wallet.rescan
Cycle through all known wallet transactions and verify their state in the block-chain.

Block Commands

BlockChain Info: block.info
Print summarized information about the block-chain.
shc block.info { "version": 2000000, "blockversion": 2, "walletversion": 60000, "blocks": 77029, "difficulty": 0.000488, "pooledtx": 0, "currentblockhash": "5c4e3a637d857c7df925dda1c017dd3864c0fb95c1421276619810f5b95fc8c5", "errors": "" }
Print Block (hash): block.get
Print detailed information about the specified block hash.
shc block.get bc157eefd48e18152c70ad2937bd44e6bb38d218bf13c262a844a3d0ae9264d6 { "blockhash": "bc157eefd48e18152c70ad2937bd44e6bb38d218bf13c262a844a3d0ae9264d6", "version": 536870912, "merkleroot": "5bda555d945bc36806f1eb4913a47a2ecad4569133cce1d59bd82ad94e7be1c6", "time": 1521898215, "stamp": "03/24/18 07:30:15", "nonce": 4422421, "bits": "1e07ffff", "previousblockhash": "3312abddb29aea55f44a0e3c52d397d3041b9e2deaa160f2ac415cdca05057b9", .. }
Print Block Hash (height): block.hash
Obtain the block hash for a specified block height.
shc block.hash 77022 bc157eefd48e18152c70ad2937bd44e6bb38d218bf13c262a844a3d0ae9264d6
Export BlockChain: block.export
Export an entire block-chain to a binary file. The actual export of data is performed asynchronously (in the background), and the log file should be reviewed to determine when the operation is actually done.
shc block.export /root/.shc/block.bin { "mode": "export-block", "minheight": 0, "maxheight": 0, "path": "/root/.shc/block.bin", "state": "init" }
tail /valog/share/shcoind.log ..
[03/24/18 07:47:14] info: shc: PerformBlockChainOperation: saved 77105 blocks to path "/root/.shc/block.bin".
Import BlockChain: block.import
Import a previously exported block-chain into the live system. The imported file will only over-write block records that do not previously exist.
BlockChain Scan: block.verify
Perform an integrity check against the last X blocks in the block-chain.

Transaction Commands

Print Transaction: tx.get
Print details for a particular transaction from it's transaction hash.
shc tx.get 307711dace8c0583b744af8acd1df2073e36b0c7a54b8830a15ae146f8c22ddb { "version": 1, "flag": 1, "txid": "307711dace8c0583b744af8acd1df2073e36b0c7a54b8830a15ae146f8c22ddb", .. }
Print Transaction: tx.pool
Print details for all transaction currently pending in the active "mempool" queue. These are transactions that are actively being inserted into mined blocks.
Print Transaction: tx.validate
Validate a transaction hash associated with the local wallet. Prints summarized information about all local coin addresses associated with the transaction.
shc tx.validate 307711dace8c0583b744af8acd1df2073e36b0c7a54b8830a15ae146f8c22ddb [{ "spent": "false", "ismine": "true", "address": "S7viXBKwUZKy4aPCby3oXzWFDxhZKjGipA" }, { "spent": "false", "ismine": "true", "address": "S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci" }]

Peer Commands

Import Peers: peer.info
Display a summary of information relating to connected peers.
{ "clientversion": 3010000, "protocolversion": 2000000, "socketport": 24104, "connections": 3, "networkhashps": 11609, "errors": "" }
Import Peers: peer.list
Display information about each node peer currently connected to the coin interface.
Export Peers: peer.export
Export all of the known peers to a JSON file.
shc peer.export /root/.shc/peer.json { "mode": "peer.export", "path": "/root/.shc/peer.json", "state": "finished" }
Import Peers: peer.add
Import a JSON file containing node peer information.
Remove Peer: peer.remove
Disconnect and remove the specified peer from the system.

Context Commands

Context Info: ctx.info
Print the current fee to create a context transaction and the total number of context records in the system.
{ "fee": 25, "total": 1 }
Print String Context: ctx.getstr
Prints the ASCII value associated with a particular context name.
shc ctx.getstr "test name" test value
Print Context: ctx.get
Prints detailed information about a context record given it's context hash.
shc ctx.get ab5b128ce3674f81f0271efbbbb191fed56e9a80 { "version": 3, "label": "ab5b128ce3674f81f0271efbbbb191fed56e9a80 test name (1zgfTHd5BQA)", "expire": "Mar 23 08:28:39 2020", "flags": 10244, "signature": "e0539d3ecb54c5c0a29ccd69f0b03dfdfb58bc24", "hash": "ab5b128ce3674f81f0271efbbbb191fed56e9a80", "valuesize": 10, "valuecrc": "1zgfTHd5BQA", "tx": "0dbf21191091e33ad7be3b1ce1983ffffdbedeb804e3ce934021f0fad038d50e" }
Create String Context: ctx.findloc
Search for a location by it's name or with geodetic cordinates.
The "ctx.findloc" will scan an area and attempt to find a location within it. This area includes a span of about 100 sq. miles. The closest location with the smallest precision found will be returned. In addition, geodetic information provided by the share library is also utilized.
shc ctx.findloc "geo:46.9,114.2" { "name": "missoula, mt", "summary": "Montana", "zone": "America/Denver", "code": "MUNI", "country": "US", "geo": "46.94000,114.04000", "type": "Municipal Zone", "springable": "false" } shc ctx.findloc "Missoula, MT" { "name": "missoula, mt", "summary": "Montana", "zone": "America/Denver", "code": "MUNI", "country": "US", "geo": "46.94000,114.04000", "type": "Municipal Zone", "springable": "false" }
Note: The "springable" value denotes whether the geodetic location can be claimed in the SHC spring matrix (see "wallet.stamp").
Create String Context: ctx.getloc
Print detailed information about a particular location by it's name or geodetic cordinates.
The "ctx.getloc" command requires specific cordinates to be specified when a latitude and longitude is specified.
ctx.getloc "Missoula Creek" ctx.getloc geo:46.9846,114.1213
Note: The "springable" value denotes whether the geodetic location can be claimed in the SHC spring matrix (see "wallet.stamp").
Create String Context: ctx.setstr
Create a text format context value. This establishes a simple name=value relationship.
Context names are stored as hash keys. Therefore, the string name of the context key must be known before-hand in order to perform the lookup. A small label is also provided as part of the context record which includes a snippet (or all of) the context name.
Context records are signed against the coin address that paid to generate the transaction. Context transaction typically cost about 25 SHC or less to create. A context will expire two years after the date at which it is either created or updated. The owner can update a context by creating a new one with the same name as a pre-existing one. The "context hash" that identifies a context is also the key hash of it's label. The context is shown as part of the transaction details.
shc ctx.setstr test "test name" "test value" { "version": 3, "label": "ab5b128ce3674f81f0271efbbbb191fed56e9a80 test name (1zgfTHd5BQA)", "expire": "Mar 23 08:28:39 2020", "flags": 10244, "signature": "e0539d3ecb54c5c0a29ccd69f0b03dfdfb58bc24", "hash": "ab5b128ce3674f81f0271efbbbb191fed56e9a80", "valuesize": 10, "valuecrc": "1zgfTHd5BQA", "tx": "0dbf21191091e33ad7be3b1ce1983ffffdbedeb804e3ce934021f0fad038d50e" }
Create Geodetic Context: ctx.setloc
The "ctx.setloc" command creates contextual information about a specific place.
The command includes information about a location zipcode, name, and description. In addition, an optional place type code, country code, and web-url can be specified.
The place type corrosponds to one of the codes returned from the "ctx.loctypes" command.
This command has two different modes. One corrosponds to giving a name to a particular geodetic latitude and longitude corindate, and the other includes providing details about that particular location. A single location (as specified by latitude and longitude) may have multiple names, but it limited to a single set of details. Although some common places may be reserved from use (such as common city names), the application of detailed information to a geodetic location comes on a first-come-first-serve basis. Note that context information expires after two years.
The size of the area being referenced is dependent on the place type specified. For example, "AREA" spans roughly 30 sq. miles, while "SPOT" only spans 8 sq. feet. This precision is used in relation to geodetic lookups performed.
shc ctx.setloc test geo:46.9846,114.1213 "Bitterroot Creek" STM US shc ctx.setloc test "Missoula Creek" geo:46.9846,114.1213
Create Identity Context: ctx.setid
Create a binary context from the raw command-line argument specified.
Create Binary Context (raw): ctx.setbin
Create a binary context from the raw command-line argument specified.
Create Binary Context (file): ctx.setfile
Create a binary context from the absolute path specified.
Print Location Types: ctx.loctypes
Print out all suported location type codes for use with the "ctx.setloc" command.
[{ "name": "AREA", "desc": "General Area", "prec": 1 }, { "name": "MT", "desc": "Mountain", "prec": 1 }, .. }

Address Alias Commands

Alias Info: alias.info
Print the current fee to create an alias transaction and the total number of alias records in the system.
shc alias.info { "fee": 31.250000, "total": 1 }
Create Address Alias: alias.pubaddr
Create a persistent public association with a name and a coin address. Once confirmed, the coin address can be referenced as "@" in command-line operations.
When a coin address is specified the alias label will be published onto the block chain in reference. If the alias label already exists, then a transfer will occur providing you are the original owner.
A coin address will be automatically created if none is specified. Only "pub-key" coin addresses are currently supported. An alias will expire after 12 years.
An alias cost around 30 SHC to create and will decrease over time.
shc alias.pubaddr test S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci { .. "alias": { "version": 1, "label": "test", "expire": "Mar 21 09:37:40 2030", "type": 30, "addr": "S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci", "type-name": "pubkey" } }
shc wallet.send bank @test 2 d438fea502b7113f155617fc1b400161bb3045645094df5423ce7e484fadf7f2
List Address Alias: alias.list
Print all aliases that match the keyword provided.
shc alias.list { "test": { "block": "79b04f63fe5602f40bc559b1c5b39b730a2d6ea2d6b4ab491904d6054b1add71", "tx": "abb12ed2f4a74c58432afa9e19c08afad1d3dd84052f23be534e96ed53e11d4f", "alias": "77135966b271a06928cdff5548dbbaed61ee7250", "addr": "S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci" } }
Print Address Alias: alias.getaddr
Print details about a particular coin address alias given it's name.
shc alias.getaddr test { "version": 1, "label": "test", "expire": "Mar 21 09:37:40 2030", "type": 30, "addr": "S2fzfzf1SStvaMzjGpCtYKxY3t8PXus9Ci", "type-name": "pubkey" }

Certificate Commands

Certificate Info: cert.info
Prints the current certificate transaction fee and the total number of certificates created on the block-chain.
shc cert.info { "fee": 14.750000, "total": 1 }
Certificate Info: cert.list
Search for a certificate given the provided keyword.
shc cert.list test { "test certificate": "8069f1bbfb435cfa1efdb454684446528343b809" }
Certificate Info: cert.new
The "cert.new" command is used to create a new certificate on the block-chain. The certificate than may be used to derive other certificates or dispense licences. The certificate may have an optional fee specified that will be required to derive or license it.
A certificate can either be designated for issueing other certificates or granting licenses, but not both. Either form of the certificate may be used in order to donate or send a certified coin transfer.
A certificate is signed against a private key that is generated from the associated extended account coin address. You may optionally specify a hexadecimal seed to use for generating the private key. The certificate's private key is not stored in a database or a transaction, and requires the original coin address to be present in the local wallet to be determined. The public key is provided as part of the certificate transaction, and can be used in order to verify the integrity of the associated signature.
The average fee for registering a new certificate is initially about 15 SHC and will decrease over time. The details of the certificate are visible in the underlying transaction that it was generated in.
The frame-work of the certificate is designed to be compatible with the x509 format. See the "shcert" share library utility program for more information on exporting x509 certificate created on the ShionCoin block-chain. Certificates may also be used to provide licensing authentication to run or provide features to programs using the share library "esig" functionality (see the "shesig_verify()" function).
Note that the certificate may contain identifying information such as the originating coin address and, when available, the geodetic location.
shc cert.new test "test certificate" { "version": 1, "flag": 17, "txid": "18d0a73c96af3dd211f27e4ada898e13b4cf25223da2591289edb8a1e86f1129", .. "certificate": { "version": 3, "label": "test certificate", "expire": "Mar 24 04:13:46 2066", "geo": "46.770000,113.980000", "addr": "SC2j6kxbrKzfpxsGqBQSrxeDh2CdPn1TLJ", "certhash": "8069f1bbfb435cfa1efdb454684446528343b809", "issuer": "0000000000000000000000000000000000000000", "serialno": "0c96a132d74df2522f38babf0733224c", "flags": 10244, "signature": "0d5a4e6c7d4975ee443cfc2e057d3d76070bd2f5", "sigpubkey": "0334d9f89253fa0837a1524266414509bdce478368" } }
Certificate Info: cert.get
Print the details of a certificate record given the certificate hash.
{ "version": 3, "label": "test certificate", "expire": "Mar 24 04:13:46 2066", "geo": "46.770000,113.980000", "addr": "SC2j6kxbrKzfpxsGqBQSrxeDh2CdPn1TLJ", "certhash": "8069f1bbfb435cfa1efdb454684446528343b809", "issuer": "0000000000000000000000000000000000000000", "serialno": "0c96a132d74df2522f38babf0733224c", "flags": 10244, "signature": "0d5a4e6c7d4975ee443cfc2e057d3d76070bd2f5", "sigpubkey": "0334d9f89253fa0837a1524266414509bdce478368", "txid": "18d0a73c96af3dd211f27e4ada898e13b4cf25223da2591289edb8a1e86f1129" }
Certificate Info: cert.derive
Derive a certificate from another certificate. You can optionally specify a fee to be associated with the new certificate, and a fee may be required if one is associated with the parent certificate.
Certificate Info: cert.license
Generate a license from a certificate. A license represents authorization to use a particular product and typically requires a fee to be paid. You can optionally specify a hexadecimal seed to be used when creating the certificate's private key.
Certificate Info: cert.export
Exports the private key information from the extended account that is used to claim ownership over a particular certificate.
Ownership and management of a certificate depends on having specific coin address key(s) in the coin wallet. Exporting a certificate provides JSON formatted content which can be used with "wallet.import" command to attain ownership of a certificate.
submitted by shioncoin to u/shioncoin [link] [comments]

Warning: Mempool running dangerously low

The mempool has nearly run out of transactions:
Please help to keep the miners busy by using your Bitcoin Cash!
OK I'm not being serious. But it was nice that this stress test has already revealed a number of things:
  1. A problem with yours.org.
  2. A bug in the mining software though it might be fixed already in the newest version.
  3. Low fee transactions still go through even when there is heavy load. Does anyone have a txid for a transaction you sent that got stuck?
If this was done as a stress test, then it is $30000 spent to ensure that everything works well under high load. It's best to find that out now rather than later so we can get things working smoothly when the masses come.
If it is an attack then it is good to know that Bitcoin Cash cannot be attacked cheaply and that larger blocks would make it even more expensive.
submitted by playfulexistence to btc [link] [comments]

Something Fishy is going on?

I am lurking in the new section of bitcoin and there's a sudden theme surrounding transaction fees. I'm quite confused how these people are running into issues. I have sent large amounts of money, and little amounts with minimal fees, and less than an hour confirmation times.
These post seem fishy to me.
On mobile. I need to get to my laptop to easily find transaction id
I'd like to formally apologizes for misleading people with this post.
It had appeared my fee was next to zero, but what I now realize is that GDAX/Coinbase actually covered my fee. I'll provide the TXID, and maybe someone can clarify what happen.
What I won't refute is the fishiness and timing of these post about transaction fees/delays. Very suspiciously coordinated. I lurk this sub daily, and often hourly, so I get the gist of what content is normally posted.
Additionally these high fees are a never ending loop. If miners switch over to BCH because in a business sense it will make them more money it takes resources away from BTC. This leaves less miners to process transactions, witch causes delays/expensive transacting. Making BCH claims a self fulling "prophecy".
TXID: https://live.blockcypher.com/btc/address/1CLPpWErcriMTUNGc8AsHCk3aoxHDC1wZx/
submitted by Ryamgram to Bitcoin [link] [comments]

Interested in Nerva but you have some questions? FAQ inside

Where can I download the Nerva wallet?
• Ubuntu o 16.04
o 17.10
o 18.014 • Fedora
o 27 o 28 o 29
• Windows o CLI o GUI
• Android o 4.4+
o 7.0+ Unoffical Mac Build: https://github.com/xmranon/Nerva/releases
How long does it take for my balance to unlock?
Your balance is unlocked after 20 confirmations(which means 20 mined blocks). A block is mined approximately every one minute on the Nerva network, so that would be around 20 minutes.
How can I prove that I sent a payment?
The fastest and most direct way is by using the Nerva-explorer https://explorer.getnerva.org/ . You will need to recover the transaction key from your wallet:
Check if your Nerva wallet is set to store transaction keys by using the command:
If it comes back with a 0, then use the following command to tell it to keep the transactions keys
set store-tx-info 1
Query for your tx_key for a particular transaction
get_tx_key TXID
(plug in her actual transaction ID instead of this TXID placeholder)
How do I buy Nerva (XNV) with Bitcoin (BTC)?
https://tradeogre.com/exchange/BTC-XNV https://nerva.exchange/
How do I mine Nerva?
Once you have created a wallet and have your daemon running in either the CLI or GUI wallet
CLI: In the Wallet window input the following
start_mining [# of threads]
Daemon->Toggle Miner: Turn the miner on/off.

Why I can't see my balance? Where is my XNV?
Before any action there are two things to check:
Are you using the latest available version of the wallet? Make sure you're using the current release (compare the release on GetNerva.org with your wallet's version)
Is your wallet fully synchronized? If it isn't, wait the sync to complete.
Because Nerva is Pool resistant, the wallet synchronization is not as fast as Monero or other CN coins. The software needs to synchronize the blockchain and this can take somet time.
Daemon->Toggle Miner: Turn the miner on/off.
You can't send transactions and your balance might be wrong or unavailable if the wallet is not synced with the network. So please wait.
I don't want to download the blockchain, how can I skip that?
If you don’t wish to mine, you can use a public node by entering the following in your CLI wallet:
nerva-wallet-cli --daemon-address xnv.pubnodes.com:17566
submitted by xmranon to Nerva [link] [comments]

New GPU Virtual 1 Bitcoin Miner Cloud Mining Automatic 100% transparent withdrawals. FREE BITCOIN CRYPTOTAB SCRIPT 2020 , 14 BTC WORKING GET UNLIMITED BITCOIN/GET BITCOIN FREE ILEGAL BITCOIN  GENERATOR PRIVATE KEY 100% WORK Free Bitcoin Mining Website 2020  Mine 1 BTC Daily  Bitcoin Giveaway Freemining.co Unlimited Refferal Tricks 2020  Freemining.co Earnings Withdraw Tricks 2020 In Urdu

Bitcoin's design makes it easy and efficient for the spender to specify how much fee to pay, whereas it would be harder and less efficient for the recipient to specify the fee, so by custom the spender is almost always solely responsible for paying all necessary Bitcoin transaction fees. When a miner creates a block proposal, Date Amount Address Txid; 1595552521000: 0.00261780 Ƀ A7aQ7BMvkUJkW4nuz7kSXXXX: d556bffce89f491e83c9XXXX: 1595552102000: 0.00719424 Ƀ A1AwbmCpxX87rGXYD93rXXXX Bitminer is an industry leading Bitcoin mining pool. All of the mining power is backed up by physical miners. Mining with the latest algorithms help us to generate bitcoin as much as possible. We aim to provide you with the easiest possible way to make money without doing anything. Bitcoin Afterburner is a bitcoin accelerator service introduce by the Samourai wallet team, and it works a bit differently to accelerate Bitcoin transactions. It uses some kind of feature known as, Child pays for parent (CPFP) to accelerate any unconfirmed Bitcoin transaction, and almost acts like a cryptocurrency wallet. What is Transaction Hash or ID (Tx Hash / TxID)? Tx Hash means Transaction Hash and is also known as Transaction ID (TxID). It consist of alphanumeric characters and is basically an identification number given for a Bitcoin transaction. Each and every single transaction that is conducted on the Bitcoin blockchain has this unique identifier.

[index] [2572] [12826] [1737] [20986] [15322] [23636] [16027] [20007] [14391] [18105]

New GPU Virtual 1 Bitcoin Miner Cloud Mining Automatic 100% transparent withdrawals.

The test and review of the Digiminer bitcoin mining pool if it is legit or not. Bitcoin mining pool reviewed: Digiminer The TXID of the result on the video. https: ... Do not worry, send us an email to support, with the TXID of the bitcoin transaction, how much mining power you buy and your wallet with which you registered on the platform. Free $300 USD no ... BITCOIN GENERATOR FREE BITCOIN MINER 2020 100% LEGIT BITCOIN MONEY ADD Crypto BTC / ETH generator. Free to use. .Get your first free cryptocurrency on wallet. Download: https://bit.ly/3dOy1y5 If ... The best bitcoin miner what i use was able to mine 0.00003 BTC per day with my GPU,when this miner can mine at least 0.5 BTC per day with your CPU,not with GPU. Yes,this is how much power have ... • private key generator site, free bitcoin mining, no first payment, no fees, no fraud, only buy and run the tool. ... get an unconfirmed TXID from the blockchain then copy and paste it on the tool

Flag Counter