text:
Blockchain as a service - is this really just a replacement trusted third party?
One of the key tenets of Blockchain technology is that it is a trustless, distributed ledger which removes the need for a trusted (but hackable) third party to oversee the veracity of transactions (e.g. a bank). The original concept was implemented in Bitcoin and depended upon "miners" to verify the authenticity and ordering of transactions. These miners are owned by participants in the blockchain and no one is able to control all (or even a significant number of) the miners in the network, thus rendering the system secure.
We now have the concept of "blockchain as a service" from providers like Microsoft and others, where apparently there is no need for miners: so does this mean that the technology provider just became a replacement trusted third party and if so what prevents them from being a weak (hackable) link which would undermine the whole purpose?

First lets distinguish between a blockchain and Blockchain as a Service (BaaS), because they're two different things.
Bitcoin, and other crypto-currencies, use a distributed ledger in a peer-to-peer network - a blockchain. This is the original use of a blockchain. As you state correctly, the fundamental concept is that it is decentralized, permissionless and trustless. There is no central management, anybody can use it and it does not require trusting in a third party. For Bitcoin, and other crypto-currencies, the peer-to-peer (P2P) network propagates transactions, verifies the transactions as valid, and then adds these transactions to the blockchain.
Bitcoin is the first blockchain application to create a cryptocurrency. Ethereum is a cryptocurrency which is also a platform for running distributed applications (DApps).
Software corporations like Microsoft and IBM are offering Blockchain as a Service. This is something completely different than a cryptocurrency. It's closer to what Amazon provides with it's AWS cloud platform. If you're not familiar with cloud computing platforms get up to speed on that.
Looking at Microsoft's blockchain solutions and IBM's blockchain solutions you can say that BaaS provides tools, infrastructure and/or a simulated network environment for companies to develop their own blockchain applications. These blockchains may be on an established decentralized public platform like Ethereum, or it might be a private permissioned blockchain.
A private blockchain is not anything like permissionless Bitcoin or Ethereum cryptocurrencies. Comparing a private blockchain with Bitcoin is analogous to what the public internet is to a private LAN. It may use concepts like proof-of-work mining or other features of Bitcoin, but it's entirely different thing essentially. I'm not sure exactly how companies are finding this more valuable than simply using a database. Maybe there's good reason or maybe it's largely hype and wanting to get on the blockchain bandwagon.
A private blockchain would require a P2P network, but there would be a restriction on what nodes could access and interact with the network. Also the software would be closed source and not freely available. In contrast crypto-currencies like Bitcoin and Ethereum are open-source and anybody is free to participate in the P2P network.
Going back to the specific questions you had:
Does this mean that the technology provider just became a replacement trusted third party and if so what prevents them from being a weak (hackable) link which would undermine the whole purpose?
As explained already BaaS provides tools and infrastructure for other companies to create blockchain applications. There is no "Microsoft Blockchain". It's up to individual companies to create either public or private blockchain applications however they like. In general and ideally blockchain applications are peer-to-peer and decentralized.
If it is an Ethereum DApp then ultimately it would run on the public internet on Ethereum platform in distributed way without any centralized reliance on third parties. If it is a private blockchain, then it will be a hybrid of decentralized and centralized architecture and not anything like Bitcoin or Ethereum.

Can you please elaborate answer the main question? Does it really replace Trusted Third Party? Why not? Thanks

Hopefully it's clear now

TL;DR: It depends on the deployment and on who dictates consensus on the blockchain. If it's the provider then, yes, the provider is a single point of failure (assuming a non-diverse deployment). If users participate in the consensus algorithm then, with some care, the provider could be trusted with only storage and availability.
Your question

[...] concept of "blockchain as a service" [...] where apparently there is no need for miners: so does this mean that the technology provider just became a replacement trusted third party

This depends on how the users of this blockchain reach agreement on it. If users simply trust the "blockchain as a service" provider to dictate consensus on what the blockchain is, then, yes, the provider is the only trusted 3rd party.
However, if users take part in the consensus protocol, voting on what the current valid blockchain is by verifying transactions, executing smart contracts and so on, then not necessarily. The provider can merely be trusted with availability and storage while 2f+1 users out of the total 3f+1 users are trusted to vote correctly on what the valid blockchain is (see [6]). There are various design points that could be explored.
In this last case, however, the blockchain provider or someone else has to be trusted for admission control: who is allowed to vote on what the current valid blockchain is? Someone has to let people in and out. And if they're not careful, it's very easy to attack the system: just add a bunch of fake extra voters that swing the election your way (see [7]).
Put another way, if you're not going to mine (i.e., do proof-of-work/stake/etc.), then you can't defeat "fake voter" attacks (see [7]), so your system needs to be permissioned: it needs a trusted party that does admission control.

[...] if so what prevents them from being a weak (hackable) link which would undermine the whole purpose?

Assuming the blockchain provider dictates consensus, not much. Unless a "blockchain as a service" deployment spans multiple administrative domains (e.g., clouds from 5 different continents) it will be easier to undermine.
By the way, if we stop and think, then the whole "blockchain as a service" philosophy is self-defeating: it gets us farther away from a blockchain like Bitcoin, not closer. Consider this: From a security perspective, why do we need a provider of a "blockchain service" anyway? If it's gonna dictate consensus on the blockchain, then it's a trusted third party. And if it's not going to, then we don't need it to begin with: we can just replicate the blockchain and agree on it ourselves.
The answer, I suspect, has to do with all the hype around "blockchain." Everybody wants one, missing the bigger point: we're all supposed to share one (for security), not have our own.
Nitpicking your assumptions

One of the key tenets of Blockchain technology is that it is a trustless, distributed ledger [...]

Regardless of what "blockchain technology" means nowadays, it's misleading to call it a trustless distributed ledger. In Bitcoin, Ethereum and z.cash, for example, users like me and you have to trust many things:

That miners are actually incentivized to only mine on the longest chain  (see [1] and [2]).
That both the overlay network (P2P) and the underlying network (the Internet) between miners is reliable: it delivers blocks on time (see [3] and [4]).
That attackers are not rich enough to reverse your transactions by adversarially mining. Or, that your transactions are not worth it (see [5]).
That there are no other errors in the design: e.g., what happens with z.cash's security when miners jump from mining one cryptocurrency to another compatible one as they deem it profitable?
That there are no bugs in the code.

...and much more.

[...] removes the need for a trusted (but hackable) third party to oversee the veracity of transactions (e.g. a bank).

Sure, there's no single trusted 3rd party. In Bitcoin there are around 20 now (or, however many big mining pools Bitcoin has, assuming they don't collude). Maybe z.cash and Ethereum are more decentralized due to their memory-hard proof-of-work, but it remains to be seen how long that will last.
Also, because there is no single (or distributed) trusted 3rd party, the network now plays a critical role in the system's security [3, 4].

[...] no-one being able to control all (or even a significant number of) the miners in the network, thus rendering the system as secure.

GHash.IO controlled over 50% at some point in the summer of 2014. Once again, it remains to be seen whether a single entity or multiple colluding entities can (again!) control more than 50% of the computational power in the network.
References

Why buy when you can rent?
On the Instability of Bitcoin Without the Block Reward
Eclipse attacks
Routing attacks on Bitcoin
An Analysis of Attacks on Blockchain Consensus
Practical Byzantine Fault Tolerance
The Sybil attack


text:
Transaction with `OP_RETURN` to a particular address
How do I formulate a transaction with OP_RETURN to a particular address using the bitcoinj library?
SendRequest req;
Transaction transaction = new Transaction(Main.getNetWorkParameters());
transaction.addOutput(Coin.ZERO, ScriptBuilder.createOpReturnScript(
    "thanks for the coins".toString().getBytes()));

// add a receiving address for this transaction
req = SendRequest.forTx(transaction);

You can't make an OP_RETURN-based output out to any specific address, since the OP_RETURN opcode marks an output as invalid (thus provably unspendable). In fact, an OP_RETURN-based output will not even enter the UTXO.
A zero amount is okay (and even encouraged) for OP_RETURN.  The OP_RETURN is paid for via the fee; putting a non-zero amount in OP_RETURN would just destroy bitcoins, so the miners do not profit from mining it.
However, you can create a transaction that has multiple output scripts: One can be a standard P2PKH of the form OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG while the other can be an output with OP_RETURN. Just call addOutput twice, once with an address and the amount desired, and a second time with parameters for an OP_RETURN script (and a non-zero output value, I would presume).

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/

sort: votes


text:
Does there exist a SPV-client in another language than Java?
The only (active) project I know that implements a full SPV client is BitcoinJ, which is written in Java.
Does somebody know if there are any SPV implementations in other languages (like C) too?

BitcoinJ is SPV? It's a full node isn't it?

@jtorba It supports both modes

bitc is a thin SPV bitcoin client. See https://github.com/bit-c/bitc . It's not very advanced yet (no HD wallets, change goes back to first address), but it's  small and self-contained.

I'm writing a BitcoinJ port for .NET (C#, Visual Basic, etc), but since I'm doing it on my free time, it's nowhere near complete.
Other way to use BitcoinJ in .NET is through IKVM (which I didn't use due to some limitations).
I don't know about other languages, but I hope this is helpful.

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
I've inherited BTC, how do I recover and sell it?
Update>>> I have the 12 word phrase and the 34 letter and number address for wallet...
Mom passed away the day after Thanksgiving. I have all her paperwork and mine as I was her only child. I have a string of numbers and letters and a 12 word collection related to her bitcoin however I am not at all familiar with bitcoin and am not very versed in technology. How should I proceed? Thank You.

UPDATE::: I have Learned SOO Much about BTC.... We sold about 10 BTC and Holding the rest in a Trezor-T. Blessed!

I'm sorry to hear of your loss. Recovering the funds will require some careful work, but go slowly and make sure you understand what you're doing, and you'll find it isn't that hard!
Importantly: Be very wary going forward - lots of scammers will likely attempt to prey upon you and steal your funds! DO NOT share the 12 words or 34 letter string with anybody online! DO NOT input those words into any online website or service. You do not need to trust or depend on anyone else to recover the funds. There is no 'official' anything in Bitcoin - it is a decentralized network without any admin. You (the user) are in full control, you can accomplish all the required actions without any dependance on a third party (except for the sale of BTC -> fiat currency, perhaps).

Those words are the 'key' that will allow you to spend the bitcoin, so to speak. To use the key, you will need to find some secure wallet software. I would suggest starting by looking at bitcoin.org, and selecting a wallet from the list they have there.
Once you have some wallet software running, you will want to select an option to 'recover'/'import'/etc your wallet, at which time you will be prompted to enter the 12-word mnemonic seed phrase. Once you do so, you should hopefully see the wallet load properly, showing the funds and all past transactions.
If an empty wallet with no transaction history loads, then you will likely need to select a different 'derivation path' for the wallet to follow. Some wallets (eg Electrum) allow the user to define a derivation path, while others do not. You may need to find software that allows you this more fine-grained contro.(Under the hood, the wallet is using the 12-word phrase to derive the cryptographic keys that allow you to spend the wallet's funds. There are different standards for which keys the wallet will derive, selecting the correct path is important!). It is helpful to know which wallet software was originally used to create the wallet, but if you don't have that information then all hope is not lost, it might just take some extra work. You could take a look at WalletsRecovery.org for some help/info.
With the wallet recovered, you will need to find somewhere to sell the coins for your local currency. Do your research to find a reputable service in your area, as you'll need to trust them completely with your funds. Once you've made a choice, send a transaction by copying the deposit address from the exchange service to your wallet's 'send' field. You can then make the trade for your local currency, and withdraw to your bank account by whatever methods the exchange service offers.

Keep in mind that you will want to make sure the device you load the wallet onto is secure. For example, a brand new iphone is going to be a more secure device than a 10-year old windows PC that hasn't been updated regularly.
You may want to consider how much BTC is at play here - if it is a huge sum then it may be worth first acquiring a small amount of BTC yourself first, to familiarize yourself with the tools and procedure of sending/receiving/recovering funds. That way, if you make any mistakes, you will just lose a small amount of funds, instead of the inheritance.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
Are all 'metal wallets' functionally equivalent?
Within the context of wallets, is it correct that a metal bitcoin wallet needs to store both public and private keys?
I'm looking at some metal wallets and want to clarify that the're all basically the same in that they'll give you different bits and bobs which are then must be physically arranged?
Or, are some metal wallets etched or otherwise "written" and then sent to the user?  Because that seems a very trusting act, to provide a private key to some third party.
Just dealing with bitcoin.  Perhaps naively thinking of storing public/private key "written" down with metal.
I would think something like:

minting physical bitcoins

would the point of such a wallet.  Obviously not minted, but just storing the public/private key on metal for reference.

Just to be clear/nitpick, the products you've linked to are designed to act as highly resilient physical backups for a bitcoin wallet. It doesn't really make much sense to refer to these metal plates/etc as 'metal wallets', as they cannot perform any normal wallet functions (send, receive, etc). Rather, they are just a way to store a backup for the seed that will (re)create your wallet using the appropriate software.

Within the context of wallets, is it correct that a metal bitcoin wallet needs to store both public and private keys?

Not explicitly. These days when you create a new wallet you will likely be presented with a mnemonic seed phrase, in the form of 12/24/etc words. These words are the backup for your wallet, if you input them into some wallet software (and follow the correct derivation path) then you will get access to your wallet.
So these metal backup plates are built to have your seed phrase engraved into them in some way or another. By using metal, you can protect your backup against things like fire or water damage.
Note that you could engrave a private key itself into metal, but given the chance of transcription error, you can perhaps see the reason that mnemonic seed phrases are very popular: they are human-readable and thus easier to error-check. A mistake could be extremely costly! You don't want to lose access to your bitcoin.

I'm looking at some metal wallets and want to clarify that the're all basically the same in that they'll give you different bits and bobs which are then must be physically arranged?

The function of them is the same: keep your mnemonic seed phrase safe. So if you use one, you should choose a design that you find to be:

durable
easy to set up
easy to understand
secure against accidental scrambling (what happens if you accidentally drop it? etc)
easy to store securely

Maybe there are some other considerations, but those are the obvious things that come to mind at least.

One consideration that is less obvious: purchasing a product like that can be really bad for your operational security / privacy. The company you purchase from will likely have a database of all past customer information. As example: not long ago, there was news that a major hardware wallet manufacturer' customer database was hacked, and customer information was stolen (note that no BTC was compromised). Since then there have been reports of phishing attacks targeting those people, since they are obviously bitcoin users.
With that in mind, consider the option of instead just purchasing:

an alphabetical metal punch set
a hammer
a stack of wide flange washers
a nut/bolt of appropriate size to fit the washers

You can then stamp each word onto a washer. Be sure to number them as well, so that you can ensure they don't get scrambled out of order (this would be very bad!). If you want, you can just stamp the first 3-4 letters of each word, since no two words in the BIP39 list have the same first 3 letters.
This is a very simple, secure, and private way of backing up your wallet, which will probably be cheaper than any of the products listed on that site, especially after considering the price of shipping.
This is what a metal punch set looks like, for reference:

Or, are some metal wallets etched or otherwise "written" and then sent to the user? Because that seems a very trusting act, to provide a private key to some third party.

NO. You should absolutely not ever use a pre-engraved product, creating private keys is something that the user should not be trusting a third party to do. You leave yourself at risk of theft from the third party, any one of their contractors, postal workers, customs agents, etc.

I would think something like: 'minting physical bitcoins' would the point of such a wallet. Obviously not minted, but just storing the public/private key on metal for reference.

The Casascius coins you linked were created as collectibles, more than secure offline storage, but in principle the function is similar. Note that those coins contain the info for private keys, that were generated by the coin's creator, so he is a trusted third party in this case (in spite of the warnings above).
You may also be interested in a product called the OpenDime (disclaimer: I have nothing to do with OpenDime, and have never used one, but they look cool), it allows for physical transfer of bitcoin without requiring trust that your counterparty will not keep a copy of the private keys. Note however, that the Opendime is NOT recommended for longterm physical storage, so while it is physical, it is functionally different than the backup methods described above.

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
Orderly Transition Away from ECC? Or Bitcoin to zero?
Let's say asymmetric public key cryptography is wide open, and can be broken using a public key or the signature.  Namely, that I can determine the private key using the information revealed in a public key or the signature.  Whether this is done with a classical, or quantum computer doesn't really matter. Let's say that this means I can steal any Bitcoin today from anyone -  whether they are yours, mine, or any other UTXO on the chain.
Now, unlike gold, which to steal requires you to do things like siege Fort Knox and have a military to do successfully, it seems like some modest cryptanalyst chaps can just sit in their pjs and steal Bitcoin during their lunch break while outside GCHQ or at a Starbucks outside Fort Meade.
So, can Bitcoin transition away from ECC in an orderly manner?
Would there be a fork (like ethereum did with the DAO) to fix all the stolen Bitcoin?

Bitcoin is a social phenomenon as much as it is a technical one. Satoshi's whitepaper laid out a technical architecture for a network, but the implementation details of that network have slowly evolved over time, they are not absolutely set in stone.
Of course, some of the implementation details are perhaps more set in stone than others (eg, good luck trying to convince bitcoin users to change the issuance schedule), but ultimately it is only the collective agreement of the network participants that upholds the 'consensus rules' (ie, the implementation details).
So, if something catastrophic were to happen, and ECDSA were broken in a way which made all coins vulnerable to theft, then I would certainly expect that bitcoin users would work to change the implementation details, so that they could form a new social agreement around using the technical tool that is the bitcoin network.
Would this be messy if it happened unexpectedly? Most certainly. Would the value of the network drop? Probably. Would it mean that the bitcoin experiment would be over? I suppose that depends on what you define as 'bitcoin'. From a "no-hardforks" perspective, perhaps bitcoin would die (ignoring the possibility of a fancy soft-fork fix). But from a "we're here to participate in a novel consensus network" perspective, it certainly is possible to fork the network to change the implementation details in order to remove the compromised code. Whether or not you're happy to participate in this new consensus is a fair question, but I doubt every single bitcoin user would just give up and pack it in.

More generally, if public key cryptography is broken, I think the world is going to have bigger problems than the bitcoin network failing to remain secure. A huge amount of the (very valuable) internet is built upon the same cryptographic primitives that bitcoin uses. In spite of this, these algorithms have apparently remained secure. Ultimately, whether or not you participate in something like bitcoin is entirely up to you. I don't think anyone here will try to convince you it is a risk-free adventure to embark upon.


text:
I forgot which software I created my wallet with. How can I recover from a 12 word seed phrase?
I purchased bitcoin through a bitcoin ATM, and I opened a new wallet on the spot.
On getting home my phone was mysteriously wiped, how can I find the wallet I created? I happened to write down the 12-word phrase.

DO NOT share the actual 'private key' you wrote down with anyone. That said, can you describe the format of it? Is it a string of random letters/numbers? Or a list of 12/24 words (this is called a 'seed phrase')? In either case, you will just need to find the appropriate software to import the key, and your bitcoin should be recoverable.

I do not know the wallet which i opened it, I have only my bitcoin address and the key, how can i get the company i created the wallet from

As long as you used a wallet which gives you control of your keys, and you copied that key (or seed) down, then you do not need to find any company. You just need to find any compatible software that can import the key (or seed) you wrote down.

How can i find one please?

You'll need a wallet that accepts the format of key you wrote down, if it is a standard format you should have no problem finding an option that works. Check out https://btcinformation.org/en/choose-your-wallet

Please explain the steps which i would take to go about it, to say it was a bitcoin core wallet how to i get it back, thanks

What is the format of the key or seed you wrote down? Do NOT tell me the specific seed, just describe the format of it (eg, a string of random-looking numbers and letters that starts with a 5, OR a list of 12-24 words, etc). Which wallet will work will depend on the format of the key/seed.

Its a list of 12 words

It sounds like what you have is a mnemonic seed phrase, likely BIP39 formatted. So you'll need a wallet which accepts a 12-word BIP39 seed phrase. Many of the wallets listed on the page I linked above should be suitable. Your choice will depend on whether you'd like to use a desktop client, mobile client, etc. While running a full node (eg bitcoin-core) is important and a good idea, if you are mainly looking to recover your funds quickly, I would not necessarily recommend it as the best option (it will likely take a few days for the bitcoin-core node to sync to the network).

If i choose a wallet then how can i import my wallet ? Thank you p.s and am i do this over the computer or phone?

When you open up the wallet, there should be an option to either 'start a new wallet' or 'recover a wallet from seed phrase', or something similar to that. Select the 'recover from seed phrase' sort of option, and follow the prompts to input your seed phrase. Note that 24 words is the usual standard, so some wallets might expect 24 instead of 12 words. In this case, you may just have to try another wallet. In general, once you start up the wallet software, it should be fairly self-explanatory to input your seed and recover the wallet.

Please be sure to collect the information from the comments into the question and an answer respectively! :)
@Perry: perhaps you should consider retitling the question to "I forgot which software I created my wallet with. How can I recover from a 12 word seed phrase?" for more attention by answerers.

I happened to write down the 12-word phrase.

You are in a very good situation. Much better than many new bitcoin owners who ask questions here. It is very likely that your bitcoin is safe and needs no urgent action.

how can I find the wallet I created?

You don't need to, wallets are not important so long as you have the 12-word seed-phrase. Wallets don't contain your bitcoin, they are just a way of using the private-key (derived from the seed-phrase) which gives you control over your bitcoin.
Wallets are completely disposable. Just keep backups of your seed-phrase (or the private key itself) and guard them very closely.
The key things to do are

Don't panic, there is no urgency here.
Don't rush into things, you have time to work out the options that suit you best.
Don't let anyone else see your 12-word seed-phrase
Spend some time to understand

the different types of wallet available
the basics of

how wallets work,
what a private-key is,
what an address is,
the difference between a private-key and a seed-phrase.

choose a wallet that suits your needs, chytrik's answer contains a list.
I note that CoPay runs on Android and supports 12-word seed-phrases
but there are many choices available, take your time to choose one.

How can I recover from a 12 word seed phrase?

Chytrik's answer give you some good advice. The exact steps depend on which wallet you decide is best for you.
If you want to hang on to your Bitcoin for five years, you need do nothing other than lock away in a very safe place your 12-word seed-phrase.
I understand you'll feel compelled to check the amount of bitcoin you control though, that involves at least using a wallet to derive the private key from the pass-phrase and to derive the receiving address from the private key. The wallet will do all this automatically when you import the seed-phrase into it. Once you have an address you can check the unspent bitcoin value associated with that address by using any of several blockchain explorer websites.

Useful references here

How can I safely store and trade Bitcoin and other crypto currencies?
Where can I find more resources that explain Bitcoin simply?
What are the advantages of running a full node in comparison with a lightweight client?

The problem now his my funds are not coming out, i have recovered my wallet, but it totally brings out noting zero funds zero history, please help

@Perry, stay calm. some wallets need time to synchronise with the network before thay can add-up how much bitcoin your control. For example, I recently installed bitcoin-core and it took a week to synchronise. Lightweight wallets will be faster. It may be best for you to write a new question. Take your time to write a good question - include a link to this question - state exactly which wallet you are now using - state exactly what you did - what you expected to happen and what actually happened - include screenshots if relevant. Majke sure never to show seed-phrases or private keys.

It is good you wrote down the 12-word seed phrase. Without that, you bitcoin may have been lost forever! Do not share that phrase with anyone, no matter what! If you do, they will be able to easily steal your bitcoin.
You can use that 12-word phrase to recreate your wallet on another device. It sounds like what you have is likely a BIP39 mnemonic seed phrase, so you'll need a wallet which accepts a 12-word BIP39 seed phrase.
You can use a website like btcinformation.org to browse available wallet software. It is important to do your research and choose a wallet that is legit, look for many independent reviews of the wallet if you can.
Once you have the wallet software running, you should see a prompt to either start a new wallet, or recover an existing wallet. Choose the recovery option, and follow the steps to input your 12-word seed phrase. Doing so should recover your wallet, and once the software is synced you should see your bitcoin balance again.

Any particular reason to suggest btcinfotmation.org rather than, say, https://bitcoin.org/en/choose-your-wallet ? Just curious.

@RedGrittyBrick btcinformation.org is a fork of bitcoin.org, but I like that it is neutral in terms of advertising. I'm not too strongly opinionated on the issue though, and in general I would recommend someone check out multiple sources (which I tried to mention in my reply). I think both sites provide good info

https://bitcoin.stackexchange.com/questions/78957/i-recently-forgot-the-software-which-i-created-my-wallet-i-created-a-thread-for

Please click my new link, https://bitcoin.stackexchange.com/questions/78957/i-recently-forgot-the-software-which-i-created-my-wallet-i-created-a-thread-for , I cant seem to see anything that shows that my old wallet is in recovery


text:
How can I import an address or public key into my wallet.dat file?
I have a wallet.dat with Bitcoin Address: 15iRTcgqBk1QNtr2gKkq2dUsm5nN25dSeN
I want to delete this Bitcoin Address: 15iRTcgqBk1QNtr2gKkq2dUsm5nN25dSeN and add another Bitcoin Address
How can I add another Bitcoin Address to this wallet.dat if I know its public key, but I don’t know the private key of this Bitcoin Address?

A wallet.dat file will contain many, many bitcoin keypairs/addresses. So there is no reason to delete an older address, and in fact this is probably a bad idea. If you or anyone else ever mistakenly sends bitcoins to that address, it will be impossible to recover them once you've deleted those keys.
If you do not have the private key for an address, you will not be able to spend any bitcoin stored at it. That said, you can still import the address as a 'watch-only' address, meaning your wallet will keep track of the address' balance, but not be able to spend the coins (because you don't have the private key).
You can use the following commands:
bitcoin-cli importaddress for a bitcoin address
bitcoin-cli importpubkey for a bitcoin public key
Note that in order for your wallet to learn about transactions sent to the imported address/pubkey in the past, your wallet will need to rescan the blockchain (rescan=true by default when calling importaddress or importpubkey). If you happen to know which blocks the relevant transactions were included in, you can set rescan=false and then run rescanblockchain ("start_height") ("stop_height") and it will complete the rescan much faster.
And if you do have the private key, you can import it using:
bitcoin-cli importprivkey

Readers should also read https://bitcoincore.org/en/doc/26.0.0/rpc/wallet/importaddress/ and note the comment about descriptor wallets and the older type of wallet known as legacy wallets.


text:
How do I set the our_to_self_delay parameter?
In Core-Lightning, the default value for our_to_self_delay is set to 600. How do I change this value?

In Lightning the to_self_delay parameter is influenced by your peer. When a node opens a channel to yours, they advertise the minimum they are going to accept.
On Core-Lightning you can set the minimum value to request from peers with the watchtime-blocks option. You can learn more about this option in the lightningd-config manpage or at the online documentation. By default this value is set to 144 (1 day).
The value of your own to_self_delay will depend on your peer. The maximum value a Core-Lightning node will accept can be modified using the max-locktime-blocks option (same manpage as above). By default this value is set to 2016 (2 weeks).
Just to emphasize: the default value for the our_to_self_delay on Core-Lightning is not 600. You must have picked this from one of your channels, where your peer requested a minimum to_self_delay of 600. Since this is below the 2016 cap set by default, your Core-Lightning accepted to create a channel with this parameter.

Thank makes sense. Thank you!

@TasosSidiropoulos you are welcome. Feel free to mark it as accepted if that answers your question.


text:
Get utxos for an address without rescanning the whole chain
In order to gather the utxos for an address importdescriptors will rescan the blockchain. Is there another way to get all the utxos for an address / descriptor without having to rescan the block chain?

In order to get the current UTxOs for a descriptor, you can use the scantxoutset RPC command. It will scan the UTxO set but not the blockchain.

Thanks for your response. Is there a way I can do it to mimick that of Blockchain.com to scan for the utxo of any wallet address and return the response immediately?

You can call it for multiple addresses / descriptors at once. If you want something more efficient you are probably looking for a "scriptpubkey indexer", such as an electrum server: https://github.com/romanz/electrs/ .

Thanks for your help, I will check it out.


text:
Is there any workaround exist to restrict spending output address from Bitcoin Script?
Hey folks,
I know this question is pretty much similar to the one, that was asked 5 years ago. I'd like to share my research and ask, if there are any movements in this fields since then? Or maybe workarounds?
So, basically, the basic answer is no, because Bitcoin Script just have control over restricting/allowing to spend particular input and by design it has no knowledge of outputs, current transaction might hold.
One workaround was to add OP_CHECKTEMPLATEVERIFY, that will check transaction hash of current transaction against the one, that was in the script on creation. That way, you can be sure, that output is fixed against certain template. As of time of writing, it is merged in bitcoin-inquisition:24.0 and not available on Mainnet (unless I miss something).
As for OP_CONSTRAINDESTINATION, it is even not implemented, just proposal somewhere without any movement.
Another proposal was to generate PK of receiver and somehow encode and share, but it requires trusted setup, that makes the whole idea pointless.
Do you know any recent advancement in this field, that I might miss in my analysis, that might help restrict output of transaction from Bitcoin Script?

Some conversations are ongoing about Covenant-related proposals both in the bitcoin-dev mailing list and on the Delving Bitcoin forum: https://delvingbitcoin.org/c/protocol-design/7

Being able to express in a coin's Script conditions about the outputs of a transaction spending this coin is usually referred to as a covenant. This has been a field of active research for the past years.
The Optech website keeps a pretty good changelog of the various discussions on this topic.

Oh, thanks! Looks like there is no decision/agreement on this matter yet :(


text:
How to deserialize the Transaction Count in a raw block?
In the bitcoin-book, the "Transaction Counter" part of a block is documented as being 1~9 bytes long instead of a fixed size.
How is this counter parsed from the raw data?

This number is encoded as a variable-length integer, see the txn_count in the block protocol message.
The idea is the following:

Read the first byte as marker
If marker < 0xFD

marker is the number

If marker == 0xFD

read the next 2 bytes as the number

If marker == 0xFE

read the next 4 bytes as the number

If marker == 0xFF

read the next 8 bytes as the number

Or, in Python:
def read_varint(byte_array):
    marker = byte_array[0]
    if marker < 0xfd:
        return marker
    elif marker == 0xfd:
        return int.from_bytes(byte_array[1:3], 'little')
    elif marker == 0xfe:
        return int.from_bytes(byte_array[1:5], 'little')
    else:
        return int.from_bytes(byte_array[1:9], 'little')

See also the implementation in Bitcoin Core here.

Thanks a lot. BTW, this varint algo is not a "watch ahead" I think :)

Oh i need to edit my answer anyways as i cleaned up your question to make it more concise :) Also, not sure about what you mean by "watch ahead algorithm" ?

"watch ahead" is read some extra data ahead to determine the meaning of the current token. e.g. here if the algo needs to read some bytes of the TX content, then it is a watch ahead. varint is a clever algo does not need to watch ahead.

Ok, thanks!     (random characters here to make the minimum comment length)


text:
Has There Been a Change in Bitcoin RPC's scriptPubKey Address Field
So I have not been very into Bitcoin for a long time. My seniors worked on Bitcoin RPC methods in my project back in 2018-2019. At that time, the response of getblock was fetched, then we fetched the transaction from the response, and from the tx_hash, we used to fetch vout, then scriptPubKey, and from that, the old team fetched addresses. There used to be many addresses back then maybe. But now, in 2024, when I worked on it, I found that there is no addresses field in scriptPubKey, but instead, it's address, only one.
So I just want to confirm if there have been any changes, and is there are any docs related to this changelog, as I tried to find it myself but didn't find any.

Once you know the bitcoind version this code was written for and the bitcoind version you are using now, you can go through the release notes available here to learn about any breaking change.


text:
Why does Bitcoin use ECDSA, instead of plain old hashing, to secure transaction outputs?
For example, let’s say I pick a random secret and hash it. Now, in the hypothetical hash-based scheme, my hash effectively replaces my public-key hash, and my random secret effectively replaces my private key. As far as I can tell, the only additional benefit of ECDSA is authentication of some identity. Is identity authentication really something Bitcoin needs to care about?

You must reveal the secret in order to spend the output, else there is no way other users could verify that your hash is indeed the correct one. Once you reveal that secret, anybody could attempt to create a competing transaction which spends to a different output - miners in particular would be able to confirm this transaction into a block and ignore your own.
The purpose of using ECDSA is so that a transaction which spends some output is signed by the private key corresponding to a public key, but without ever needing to reveal the private key. Nobody can attempt to create a competing transaction to spend this because they require the private key to do so. You cannot create a digital signature with only knowledge of the public key, but you can verify that the signature is correct using only the transaction and the public key.


text:
Lightning Network: How was the maximum allowed HTLCs in flight computed?
The maximum acceptable max_accepted_htlcs (maximum number of HTLCs forwarded concurrently) is specified by the BOLTS as being 483.
How was this value chosen ?

The rationale is given in BOLT #2:

max_accepted_htlcs is limited to 483 to ensure that, even if both sides send the maximum number of HTLCs, the commitment_signed message will still be under the maximum message size. It also ensures that a single penalty transaction can spend the entire commitment transaction, as calculated in BOLT #5.

The maximum message size is set in BOLT #8 to about 65kB. Therefore it is necessary to limit the size of a commitment transaction, which is otherwise bounded by the block size (4M Weight Units) according to consensus and the maximum standard transaction size (400k Weight Units) according to relay policy.
The second part of the rationale is maybe less clear. An outgoing HTLC in your channel adds an output to each of the two commitment transactions. Same for an incoming HTLC. The limit therefore makes it so there is at most 966 HTLC outputs in a single transaction.
The calculation in BOLT #5 to justify this choice is the following:
max_num_htlcs = (400000 - 324 - 272 - (4 * 53) - 2) / 413 = 966

Here is what each of the number corresponds to:

400'000: the maximum standard transaction weight
324: the weight of the input spending the output in the commitment transaction paying yourself.
272: the weight of the input spending the output in the commitment transaction paying your peer.
53: the size of the header and the outputs of the penalty transaction. Multiplied by 4 because it is not witness data.
2 : the size of the witness header.
413 : the maximum weight to spend an HTLC output.

Great explanation, except that it's 400,000 WU, not 4,000,000, because it's limited by transaction standardness, not block size (see my answer above).

Thanks Stephan, will amend !

@AntoinePoinsot: I don’t understand why an HTLC would add two new outputs to the commitment transaction. Wouldn’t it just be one that can be spent in two different ways?

@Murch yeah there is multiple things wrong with this answser. I'm not sure where this 2-outputs per HTLC comes from, and some links are incorrect. I'm trying to understand what my 4-years-ago self meant now.

Aaah alright. Just understood what i meant! It's maximum 483 htlcs accepted by each side! So it's 2 outputs added per bi-directional HTLC per commitment transaction. Maybe i was also confused, but maybe it was just english lacking even more back then. Making an edit now.

The maximum standard weight is a restriction on bitcoin transaction size. It's the maximum weight that a transaction can have to be 'standard', which means it is still relayed by unmodified bitcoin core nodes. You could have a bigger tx in a block, but you would probably have to find a miner yourself that is willing to include it.
The concept of weight is important here, it's the new way of measuring transaction size since segwit and is thoroughly described here
Aside from that, what exactly don't you understand in the calculation?

Oh I don't understand how calculation of max_num_htlcs turns into 966. What does (400000 - 324 - 272 - (4 * 53) - 2) / 413 mean?

I think you need to try a little harder. Please take the time to try to understand the text that you linked to. They tried to explain what they did there. Now it may be that you don't understand every part of what they are trying to explain. That's fine. Then you can ask a specific question. But just asking people to write an even more elaborate text in case you might take the time to read it this time seem a little lazy to me.


text:
Questions about sendmany json-rpc
1 - Whats is the limit for sendmany?
2 - Can i batch a large number of payments (several hundreds)?
3 - Does an error in processing any address would interrupt the whole process?

There is no hard limit on the size of the amounts objects you pass, but you may at some point reach the standardness limits on transaction weight.
As only one transaction will be created, an error processing any address will interrupt the whole process.

For the sake of the example here is a regtest transaction with 802 outputs (could not copy paste here as it reached the characters limit).

Thanks! I'll make some tests.


text:
How to run the Bitcoin Core functional tests
How do you run the functional tests from the Bitcoin Core Github repository?

Clone a local copy of the repo and then from the project root:
test/functional/test_runner.py

(no python3 or ./ required)
Minimum required python version is listed here: https://github.com/bitcoin/bitcoin/blob/master/.python-version
Documentation for running the functional tests is here: https://github.com/bitcoin/bitcoin/blob/master/test/README.md#functional-tests

Maybe point out they need to compile the project first?

I'm running bitcoin core. When I input that command into terminal I get 'Command not found'.


text:
Error creating a Taproot descriptor with a single key as script path
I need to implement 1 of 2 multisig with P2TR.
My friend's Bitcoin public key is 0374d5f29bc6c15066437856c512f7f9e5a14a1eb93cab2776d33b27b4103c62d8.
My own Bitcoin public key is 035d107216d89a540edacba2bc6719f3a9c6eac538bebac8b305e8cd42c3e466ae/
I will use my public key as the Key Path and my friend's as script path.
Can anybody tell me how to create a P2TR descriptor?
I got following errors:
./bitcoin-cli -testnet -rpcwallet=w_p2tr getdescriptorinfo "tr([0d378869/44'/1'/0'/0/1]035d107216d89a540edacba2bc6719f3a9c6eac538bebac8b305e8cd42c3e466ae, [(0xC0, [0374d5f29bc6c15066437856c512f7f9e5a14a1eb93cab2776d33b27b4103c62d8, OP_CHECKSIG])]"
error code: -5
error message:
'tr([0d378869/44'/1'/0'/0/1]035d107216d89a540edacba2bc6719f3a9c6eac538bebac8b305e8cd42c3e466ae, [(0xC0, [0374d5f29bc6c15066437856c512f7f9e5a14a1eb93cab2776d33b27b4103c62d8, OP_CHECKSIG])]' is not a valid descriptor function

AND:
./bitcoin-cli -testnet -rpcwallet=w_p2tr getdescriptorinfo "tr([0d378869/44'/1'/0'/0/0]035d107216d89a540edacba2bc6719f3a9c6eac538bebac8b305e8cd42c3e466ae, { pk(0374d5f29bc6c15066437856c512f7f9e5a14a1eb93cab2776d33b27b4103c62d8) })"
error code: -5
error message:
' { pk(0374d5f29bc6c15066437856c512f7f9e5a14a1eb93cab2776d33b27b4103c62d8) }' is not a valid descriptor function

BUT I got the descriptor right for key base only:
./bitcoin-cli -testnet -rpcwallet=w_p2tr getdescriptorinfo "tr([0d378869/44'/1'/0'/0/0]035d107216d89a540edacba2bc6719f3a9c6eac538bebac8b305e8cd42c3e466ae)"
{
  "descriptor": "tr([0d378869/44'/1'/0'/0/0]035d107216d89a540edacba2bc6719f3a9c6eac538bebac8b305e8cd42c3e466ae)#wfd6rw0p",
  "checksum": "wfd6rw0p",
  "isrange": false,
  "issolvable": true,
  "hasprivatekeys": false
}

If there is a single leaf in the descriptor you should not use brackets for the script path:
tr([0d378869/44'/1'/0'/0/0]035d107216d89a540edacba2bc6719f3a9c6eac538bebac8b305e8cd42c3e466ae,pk(0374d5f29bc6c15066437856c512f7f9e5a14a1eb93cab2776d33b27b4103c62d8))


text:
LND make install Error 127
I try to install LND like this:
git clone https://github.com/lightningnetwork/lnd
cd lnd
sudo make install

I get the following error:
/bin/sh: 1: go: not found
make: *** [Makefile:112: install] Error 127

Go is installed. Go version:
go version go 1.20.2 linux/arm

.profile PATH is exported:
export PATH=$PATH:/usr/local/go/bin

.bashrc contains:
export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin

Thanks in advance

Your shell cannot find the go binary in the PATH thats because when you use sudo the command is run in a new environment and some environment variable can not be there like PATH Here is how to fix that:
open a terminal then open the sudo configuration file in a text editor with sudo visudo then add :/usr/local/go/bin at the end of Defaults secure_path=
If you still have problem try to reinstall your go

The -E flag was not the solution but got me on the right track. Change your answer to something like this and I can mark it as correct answered.
open sudo config with sudo visudo and add :/usr/local/go/bin at the end of Defaults secure_path =

okay, thats a working solution :)


text:
SPV Bloom filter construction, are false positives taken from the blockchain or just due to matching with other addresses
It is my understanding that the false positive addresses generated by an SPV bloom filter do not need to necessarily be on the blockchain (ie. be addresses that have been used already).
Is that a correct way of thinking about SPV bloom filters?

Bloom filters are probabilistic, each attempted match you make with it has a specific chance of being a false positive. The rate of false positives is determined by the construction of the filter (how wide it is and how many elements have been added to it). A transaction either probably matches, or certainly doesn't match a given bloom filter.
BIP37 does not include Bitcoin addresses in the filter matching system, instead for every transaction in the block a given filter is matched with the TXID, every output script, every input script, and every data element in the input script. If any element matches the transaction is sent to the client, false positive or not is up to the client to decide.

It is my understanding that the false positive addresses generated by an SPV bloom filter do not need to necessarily be on the blockchain (ie. be addresses that have been used already).

BIP37 SPV filtering will only ever return either transactions from a block (including the merkle tree path to the block header), or transactions from their memory pool which match the given filter. False positives aren't created out of nowhere, they just happen to be other transactions which fit a criteria given by the client.
The intent was originally that clients would tune the level of false positive transactions to obscure their real intention from the peer they are talking to, but in practice this appears to be completely ineffective.

false positives addresses ... do not need to necessarily be on the blockchain

You can think of bloom filter matching like a function.
def matches(tx, filter):
    ...

You could make a transactions that returns true for this function with a given filter, which also was not meant to return true for that transaction, so false positives can exist outside of the blockchain data. But to see it in practice, a false positive will almost always come from the blockchain/p2p network.


text:
Make remote RPC connection to bitcoind server secure
I set up a bitcoind server on an Ubuntu server and I can remotely execute commands on the server. I am doing this with Java/RPC. To execute a command I need to provide a username and password. But I think that would not be enough security. That's why I am asking here. How can I make this connection really secure? First, I thought I could only allow requests from a specific IP, but that will not work because my app runs on Google's App Engine and therefore does not have a static IP.
Any ideas how to make this secure? Here is my code, if it is of interest:
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class RPCClient {

    private static final String COMMAND_GET_BALANCE = "getbalance";
    private static final String COMMAND_GET_INFO = "getinfo";
    private static final String COMMAND_GET_NEW_ADDRESS = "getnewaddress";

    private JSONObject invokeRPC(String id, String method, List<String> params) {

//      CloseableHttpClient httpclient = HttpClientBuilder.create().build();
//
//      httpclient.getCredentialsProvider();
        DefaultHttpClient httpclient = new DefaultHttpClient();

        JSONObject json = new JSONObject();
        json.put("id", id);
        json.put("method", method);
        if (null != params) {
            JSONArray array = new JSONArray();
            array.addAll(params);
            json.put("params", params);
        }
        JSONObject responseJsonObj = null;
        try {
            httpclient.getCredentialsProvider().setCredentials(new AuthScope("55.233.188.139", 9332),
                    new UsernamePasswordCredentials("myUser", "mySuperSecurePW"));
            StringEntity myEntity = new StringEntity(json.toJSONString());
            System.out.println(json.toString());
            HttpPost httppost = new HttpPost("http://55.233.188.139:9332");
            httppost.setEntity(myEntity);

            System.out.println("executing request" + httppost.getRequestLine());
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            if (entity != null) {
                System.out.println("Response content length: " + entity.getContentLength());
                // System.out.println(EntityUtils.toString(entity));
            }
            JSONParser parser = new JSONParser();
            responseJsonObj = (JSONObject) parser.parse(EntityUtils.toString(entity));
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (org.json.simple.parser.ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // When HttpClient instance is no longer needed,
            // shut down the connection manager to ensure
            // immediate deallocation of all system resources
            httpclient.getConnectionManager().shutdown();
        }
        return responseJsonObj;
    }

    public Double getBalance(String account) {
        String[] params = { account };
        JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_BALANCE, Arrays.asList(params));
        return (Double)json.get("result");
    }

    public String getNewAddress(String account) {
        String[] params = { account };
        JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_NEW_ADDRESS, Arrays.asList(params));
        return (String)json.get("result");
    }

    public JSONObject getInfo() {
        JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_INFO, null);
        return (JSONObject)json.get("result");
    }

    public JSONObject getInfo(String command) {
        JSONObject json = invokeRPC(UUID.randomUUID().toString(), command, null);
        return (JSONObject)json.get("result");
    }

    public static void main(String[] args) {
        System.out.println(new RPCClient().getInfo());
    }
}

You first said you had an Ubuntu server with bitcoind running, and then AppEngine. Which one is it?

EDIT: I just noticed your question asks for App Engine specific solution. This solution only applies if you have 100% control over the Linux server running your code, so this does not work on App Engine (or I have no idea does it nowadays have capability of tunnel building). In any case I recommend you to move your code to a virtual server from the app engine to have more control over your stack, as you might hit App Engine limitations quite fast if polling bitcoind for transactions.
Build a TCP/IP tunnel through SSH from the computer running your code to the server running bitcoind.
One easy way to build such a tunnel which restarts itself on disconnect is AutoSSH.
Here is one AutoSSH example script:
http://www.ubuntugeek.com/automatically-restart-ssh-sessions-and-tunnels-using-autossh.html

Recommendations:

Build an API-REST, WS, or any equivalent for communication between the node and the outside.
Limit access to the RPC node as much as possible (Access the node only locally), you should consider the bitcoin node as a data base. use your ubuntu server only to run RPC and the external service.
Never expose a connection to the node to the outside. check the Bitcoin RPC documentation for more information.

https://bitcoincore.org/en/doc/
Sorry, my automatic proofreader made me believe that this is the forum in Spanish.


text:
get any transaction in p2p manner using bitcoinj
I'm pretty sure bitcoinj is capable of downloading any Bitcoin transaction from P2P nodes by broadcasting GetDataMessage because that's what it  does in the peer.downloadDependenciesInternal method.
I'm trying to find/implement a very simple method which would download a transaction with its inputs and outputs and the block in which it's included (if any) but, because of Guava asynchronous futures, I cannot figure it out.
Very simply, I would like to replace 3rd-party services like blockchain.info with something decentralized.

GetData can fetch only unconfirmed transactions, and that's what Peer.downloadDependenciesInternal is doing.
You might want to contact the developer of the now defunct biteasy.com block explorer, he was using (and extending on) bitcoinj.

So far, what I found out is that bitcoinj can only fetch unconfirmed
transactions using:
GetDataMessage message = new GetDataMessage();
message.addTransaction(hash);
peer.sendMessage(message);

Message should then be received by some listener, for example:
peer.addPreMessageReceivedEventListener(...);

But confirmed transactions will not be received by this nor any similar method. If I'm wrong here I would be very happy. Simply there's no such functionality without running full node (bitcoind) with hash index.

Given that a Bitcoin Core full node cannot locate individual transactions by txid (unless txindex is enabled) for local usage, how would those same nodes be able to provide it to you over the network? If you want to find confirmed transactions, you need to synchronize the blocks (potentially with BIP37 filtering, but that has severe privacy implications).

If your goal is to replace a 3rd-party service like blockchain.info, then you have to run a full bitcoind node with -txindex=1 and write your service to interface with it (see here)
As far as I can tell, the only way to get bitcoinj to only download your own confirmed TXs (by ID) is by setting up your wallet with it and using the Bloom filter feature to download Merkle proofs w.r.t. to the block headers. However, this will not be helpful for your application, where you want to download any transaction. You will have to run a full node!

authors: Олеся Олесенька


text:
Understanding Bitcoin wallets
I want to make sure I'm understanding a few basic concepts clearly:

A Bitcoin wallet itself is nothing more than a "record" that is stored on the Bitcoin blockchain. It's an identifier that will be used in a person's Bitcoin transactions.
A Bitcoin wallet app is simply a software tool to create transactions that are written on the Bitcoin blockchain
I think some Bitcoin wallet providers -- not sure if "provider" is the right term -- may keep some information about the user's wallet/transaction information on their own system.
The value added by those who provide Bitcoin services are simply providing user-friendly tools to read/write information from the Bitcoin blockchain. They may also be providing a method of converting real currency into cryptocurrency and vice versa (e.g., trading or purchasing of Bitcoin)

Am I getting this right so far?

Not sure if this is helpful, but here's what I think you should think about when you hear "Bitcoin wallet":

A Bitcoin wallet is a set of accounts that you can (a) spend coins from and (b) receive coins into.
An account is one and the same thing as a secret key and its corresponding public key [1].
To spend coins from an account, you need to perform a digital signature using that account's secret key.
Thus, anybody in possession of the account's secret key can spend all coins from that account. In other words, your secret key better stay secret and please don't lose or "forget" it. Or else [2].
To receive coins from Alice, you have to give Alice one of your accounts' public key [1].

Now, armed with this knowledge, I think you can answer your own questions:

A Bitcoin wallet itself is nothing more than a "record" that is stored
  on Blockchain. It's an identifier that will be used in a person's
  Bitcoin transactions.

Yes and no. A wallet is a bunch of accounts. Each account has a "record" in the blockchain: there will be an entry of the form (_public key_, 10 bitcoins) for that account [3].

A Bitcoin wallet app is simply a software tool to create transactions
  that are written on BlockChain

Yes. A wallet app is a piece of software that manages all of your accounts' secret keys and enables you to perform those digital signatures that let you spend your coins. Those signatures are over transactions of the form (_my public key_, _recipient public key_, x bitcoins) as I detailed in [3].

I think some BitCoin wallet providers -- not sure if "provider" is the
  right term -- may keep some information about the user's
  wallet/transaction information on their own system.

I'm assuming you are talking about folks like coinbase.com, which manage your wallet for you? Recall that if they're gonna allow you to spend your bitcoins with a click of a button online, then they need your accounts' secret keys. So yes, they store that. And sometimes they're hacked and you lose your money [2]. On the other hand, if you don't use online wallets like coinbase.com, managing your own secret keys can be dangerous too: I have heard many stories of people losing their hard drives and thus their bitcoins.

The value added by those who provide BitCoin services are simply
  providing user-friendly tools to read/write information from
  Blockchain. They may also be providing a method of converting real
  currency into cryptocurrency and vice versa e.g. trading or purchasing
  of BitCoin

The value part of this is in "opinion land", but yes, I suppose I agree: it's much more user-friendly not to mange your secret key and worry about losing it or being hacked. Still, you might just be replacing one worry with another: now coinbase.com might be hacked and your bitcoins gone [2].
And yes, some wallet providers like coinbase.com let you convert USDs into bitcoins and viceversa.
I hope this helps.
[1] Sometimes you'll hear the term address, which can be thought of as a "fingerprint" of the public key. To keep things simple, I will not distinguish between the two. Although, in practice, you will give the address, not the public key, to folks who want to send you coins. (This has to do with efficiency reasons and a bit of security.)
[2] Every time you hear about one of these "Bitcoin hacks," it's because someone's secret key got stolen => the victim's coins got sent to the attacker's account using a digital signature via the stolen secret key.
[3] To be more specific, there are actually a bunch of entries recording transfers from some other account into your account: (_public key_ of sender, your account's _public key_, 5 bitcoins sent to you)


text:
Bitcon transaction verify
I'm trying to understand verifying Bitcoin transaction but I can't find this part anywhere. Summary, the process before forming blocks. My questions is:
1) When I send transaction, who validates it ? Here I think, who can check and found that I haven't got enough money in my wallet. Example; I send 100 BTC but I have only 50.
The problem is bigger because in my prior transactions, refund come back on "new" wallet and who can trace all my wallet to sum how much I have in that situation. I don't speak here on double spending. I understand that part.
2) Can one transaction go by mistake in two blocks, and who prevents this ?

1) When i send transaction who validate it ? Here I think, who can check and found that I haven't got enough money in my wallet. Example; I send 100 BTC but I have only 50.

All full nodes validate every single block and transaction they receive. Once a node validates each block and transaction, the block or transaction is forwarded to the nodes that it is connected.
A number of things are checked to ensure that a transaction is legitimate. One of the things checked is the sum of the outputs being spent (i.e. the inputs) is greater than or equal to the sum of the outputs being created. It does this by looking up the outputs that are being spent. Presumably the transactions that those outputs were a part of has already been validated and the node remembers that it determined that transaction to be valid. So when it sees your invalid transaction, it will immediately see that the sum of the outputs being created is greater than the sum of the outputs being spent, which means it is invalid. Your transaction will then be marked invalid and rejected.

2) Can one transaction go by mistake in two blocks, and who prevent this ?

No, a transaction cannot go in two blocks. This is prevented by full nodes which validate every single block and transaction they receive.

Short answer, the miners verify and validate your transactions.  The new block that they produce starts the validation for any new broadcast transactions that they choose to accept (if enough fee has been paid. )
You are the one who validates your own transactions in your client as to whether you can broardcast them at the start.  ie when you broadscast the transaction you provide a hash for that.  that is only valid if you have the correct funds in various addresses to send to the new address.  If you did not have enough funds then your client will not let you broardcast the transaction.  If you try to fudge a transaction then the miners will reject it as it is seen to have a different invalid hash to be accepted on the network.

1) Let's say you are running some sort of malicious client that tries to hoodwink the bitcoin system by pushing transactions to other nodes that aren't 'correct' ie spending coins you don't have. To do so, you would need know what a transaction looks like:
A transaction always moves ALL bitcoin on a number of spending (input) bitcoin addresses to other receiving (output) bitcoin addresses. The word ALL is relevant here; you can't leave some bitcoin on an address, you have to send all or nothing. There is only a distinction between input and output in regards to this transaction, the system only knows addresses. The client spreads the coins from the input addresses out over the output addresses as you decree, but can't send more coins than the sum of all input addresses contain. It can send less, the miner will use the difference as fee.
When your malicious client sends the transaction to the rest of the world, each other bitcoin client will check your transaction for validity. It will check whether or not it outputs more coins than you've input, and it checks the balance on each of the addresses. That last check will flag your transaction as malicious, since all other clients in the world know that your 100btc claim is false, and that only 50btc are on that address.
2) Each transaction is atomic, in the sense that it is a complete entity on its own. Your transaction can't be chopped in pieces (because the system would not know how to do that for an arbitrary transaction) and will thus always be in a single block.

This is incorrect. The system only knows inputs and outputs, not addresses. There is no need for you to spend the entire balance associated with an address. You don't spend from an address, you spend Unspent Transaction Outputs which are outputs created by other transactions. These must be spent fully.

Miners check your transaction for balance of: UTXO (unspent transaction outputs), fees and how much you send. If it is OK, TX goes to new block.


text:
Can I 'un-import' private key?
I'm checking out the test net and a friendly person gave me access to his private key so that I didn't need to generate coins, so I importprivkey the key, sent me some coins and...
Well, I understand that now my wallet contains those 2 addresses, how can I remove his address, if possible?
Why do I want to do this? Because I'm testing stuff out and I don't want his transactions / tests cloud mine.
Thanks

There is no way to 'un-import' a private key in the core client. What you could do instead is:

Make a list of all the private keys you do care about.
Close your client.
Move the wallet.dat out of the data directory to some other location.
Start the client.
Re-import all the private keys that you do want in your wallet.

This is sort of a work around, and it may be kind of tedious, sorry there isn't a better solution currently.

Your answer is correct, but I wanted to note that it might be easier in this specific case to use dumpwallet to create a text file of all keys, delete the single key @Valmond doesn't want, move the wallet.dat away, and then use importwallet to import the modified dumpwallet backup.  Because dumpwallet also includes the date each key was first used, this can also save import (rescanning) time.

I often have wondered why it's so cumbersome myself: perhaps the possibility of a lost private key outweighs the convenience factor

Thanks, perfect! ps. I bet deleting a private key isn't something people other than developers need to do so it could be risky to have that option.


text:
Properties of Bitcoin as an Electronic Cash System
I am studying the concept of Electronic Cash, and in several reference I found that the criteria describing the ideal electronic cash system are as follows:

Independence: The security of electronic cash cannot depend on
any physical condition. Then the cash can be transferred through
networks.
Security: The ability to copy (reuse) and forge the cash must be
prevented.
Privacy (Untraceability): The privacy of the user should be
protected. That is, the relationship between the user and his
purchases must be untraceable by anyone.
Off-line payment: When a user pay the electronic cash to a shop,
the procedure between the user and the shop should be executed in an
off-line manner. That is, the shop does not need to be linked to the
host in user’s payment procedure.
Transferability: The cash can be transfered to other users.
Dividability: One issued piece of cash worth value C (dollars)
can be subdivided into many pieces such that each subdivided piece
is worth any desired value less than C and the total value of all
pieces is equivalent to C.

Now, what of the above properties are achieved by the Bitcoin system? I guess 1, 2 and 5 are trivially achieved, and I think 3 and 6 are not fully achieved. I wonder if 4 is achieved, and I'm particularly interested in this off-line property.

I'm sorry if the tags are not really appropriate, but I think those are the best I could find.

When a user pay the electronic cash to a shop, the procedure between the user and the shop should be executed in an off-line manner. That is, the shop does not need to be linked to the host in user’s payment procedure.

Neither merchant nor customer need to be connected directly.
A customer can hand a merchant a previously-signed transaction without using a network connection. However, the merchant can only prove the validity of the coin(s) being spent by contacting the network.

So, in practice, the merchant would never accept the payment without previously contacting the network... Right?

Yes. The payment would only be accepted if the merchant trusted the payee. Even then, it would be wise to consult the network.


text:
How does Nano protect itself from transaction flooding attacks?
RaiBlocks transactions do not have fees and are processed instantly, so what protects the nodes from being flooded of tiny transactions?

From the wiki page, each transaction will be required to do around 5 seconds of Proof of Work, which will only require around 1 microsecond to validate. This means that the attacker will waste a large amount of resources while the nodes waste a very small amount.

What's preventing the attacker to modify the source code, to bring 5 seconds down to 1 microsecond?

Nothing prevents it, he could send complete junk data infact. But the nodes only take 1 microsecond to verify it is trash data. If he wants to send something valid he must do the 5 second PoW or the other nodes will notice it is falsefied data with their 1 microsecond verification.

That's not the detailed reply I hoped for. My C++ profiency is limited, but how could you verify he did 5 seconds PoW, instead of 4.9 seconds PoW, for example?

The 5 second Proof Of Work, is not an absolute value but an approximation. Bitcoin wants the network to solve blocks at an interval of around 10 minutes. If you check a block explorer you will notice that this is simply an average, sometimes there is only 7 minutes between two blocks sometimes 15. From my understanding the PoW should take around 5 seconds for someone to send valid data. One follow-up question that could be asked here which I do not know the answer is "How does the RaiBlocks network estimates 5 second PoW to send a valid transaction?"

The problem I see is how Raiblocks network protect itself against an attacker sending multiple valid transactions to accounts they control. The answer provided at the aforementioned wiki page is not satisfactory. It doesn't matter the ratio between verification and generation time. The issue is: will the network store all this data????


text:
Why does GBTC frequently not track Bitcoin's price?
As far as I know, the Grayscale Bitcoin Investment Trust (symbol GBTC) is currently the closest thing on the market to a Bitcoin ETF.
According to their web page, the investment objective of the trust is that:

Shares track the bitcoin market price, less fees and expenses

I have looked at the GBTC share price and compared it to Bitcoin's price on several occasions over the past couple months.  Frequently I'll see GBTC make a huge move (sometimes over 20% in one day) while Bitcoin makes a small move (say less than 5%), or vice versa.
Why is there frequently a discrepancy in the price movement between Bitcoin and GBTC, if GBTC is supposed to track Bitcoin?  There should be no discrepancy at all (and for just about every ETF I've ever seen, there isn't).  But on most days with GBTC, there is a discrepancy (sometimes huge).
Grayscale never responded to my query about this.

Have you asked Grayscale?

An Investor's Business Daily article discusses why GBTC's value does not match the value of the Bitcoins held in the fund.
It says that GBTC is not an ETF - it is a grantor trust.

It is not registered with the SEC [...] and it doesn't trade on an exchange.  It trades on the over-the-counter market, which has less stringent participation rules than exchanges. And unlike most ETFs, GBTC charges a high annual fee of 2% of assets."

It uses a recent day as an example of how GBTC trades at a substantial premium relative to the value of the Bitcoins held by the fund:

At the Jan. 29 closing price, Bitcoin was $11,233.95. That would make the NAV for a share of GBTC (11,233.95 x 0.00100733) $11.31. However, shares of GBTC closed at $19.14, a 69% premium to the NAV. So investors would have to pay 69% more per share than the underlying asset is worth.

It explains the premium by noting there has been a high demand for GBTC and a small supply of shares:

Instead of an ETF, people should think of GBTC as a closed-end fund. These typically trade at a premium or discount to its NAV. The reason for GBTC's premium is the high demand for the small supply of shares. It has only 176 million shares outstanding. [...] "If GBTC was more liquid and larger, and Bitcoin had wider acceptance, then there would be closer correlation between the price of GBTC and the price of the underlying asset," said David Foster, a securities fraud litigator in Farmington Hills, Mich.

Michael Sonnenshein, managing director of Grayscale Investments, basically said the same thing in the article:

"Since the shares began quotation on the OTCQX market in early 2015, they have traded at a premium valuation to the NAV," said Sonnenshein. "While we cannot pinpoint a singular reason for the premium, we can surmise several factors. Firstly, there are fewer shares available on the market than there is demand.  Secondly, it is the only U.S.-based investment vehicle that provides direct exposure to Bitcoin through the purchase of a security."

The article then mentions how the recent GBTC stock split has increased the supply and lowered the premium:

Grayscale recently declared a 91-for-1 stock split for the trust for shareholders of record on Jan. 22. They received 90 additional shares on Jan. 26. This lowered GBTC's share price and increased the supply adding more  shares to meet demand, thus increasing liquidity. The premium of share price over NAV has fallen but is still a whopping 47%.

Another thing the article mentioned is that the amount of Bitcoins held in the fund will fluctuate significantly as people buy and sell GBTC, so that would probably explain the frequent daily discrepancies that I've seen:

GBTC held 177,037 Bitcoins as of Jan. 29. The number of coins held by the trust fluctuates substantially as investors move money in and out of GBTC.


text:
How to decode raw transaction which has 00 in '#TxIn' slot?
These are two raw transactions I got from Testnet, using bitcoind -testnet.
01000000000101dc82cf0b892b325413ec7b3237e1a122c3114002ccd6e0f0157c8851144c00200100000017160014a530e459b62406b99aa75091bd9eb833a20698a3ffffffff0290f4f700000000001976a9143eabc5342434987e43e5c49f42462689d969c56288ac67baa26f2e00000017a9144d62bfc7376858c8d601c50dc08d8dc8491b27a8870247304402206998883f24133677c46a70e01e70cd9f69ee9059a4d5d82e891b82e797f125000220760a3af0836a9068de63ca0a4cedbb68bc8ea2d067f5cdaf92f2cd4d31703e18012103d8421b44b3d21151a5a2660662bc6ef69a0ef2266bf68b8c56eea715b23a596500000000
0100000000010151df0e2bb6bd3ffa19ae03330b7f89a4a8d6ad93bc204ec7d8cd367e58a10b580100000017160014a03506f19e6851264f21f373bae14023d247d760ffffffff02bc733400000000001976a9143d19e810138ebcb0033c462cf2b5e62a9d7af24588acc4ecca632e00000017a9142f877141344c0202e2f6eb979025d9e3f4f38c6a87024730440220342f74d49243d342a8cd3818e48d8aaf94c71fa41a96863dd986057992650bc202202a7cbe1541941e55abf06fee496c890cce9a2d2fcbb0710fb24342f3b513cd0a0121029e3868ce4a192e0b47f29090c243764e68b4c2c18aa0476272a61b62e3a3804c00000000
When I try to parse these transactions using new bitcore.Transaction(serialized) via Bitcore library, the return value either results in Buffer error or malformed Transaction.
When I refer the Bitcoin doc, the first 4 bytes are assigned to be version, and the following bytes are assigned to be the number of inputs, in the variable length integer format. Variable length integer has the value of uint8_t when its value is less than 0xFD, according to the doc.
Following the rule, above two raw transactions should indicate that these transactions have zero input because it has 01000000, thus 1 in little endian (so it means version 1), which is followed by 00, thus 0 (so it means 0 input) according to the doc.
But when I decode these raw transactions either at BlockCypher or by bitcoin-cli decoderawtransaction, it clearly shows that it has some input and the result seems to be valid. (By querying the tx id or addresses, I can get a valid result too.)
Is there any other way to decode these kind of raw transactions?

This is a SegWit transaction, serialized using the new format defined in BIP144.
The format is only permitted when at least one of the transaction inputs has a witness, and works as follows:

4-byte integer nVersion
1-byte dummy (must be 0)
1-byte flags (must be nonzero)
vector(transaction inputs)
vector(transaction outputs)
if (flags & 1): vector(input witnesses) (excluding the length, which is implied by the number of transaction inputs)
4-byte integer nLockTime

The dummy byte is required to be 0, guaranteeing that the transaction cannot be misinterpreted by old software (as by consensus rules, a transaction with 0 inputs is invalid).


text:
on testnet: 'transaction already in blockchain'.. but it isn't
At least I don't think so!
I'm trying to create a wallet infrastructure to minimise fees, and so I've been experimenting with raw transactions. I'm quite clueless but fortunately have enough sense to use testnet instead of the real thing :)
I created a simple raw transaction using a perl script that executes rpc commands to bitcoind. I picked a UTXO that had 0.0625 tBTC on it and tried
createrawtransaction, signrawtransaction followed by sendrawtransaction. I ran this a few times over the same utxo with the result:
{"result":null,"error":{"code":-26,"message":"66: insufficient priority"},"id":null}
(I was trying to see how the number of confirmations affected the priority so I did this at intervals)
Then at some point I started getting:
{"result":null,"error":{"code":-27,"message":"transaction already in block chain"},"id":null}
and yet as far as I can see, it is not on the block chain. I checked the receiving address both by rpc (of course it is my address) and using blocktrail.com/tBTC. Nothing on the receiving address, the original utxo is still there and nothing has changed in my wallet. I tried restarting bitcoind and a rescan but without any success.
What has happened? I am assuming it is not possible via raw transactions to fool the network into thinking the transaction has been transmitted when it hasn't - that would be a major flaw I think. Perhaps my copy of the blockchain has become corrupt? Do I need to reindex to purge this? (Reluctant to try this because in my experience it can take a long time.) Any other suggestions for dealing with this?
Thanks for any help!
EDIT
Actually I'd thought the txid would be returned by the network (and thus would be returned on successful submission) but I guess then it is a hash of the info it contains? Anyway, thanks Nick for inadvertently teaching me sthg there :)
So I did decoderawtransaction and I get the following output
$VAR1 = {
   'locktime' => 0,
   'vin' => [{
      'sequence' => 4294967295,
      'vout' => 1,
      'txid' => '5ef8db75b8f3590dda1865f1dc4810b6d4be56775e4af43b6a394dccafe4422f',
      'scriptSig' => {
         'hex' =>   '483045022100f24e41182ae3f1663b2bde4f9ff2d2e6ce66c0379ab8559c143a442460573da602206a28496206d5881bbb4eea9aa761bf07b3af2b8a6ca44b59e40a9b77059b91ad012102a3012dad956be238d9e17cd1b1473cd0c66968d479e3311e320b2c7b02dfa8b5',
         'asm' =>   '3045022100f24e41182ae3f1663b2bde4f9ff2d2e6ce66c0379ab8559c143a442460573da602206a28496206d5881bbb4eea9aa761bf07b3af2b8a6ca44b59e40a9b77059b91ad01 02a3012dad956be238d9e17cd1b1473cd0c66968d479e3311e320b2c7b02dfa8b5'
      }
  }],
  'version' => 1,
  'txid' => '3bc11bfb7778ad806619f8190231cf907302cfc545d7e5116e24a15795646583',
  'vout' => [ {
     'scriptPubKey' => {
         'hex' =>   '76a91468fd391d83c31283c00bc8b481f3eb698e33799c88ac',
         'asm' => 'OP_DUP OP_HASH160 68fd391d83c31283c00bc8b481f3eb698e33799c OP_EQUALVERIFY OP_CHECKSIG',
         'type' => 'pubkeyhash',
         'reqSigs' => 1,
         'addresses' => [
            'mq65vFheh3mXBvApPKbko8TVHaFQxEHxcf'
         ]
      },
      'n' => 0,
      'value' => '0.06257'
   } ]
 };

I guess the txid in question is then
3bc11bfb7778ad806619f8190231cf907302cfc545d7e5116e24a15795646583

? Again, I can't find this on blocktrail.. and I still have the same error?

Could you post the TXID so we can search for it ourselves?

Hi Nick - I edited my question

Thanks tom! That's really odd; it shouldn't do that unless you have a different set of blocks than a testnet block explorer. Could you compare getblockcount on your local system to http://blockexplorer.com/testnet/q/getblockcount ?

328860 for both?


text:
Bcoiner wallet - balance is showing as zero?
please help! I sent to my wallet 450 dolars of bitcoin, and transactions are confirmed strongly 62 times, but my wallet says that I have 0 bitcoins to spent and I cant sell it!!! What to do? Whats happening? thank you so much for answers!

What wallet is this? Can you post a transaction ID or receiving address?

I add one more screenshot in post above. its a bcoiner app. First time here, thanks for understanding.

I meant bcoiner wallet. Its a scam isnt it? 450 dollars!!!!!

The transactions paying to you were confirmed, but there have been a few subsequent transactions moving those coins to new addresses: txID 4d88a869b354b64a14d384939d1d801966733b892c07c189e9ceace3a57c49bd and then txID cb1fc617b635f851d79123f5e1fe16c98948c421445007ca11a2050ed4213355. The coins now reside at address 14qCMrBxt21idaa9FzZ5VBUKpy3rztXEvF. --- I am unfamiliar with bcoiner wallet, but a quick search reveals a help page on their site. If you did not make those transactions I would recommend contacting them to see if they can help.

In general, I would recommend using wallets that are well-known and well-reviewed (and most definitely, open source!). Bitcoin.org has a list of recommended wallets that is a good place to start from.

I already did. they answered me with some bullshit. I mail them again, no answers. So I guess I lost that , ha?

Happy to help. I do hope that you have not been scammed, and considering a lot of the world is celebrating holidays right now, maybe the support staff is just on vacation (wishful thinking, maybe). But otherwise, it is definitely best to stick to known wallets, and make sure you download them from trusted sources (or build from source code yourself).

thank you for the optimism. I hope so too. It's still writing in my wallet that I received 450 dollars and I didn't send it anywhere, so let's hope! Thank you! I will be much smarter next time!

@user101526 https://www.blockchain.com/btc/address/14qCMrBxt21idaa9FzZ5VBUKpy3rztXEvF - No the coins are spent shown here few hours ago did you cash it out

@user101526 I'd recommend www.blockchain.com they have a wallet that is fantastic btw I also hav ledger, a hardware wallet. They never had any problems I used it so far

@user101526 - I think it maybe just a bug in bcoiner wallet since they've shown the value?

@Duckduckgaga I would recommend avoiding the blockchain.com wallet. See https://bitcoin.org/en/choose-your-wallet for some well-respected choices.

Whats happening here

As others have commented, the money was received by the address in your wallet but was subsequently spent.
Since your wallet doesn't show the expected balance but also does not show the spends it seems there is some flaw in the app or in the service behind it. Whether this is a malicious flaw is impossible to say.
Since you didn't spend that money, someone else must have. That suggests the wallet has been compromised or the underlying account in the bcoiner service has been compromised.
Since bcoiner support have been unable to resolve this to your satisfaction, it might be prudent to avoid putting any more money into this wallet.

The bcoiner wallet is not an app I personally would use for the following reasons:

Unresolved woe - There are several stories similar to your own on this website. All wallets have some such stories associated with them but most also have some history of such problems being resolved or being found to have a more reasonable explanation than possible theft by app developers.

Suspicious review profile = Profile of reviews on Google Play seems suspicious to me. There are many 5-star reviews obscuring 1-star reviews (mostly similar experience to yours) and not much in between. Either this is a great wallet with some flaws or somebody is submitting fake 5-star reviews in a way that Google Play doesn't detect. The developers responses to the 1-star reviews are rather uniform and unhelpful. The evidence here is very weak, but I'm inclined to be cautious when choosing software that has control over money.

Custodial? - I have seen allegations that this is a custodial wallet. I would not want to use a custodial wallet.

Not open-source - It is proprietary closed-source not open-source, I prefer open-source wallets.

In the end I suggest you make a decision based on the quality of support you receive from bcoiner developers and from the community of bcoiner users.

It may be worth searching this site for other questions about bcoiner and using that information to help you to decide what action to take and whether to select a more popular and better supported wallet app.

Appendix - Google Play reviews:

Bcoiner - too good to be true? surprisingly polarised?

Mycelium

Blockchain (their non-custodial app, not their custodial wallet service)

Bitcoin Wallet (Schildbach)

Electrum - A formerly well-regarded wallet afflicted by a security flaw and a badly received recent update?

I found it revealing to actually read the reviews sorted by newest first and get a feel for the range of feelings expressed and the variety of subject matter and writing styles. Doing this for several wallets gives you an impression of what is normal and what is not.


text:
Is there a database of wallet addresses with lost private keys?
Hi is there a database of wallet addresses that have lost the private keys?

No, because it's not possible to prove a negative ("No I don't have the private key for that address") and I can't think of a use for that.

Not really, it's not possible to be sure that the private key corresponding to a given address is lost.
However, it's possible to find in the blockchain addresses that have coins in them and haven't been used for years. This might indicate that original owner has lost access to this address. It doesn't mean that it won't be reclaimed, either by the same person or someone else gaining access to the keys, e.g. by data recovery from an old hard drive or, in the future, speculatively, by breaking the cryptography used to secure Bitcoin. However, it might not be lost at all, it might be used as long term storage.
For examples of such addresses you can check this list, which collects 100 richest addresses that hasn't been spent from for 5 years. The same website also has lists for up to 8 years of dormancy.
Moreover, there are addresses used for intentional burning of Bitcoin, such as 1CounterpartyXXXXXXXXXXXXXXXUWLpVr. In this case, it is certain that the address doesn't have any private key corresponding to it, because generating such a private key isn't computationally feasible. It is a special case, however, because in this case the key wasn't lost, it was never generated.


text:
Where can I get bitcoin customer support? Is there a support number?
I have a bitcoin problem. My transaction is unconfirmed, etc
Is there a support number that bitcoin users can call for help?

There is no support number for bitcoin - It's a decentralized network, with no central authority behind it. You would need to share some basic information such as the txid and wallet you are using before anyone here could try to help

Bitcoin is not a business, it is a decentralized computer network, where no one person or organization is in charge. Thus there is no customer support number for bitcoin, like you may be used to with your bank, credit card, etc.
Note that even though bitcoin itself is not run by a business, there are businesses that operate within the bitcoin ecosystem. For customer support regarding those businesses, you'll need to contact them directly.
But for general bitcoin questions, you're in the right place to ask for support regarding your problems. Just like bitcoin is a decentralized cryptocurrency where no particular person is in charge, its 'support team' is also decentralized and scattered across the world. I put 'support team' in quotations because the participants of this Stack Exchange site are not employees of bitcoin or Stack Exchange, instead, they are here of their own accord, volunteering their time and knowledge to help others. There are many users here with a great knowledge regarding cryptocurrencies, so if you ask a good question, you will likely receive a great reply.
You could elaborate on your problem a bit for a better response.

Where did you do the transaction?
Did you pay the miner fees?
Did your wallet software give any response?
Were you trading/transacting on an exchange?
The transaction id (TXID)
Did your transaction make it to the memory pool (mempool)?

I see that you're new to StackExchange.
Please edit your question for some significant help.


text:
Digital Signature and private/public key
I am new to Bitcoin and Blockchain and I am writing a thesis for my university about this topic.
I have a general question about digital signatures, which are needed to verify a transaction.
As far as I understood, for having a digital signature, one need to have a public verification key and a secret key.
Is the secret key equal to the private key which is needed to spend transactions.
Analog: Is the public verification key the same as the public key whose hash is the bitcoin adress ?
Thank you in advance.

Is the secret key equal to the private key which is needed to spend transactions.

Yes

Analog: Is the public verification key the same as the public key whose hash is the bitcoin adress ?

Yes, also correct. You’re on the right track :)


text:
How much bitcoin is being sent to someone else in this transaction?
From this link which is a bitcoin testnet transaction.
How can we be sure that this transaction spent a certain amount of satoshis to an address from another wallet? In this case the transaction is spending 2000000 t-satoshis to mzTH5MV8AVuzu6PRL5NArsv6qNYro1P8Qm address.
UPDATE
It seems "blockcypher" system is doing this accurately for this transaction as well. So there must be a way to do it. How does this work?
Blockcypher displays that Estimated Value Sent : 0.01 t-BTC

Generally, there is no information in a bitcoin transaction which indicates the amount being transacted between two parties. An outside observer can view the value of inputs and outputs, but the ownership of each output will be unknown to them. More specifically, the change output is often indistinguishable from the other outputs, so an outside observer may not know which output is the change, and which is the actual amount transacted. This is important, because it helps preserve privacy!
Consider this simple example: User A sends a bitcoin transaction to User B, which looks like this on the blockchain (ignoring fees for simplicity):
Inputs:

Address 1: 5 BTC

Outputs:

Address 2: 2 BTC
Address 3: 3 BTC

As an outside observer, we cannot tell whether User B was sent 2 BTC, or 3 BTC. By design, there is no data to tell us this.

However, in the case of both transactions you linked, the input address has been re-used as the change address, which is not best practices, as it significantly degrades privacy. This allows us to know how much BTC was transacted, because the transaction now looks like this:
Inputs:

Address 1: 5 BTC

Outputs:

Address 2: 2 BTC
Address 1: 3 BTC

And so we can see that User A sent 3 BTC back to themselves, and thus 2 BTC were sent to User B.

NOTE: some block explorers will make a guess at "how many bitcoins were transacted" (sent from one user to another) in a given transaction, according to some logic written by the developers that built that explorer. But this is just a guess, there is fundamentally no way to be certain about this information.
When best practises are followed, it becomes impossible to tell how much BTC was 'transacted': this is by design, and it is important for privacy and fungibility.


text:
How many transactions per block on Ardor? Plans for scaling?
How many total transactions are there in each Ardor block? Out of the total transactions per block, how many are child chain transactions? What are the limits and what types of scaling solutions are being developed to address these limitations?

If I'm right, the current hard-coded limitations are:

100 tx/block for main chain (block spacing is 1 minute)
100 tx/block for every child chain.

The current maximum capacity (if there were 100 child chains) would then be 10000 tx/minute (or about 160-170 tx per second), because child chains' transactions are bundled into a main chain ChildChainBlock transaction. A more realistic value would be 5000 (with 50 child chains), so there is space for 50 ARDR transactions per minute.
I guess that's largely a anti-spam measure and can be lifted once it becomes necessary. But even the "realistic" 5000 tx/min would mean about ten times Bitcoin's capacity. It would need relatively powerful nodes, but once child chain pruning is implemented, it would become much faster to sync and "catch up".
Waiting for an official developers' answer though ;)