Messages with or about transactions #13

issue gavinandresen opened this issue on December 22, 2010
  1. gavinandresen commented at 2:51 PM on December 22, 2010: contributor

    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).

  2. mikegogulski commented at 1:44 AM on January 7, 2011: none

    There's definitely something to this.

    I think the spam potential of your first use case is too nasty to contemplate. I'd be satisfied with commerce systems including a business rule which says "if you want further notifications, attach an email address to your order". The spam problem is already addressed broadly in the email domain, and email addresses can be rather anonymous.

    Signing an email with the bitcoin key is a neat idea, but there's a lack of symmetry in the typical commerce application. Customer learns a bitcoin address for vendor, so vendor can later sign messages back to customer using that address's private key. Not so in the reverse, unless the customer provides an address of their own as part of the exchange.

    What I would like to see is the ability to attach a small, optional data field to a transaction. For example, here in Slovakia, the banking system provides for the attachment of several fields to an electronic payment: constant symbol (4), variable symbol (10), specific symbol (16?), note (32?). The constant symbol is used for tax accounting purposes, and the rest are used to correlate payments with accounts, similar to "please be sure to include your account/invoice number on your check".

    I'm guessing this is already provided for in the protocol, though I'm not familiar with that part of the implementation. Also, it's arguable that it's not necessary if a merchant generates a new bitcoin address for each payment. Not a big priority, really.

  3. thiloplanz commented at 11:29 PM on March 24, 2011: none

    Is the bitcoin receiver address equivalent to a public key? If so, it could be used to encrypt a message that only the recipient could read. Together with the ability to sign the message with the sender's bitcoing address this could be the basis for a very simple (but secure) out-of-band messaging system:

    If you happen to know a way to contact the recipient, you just send him a signed message (you yourself can even stay anonymous, but the message can be reliable attributed to your sender bitcoin address).

    If you do not know a way (or do not trust the transportation channel), an encrypted message could be posted on a public board where the recipient could eventually pick it up. Notifications/polling could be integrated into the GUI application.

    Again, everything out-of-band (not messing with the existing payment infrastructure), and it depends (at least for the encryption part) on a bitcoin receiver address functioning as an encryption key (does it?).

  4. gavinandresen commented at 1:13 AM on March 25, 2011: contributor

    The receiver address is a hash of the public key; you don't see the full public key until the transaction is spent.

  5. thiloplanz commented at 1:25 AM on March 25, 2011: none

    "The receiver address is a hash of the public key; you don't see the full public key until the transaction is spent."

    In this case, we can still sign messages regarding any payments we made, but we can only encrypt them, after the recipient has made any payment himself (at any time, potentially even before we made our payment, in case the "account number" has been used before)

    I think that is already enough to get some useful functionality going. This does not have even have to happen within the bitcoin. Are there tools to export private keys from your wallet and extract public keys from the block chain into standard formats for systems like openssl or PGP to use?

  6. thiloplanz commented at 11:39 AM on April 7, 2011: none

    "The receiver address is a hash of the public key; you don't see the full public key until the transaction is spent."

    So one thing that you could always do is to send an encrypted thank you message to someone who has sent you bitcoins (send = broadcast in case you don't know who that is)

  7. laanwj referenced this in commit 8c4738d5a7 on Sep 18, 2011
  8. sipa commented at 10:06 PM on February 27, 2012: member

    Part of this is implemented through message signing.

  9. gavinandresen commented at 11:34 PM on February 27, 2012: contributor

    Closing; I think the message signing/verifying gives enough low-level support for interesting things to be built.

  10. gavinandresen closed this on Feb 27, 2012

  11. dasher referenced this in commit 7f142b479b on Dec 18, 2012
  12. nelisky referenced this in commit 5112a4105e on Nov 8, 2013
  13. kac- referenced this in commit 2d34152a13 on Mar 25, 2014
  14. rebroad referenced this in commit 97cac8b6c5 on Jul 21, 2014
  15. dexX7 referenced this in commit dca2c7aeb2 on Feb 7, 2015
  16. rubensayshi referenced this in commit 5ebeca560c on Mar 16, 2015
  17. dexX7 referenced this in commit 37607273d2 on Apr 8, 2015
  18. dexX7 referenced this in commit e7a9a3c3f3 on May 5, 2015
  19. MarcoFalke referenced this in commit 313e7f5c89 on Oct 9, 2015
  20. brishtiteveja referenced this in commit c30675c998 on Jan 25, 2016
  21. ptschip referenced this in commit 01f3a35757 on Feb 19, 2016
  22. laanwj referenced this in commit cf44e4ca77 on Jun 13, 2017
  23. AkioNak referenced this in commit 9d1cd983f5 on Jul 25, 2017
  24. MarcoFalke referenced this in commit 5839ac3311 on Sep 29, 2017
  25. classesjack referenced this in commit 7592eadae4 on Jan 2, 2018
  26. HashUnlimited referenced this in commit 4ebfc2a376 on Mar 6, 2018
  27. KrzysiekJ referenced this in commit 2b915f62e3 on Mar 28, 2018
  28. effectsToCause referenced this in commit 800650ac07 on Jun 22, 2018
  29. DigiGreenCoin referenced this in commit e4000aad63 on Oct 29, 2019
  30. MarcoFalke referenced this in commit fa0b3da36c on Oct 30, 2019
  31. laanwj referenced this in commit b586bbd558 on Nov 6, 2019
  32. laanwj referenced this in commit 97b66d34eb on Nov 7, 2019
  33. laanwj referenced this in commit e9c85bb139 on Nov 7, 2019
  34. laanwj referenced this in commit c92f7af618 on Nov 7, 2019
  35. laanwj referenced this in commit 656712fe94 on Dec 9, 2019
  36. laanwj referenced this in commit 4abd92d5c4 on Dec 12, 2019
  37. Warchant referenced this in commit 7958da26e8 on Dec 31, 2019
  38. laanwj referenced this in commit 89c8fe5189 on Jan 2, 2020
  39. laanwj referenced this in commit 66480821b3 on Jan 28, 2020
  40. MarcoFalke referenced this in commit 5e1728017b on Feb 9, 2020
  41. KolbyML referenced this in commit 652f901e24 on Aug 1, 2020
  42. KolbyML referenced this in commit b94a6191c8 on Sep 4, 2020
  43. laanwj referenced this in commit 924a4ff7eb on Oct 29, 2020
  44. KolbyML referenced this in commit 3d9f0283ff on Dec 5, 2020
  45. rajarshimaitra referenced this in commit ac08c8dec9 on Mar 23, 2021
  46. MarcoFalke referenced this in commit bce09da122 on Apr 28, 2021
  47. fanquake referenced this in commit fa00bb2c5c on Apr 29, 2021
  48. MarcoFalke referenced this in commit eb9a1fe037 on May 7, 2021
  49. MarcoFalke referenced this in commit c857148636 on May 15, 2021
  50. rajarshimaitra referenced this in commit 74eaf9a040 on Aug 5, 2021
  51. DrahtBot locked this on Sep 8, 2021
Linked (view graph)
#737 Deadlock during startup (Appears to be AddAddress / DNSSeed related)#982 Startup blocks on mutex at "Loading Addresses"#999 v0.6.0rc5 segfault on initial blockchain download when out of diskspace#1065 addrMan crash on CentOS#1098 segfault in qrcode message dialog#1156 Addrman crash#2416 Bitcoind aborts on startup: ./db/skiplist.h:152 Assertion `n >= 0' failed.#2472 System error: database corrupted: void boost::recursive_mutex::lock(): Assertion `!pthread_mutex_lock(&m)' failed#5698 Code vulnerable to segfault after a network fork#5795 Bizarre test_bitcoin crash, but passes in debugger#5910 Gitian 64-bit bitcoin-qt segfaults on Ubuntu 14.04#6332 Segmentation fault on bitcoind or bitcoin-qt startup (64bit Linux)#6540 scheduler_tests (currently disabled) occasionally deadlocks#8984 GUI hangs during sync#9684 bitcoind 'compacts' chainstate database almost every time I run it#9687 bitcoin-qt crashed in FinalizeNode()#9759 Setting -maxsigcachesize to zero causes segfault#9883 [Qt] Segfault on startup#9997 Running out of disk space during GUI init results in hang and non-drawing windows#10209 Stalled shutdown#10293 SEGV in segwit fundrawtransaction#10861 Segfault on shutdown after pressing 'q' to postpone utxo db upgrade#11355 LevelDB read failure: Corruption: block checksum mismatch#11763 deadlock on shutdown#12038 deadlock on database corruption#12279 shutdown took 8 minutes in v0.15.0.1#13316 make check fails for configure option --with-incompatible-bdb and Berkeley DB 5.3#14330 [tests] segfault during`DEBUG=1` run of existing_data_no_obfuscate locally#14349 mac: make check failure on macOS 10.14#14923 segmentation fault on gui startup#15227 bitcoind terminated with uncaught exception if configure --debug-enabled#15310 gui: crash if encrypt / change passphrase window is open and wallet is unloaded#15379 bitcoind crashes after exception in scheduler thread#16307 scheduler: crash after releasing wallet#16875 gui: Avoid calling processEvents#16904 Bus error (core dumped) after "Using obfuscation key for" log line#17540 ci build fails in ./qt/test/test_bitcoin-qt on aarch64 native tsan#17620 MemorySanitizer complains about unitialized variable in RPC method names#17627 Suppress false positive warning about uninitialized entropy buffers#17729 Fuzzing Bug undefined-behavior pubkey.cpp:210:38#18046 Some fuzzing crashes when running under ASan and/or UBSan#18090 gui: Crash if shutdown during processNewTransaction#18362 gui: segfault unloading and immediately reloading wallet with gui#18372 sanitizer: heap-use-after-free in checkinputs_test#18762 fuzz: AddressSanitizer: SEGV on unknown address in /strprintf#18763 fuzz: AddressSanitizer: container-overflow in /script fuzzer#18913 ci: fuzz/process_message fails#18924 QT Crash when using open wallet dialog#19024 UB: double lock of mutex in init.cpp#19049 test: Potential deadlock in wallet_tests/CreateWalletFromFile#19211 feature_reindex.py triggers data race#19417 Intermittent CI failure: ThreadSanitizer failure (data race) when running wallet_multiwallet.py --usecli#19448 qa: Data race detected when running `mempool_expiry.py`#19678 UBSan warning when fuzzing with -fsanitize=integer#19715 ThreadSanitizer: data race in feature_reindex.py#19955 test: Potential deadlock in wallet_tests#20163 TSAN race after merge of #20090#20242 fuzz: Properly initialize PrecomputedTransactionData#20334 ci: fuzz/decode_tx fails#20542 Unexpected test fail: wallet/wallet.cpp:3113:51: runtime error: division by zero#20618 Data race in interface_zmq.py#21466 Avoid use of "socket" syscall when formatting IP addresses in CNetAddr::ToString#21632 MemorySanitizer: use-of-uninitialized-value in sqlite3BtreeOpen#21773 fuzz: Ensure prevout is consensus-valid#21802 refactor: Avoid UB in util/asmap (advance a dereferenceable iterator outside its valid range)#21948 test: Fix off-by-one in mockscheduler test RPC#22233 fuzz: UndefinedBehaviorSanitizer warnings in consensus/tx_verify.cpp#22537 UndefinedBehaviorSanitizer: implicit-integer-sign-change consensus/tx_verify#22548 CheckQueue_Correct_Random data race#22588 Cirrus CI showed error in netaddress.cpp file when checking PR#23160 test_bitcoin-qt error: "Unable to init server: Could not connect: Connection refused"#23248 Bitcoin Core crashes under clang-13 libc++ with "Bad system call (core dumped)"#23321 bitcoind segfault's while loading tr descriptor on regtest v22.0#24290 segfault when compiled with depends DEBUG=1 and libc++#24426 test: Fix intermittent Tsan issue#24819 data race in SimpleRoundTripTest logging for macOS#25077 Fix chain tip data race and corrupt rest response#25146 Starting with an unsupported wallet configured leads to a segfault (master only?)#25323 miniscript fuzzer failing after qa-assets update#25365 ThreadSanitizer: data race on vptr (ctor/dtor vs virtual call) in BaseIndex#25632 SUMMARY: ThreadSanitizer: SEGV src/index/base.cpp:388:9 in BaseIndex::SetBestBlockIndex(CBlockIndex const*)::$_1::operator()() const#25692 psbt.h:896:51: runtime error: unsigned integer overflow: 0 - 1 cannot be represented in type 'unsigned long'#25824 UndefinedBehaviorSanitizer: stack-overflow in miniscript (descriptor_parse)#25857 IBD core dumped during recursive call to CCoinsViewCache::FetchCoin (while connecting best chain tip)#26068 Segmentation fault in the scheduler thread when an index fails to commit to the db#26274 bitcoind dumps core when deriveaddresses is called with index 2147483647 (2^31-1)#26477 validation: fix broken maxtipage comparison#27222 test: use-of-uninitialized-value in sqlite3Strlen30#27354 wallet: Data race in GetOrCreateLegacyScriptPubKeyMan vs IsMine#27355 index: ThreadSanitizer: data race on vptr #27360 ci: use LLVM/clang-16 in native_asan job#27582 TSAN: lock-order-inversion (potential deadlock) in ZapSelectTx test#27922 ci: fix llvm-symbolizer in MSAN jobs#27924 fuzz: banman, Assertion `banmap == banmap_read' failed#28510 migratewallet crashes on an freshly created datadir ( wallet/wallet.h:959: int wallet::CWallet::GetLastBlockHeight() const: Assertion `m_last_block_processed_height >= 0' failed.)#28665 'std::out_of_range' crash in I2P fuzz test#28917 fuzz, parse_iso8601: attempt to dereference an end-of-stream istreambuf_iterator#28918 fuzz, coinselection: Assertion 'result_bnb->GetChange(coin_params.m_cost_of_change, CAmount{0}) == 0' failed#28966 test: Add missing CBlockPolicyEstimator::processBlockTx suppression#28969 fuzz: Avoid signed-integer-overflow in wallet_notifications fuzz target#29153 new crash in v26.0#29178 ubsan: misaligned-pointer-use in crc32c/src/crc32c_arm64.cc#29767 ThreadSanitizer: data race src/flatfile.cpp:47:13 in FlatFileSeq::Open(FlatFilePos const&, bool)#29908 test: SegFault in `ismine_tests` on SunOS / illumos#30284 Mini miner `AncestorFeerateComparator` Signed Integer Overflow#30402 Illegal Instruction in `CoinStatsIndex::CustomAppend`#31203 fuzz: fix `implicit-integer-sign-change` in wallet_create_transaction#31234 fuzz: connman target: terminate called after throwing an instance of 'std::bad_alloc'#32173 validation: `CheckBlockIndex` crashes during block reconsideration#32780 lsan: add more Qt suppressions#32957 SegFault in QSortFilterProxyModelPrivate::build_source_to_proxy_mapping#33063 util: Revert "common: Close non-std fds before exec in RunCommandJSON"#33097 fuzz: `txgraph`: Assertion `cmp == 0' failed#33150 intermittent TSAN failure in lockmanager_tests::blockmanager_readblock_hash_mismatch#33277 intermittent Segmentation fault in mptest IPC path (callFnAsyncParams)#33964 Startup crash on macOS with GCC 15.2: `std::source_location::file_name()` is `nullptr`#34014 mptest hangs, when run in a loop#34110 scriptpubkeyman fuzz target creates Base58 too large; Fails on 32-bit (armhf, ...)#34645 oss-fuzz: coins_view_overlay: ASSERT: m_dirty_count == 0#34655 fuzz: keep `coins_view` fuzzers within caller contracts#34732 i386 segv in #0 0xf7a49ce0 in kj::operator*(kj::_::Stringifier, kj::Exception const&) (/lib/i386-linux-gnu/libkj-1.1.0.so+0x38ce0)#34734 test: Fix shutdown vptr race in BlockFilterIndexSync bench#34756 ipc: AddressSanitizer: SEGV nptl/pthread_mutex_lock.c:80:23 in __pthread_mutex_lock#34777 ipc: AddressSanitizer: heap-use-after-free in `capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>::getParams()`#34782 mptest: mp::CancelMonitor: AddressSanitizer: stack-use-after-return

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-20 00:16 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me