GithubHelp home page GithubHelp logo

bitcoin / bitcoin Goto Github PK

View Code? Open in Web Editor NEW
76.0K 4.0K 35.3K 248.96 MB

Bitcoin Core integration/staging tree

Home Page: https://bitcoincore.org/en/download

License: MIT License

Shell 1.03% Python 20.03% Makefile 0.82% C++ 64.93% C 10.83% HTML 0.12% Objective-C++ 0.03% M4 1.17% Assembly 0.16% Scheme 0.12% CMake 0.33% Sage 0.33% Java 0.01% Cap'n Proto 0.01% Dockerfile 0.03% QMake 0.01% Rust 0.06%
bitcoin c-plus-plus p2p cryptocurrency cryptography

bitcoin's Introduction

Bitcoin Core integration/staging tree

https://bitcoincore.org

For an immediately usable, binary version of the Bitcoin Core software, see https://bitcoincore.org/en/download/.

What is Bitcoin Core?

Bitcoin Core connects to the Bitcoin peer-to-peer network to download and fully validate blocks and transactions. It also includes a wallet and graphical user interface, which can be optionally built.

Further information about Bitcoin Core is available in the doc folder.

License

Bitcoin Core is released under the terms of the MIT license. See COPYING for more information or see https://opensource.org/licenses/MIT.

Development Process

The master branch is regularly built (see doc/build-*.md for instructions) and tested, but it is not guaranteed to be completely stable. Tags are created regularly from release branches to indicate new official, stable release versions of Bitcoin Core.

The https://github.com/bitcoin-core/gui repository is used exclusively for the development of the GUI. Its master branch is identical in all monotree repositories. Release branches and tags do not exist, so please do not fork that repository unless it is for development reasons.

The contribution workflow is described in CONTRIBUTING.md and useful hints for developers can be found in doc/developer-notes.md.

Testing

Testing and code review is the bottleneck for development; we get more pull requests than we can review and test on short notice. Please be patient and help out by testing other people's pull requests, and remember this is a security-critical project where any mistake might cost people lots of money.

Automated Testing

Developers are strongly encouraged to write unit tests for new code, and to submit new unit tests for old code. Unit tests can be compiled and run (assuming they weren't disabled in configure) with: make check. Further details on running and extending unit tests can be found in /src/test/README.md.

There are also regression and integration tests, written in Python. These tests can be run (if the test dependencies are installed) with: test/functional/test_runner.py

The CI (Continuous Integration) systems make sure that every pull request is built for Windows, Linux, and macOS, and that unit/sanity tests are run automatically.

Manual Quality Assurance (QA) Testing

Changes should be tested by somebody other than the developer who wrote the code. This is especially important for large or high-risk changes. It is useful to add a test plan to the pull request description if testing the changes is not straightforward.

Translations

Changes to translations as well as new translations can be submitted to Bitcoin Core's Transifex page.

Translations are periodically pulled from Transifex and merged into the git repository. See the translation process for details on how this works.

Important: We do not accept translation changes as GitHub pull requests because the next pull from Transifex would automatically overwrite them again.

bitcoin's People

Contributors

achow101 avatar ajtowns avatar dongcarl avatar fanquake avatar furszy avatar gavinandresen avatar glozow avatar gmaxwell avatar hebasto avatar instagibbs avatar jamesob avatar jnewbery avatar jonasschnelli avatar jonatack avatar kallewoof avatar laanwj avatar luke-jr avatar meshcollider avatar morcos avatar non-github-bitcoin avatar practicalswift avatar promag avatar ryanofsky avatar sdaftuar avatar sipa avatar sjors avatar thebluematt avatar thestack avatar theuni avatar vasild avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bitcoin's Issues

Accessibility issues

I'm opening this for a blind bitcoin user:

There are a couple concerns I have with the accessibility of the GUI in Bitcoin. The "Send Coins" and "Addressbook" buttons are not in the tabstop list, so a blind person with a screen reader cannot tab to and activate these buttons. Also, the current address and balance are also not accessible via pressing tab. When arrowing through the list of transactions, the screen reader, rather than starting out with the status (number of confirmations), reads a long number, usually starting out with 00. If you wait long enough, the rest of the table is read, but unfortunately that is a while to wait.

Also, when bringing up transaction details, there is an html window displayed, but absolutely no feedback is given from the screen reader. Last, in the addressbook, tabbing from control to control works fine, but when shift-tabbing, only the list and tab control are tabbed to.

Of course, most of these concerns, excluding the HTML window which isn't read at all, are not a big deal for myself, as I'm a power user and can use my screen reader's review cursor to read most of the controls. However, there are many blind people who find this method of exploring windows confusing (many will ask "how did you know that was there?"), and these fixes will make it easier for them to explore the Bitcoin interface on their own and use it successfully.

The screen reader I'm using is NVDA, a free and open source screen reader, which can be found at http://www.nvda-project.org.

RPC command to sign text with wallet private key

I'm imagining an RPC call something like:

signtext <bitcoinaddress> "MESSAGE..."
... returns signature, in some standards-compliant format, assuming bitcoinaddress corresponds to a public key in our wallet.

There should also be:
verify <bitcoinaddress> "MESSAGE" "SIGNATURE"
... which return true or false or "I have no idea what the public key for <bitcoinaddress> is".

setaccount / getaccountaddress not working properly

When creating a new account with getaccountaddress, assigning that address to another account and then getting a new address from getaccountaddress still returns the old address (thus not creating a new account).

Steps to reproduce:
getaccountaddress "foo"
returns: xyz123
setaccountaddress "xyz123" ""
getaccountaddress "foo"
returns: xyz123

Turn on https support for Windows bitcoin

I believe m0mchil was able to compile a full openssl1.0.0c with mingw, so for the next version of Windows bitcoin we should link against ssleay, ship the ssleay dll, and turn on support for connecting via https.

JSON-RPC callback

(from http://www.bitcoin.org/smf/index.php?topic=1872.0)

Allow extra parameters to be attached to an address/account at creation and modified later:

  • $uri: JSON-RPC callback URI
  • $total: Transaction total in BTC
  • $timeout: Transaction expiration interval (sec)
  • $minconf: Transaction minimum confirmations required
  • $cert: PEM certificate for callback target server

Additional options passed in should also cover these use cases:

Fire $uri, including parameters for the current balance and the most recent payment received, when:

  • Any payment is received to the address/account with $minconf confirmations.
  • Balance on address/account >= $total with $minconf confirmations.
  • $timeout expires without balance on address/account >= $total and without at least $minconf confirmations.

With this, bitcoind is ready to become a fully-fledged payment back-end for internet commerce.

windows rendering issues

I see some graphical problems of displaying the client window.
After each time i clk send coins or address book, the letters have shadows.
also the background , etc is bit rough, not nice like in last version.
It likes using classic menu themes in windows instead of normal.

dynamic IP change -> silent network disconnect

to reproduce:
1.) run bitcoin, wait for it to connect to net
2.) recycle your dynamic IP (get a new one)
3.) wait for next block
4.) see that new blocks don't show up in your client

expected behaviour:
bitcoin should detect that it's disconnected from the network and reconnect.

notes:
1.) the client still shows connection count after the IP change
2.) the connection count will slowly drop to 0
3.) then it will just sit there with 0 connections

CreateTransaction: suggest/enforce fee for big low-priority transactions to avoid backlog

currently (2011/03/01) a backlog of transactions that dont seem make it into blocks is building up (according to ArtForz now 670 transactions).

People are starting to complain, see http://www.bitcoin.org/smf/index.php?topic=3835.msg57031#msg57031 for an example.

This was discussed on #bitcoin-dev

ArtForz> that tx should have a score of 20567855
ArtForz> so it falls short of the dPriority > COIN * 144 / 250 test
ArtForz> and as tx size is > 4000, fAllowFree is never true for it
theymos> Ah. So it will never confirm?
ArtForz> probably not

ArtForz> looks like the tx-sending code needs some fixing
molecular> like not generate a tx with a score too low, or suggest to add a fee?
ArtForz> yep
ArtForz> check size and priority of transaction, if it's > 4kB and score < 57600000 require min fee
ArtForz> maybe reduce the size limit to 3.5k or so, otherwise it can only get into an otherwise empty block

This also seems to imply the possiblity of a DoS-Attack on node RAM, since the tx-queue is kept im RAM. Maybe the transaction cache should not be unlimited?

sum(getaccounts) != getbalance

tcatm has given me a -testnet wallet where sum(account) does not equal total server balance.

That should be impossible. He did copy the wallet and use it on two different bitcoinds, but it should still be impossible for the accounts balances to get out of sync with the total wallet balance.

Settings: move from wallet.dat to bitcoin.conf

Settings should be stored only in bitcoin.conf so the wallet.dat is only a wallet.

We would need...

  1. config file writer so GUI can change settings
  2. code that moves settings from wallet.dat to bitcoin.conf
  3. RPCs that allow to set/change settings. This will replace setgenerate

Any thoughts on this?

Messages with or about transactions

It'd be cool if there was some mechanism for secure communication between sender/receiver.

Ideally, the mechanism would be secure from eavesdroppers and authenticated by the bitcoin addresses involved (so would be as anonymous as those addresses).

Also ideally either store-and-forward (email-like) AND/OR real-time (instant-message-like) communication should be possible.

Storing the messages in the block chain as part of transactions (as proposed by several people) is probably NOT the right approach. And building the actual message communication into core bitcoin may not be the right approach.

Use cases to design for:

  • Store wants to send anonymous customer information on status of an order they paid for a while ago. (example: "free upgrade for the software you bought last week is available" or "warning: the file you downloaded yesterday has been reported to contain malware")
    -- what about possiblity of spam?
  • Customer wants to send authenticated message about a payment they sent (example: "I messed up the shipping address, please send to '123 main street' instead of '213 main street'" or "the file I just got from you contains a virus")

Bitcoin knows how to sign transactions with the public key corresponding to a bitcoin address; the key feature needed is, Gavin thinks, authentication: are you really communicating with the sender/receiver of bitcoin address? Perhaps bitcoin could support a function "please sign this arbitrary stuff with bitcoin address for which you have the private key and return the digital signature"; that might be sufficient to integrate with existing secure messaging infrastructure (like PGP email).

more windows GUI issues

Also i see delete address works good, but add new address asks not only label but also address itself.
How can a user give his own 33 character address to network?
I don't know how network will allow that address, what if already created?

Also there is no option to organize. Date wise, address wise, credit or debit wise, description wise etc.
It shows default date wise only & that cannot be changed.

As said before send coins & address book button gets shadows & also the button pressed look stays that way(the box goes down) , but minimize & bringing it back from task bar removes shadows & pressed button look.

JSON-RPC support for mobile devices ("ultra-lightweight" clients)

The idea is to enable mobile or other not-always-connected-to-the-network clients, where the wallet is kept (encrypted, probably) on the mobile device, and the device periodically communicates with a bitcoin-network-connected node to:

  • Update balance for keys in its wallet
  • Submit signed transactions to the network

Mac UI issues

From Doug Grinbergs:
I took a quick look look at the Mac Bitcoin beta app and thought I'd share this UI feedback:

4539 About box is app modal
4540 No File menu
4541 No Window menu
4542 Address Book window is app modal
4543 Edit Address is app-modal dialog; could be Address Book sheet
4544 Edit Address: doesn't operate [Cancel] button
4545 Main window: no reasonable minimum size
4546 No View menu
4547 Prefs: no <,> keyboard shortcut
4548 Prefs window is named Options
4549 Prefs window is app-modal
4550 _createMenuRef called with existing principal MenuRef already associated with menu
4551 Method selectRow:byExtendingSelection: in class wxNSTableView is deprecated
4552 Your Receiving Address menu item has ellipsis; no user input required
4553 About menu item has ellipsis; no user input required
4554 No user prefs stored in org.bitcoin.bitcoin.plist

Timestamps in debug log

Debug log should have per-line timestamps, just like other logs (such as system logs). This greatly aids in debugging problems.

Long-term, safe, store-of-value

Should we add features to bitcoin to enable the use of bitcoins as a long-term, secure, store-of-value for wealth?

Possible features to enable this type of use:

  • Easy yet ultra-safe way to export part of you wallet's balance to a file.
  • Easy way to verify the balance stored in one of those exported files.

segfault in non-ascii directory

When application is located in directory with national characters in it's name, bitcoin crash on segfault.

OS: Ubuntu 10.10
Directory: /home/andrejka/Stažené/bitcoin ("download", default folder of Czech Ubuntu)

Moving bitcoin app to directory "/home/andrejka/test/" solved the problem.

corrupted double-linked list?

tcatm reports:

*** glibc detected *** ./bitcoind: corrupted double-linked list: 0x0a78b468 ***

... possibly in listaccounts.

Monitor transactions and/or blocks

Design and implement a RPC call to register a HTTP-JSON-RPC callback, and have it get called when blocks and/or "transactions of interest" occur.

Gavin has already implemented a version of this; unresolved issues are:

  • How to specify which transactions are "of interest" ?
    Transactions to a specific address after A/B/C confirmations?
    All transactions to (or from?) the wallet?
    All transactions to (or from?) a specific account?

Note: information reported should be same as gettransaction.

  • What information to report about blocks (if any). Perhaps implement a getblock before monitorblock.

Automate Windows builds

The process for creating Windows builds is manual and error-prone. There should be a bash script (run under MSYS) or batch file that:

  1. Fetches a particular commit from the git or svn repository
  2. runs make clean, then makes bitcoin.exe and bitcoind.exe
  3. copies or exports all of the source files into the setup/src folder
  4. copies bitcoin.exe to setup/ and bitcoind.exe to setup/daemon
  5. runs command-line 7za.exe to create the setup .zip file
  6. runs command-line nsis installer to create the setup .exe file

Withdrawls made from wallet on another machine don't appear in client

Hal explained this here. He experienced this because he shared one of his private keys with everyone, but it can happen also if you have two separate wallet files (on two machines, for example) with the same private key. Spending money in one wallet will not show up as a withdrawal in the other, because it is only scanning for inputs to the wallet, not outputs.

Confirmations not appearing for sent coins after recovering wallet from archive

I was able to recreate an issue where after sending bitcoins and then restoring the wallet the transaction never shows any confirmations even though the transaction did make it to the recipient and does appear in BlockExplorer.

The steps I performed were:
1.) Create a new wallet
2.) Requested a new address
3.) Received some seed bitcoins (two transactions) to that new address.
4.) Made an archive of my wallet.
5.) Sent two test payment transactions. (to 16W7FAZ8tcX1gDLgDupfAKfpGLYd7XcPRe a 0.02 BTC and a 0.03 BTC)
6.) Recover wallet from archive.

After many blocks passed (more than an hour), the confirmations still shows 0/unconfirmed. To confirm that the payment was sent, I confirmed:
http://blockexplorer.com/address/16W7FAZ8tcX1gDLgDupfAKfpGLYd7XcPRe

To try to get a clean load of blocks, I then purged the blk*.dat, __db*, addr.dat, .log and database/ (i.e., all files except wallet.dat) and started bitcoin again.
$ bitcoin -datadir=.

After letting the client catch up to the most recent block, ... and then waiting at least an hour further, my two test transactions still show 0/unconfirmed.

The test wallet (with 0 BTC balance) that can be used to recreate this issue is at:
http://c1958612.cdn.cloudfiles.rackspacecloud.com/wallet.dat

Block-header-only, faster startup client

Bitcoin newbies have to endure an hour or two (or more) while bitcoin downloads and indexes all transactions and blocks.

Satoshi has mostly implemented code that downloads just the block headers; as long as you're not generating blocks, you don't need all the old transactions.

Error when trying to send very precise amount

I generated block 100283 and collected a sub bitcent transaction fee.
I get an "Insufficient funds" error when trying to send my exact balance to another address.
It seems that there is either :

  • wrong behaviour (should send the amount), or
  • wrong error message, (the balance is ok but the client forbids me to send it)

Block : 000000000003d014210dcffd602715545bce976f0f257d99279c83c2778e7150

Here's the trace

david@box:~$ bitcoin getinfo
{
    "version" : 31900,
    "balance" : 50.00638641,
    "blocks" : 100760,
    "connections" : 48,
    "proxy" : "",
    "generate" : true,
    "genproclimit" : -1,
    "difficulty" : 14484.16236123,
    "hashespersec" : 9273499,
    "testnet" : false,
    "keypoololdest" : 1291071649,
    "paytxfee" : 0.00000000,
    "errors" : ""
}
david@box:~$ bitcoin sendtoaddress 12DidCRRT9fqmSBReRNN8KjCktYGTVU1Jj 50.00638641
error: {"code":-4,"message":"Insufficient funds"}

Encrypt wallet

Often requested feature: encrypt private keys in the wallet.dat file, so a password is required for a send transaction.

bitcoin: URI and/or bitcoin-request MIME type for click-to-pay

There are several threads on the bitcoin forums proposing bitcoin: URI schemes and a bitcoin-request MIME type. Functionality desired is:

  • Click a link on a website
  • bitcoin client launches, shows a dialog box with payment details that you then approve to send payment.

Security is obviously a huge issue here; will have to be careful that none of the tricks hackers use to defraud users will work (e.g. clickjacking, HTTP man-in-the-middle rewriting of bitcoin addresses...).

listaccounts method

How does the minconf parameter for listaccounts method work? It appears to me that output is the same regardless of the value of minconf.

The "move" command rounds amounts at cent level

Trying to move 0.001 BTC from an account to another results in no change in the balances.

On line #68 of rpc.cpp amount gets rounded at two decimal places, I believe there should be an exra argument allowing to bypass the rounding step in the AmountFromValue function.

Otherwise, the accounts functionality won't be suited for trading platforms where subcent balances are very common.

Update the list of hard-coded node IP addresses

I wrote a script that can be run under scapy that will test the list of hard-coded IP addresses that the Bitcoin client will attempt to use for bootstrapping wihen IRC is not responding. When I tested, I only got a response on 70 of the 230 addresses, the remaining did not answer within the 5 second response time I arbitrarily chose for the script.

The addresses in the script were copied from the pnSeed assignment in:
https://github.com/bitcoin/bitcoin/blob/master/net.cpp

Script:
https://gist.github.com/ce222620c49c5efddf4f

Usage:
$ sudo scapy -c test_bootstrap_backup_addresses.py

Results:
https://gist.github.com/e371524c09a71e1731ef

Second GUI not possible in Windows

Thanks to nolisten patch, "bitcoin.exe -nolisten -datadir=" should be able to start second Bitcoin client in Windows. Probably because some additional checks, this is not possible.

Ability to move/share addresses from one client to another

I have a lot of addresses I've created asking for donations and I don't always think about tracking them every single place that I leave them. I envision a time when I will retire or loose or otherwise want to move a receiving address from one bitcoin client to another. It would be nice to have an easy way to export a public/private keypair from one client and import it in another. Perhaps there'd even be a way to email them or send them between two client's RPC channels.

A followup to this is to also be able to share my bitcoin address book for outgoing payments that I send to others.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.