diff --git a/.gitignore b/.gitignore index e35d885..3f52b55 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -_build +_build/ +.vscode diff --git a/Bitcoin - Open source P2P money b/Bitcoin - Open source P2P money new file mode 100644 index 0000000..fbba84f --- /dev/null +++ b/Bitcoin - Open source P2P money @@ -0,0 +1,5637 @@ +From: +Snapshot-Content-Location: https://bitcoin.org/en/ +Subject: Bitcoin - Open source P2P money +Date: Tue, 7 May 2024 18:26:41 -0000 +MIME-Version: 1.0 +Content-Type: multipart/related; + type="text/html"; + boundary="----MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q----" + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: text/html +Content-ID: +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/en/ + + + + + + + +Bitcoin - Open source P2P money + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +

+ Bitcoin.org is a community funded project, donations are appreciated and used to improve the website. +

+ +
+
+ +
+ + + + + + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + + + +
+ + + +
+
+

Bitcoin is an innovative payment network and a new kind of money.

+ + +
+ +
+ +
+
+ +
+
+

Get started with Bitcoin

+
+
+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.

+
    + +
  • + Icon +

    Fast peer-to-peer transactions

    +
  • + + +
  • + Icon +

    Worldwide payments

    +
  • + + +
  • + Icon +

    Low processing fees

    +
  • + +
+
+ Bitcoin image +
+ +
+
+ + + + + + +
+ + +
+ + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: text/css +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/css/font-awesome-4.4.0/css/font-awesome.min.css + +@charset "utf-8"; + +@font-face { font-family: FontAwesome; src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.4.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.4.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.4.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular") format("svg"); font-weight: normal; font-style: normal; } + +.fa { display: inline-block; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; line-height: 1; font-family: FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; } + +.fa-lg { font-size: 1.33333em; line-height: 0.75em; vertical-align: -15%; } + +.fa-2x { font-size: 2em; } + +.fa-3x { font-size: 3em; } + +.fa-4x { font-size: 4em; } + +.fa-5x { font-size: 5em; } + +.fa-fw { width: 1.28571em; text-align: center; } + +.fa-ul { padding-left: 0px; margin-left: 2.14286em; list-style-type: none; } + +.fa-ul > li { position: relative; } + +.fa-li { position: absolute; left: -2.14286em; width: 2.14286em; top: 0.142857em; text-align: center; } + +.fa-li.fa-lg { left: -1.85714em; } + +.fa-border { padding: 0.2em 0.25em 0.15em; border: 0.08em solid rgb(238, 238, 238); border-radius: 0.1em; } + +.fa-pull-left { float: left; } + +.fa-pull-right { float: right; } + +.fa.fa-pull-left { margin-right: 0.3em; } + +.fa.fa-pull-right { margin-left: 0.3em; } + +.pull-right { float: right; } + +.pull-left { float: left; } + +.fa.pull-left { margin-right: 0.3em; } + +.fa.pull-right { margin-left: 0.3em; } + +.fa-spin { animation: 2s linear 0s infinite normal none running fa-spin; } + +.fa-pulse { animation: 1s steps(8) 0s infinite normal none running fa-spin; } + +@-webkit-keyframes fa-spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} + +@keyframes fa-spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} + +.fa-rotate-90 { transform: rotate(90deg); } + +.fa-rotate-180 { transform: rotate(180deg); } + +.fa-rotate-270 { transform: rotate(270deg); } + +.fa-flip-horizontal { transform: scale(-1, 1); } + +.fa-flip-vertical { transform: scale(1, -1); } + +:root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { filter: none; } + +.fa-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } + +.fa-stack-1x, .fa-stack-2x { position: absolute; left: 0px; width: 100%; text-align: center; } + +.fa-stack-1x { line-height: inherit; } + +.fa-stack-2x { font-size: 2em; } + +.fa-inverse { color: rgb(255, 255, 255); } + +.fa-glass::before { content: ""; } + +.fa-music::before { content: ""; } + +.fa-search::before { content: ""; } + +.fa-envelope-o::before { content: ""; } + +.fa-heart::before { content: ""; } + +.fa-star::before { content: ""; } + +.fa-star-o::before { content: ""; } + +.fa-user::before { content: ""; } + +.fa-film::before { content: ""; } + +.fa-th-large::before { content: ""; } + +.fa-th::before { content: ""; } + +.fa-th-list::before { content: ""; } + +.fa-check::before { content: ""; } + +.fa-remove::before, .fa-close::before, .fa-times::before { content: ""; } + +.fa-search-plus::before { content: ""; } + +.fa-search-minus::before { content: ""; } + +.fa-power-off::before { content: ""; } + +.fa-signal::before { content: ""; } + +.fa-gear::before, .fa-cog::before { content: ""; } + +.fa-trash-o::before { content: ""; } + +.fa-home::before { content: ""; } + +.fa-file-o::before { content: ""; } + +.fa-clock-o::before { content: ""; } + +.fa-road::before { content: ""; } + +.fa-download::before { content: ""; } + +.fa-arrow-circle-o-down::before { content: ""; } + +.fa-arrow-circle-o-up::before { content: ""; } + +.fa-inbox::before { content: ""; } + +.fa-play-circle-o::before { content: ""; } + +.fa-rotate-right::before, .fa-repeat::before { content: ""; } + +.fa-refresh::before { content: ""; } + +.fa-list-alt::before { content: ""; } + +.fa-lock::before { content: ""; } + +.fa-flag::before { content: ""; } + +.fa-headphones::before { content: ""; } + +.fa-volume-off::before { content: ""; } + +.fa-volume-down::before { content: ""; } + +.fa-volume-up::before { content: ""; } + +.fa-qrcode::before { content: ""; } + +.fa-barcode::before { content: ""; } + +.fa-tag::before { content: ""; } + +.fa-tags::before { content: ""; } + +.fa-book::before { content: ""; } + +.fa-bookmark::before { content: ""; } + +.fa-print::before { content: ""; } + +.fa-camera::before { content: ""; } + +.fa-font::before { content: ""; } + +.fa-bold::before { content: ""; } + +.fa-italic::before { content: ""; } + +.fa-text-height::before { content: ""; } + +.fa-text-width::before { content: ""; } + +.fa-align-left::before { content: ""; } + +.fa-align-center::before { content: ""; } + +.fa-align-right::before { content: ""; } + +.fa-align-justify::before { content: ""; } + +.fa-list::before { content: ""; } + +.fa-dedent::before, .fa-outdent::before { content: ""; } + +.fa-indent::before { content: ""; } + +.fa-video-camera::before { content: ""; } + +.fa-photo::before, .fa-image::before, .fa-picture-o::before { content: ""; } + +.fa-pencil::before { content: ""; } + +.fa-map-marker::before { content: ""; } + +.fa-adjust::before { content: ""; } + +.fa-tint::before { content: ""; } + +.fa-edit::before, .fa-pencil-square-o::before { content: ""; } + +.fa-share-square-o::before { content: ""; } + +.fa-check-square-o::before { content: ""; } + +.fa-arrows::before { content: ""; } + +.fa-step-backward::before { content: ""; } + +.fa-fast-backward::before { content: ""; } + +.fa-backward::before { content: ""; } + +.fa-play::before { content: ""; } + +.fa-pause::before { content: ""; } + +.fa-stop::before { content: ""; } + +.fa-forward::before { content: ""; } + +.fa-fast-forward::before { content: ""; } + +.fa-step-forward::before { content: ""; } + +.fa-eject::before { content: ""; } + +.fa-chevron-left::before { content: ""; } + +.fa-chevron-right::before { content: ""; } + +.fa-plus-circle::before { content: ""; } + +.fa-minus-circle::before { content: ""; } + +.fa-times-circle::before { content: ""; } + +.fa-check-circle::before { content: ""; } + +.fa-question-circle::before { content: ""; } + +.fa-info-circle::before { content: ""; } + +.fa-crosshairs::before { content: ""; } + +.fa-times-circle-o::before { content: ""; } + +.fa-check-circle-o::before { content: ""; } + +.fa-ban::before { content: ""; } + +.fa-arrow-left::before { content: ""; } + +.fa-arrow-right::before { content: ""; } + +.fa-arrow-up::before { content: ""; } + +.fa-arrow-down::before { content: ""; } + +.fa-mail-forward::before, .fa-share::before { content: ""; } + +.fa-expand::before { content: ""; } + +.fa-compress::before { content: ""; } + +.fa-plus::before { content: ""; } + +.fa-minus::before { content: ""; } + +.fa-asterisk::before { content: ""; } + +.fa-exclamation-circle::before { content: ""; } + +.fa-gift::before { content: ""; } + +.fa-leaf::before { content: ""; } + +.fa-fire::before { content: ""; } + +.fa-eye::before { content: ""; } + +.fa-eye-slash::before { content: ""; } + +.fa-warning::before, .fa-exclamation-triangle::before { content: ""; } + +.fa-plane::before { content: ""; } + +.fa-calendar::before { content: ""; } + +.fa-random::before { content: ""; } + +.fa-comment::before { content: ""; } + +.fa-magnet::before { content: ""; } + +.fa-chevron-up::before { content: ""; } + +.fa-chevron-down::before { content: ""; } + +.fa-retweet::before { content: ""; } + +.fa-shopping-cart::before { content: ""; } + +.fa-folder::before { content: ""; } + +.fa-folder-open::before { content: ""; } + +.fa-arrows-v::before { content: ""; } + +.fa-arrows-h::before { content: ""; } + +.fa-bar-chart-o::before, .fa-bar-chart::before { content: ""; } + +.fa-twitter-square::before { content: ""; } + +.fa-facebook-square::before { content: ""; } + +.fa-camera-retro::before { content: ""; } + +.fa-key::before { content: ""; } + +.fa-gears::before, .fa-cogs::before { content: ""; } + +.fa-comments::before { content: ""; } + +.fa-thumbs-o-up::before { content: ""; } + +.fa-thumbs-o-down::before { content: ""; } + +.fa-star-half::before { content: ""; } + +.fa-heart-o::before { content: ""; } + +.fa-sign-out::before { content: ""; } + +.fa-linkedin-square::before { content: ""; } + +.fa-thumb-tack::before { content: ""; } + +.fa-external-link::before { content: ""; } + +.fa-sign-in::before { content: ""; } + +.fa-trophy::before { content: ""; } + +.fa-github-square::before { content: ""; } + +.fa-upload::before { content: ""; } + +.fa-lemon-o::before { content: ""; } + +.fa-phone::before { content: ""; } + +.fa-square-o::before { content: ""; } + +.fa-bookmark-o::before { content: ""; } + +.fa-phone-square::before { content: ""; } + +.fa-twitter::before { content: ""; } + +.fa-facebook-f::before, .fa-facebook::before { content: ""; } + +.fa-github::before { content: ""; } + +.fa-unlock::before { content: ""; } + +.fa-credit-card::before { content: ""; } + +.fa-feed::before, .fa-rss::before { content: ""; } + +.fa-hdd-o::before { content: ""; } + +.fa-bullhorn::before { content: ""; } + +.fa-bell::before { content: ""; } + +.fa-certificate::before { content: ""; } + +.fa-hand-o-right::before { content: ""; } + +.fa-hand-o-left::before { content: ""; } + +.fa-hand-o-up::before { content: ""; } + +.fa-hand-o-down::before { content: ""; } + +.fa-arrow-circle-left::before { content: ""; } + +.fa-arrow-circle-right::before { content: ""; } + +.fa-arrow-circle-up::before { content: ""; } + +.fa-arrow-circle-down::before { content: ""; } + +.fa-globe::before { content: ""; } + +.fa-wrench::before { content: ""; } + +.fa-tasks::before { content: ""; } + +.fa-filter::before { content: ""; } + +.fa-briefcase::before { content: ""; } + +.fa-arrows-alt::before { content: ""; } + +.fa-group::before, .fa-users::before { content: ""; } + +.fa-chain::before, .fa-link::before { content: ""; } + +.fa-cloud::before { content: ""; } + +.fa-flask::before { content: ""; } + +.fa-cut::before, .fa-scissors::before { content: ""; } + +.fa-copy::before, .fa-files-o::before { content: ""; } + +.fa-paperclip::before { content: ""; } + +.fa-save::before, .fa-floppy-o::before { content: ""; } + +.fa-square::before { content: ""; } + +.fa-navicon::before, .fa-reorder::before, .fa-bars::before { content: ""; } + +.fa-list-ul::before { content: ""; } + +.fa-list-ol::before { content: ""; } + +.fa-strikethrough::before { content: ""; } + +.fa-underline::before { content: ""; } + +.fa-table::before { content: ""; } + +.fa-magic::before { content: ""; } + +.fa-truck::before { content: ""; } + +.fa-pinterest::before { content: ""; } + +.fa-pinterest-square::before { content: ""; } + +.fa-google-plus-square::before { content: ""; } + +.fa-google-plus::before { content: ""; } + +.fa-money::before { content: ""; } + +.fa-caret-down::before { content: ""; } + +.fa-caret-up::before { content: ""; } + +.fa-caret-left::before { content: ""; } + +.fa-caret-right::before { content: ""; } + +.fa-columns::before { content: ""; } + +.fa-unsorted::before, .fa-sort::before { content: ""; } + +.fa-sort-down::before, .fa-sort-desc::before { content: ""; } + +.fa-sort-up::before, .fa-sort-asc::before { content: ""; } + +.fa-envelope::before { content: ""; } + +.fa-linkedin::before { content: ""; } + +.fa-rotate-left::before, .fa-undo::before { content: ""; } + +.fa-legal::before, .fa-gavel::before { content: ""; } + +.fa-dashboard::before, .fa-tachometer::before { content: ""; } + +.fa-comment-o::before { content: ""; } + +.fa-comments-o::before { content: ""; } + +.fa-flash::before, .fa-bolt::before { content: ""; } + +.fa-sitemap::before { content: ""; } + +.fa-umbrella::before { content: ""; } + +.fa-paste::before, .fa-clipboard::before { content: ""; } + +.fa-lightbulb-o::before { content: ""; } + +.fa-exchange::before { content: ""; } + +.fa-cloud-download::before { content: ""; } + +.fa-cloud-upload::before { content: ""; } + +.fa-user-md::before { content: ""; } + +.fa-stethoscope::before { content: ""; } + +.fa-suitcase::before { content: ""; } + +.fa-bell-o::before { content: ""; } + +.fa-coffee::before { content: ""; } + +.fa-cutlery::before { content: ""; } + +.fa-file-text-o::before { content: ""; } + +.fa-building-o::before { content: ""; } + +.fa-hospital-o::before { content: ""; } + +.fa-ambulance::before { content: ""; } + +.fa-medkit::before { content: ""; } + +.fa-fighter-jet::before { content: ""; } + +.fa-beer::before { content: ""; } + +.fa-h-square::before { content: ""; } + +.fa-plus-square::before { content: ""; } + +.fa-angle-double-left::before { content: ""; } + +.fa-angle-double-right::before { content: ""; } + +.fa-angle-double-up::before { content: ""; } + +.fa-angle-double-down::before { content: ""; } + +.fa-angle-left::before { content: ""; } + +.fa-angle-right::before { content: ""; } + +.fa-angle-up::before { content: ""; } + +.fa-angle-down::before { content: ""; } + +.fa-desktop::before { content: ""; } + +.fa-laptop::before { content: ""; } + +.fa-tablet::before { content: ""; } + +.fa-mobile-phone::before, .fa-mobile::before { content: ""; } + +.fa-circle-o::before { content: ""; } + +.fa-quote-left::before { content: ""; } + +.fa-quote-right::before { content: ""; } + +.fa-spinner::before { content: ""; } + +.fa-circle::before { content: ""; } + +.fa-mail-reply::before, .fa-reply::before { content: ""; } + +.fa-github-alt::before { content: ""; } + +.fa-folder-o::before { content: ""; } + +.fa-folder-open-o::before { content: ""; } + +.fa-smile-o::before { content: ""; } + +.fa-frown-o::before { content: ""; } + +.fa-meh-o::before { content: ""; } + +.fa-gamepad::before { content: ""; } + +.fa-keyboard-o::before { content: ""; } + +.fa-flag-o::before { content: ""; } + +.fa-flag-checkered::before { content: ""; } + +.fa-terminal::before { content: ""; } + +.fa-code::before { content: ""; } + +.fa-mail-reply-all::before, .fa-reply-all::before { content: ""; } + +.fa-star-half-empty::before, .fa-star-half-full::before, .fa-star-half-o::before { content: ""; } + +.fa-location-arrow::before { content: ""; } + +.fa-crop::before { content: ""; } + +.fa-code-fork::before { content: ""; } + +.fa-unlink::before, .fa-chain-broken::before { content: ""; } + +.fa-question::before { content: ""; } + +.fa-info::before { content: ""; } + +.fa-exclamation::before { content: ""; } + +.fa-superscript::before { content: ""; } + +.fa-subscript::before { content: ""; } + +.fa-eraser::before { content: ""; } + +.fa-puzzle-piece::before { content: ""; } + +.fa-microphone::before { content: ""; } + +.fa-microphone-slash::before { content: ""; } + +.fa-shield::before { content: ""; } + +.fa-calendar-o::before { content: ""; } + +.fa-fire-extinguisher::before { content: ""; } + +.fa-rocket::before { content: ""; } + +.fa-maxcdn::before { content: ""; } + +.fa-chevron-circle-left::before { content: ""; } + +.fa-chevron-circle-right::before { content: ""; } + +.fa-chevron-circle-up::before { content: ""; } + +.fa-chevron-circle-down::before { content: ""; } + +.fa-html5::before { content: ""; } + +.fa-css3::before { content: ""; } + +.fa-anchor::before { content: ""; } + +.fa-unlock-alt::before { content: ""; } + +.fa-bullseye::before { content: ""; } + +.fa-ellipsis-h::before { content: ""; } + +.fa-ellipsis-v::before { content: ""; } + +.fa-rss-square::before { content: ""; } + +.fa-play-circle::before { content: ""; } + +.fa-ticket::before { content: ""; } + +.fa-minus-square::before { content: ""; } + +.fa-minus-square-o::before { content: ""; } + +.fa-level-up::before { content: ""; } + +.fa-level-down::before { content: ""; } + +.fa-check-square::before { content: ""; } + +.fa-pencil-square::before { content: ""; } + +.fa-external-link-square::before { content: ""; } + +.fa-share-square::before { content: ""; } + +.fa-compass::before { content: ""; } + +.fa-toggle-down::before, .fa-caret-square-o-down::before { content: ""; } + +.fa-toggle-up::before, .fa-caret-square-o-up::before { content: ""; } + +.fa-toggle-right::before, .fa-caret-square-o-right::before { content: ""; } + +.fa-euro::before, .fa-eur::before { content: ""; } + +.fa-gbp::before { content: ""; } + +.fa-dollar::before, .fa-usd::before { content: ""; } + +.fa-rupee::before, .fa-inr::before { content: ""; } + +.fa-cny::before, .fa-rmb::before, .fa-yen::before, .fa-jpy::before { content: ""; } + +.fa-ruble::before, .fa-rouble::before, .fa-rub::before { content: ""; } + +.fa-won::before, .fa-krw::before { content: ""; } + +.fa-bitcoin::before, .fa-btc::before { content: ""; } + +.fa-file::before { content: ""; } + +.fa-file-text::before { content: ""; } + +.fa-sort-alpha-asc::before { content: ""; } + +.fa-sort-alpha-desc::before { content: ""; } + +.fa-sort-amount-asc::before { content: ""; } + +.fa-sort-amount-desc::before { content: ""; } + +.fa-sort-numeric-asc::before { content: ""; } + +.fa-sort-numeric-desc::before { content: ""; } + +.fa-thumbs-up::before { content: ""; } + +.fa-thumbs-down::before { content: ""; } + +.fa-youtube-square::before { content: ""; } + +.fa-youtube::before { content: ""; } + +.fa-xing::before { content: ""; } + +.fa-xing-square::before { content: ""; } + +.fa-youtube-play::before { content: ""; } + +.fa-dropbox::before { content: ""; } + +.fa-stack-overflow::before { content: ""; } + +.fa-instagram::before { content: ""; } + +.fa-flickr::before { content: ""; } + +.fa-adn::before { content: ""; } + +.fa-bitbucket::before { content: ""; } + +.fa-bitbucket-square::before { content: ""; } + +.fa-tumblr::before { content: ""; } + +.fa-tumblr-square::before { content: ""; } + +.fa-long-arrow-down::before { content: ""; } + +.fa-long-arrow-up::before { content: ""; } + +.fa-long-arrow-left::before { content: ""; } + +.fa-long-arrow-right::before { content: ""; } + +.fa-apple::before { content: ""; } + +.fa-windows::before { content: ""; } + +.fa-android::before { content: ""; } + +.fa-linux::before { content: ""; } + +.fa-dribbble::before { content: ""; } + +.fa-skype::before { content: ""; } + +.fa-foursquare::before { content: ""; } + +.fa-trello::before { content: ""; } + +.fa-female::before { content: ""; } + +.fa-male::before { content: ""; } + +.fa-gittip::before, .fa-gratipay::before { content: ""; } + +.fa-sun-o::before { content: ""; } + +.fa-moon-o::before { content: ""; } + +.fa-archive::before { content: ""; } + +.fa-bug::before { content: ""; } + +.fa-vk::before { content: ""; } + +.fa-weibo::before { content: ""; } + +.fa-renren::before { content: ""; } + +.fa-pagelines::before { content: ""; } + +.fa-stack-exchange::before { content: ""; } + +.fa-arrow-circle-o-right::before { content: ""; } + +.fa-arrow-circle-o-left::before { content: ""; } + +.fa-toggle-left::before, .fa-caret-square-o-left::before { content: ""; } + +.fa-dot-circle-o::before { content: ""; } + +.fa-wheelchair::before { content: ""; } + +.fa-vimeo-square::before { content: ""; } + +.fa-turkish-lira::before, .fa-try::before { content: ""; } + +.fa-plus-square-o::before { content: ""; } + +.fa-space-shuttle::before { content: ""; } + +.fa-slack::before { content: ""; } + +.fa-envelope-square::before { content: ""; } + +.fa-wordpress::before { content: ""; } + +.fa-openid::before { content: ""; } + +.fa-institution::before, .fa-bank::before, .fa-university::before { content: ""; } + +.fa-mortar-board::before, .fa-graduation-cap::before { content: ""; } + +.fa-yahoo::before { content: ""; } + +.fa-google::before { content: ""; } + +.fa-reddit::before { content: ""; } + +.fa-reddit-square::before { content: ""; } + +.fa-stumbleupon-circle::before { content: ""; } + +.fa-stumbleupon::before { content: ""; } + +.fa-delicious::before { content: ""; } + +.fa-digg::before { content: ""; } + +.fa-pied-piper::before { content: ""; } + +.fa-pied-piper-alt::before { content: ""; } + +.fa-drupal::before { content: ""; } + +.fa-joomla::before { content: ""; } + +.fa-language::before { content: ""; } + +.fa-fax::before { content: ""; } + +.fa-building::before { content: ""; } + +.fa-child::before { content: ""; } + +.fa-paw::before { content: ""; } + +.fa-spoon::before { content: ""; } + +.fa-cube::before { content: ""; } + +.fa-cubes::before { content: ""; } + +.fa-behance::before { content: ""; } + +.fa-behance-square::before { content: ""; } + +.fa-steam::before { content: ""; } + +.fa-steam-square::before { content: ""; } + +.fa-recycle::before { content: ""; } + +.fa-automobile::before, .fa-car::before { content: ""; } + +.fa-cab::before, .fa-taxi::before { content: ""; } + +.fa-tree::before { content: ""; } + +.fa-spotify::before { content: ""; } + +.fa-deviantart::before { content: ""; } + +.fa-soundcloud::before { content: ""; } + +.fa-database::before { content: ""; } + +.fa-file-pdf-o::before { content: ""; } + +.fa-file-word-o::before { content: ""; } + +.fa-file-excel-o::before { content: ""; } + +.fa-file-powerpoint-o::before { content: ""; } + +.fa-file-photo-o::before, .fa-file-picture-o::before, .fa-file-image-o::before { content: ""; } + +.fa-file-zip-o::before, .fa-file-archive-o::before { content: ""; } + +.fa-file-sound-o::before, .fa-file-audio-o::before { content: ""; } + +.fa-file-movie-o::before, .fa-file-video-o::before { content: ""; } + +.fa-file-code-o::before { content: ""; } + +.fa-vine::before { content: ""; } + +.fa-codepen::before { content: ""; } + +.fa-jsfiddle::before { content: ""; } + +.fa-life-bouy::before, .fa-life-buoy::before, .fa-life-saver::before, .fa-support::before, .fa-life-ring::before { content: ""; } + +.fa-circle-o-notch::before { content: ""; } + +.fa-ra::before, .fa-rebel::before { content: ""; } + +.fa-ge::before, .fa-empire::before { content: ""; } + +.fa-git-square::before { content: ""; } + +.fa-git::before { content: ""; } + +.fa-y-combinator-square::before, .fa-yc-square::before, .fa-hacker-news::before { content: ""; } + +.fa-tencent-weibo::before { content: ""; } + +.fa-qq::before { content: ""; } + +.fa-wechat::before, .fa-weixin::before { content: ""; } + +.fa-send::before, .fa-paper-plane::before { content: ""; } + +.fa-send-o::before, .fa-paper-plane-o::before { content: ""; } + +.fa-history::before { content: ""; } + +.fa-circle-thin::before { content: ""; } + +.fa-header::before { content: ""; } + +.fa-paragraph::before { content: ""; } + +.fa-sliders::before { content: ""; } + +.fa-share-alt::before { content: ""; } + +.fa-share-alt-square::before { content: ""; } + +.fa-bomb::before { content: ""; } + +.fa-soccer-ball-o::before, .fa-futbol-o::before { content: ""; } + +.fa-tty::before { content: ""; } + +.fa-binoculars::before { content: ""; } + +.fa-plug::before { content: ""; } + +.fa-slideshare::before { content: ""; } + +.fa-twitch::before { content: ""; } + +.fa-yelp::before { content: ""; } + +.fa-newspaper-o::before { content: ""; } + +.fa-wifi::before { content: ""; } + +.fa-calculator::before { content: ""; } + +.fa-paypal::before { content: ""; } + +.fa-google-wallet::before { content: ""; } + +.fa-cc-visa::before { content: ""; } + +.fa-cc-mastercard::before { content: ""; } + +.fa-cc-discover::before { content: ""; } + +.fa-cc-amex::before { content: ""; } + +.fa-cc-paypal::before { content: ""; } + +.fa-cc-stripe::before { content: ""; } + +.fa-bell-slash::before { content: ""; } + +.fa-bell-slash-o::before { content: ""; } + +.fa-trash::before { content: ""; } + +.fa-copyright::before { content: ""; } + +.fa-at::before { content: ""; } + +.fa-eyedropper::before { content: ""; } + +.fa-paint-brush::before { content: ""; } + +.fa-birthday-cake::before { content: ""; } + +.fa-area-chart::before { content: ""; } + +.fa-pie-chart::before { content: ""; } + +.fa-line-chart::before { content: ""; } + +.fa-lastfm::before { content: ""; } + +.fa-lastfm-square::before { content: ""; } + +.fa-toggle-off::before { content: ""; } + +.fa-toggle-on::before { content: ""; } + +.fa-bicycle::before { content: ""; } + +.fa-bus::before { content: ""; } + +.fa-ioxhost::before { content: ""; } + +.fa-angellist::before { content: ""; } + +.fa-cc::before { content: ""; } + +.fa-shekel::before, .fa-sheqel::before, .fa-ils::before { content: ""; } + +.fa-meanpath::before { content: ""; } + +.fa-buysellads::before { content: ""; } + +.fa-connectdevelop::before { content: ""; } + +.fa-dashcube::before { content: ""; } + +.fa-forumbee::before { content: ""; } + +.fa-leanpub::before { content: ""; } + +.fa-sellsy::before { content: ""; } + +.fa-shirtsinbulk::before { content: ""; } + +.fa-simplybuilt::before { content: ""; } + +.fa-skyatlas::before { content: ""; } + +.fa-cart-plus::before { content: ""; } + +.fa-cart-arrow-down::before { content: ""; } + +.fa-diamond::before { content: ""; } + +.fa-ship::before { content: ""; } + +.fa-user-secret::before { content: ""; } + +.fa-motorcycle::before { content: ""; } + +.fa-street-view::before { content: ""; } + +.fa-heartbeat::before { content: ""; } + +.fa-venus::before { content: ""; } + +.fa-mars::before { content: ""; } + +.fa-mercury::before { content: ""; } + +.fa-intersex::before, .fa-transgender::before { content: ""; } + +.fa-transgender-alt::before { content: ""; } + +.fa-venus-double::before { content: ""; } + +.fa-mars-double::before { content: ""; } + +.fa-venus-mars::before { content: ""; } + +.fa-mars-stroke::before { content: ""; } + +.fa-mars-stroke-v::before { content: ""; } + +.fa-mars-stroke-h::before { content: ""; } + +.fa-neuter::before { content: ""; } + +.fa-genderless::before { content: ""; } + +.fa-facebook-official::before { content: ""; } + +.fa-pinterest-p::before { content: ""; } + +.fa-whatsapp::before { content: ""; } + +.fa-server::before { content: ""; } + +.fa-user-plus::before { content: ""; } + +.fa-user-times::before { content: ""; } + +.fa-hotel::before, .fa-bed::before { content: ""; } + +.fa-viacoin::before { content: ""; } + +.fa-train::before { content: ""; } + +.fa-subway::before { content: ""; } + +.fa-medium::before { content: ""; } + +.fa-yc::before, .fa-y-combinator::before { content: ""; } + +.fa-optin-monster::before { content: ""; } + +.fa-opencart::before { content: ""; } + +.fa-expeditedssl::before { content: ""; } + +.fa-battery-4::before, .fa-battery-full::before { content: ""; } + +.fa-battery-3::before, .fa-battery-three-quarters::before { content: ""; } + +.fa-battery-2::before, .fa-battery-half::before { content: ""; } + +.fa-battery-1::before, .fa-battery-quarter::before { content: ""; } + +.fa-battery-0::before, .fa-battery-empty::before { content: ""; } + +.fa-mouse-pointer::before { content: ""; } + +.fa-i-cursor::before { content: ""; } + +.fa-object-group::before { content: ""; } + +.fa-object-ungroup::before { content: ""; } + +.fa-sticky-note::before { content: ""; } + +.fa-sticky-note-o::before { content: ""; } + +.fa-cc-jcb::before { content: ""; } + +.fa-cc-diners-club::before { content: ""; } + +.fa-clone::before { content: ""; } + +.fa-balance-scale::before { content: ""; } + +.fa-hourglass-o::before { content: ""; } + +.fa-hourglass-1::before, .fa-hourglass-start::before { content: ""; } + +.fa-hourglass-2::before, .fa-hourglass-half::before { content: ""; } + +.fa-hourglass-3::before, .fa-hourglass-end::before { content: ""; } + +.fa-hourglass::before { content: ""; } + +.fa-hand-grab-o::before, .fa-hand-rock-o::before { content: ""; } + +.fa-hand-stop-o::before, .fa-hand-paper-o::before { content: ""; } + +.fa-hand-scissors-o::before { content: ""; } + +.fa-hand-lizard-o::before { content: ""; } + +.fa-hand-spock-o::before { content: ""; } + +.fa-hand-pointer-o::before { content: ""; } + +.fa-hand-peace-o::before { content: ""; } + +.fa-trademark::before { content: ""; } + +.fa-registered::before { content: ""; } + +.fa-creative-commons::before { content: ""; } + +.fa-gg::before { content: ""; } + +.fa-gg-circle::before { content: ""; } + +.fa-tripadvisor::before { content: ""; } + +.fa-odnoklassniki::before { content: ""; } + +.fa-odnoklassniki-square::before { content: ""; } + +.fa-get-pocket::before { content: ""; } + +.fa-wikipedia-w::before { content: ""; } + +.fa-safari::before { content: ""; } + +.fa-chrome::before { content: ""; } + +.fa-firefox::before { content: ""; } + +.fa-opera::before { content: ""; } + +.fa-internet-explorer::before { content: ""; } + +.fa-tv::before, .fa-television::before { content: ""; } + +.fa-contao::before { content: ""; } + +.fa-500px::before { content: ""; } + +.fa-amazon::before { content: ""; } + +.fa-calendar-plus-o::before { content: ""; } + +.fa-calendar-minus-o::before { content: ""; } + +.fa-calendar-times-o::before { content: ""; } + +.fa-calendar-check-o::before { content: ""; } + +.fa-industry::before { content: ""; } + +.fa-map-pin::before { content: ""; } + +.fa-map-signs::before { content: ""; } + +.fa-map-o::before { content: ""; } + +.fa-map::before { content: ""; } + +.fa-commenting::before { content: ""; } + +.fa-commenting-o::before { content: ""; } + +.fa-houzz::before { content: ""; } + +.fa-vimeo::before { content: ""; } + +.fa-black-tie::before { content: ""; } + +.fa-fonticons::before { content: ""; } +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: text/css +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/css/main.css?1712660896 + +@charset "utf-8"; + +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +audio, canvas, video { display: inline-block; } + +audio:not([controls]) { display: none; height: 0px; } + +[hidden] { display: none; } + +html { font-family: sans-serif; text-size-adjust: 100%; } + +body { margin: 0px; } + +a:focus { outline: dotted thin; } + +a:active, a:hover { outline: 0px; } + +h1 { font-size: 2em; margin: 0.67em 0px; } + +abbr[title] { border-bottom: 1px dotted; } + +b, strong { font-weight: bold; } + +dfn { font-style: italic; } + +hr { box-sizing: content-box; height: 0px; } + +mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); } + +code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } + +pre { white-space: pre-wrap; } + +q { quotes: "“" "”" "‘" "’"; } + +small { font-size: 80%; } + +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +img { border: 0px; } + +svg:not(:root) { overflow: hidden; } + +figure { margin: 0px; } + +fieldset { border: 1px solid rgb(192, 192, 192); margin: 0px 2px; padding: 0.35em 0.625em 0.75em; } + +legend { border: 0px; padding: 0px; } + +button, input, select, textarea { font-family: inherit; font-size: 100%; margin: 0px; } + +button, input { line-height: normal; } + +button, select { text-transform: none; } + +button, html input[type="button"], input[type="reset"], input[type="submit"] { appearance: button; cursor: pointer; } + +button[disabled], html input[disabled] { cursor: default; } + +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0px; } + +input[type="search"] { appearance: textfield; box-sizing: border-box; } + +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { appearance: none; } + +textarea { overflow: auto; vertical-align: top; } + +table { border-collapse: collapse; border-spacing: 0px; } + +body { font-family: "Titillium Web", Arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px; color: rgb(100, 100, 100); background-color: rgb(255, 255, 255); } + +h1 { margin: 0px 0px 20px; font-weight: 400; color: rgb(255, 255, 255); font-size: 250%; text-align: center; line-height: 65px; } + +h2 { color: rgb(255, 126, 0); font-size: 162.5%; font-weight: 400; } + +h3 { color: rgb(19, 22, 31); font-size: 137.5%; line-height: 36px; font-weight: 400; } + +h4 { color: rgb(19, 22, 31); font-size: 137.5%; line-height: 36px; font-weight: 400; } + +h5 { color: rgb(19, 22, 31); font-size: 137.5%; line-height: 36px; font-weight: 400; } + +a { color: rgb(52, 144, 230); text-decoration: none; cursor: pointer; } + +p { margin: 0px; } + +a img, a:link img, a:visited img, a:active img { border: 0px; } + +blockquote { margin: 0px 100px 70px; border-left: 5px solid rgb(247, 147, 26); border-right: 5px solid rgb(247, 147, 26); padding: 16px 100px 45px; font-size: 137.5%; } + +pre { background-color: rgb(248, 248, 248); display: block; padding: 17px 17px 17px 40px; font-size: 100%; white-space: pre; overflow-y: auto; } + +pre code { font-size: 18px; color: rgb(28, 31, 48); line-height: 34px; padding: 0px; border: 0px; white-space: pre; } + +code { padding: 0px 18px; background: rgb(248, 248, 248); font-size: 18px; font-family: "Titillium Web", Arial, sans-serif; line-height: 34px; color: rgb(28, 31, 48); white-space: nowrap; } + +ul, ol { padding-left: 20px; margin-left: 0px; } + +ul ul { list-style-type: disc; } + +li { margin: 10px 0px; } + +table td, table th { padding: 10px; border: 1px solid rgb(221, 221, 221); } + +hr { height: 1px; margin: 0px; background: rgb(218, 218, 218); border: none; } + +@font-face { font-family: "Titillium Web"; src: url("/font/titillium/TitilliumWeb-Regular.eot?#iefix") format("embedded-opentype"), url("/font/titillium/TitilliumWeb-Regular.woff2") format("woff2"), url("/font/titillium/TitilliumWeb-Regular.woff") format("woff"), url("TitilliumWeb-Regular.ttf") format("truetype"), url("/font/titillium/TitilliumWeb-Regular.svg#TitilliumWeb-Regular") format("svg"); font-weight: normal; font-style: normal; } + +@font-face { font-family: "Titillium Web"; src: url("/font/titillium/TitilliumWeb-SemiBold.eot?#iefix") format("embedded-opentype"), url("/font/titillium/TitilliumWeb-SemiBold.woff2") format("woff2"), url("/font/titillium/TitilliumWeb-SemiBold.woff") format("woff"), url("/font/titillium/TitilliumWeb-SemiBold.ttf") format("truetype"), url("/font/titillium/TitilliumWeb-SemiBold.svg#TitilliumWeb-SemiBold") format("svg"); font-weight: 600; font-style: normal; } + +@font-face { font-family: "Titillium Web"; src: url("/font/titillium/TitilliumWeb-Bold.eot?#iefix") format("embedded-opentype"), url("/font/titillium/TitilliumWeb-Bold.woff2") format("woff2"), url("/font/titillium/TitilliumWeb-Bold.woff") format("woff"), url("/font/titillium/TitilliumWeb-Bold.ttf") format("truetype"), url("/font/titillium/TitilliumWeb-Bold.svg#TitilliumWeb-Bold") format("svg"); font-weight: bold; font-style: normal; } + +@font-face { font-family: "Titillium Web"; src: url("/font/titillium/TitilliumWeb-Italic.eot?#iefix") format("embedded-opentype"), url("/font/titillium/TitilliumWeb-Italic.woff2") format("woff2"), url("/font/titillium/TitilliumWeb-Italic.woff") format("woff"), url("/font/titillium/TitilliumWeb-Italic.ttf") format("truetype"), url("/font/titillium/TitilliumWeb-Italic.svg#TitilliumWeb-Italic") format("svg"); font-weight: normal; font-style: italic; } + +.container { max-width: 1230px; padding: 0px 30px; margin: 0px auto; box-sizing: border-box; } + +.row { display: flex; } + +.align-items-center { align-items: center; } + +.justify-content-end { justify-content: flex-end; } + +.section-title { font-size: 162.5%; font-weight: normal; color: rgb(255, 126, 0); } + +.text { font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; } + +.is-capital { text-transform: capitalize; } + +.separator { height: 1px; background: rgb(223, 223, 223); } + +.link-js { cursor: pointer; } + +.banner-message, .banner-message a, .banner-message a:link, .banner-message a:active, .banner-message a:visited { display: block; color: rgb(255, 255, 255); } + +.banner-message a:hover { text-decoration: underline; } + +.banner-message a { background-color: rgb(197, 37, 31); } + +.banner-message.alert a { background-color: rgb(197, 37, 31); } + +.banner-message.warning a { background-color: rgb(229, 135, 22); } + +.banner-message.success a { background-color: rgb(50, 146, 57); } + +.banner-message.info a { background-color: rgb(13, 87, 155); } + +.banner-message.minor a { background-color: yellow; color: black; } + +.banner-message a span { display: block; margin: auto; width: 850px; padding: 10px; text-align: center; } + +.center { text-align: center; margin-right: auto; margin-left: auto; } + +.head { background: rgb(255, 255, 255); } + +.head > div { display: flex; -webkit-box-pack: center; justify-content: center; -webkit-box-align: center; align-items: center; max-width: 1230px; padding: 15px 30px; margin: 0px auto; position: relative; box-sizing: border-box; z-index: 100; } + +.langselect { display: none; } + +.lang, .lang li, .lang ul { display: block; list-style: none; padding: 0px; margin: 0px; cursor: pointer; } + +.lang.is-expand { position: relative; padding-right: 13px; } + +.lang { margin-left: 30px; border-left: 2px solid transparent; border-right: 2px solid transparent; border-top: 2px solid transparent; } + +.lang li ul { display: none; right: 0px; position: absolute; background-color: rgb(255, 255, 255); padding: 13px 0px; border: 1px solid rgb(223, 223, 223); white-space: nowrap; z-index: 100; } + +.lang:hover li ul { display: block; } + +.lang li ul li { display: inline-block; width: 180px; vertical-align: top; text-align: left; } + +.lang li ul li ul { position: relative; padding: 0px; border: 0px; } + +.lang li ul li ul li { display: block; } + +.lang li a, .lang li a:link, .lang li a:visited, .lang li a:active { font-size: 93.75%; color: rgb(0, 0, 0); } + +.lang li ul li a, .lang li ul li a:link, .lang li ul li a:visited, .lang li ul li a:active { display: block; width: 180px; height: 40px; padding-left: 20px; padding-right: 20px; font-size: 100%; line-height: 37px; box-sizing: border-box; color: rgb(174, 174, 174); } + +.lang:hover li a { color: rgb(0, 0, 0); } + +.lang li ul li a { color: rgb(174, 174, 174); } + +.lang li ul li a:hover { color: rgb(0, 0, 0); background: rgb(223, 223, 223); } + +.logo { margin-right: auto; } + +.logo img { width: 132px; height: 29px; vertical-align: middle; } + +.menumobile { display: none; } + +.menusimple { position: static; margin: 0px auto 0px 0px; } + +.menusimple li { list-style: none; display: inline-block; position: relative; padding: 0px; margin: 0px; border-radius: 5px; } + +.is-expand { position: relative; padding-right: 18px; } + +.is-expand::after { content: ""; position: absolute; top: 50%; right: 0px; width: 8px; height: 5px; background: url("../img/icons/ico_angle.svg?1528322191") no-repeat; transform: translateY(-50%); } + +.menusimple > li:hover .is-expand::after { transform: translateY(-50%) rotate(180deg); } + +.menusimple > li:not(:first-child) { margin-left: 30px; } + +.menusimple > li a, .menusimple > li a:active, .menusimple > li a:visited, .menusimple > li a:link { color: rgb(19, 22, 31); } + +.menusimple > li a { display: block; font-family: "Titillium Web", sans-serif; font-weight: 400; font-size: 93.75%; text-decoration: none; white-space: nowrap; cursor: pointer; } + +.menusimple > li ul { display: none; position: absolute; background-color: rgb(255, 255, 255); border: 1px solid rgb(223, 223, 223); min-width: 120%; padding: 0px; margin: 0px; right: 0px; } + +.menusimple > li > ul li { margin: 0px; display: block; width: 220px; box-sizing: border-box; border-radius: 0px; } + +.menusimple > li > ul li:hover { background: rgb(223, 223, 223); } + +.menusimple > li > ul > li a { font-size: 93.75%; padding: 6px 10px 3px 15px; } + +.menusimple li:hover > a, .menusimple li.active > a { color: rgb(0, 0, 0); } + +.menusimple li:hover > ul { display: block; } + +.menusimple.menumain > li:first-child, .menusimple.menumain > li:first-child + li, .menusimple.menumain > li:first-child + li + li + li, .menusimple.menucore > li:first-child, .menusimple.menucore > li:first-child + li + li { border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; } + +.menusimple.menucore > li:first-child + li + li + li + li a { font-weight: 700; } + +.bitcore-content { padding: 70px 0px; } + +.breadcrumbs { background: rgb(19, 22, 31); color: rgb(146, 147, 150); font-size: 81.25%; } + +.breadcrumbs a { color: inherit; } + +.content { position: relative; text-align: justify; background-color: rgb(255, 255, 255); min-height: 400px; } + +p, li, table { line-height: 1.5em; } + +h1 span.fa, h2 span.fa, h3 span.fa, h4 span.fa, h5 span.fa, h6 span.fa { margin-right: 10px; } + +.hero { position: relative; padding: 96px 30px 138px; background: url("../img/hero/hero-bg.svg?1528322191") center bottom / cover no-repeat; z-index: 10; } + +.hero-container { position: relative; padding: 0px 40px; } + +.hero h1 { margin-bottom: 20px; } + +.footer { position: relative; padding-top: 60px; text-align: left; color: rgb(157, 157, 157); background: url("../img/hero/footer-bg.svg?1528322191") center top no-repeat rgb(19, 22, 31); z-index: 10; } + +.logo-footer { display: block; margin-bottom: 155px; text-align: center; } + +.footer-row { -webkit-box-pack: justify; justify-content: space-between; } + +.donate { max-width: 295px; } + +.donate-row { flex-direction: column; } + +.donate-btn { width: 90px; height: 35px; margin-left: 30px; padding: 7px 16px; box-sizing: border-box; color: rgb(255, 255, 255); text-align: center; border-radius: 1px; } + +.donate-text { margin-top: 5px; } + +.donate-link { display: block; margin-top: 5px; text-decoration: underline; } + +.donate-qrcode { max-width: 120px; margin-top: 20px; } + +.donate-qrcode img { max-width: 100%; } + +.footer-title { font-size: 100%; color: rgb(255, 255, 255); text-align: left; line-height: 52px; font-weight: 600; } + +.footermenu { justify-content: flex-end; max-width: 665px; width: 100%; } + +.footermenu-item { margin-right: 60px; } + +.footermenu-item:last-child { margin-right: 0px; } + +.footermenu-title { margin-bottom: 7px; font-weight: 600; line-height: 52px; color: rgb(255, 255, 255); } + +.footermenu-list { margin: 0px; padding: 0px; } + +.footermenu li { margin: 0px; list-style: none; } + +.footermenu a { display: block; font-size: 106.25%; line-height: 34px; color: inherit; } + +.footersponsor div { display: inline-block; color: rgb(141, 141, 141); margin: 0px 0px 25px; line-height: 2em; } + +.footersponsor span { white-space: nowrap; } + +.footersponsor span, .footersponsor a, .footersponsor a:link, .footersponsor a:active, .footersponsor a:visited { display: inline-block; margin: 5px; } + +.footersponsor img { width: 245px; height: 18px; } + +.footer-bottom { margin-top: 55px; padding: 25px 0px; background: rgb(9, 12, 20); } + +.footer-bottom-row { -webkit-box-pack: justify; justify-content: space-between; align-items: center; } + +.footer-status-row { align-items: center; } + +.footerlicense a { color: inherit; } + +.footer-bottom-row .lang { margin: 0px 0px 0px 50px; } + +.footer-bottom-row .lang > li > a { color: rgb(255, 255, 255); } + +.footer-bottom-row .lang > li > ul { top: 0px; transform: translateY(-100%); } + +.statusmenu { color: inherit; } + +.statusmenu { display: inline-block; padding-left: 20px; background-position: left center; background-repeat: no-repeat; background-image: url("/img/icons/netstatus_normal.svg?1528322191"); } + +.statusmenu.alert { background-image: url("/img/icons/netstatus_alert.svg?1528322191"); } + +.clearfix::after { content: ""; display: table; clear: both; } + +.card-row { justify-content: left; flex-wrap: wrap; -webkit-box-align: stretch; align-items: stretch; margin: 70px 0px; } + +.card { width: 31.7%; height: auto; margin-top: 30px; margin-right: 0.8%; margin-left: 0.8%; padding: 40px 30px 60px; vertical-align: top; border: 1px solid rgb(218, 218, 218); text-align: center; box-sizing: border-box; list-style: none; } + +.card img { display: block; height: 50px; width: 50px; margin: 0px auto 20px; } + +.card h2 { min-height: 64px; margin: 20px 0px 30px; text-align: center; font-size: 137.5%; color: rgb(19, 22, 31); font-weight: 600; } + +.card p { font-size: 112.5%; color: rgb(157, 157, 157); text-align: center; } + +.two-column-layout { padding: 70px 0px; } + +.two-column-row { -webkit-box-pack: justify; justify-content: space-between; } + +.two-column-row:not(:last-child) { margin-bottom: 100px; } + +.two-column-row:nth-child(2n) { -webkit-box-orient: horizontal; -webkit-box-direction: reverse; flex-direction: row-reverse; } + +.column-text { max-width: 49%; text-align: left; } + +.column-text-s { max-width: 470px; } + +.two-column-row:nth-child(2n+1) .column-text { margin-left: 30px; } + +.two-column-row:nth-child(2n) .column-text { margin-right: 30px; } + +.column-text h2 { margin: 0px 0px 50px; } + +.column-text p { font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; } + +.column-text a b { font-weight: 400; } + +.column-table { text-align: center; color: rgb(66, 69, 76); line-height: 36px; } + +.column-table th { font-size: 100%; font-weight: 600; } + +.column-table tr:nth-child(2n) { background: rgb(249, 249, 249); } + +.column-table td { font-size: 87.5%; } + +.mainhero { padding: 130px 30px 50px; background: rgb(255, 255, 255); } + +.mainsummary { text-align: center; } + +.mainsummary { max-width: 770px; margin: 0px auto 45px; font-size: 321.5%; color: rgb(28, 31, 48); } + +.mainvideo { margin: 80px auto 0px; text-align: center; } + +.mainvideo-btn-open { display: block; height: 50px; margin: 0px auto; padding: 0px 0px 0px 65px; background: url("../img/icons/play-btn.svg?1528322191") left center / contain no-repeat; border: none; } + +.mainannouncement { margin: 18px auto 0px; text-align: center; } + +.mainannouncement a { color: rgb(255, 126, 0); text-decoration: underline; } + +.closed { display: none; } + +.modal { position: fixed; top: 50%; left: 50%; z-index: 1010; transform: translate(-50%, -50%); width: 622px; height: 350px; max-width: 100%; max-height: 100%; } + +.modal-overlay { position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: 1000; background: rgba(0, 0, 0, 0.6); } + +.modal-video { max-width: 100%; max-height: 100%; width: 100%; height: 100%; } + +.mainvideo-btn-close { position: absolute; top: -35px; right: 0px; width: 30px; height: 30px; border: none; background: url("../img/icons/close-youtube.svg?1528322191") center center / contain no-repeat; } + +.maindesc { padding: 100px 0px 70px; } + +.maindesc-row { -webkit-box-pack: justify; justify-content: space-between; margin: 0px 0px 60px; } + +.maindesc-text { max-width: 67%; margin: 0px 0px 90px; font-size: 125%; text-align: left; color: rgb(77, 80, 96); } + +.mainlist { margin: 0px; list-style: none; padding-left: 0px; } + +.mainlist-item { display: flex; margin: 0px 0px 17px; } + +.mainlist-item img { width: 30px; height: 30px; margin: 0px 25px 0px 0px; } + +.mainlist-item p { font-weight: 600; font-size: 106.25%; color: rgb(19, 22, 31); } + +.home-title { margin: 0px 0px 50px; } + +.recommendation { padding: 70px 0px 130px; } + +.recommendation-text { max-width: 570px; margin: 0px auto 50px; font-size: 137.5%; text-align: center; color: rgb(19, 22, 31); } + +.recommendation-row { flex-wrap: wrap; -webkit-box-pack: center; justify-content: center; max-width: 810px; margin: 0px auto 50px; } + +.recommendation-card { display: flex; width: 250px; height: 120px; margin: 0px 10px 20px; padding: 33px 23px; border: 1px solid rgb(218, 218, 218); box-sizing: border-box; } + +.recommendation-card .wallet-icon { margin-right: 23px; } + +.brd-wallet-icon { width: 72px; height: 72px; } + +.recommendation-card .wallet-name { margin: 0px 0px 8px; color: rgb(19, 22, 31); font-size: 106.25%; font-weight: 600; line-height: 1.8; } + +.recommendation-card .platform-icon { margin-right: 12px; } + +.btn-container { text-align: center; } + +.btn { display: inline-block; max-width: 100%; padding: 16px 25px; box-sizing: border-box; font-weight: 600; font-size: 100%; color: rgb(255, 255, 255); border-radius: 1px; } + +.btn-home { width: 290px; height: 55px; } + +.btn:not(:first-child) { margin-left: 6px; } + +.btn-bright { background: rgb(255, 149, 0); color: rgb(255, 255, 255); } + +.btn-bright:hover { background: rgb(249, 161, 54); } + +.btn-bright:active { background: rgb(245, 138, 8); } + +.btn-dark { background: rgb(19, 22, 31); } + +.btn-dark:hover { background: rgb(51, 55, 67); } + +.btn-dark:active { background: rgb(0, 0, 0); } + +.btn-light { padding: 15px 25px; color: rgb(255, 126, 0); background: rgb(255, 255, 255); border: 1px solid rgb(255, 126, 0); } + +.btn-buy { margin-top: 2em; } + +.get-started-btn { margin: 0px auto 70px; } + +.mainbutton a, .mainbutton a:link, .mainbutton a:visited, .mainbutton a:active { display: inline-block; width: 272px; height: 55px; margin-bottom: 10px; padding: 16px 25px; box-sizing: border-box; background: rgb(255, 149, 0); font-weight: 600; font-size: 100%; text-align: center; color: rgb(255, 255, 255); border-radius: 1px; } + +.mainoverview { position: relative; padding: 375px 0px 130px; background: url("../img/hero/overview-bg.svg?1528322191") center top / cover no-repeat; text-align: center; } + +.btn-down { position: absolute; bottom: -25px; left: 50%; height: 50px; width: 50px; background: rgb(19, 22, 31); transform: rotate(45deg) translate(-25%, 25%); } + +.btn-down img { position: relative; top: 0px; left: 0px; transform: rotate(-45deg) translate(-60%, 0%); } + +.mainoverview-title { font-size: 162.5%; text-align: center; margin-bottom: 40px; color: rgb(255, 255, 255); } + +.maincard { display: inline-block; width: 260px; height: 200px; margin: 0px 8px; padding: 40px 32px 0px; text-align: center; background: rgb(9, 12, 20); box-sizing: border-box; vertical-align: top; } + +.maincard-img { display: block; min-height: 45px; margin: 0px auto 20px; } + +.maincard-title { margin: 0px; font-size: 137.5%; line-height: 1.9; color: rgb(255, 255, 255); } + +.maincard-link { font-size: 100%; color: rgb(157, 157, 157); } + +.startbar { -webkit-box-pack: center; justify-content: center; border-bottom: 1px solid rgb(225, 225, 225); } + +.startbar-link { position: relative; top: 1px; padding: 22px 33px; color: rgb(157, 157, 157); font-size: 18px; } + +.startbar-link:hover { padding: 22px 33px 19px; color: rgb(255, 126, 0); border-bottom: 3px solid rgb(255, 126, 0); } + +.starttitle { margin: 70px 0px 50px; color: rgb(255, 126, 0); text-align: center; line-height: 65px; } + +.starttitle span { font-size: 162%; } + +.start { position: relative; padding-bottom: 175px; } + +.start-block { position: relative; } + +.start-block:not(:last-child)::before { content: ""; position: absolute; top: 0px; left: 50%; width: 2px; height: 100%; transform: translate(-50%, 0px); background: url("../img/getting-started/start-path.svg?1528322191") no-repeat; } + +.start-block::after { content: ""; position: absolute; top: 0px; left: 50%; width: 50px; height: 50px; transform: translate(-50%, -9px); z-index: 10; } + +.start-block:nth-child(1)::after { background: url("../img/getting-started/number-1.svg?1528322191") no-repeat; } + +.start-block:nth-child(2)::after { background: url("../img/getting-started/number-2.svg?1528322191") no-repeat; } + +.start-block:nth-child(3)::after { background: url("../img/getting-started/number-3.svg?1528322191") no-repeat; } + +.start-block:nth-child(4)::after { background: url("../img/getting-started/number-4.svg?1528322191") no-repeat; } + +.start:nth-child(2) { border-bottom: 1px solid rgb(218, 218, 218); } + +.start-content::after { content: ""; position: absolute; top: 0px; width: 85px; height: 3px; background: rgb(255, 126, 0); } + +.start-block:nth-child(2n+1) .start-content::after { left: 50%; transform: translate(-100%, 13px); } + +.start-block:nth-child(2n) .start-content::after { right: 50%; transform: translate(100%, 13px); } + +.left-column, .right-column { max-width: 40%; position: relative; } + +.left-column { margin-right: auto; text-align: right; } + +.left-column h2 { text-align: right; } + +.left-column div { position: absolute; bottom: -95px; right: 0px; z-index: 10; } + +.right-column { margin-left: auto; text-align: left; } + +.right-column div { position: absolute; bottom: -95px; left: 0px; z-index: 10; } + +.start-content div div a, .start-content div div a:link { display: inline-block; padding: 15px 30px; font-size: 100%; font-weight: 600; color: rgb(255, 255, 255); border-radius: 1px; } + +.start div div div a:hover { background-image: none; } + +.start h2 { margin: 0px 0px 20px; font-size: 137.5%; font-weight: 400; line-height: 1.6; color: rgb(19, 22, 31); } + +.start p { margin: 0px; font-size: 125%; line-height: 1.7; color: rgb(77, 80, 96); } + +.starttitle a { margin: 0px 20px auto; } + +.support-card { min-height: 395px; } + +.buy-card { min-height: 440px; } + +.buy-card p { margin: 30px 0px 0px; } + +.buy-discover h2 { color: rgb(19, 22, 31); font-size: 1.5em; text-align: center; } + +.paxful-sponsor { display: inline-block; padding: 6px 72px; color: rgb(157, 157, 157) !important; font-size: 1em !important; } + +.bitcoin-paper { padding: 20px 0px 50px; } + +.bitcoin-paper .card-row { margin: 0px; } + +.bitcoin-paper-card { min-height: 230px; padding-top: 60px; } + +.bitcoin-paper-card img { width: 40px; height: 33px; } + +.bitcoin-paper div > p { margin: 50px 0px 20px; font-size: 125%; color: rgb(77, 80, 96); text-align: center; } + +.language-link { position: relative; display: inline-block; margin: 20px 0px 10px; padding-left: 24px; font-size: 137.5%; font-weight: 600; color: rgb(19, 22, 31); } + +.language-link::before { content: ""; position: absolute; top: 6px; left: 0px; width: 12px; height: 15px; background: url("../img/icons/ico_download.svg?1528322191") no-repeat; } + +.warning { position: relative; max-width: 970px; margin: 0px auto 30px; padding: 43px 50px 43px 140px; box-sizing: border-box; font-size: 112.5%; color: rgb(119, 118, 126); background: rgb(255, 249, 243); border-radius: 1px; } + +.warning::before { content: ""; position: absolute; top: 50%; left: 40px; width: 50px; height: 43px; transform: translateY(-50%); background: url("../img/icons/ico_warning.svg?1528322191") center center / contain no-repeat; } + +.titleicon { width: 32px; height: 32px; vertical-align: middle; margin-right: 8px; position: relative; top: -2px; } + +.warningicon { width: 42px; height: 42px; vertical-align: middle; margin-right: 6px; } + +.dev-documentation { padding: 50px 0px 70px; } + +.dev-documentation .glossary_term { margin: 0px auto; } + +.dev-documentation .card-row { margin: 55px 0px; } + +.devguide-card .btn-container { margin-bottom: 30px; } + +.doc-card { min-height: 500px; } + +.docreference { padding: 50px 0px 0px; border-top: 1px solid rgb(223, 223, 223); text-align: center; } + +.docreference-title { margin: 0px 0px 30px; } + +.docreference-row { -webkit-box-pack: justify; justify-content: space-between; } + +.docreference-card { width: 23%; min-height: 190px; padding: 40px 0px; box-sizing: border-box; background: rgb(255, 255, 255); border: 1px solid rgb(218, 218, 218); } + +.docreference-img-block { min-height: 60px; } + +.docreference-card p { font-size: 137.5%; font-weight: 600; color: rgb(19, 22, 31); } + +.toc-container { max-width: 1230px; padding: 0px 30px; margin: 0px auto; box-sizing: border-box; } + +.toc-row { -webkit-box-pack: center; justify-content: center; padding: 95px 0px 50px; } + +.toc { min-width: 370px; width: 370px; } + +.toc > div { height: 100%; padding-right: 35px; box-sizing: border-box; } + +.toc .scroll { position: fixed; top: 20px; width: 370px; padding-bottom: 50px; overflow-y: auto; } + +.toc .scroll::-webkit-scrollbar { display: none; } + +.toc ul, .toc li { list-style: none; padding: 0px; margin: 0px; text-align: left; } + +.toc div > ul > li { margin-bottom: 20px; } + +.toc div > ul > li > a { position: relative; display: block; width: 100%; font-size: 22px; font-weight: 600; color: rgb(19, 22, 31); line-height: 36px; } + +.toc div > ul > li > ul a { display: block; padding-left: 20px; margin-bottom: 15px; font-size: 18px; color: rgb(66, 69, 76); line-height: 24px; text-align: left; } + +.toc div > ul > li > ul > li:first-child { margin-top: 20px; } + +.toc ul li ul { display: none; } + +.toc ul li.active ul { display: block; } + +#markdown-toc > li > a::after { content: ""; position: absolute; top: 50%; right: 0px; width: 10px; height: 6px; background: url("../img/icons/ico_angle.svg?1528322191") no-repeat; transform: translateY(-50%); } + +#markdown-toc > .active > a::after { transform: translateY(-50%) rotate(180deg); } + +.toc ul li ul li a { position: relative; } + +.toc ul li ul li a:hover::before, .toc ul li ul li a.active::before { content: ""; position: absolute; width: 3px; height: 33px; right: -35px; background: rgb(255, 126, 0); } + +.toc + .toccontent { border-left: 1px solid rgb(223, 223, 223); } + +.toccontent { width: 100%; min-width: 290px; overflow-wrap: break-word; padding: 18px; } + +.toccontent-block { border-top: 1px solid rgb(223, 223, 223); } + +.toccontent-block:last-of-type { border-bottom: 1px solid rgb(223, 223, 223); } + +.toccontent-intro { padding: 0px 0px 40px 30px; border: none; } + +.toccontent p { margin-bottom: 20px; font-size: 20px; color: rgb(77, 80, 96); line-height: 34px; text-align: left; } + +.toccontent p:last-child { margin-bottom: 0px; } + +.toccontent li { font-size: 20px; color: rgb(77, 80, 96); line-height: 34px; text-align: left; } + +.toccontent h3 { margin-top: 0px; margin-bottom: 10px; } + +.toccontent h4 { font-size: 110%; } + +.toccontent h5, .toccontent h6 { font-size: 100%; } + +.toccontent ol { font-size: 125%; } + +.toccontent img { max-width: 100%; } + +.toccontent table thead { text-align: center; } + +.toccontent a.auto-link:link, .toccontent a.auto-link:visited { color: rgb(100, 100, 100); } + +.toccontent:hover a.auto-link:link, .toccontent:hover a.auto-link:visited { color: rgb(44, 111, 173); } + +.toccontent:hover a.auto-link:link:hover, .toccontent:hover a.auto-link:visited:hover { color: rgb(99, 164, 225); } + +.toccontent .subhead-links { margin-bottom: 20px; color: rgb(225, 225, 225); font-size: 22px; } + +.toccontent .subhead-links a { display: inline-block; font-size: 20px; } + +.toccontent .subhead-links a:not(:last-child) { margin-right: 15px; } + +.toccontent .subhead-links a:not(:first-child) { margin-left: 15px; } + +.toccontent a:link.term, .toccontent a:visited.term, .toccontent:hover a.auto-link.term:link, .toccontent:hover a.auto-link.term:visited, .toccontent:hover a.auto-link.term:link:hover, .toccontent:hover a.auto-link.term:visited:hover { color: rgb(0, 0, 0); } + +.toccontent a.term:link code, .toccontent a.term:visited code { color: rgb(100, 100, 100); } + +.multicode { margin-bottom: 20px; padding: 17px 17px 17px 40px; background-color: rgb(248, 248, 248); overflow-y: auto; } + +.multicode pre { border: 0px none; padding: 0px; margin: 0px; overflow-y: visible; } + +.toccontent table.ntpd tr td + td + td { white-space: nowrap; } + +.toccontent table.ntpd tr td + td + td + td { white-space: normal; } + +.toccontent table thead th { font-weight: normal; border-bottom: 3px double rgb(221, 221, 221); } + +.anchorAf { position: relative; } + +.anchorAf a:first-child { display: none; position: absolute; width: 20px; height: 34px; left: -20px; bottom: 0px; top: 0px; background: url("/img/icons/mini_ico_anchor.svg?1528322191") center center / contain no-repeat; } + +.anchorAf:hover a:first-child { display: block; } + +.ui-dialog .anchorAf:hover a:first-child { display: none; } + +.devdoc_translation_warning { background-color: rgb(240, 248, 255); padding: 4px 10px; border: 1px solid rgb(72, 146, 178); } + +.develdocdisclaimer { position: fixed; left: 0px; bottom: 0px; padding: 30px 0px; background: rgb(255, 249, 243); width: 100%; z-index: 1000; text-align: center; } + +.develdocdisclaimer div { position: relative; max-width: 990px; margin: 0px auto; padding-right: 90px; font-size: 112.5%; box-sizing: border-box; } + +.develdocdisclaimer b { color: rgb(247, 147, 26); } + +.develdocdisclaimerclose, .develdocdisclaimerclose:visited, .develdocdisclaimerclose:link, .develdocdisclaimerclose:active { position: absolute; top: 0px; right: 0px; width: 10px; height: 10px; cursor: pointer; background: url("../img/icons/close-btn.svg?1528322191") center center / contain no-repeat; } + +.glossary_term { position: relative; display: block; max-width: 570px; width: 100%; height: 55px; margin-bottom: 43px; padding: 17px 17px 17px 72px; font-size: 112.5%; line-height: 21px; border: 1px solid rgb(218, 218, 218); box-sizing: border-box; background: url("../img/icons/ico_search.svg?1528322191") 30px 17px no-repeat; } + +.help-search { margin: 50px auto; } + +.glossary_term::-webkit-input-placeholder { color: rgb(188, 183, 184); } + +.glossary-subpage { overflow-y: hidden; } + +.glossary-subpage-left { float: left; max-width: 57%; } + +.glossary-subpage-right { float: right; width: 340px; padding-left: 27px; border-left: 1px solid rgb(223, 223, 223); } + +.glossary-subpage h2 { margin: 0px 0px 15px; font-size: 162.5%; color: rgb(255, 126, 0); font-weight: 400; } + +.glossary-subpage h3 { margin: 0px 0px 15px; font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; font-weight: 400; } + +.glossary-subpage-left > p { margin: 0px 0px 40px; } + +.glossary-subpage p { font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; } + +.glossary-subpage ul { margin: 0px 0px 40px; padding-left: 25px; } + +.glossary-subpage li { font-size: 18px; } + +.glossary-subpage-links { height: 100%; } + +.glossary-subpage li p { font-size: 18px; color: rgb(66, 69, 76); } + +.ui-autocomplete-category { font-weight: bold; padding: 0.2em 0.4em; margin: 0.8em 0px 0.2em; line-height: 1.5; } + +ul.wrapped_list li { list-style: none; float: left; width: 15em; margin: 1em; } + +br.clear { clear: left; } + +.notice { text-align: left; margin: 0px 0px 15px; } + +.notice span { font-size: 100%; color: rgb(77, 80, 96); line-height: 34px; } + +.content > .subhead-links { font-size: 85%; background: rgb(19, 22, 31); } + +.content > .subhead-links a { color: rgb(157, 157, 157); } + +div.one-column { max-width: 600px; margin-right: auto; margin-left: auto; } + +.one-column h2 { margin-top: 60px; } + +.one-column h2.no_gap { margin-top: 75px; } + +.one-column img { max-width: 100%; } + +.one-column th { text-align: center; } + +.article img { max-width: 100%; } + +.post-content { padding: 0px 0px 40px 30px; } + +.post-meta { padding-left: 30px; margin-top: 20px; } + +.post-title { padding-top: 20px; } + +.privacy { padding: 70px 0px; } + +table.privacy-comparison { margin-bottom: 70px; } + +table.privacy-comparison td, table.privacy-comparison th { padding: 3px; } + +table.privacy-comparison tr.empty { height: 1em; } + +table.privacy-comparison td:nth-child(n+2) { width: 120px; } + +table.validation { width: 100%; margin-bottom: 30px; } + +table.validation tr.details td { background-color: rgb(245, 245, 245); padding: 40px 10px; } + +table.validation .ui-icon { display: inline-block; } + +table.validation tr:nth-child(2n) > td { cursor: pointer; } + +table.validation tr:nth-child(2n) > td:hover { color: rgb(0, 0, 0); } + +.received_transactions, .center_header { margin-bottom: 30px; } + +.received_transactions td { width: 50%; } + +.service-choose a { display: block; margin: 20px 0px; } + +.service-choose { margin-bottom: 45px; border-bottom: 1px solid rgb(225, 225, 225); } + +.service-choose-title { margin-bottom: 30px; } + +button.js { background: none; border: none; padding: 0px; color: rgb(52, 144, 230); } + +button.js.showcolumn { padding: 22px 30px; margin: 0px 100px 0px 0px; font-size: 112.5%; color: rgb(157, 157, 157); text-align: center; border: 0px; } + +button.js.showcolumn:last-child { margin: 0px; } + +button.js.showcolumn:hover { padding: 22px 30px 19px; border-bottom: 3px solid rgb(255, 126, 0); color: rgb(255, 126, 0); } + +button.js.showcolumn.active { padding: 22px 30px 19px; border-bottom: 3px solid rgb(255, 126, 0); color: rgb(255, 126, 0); } + +.not-displayed { display: none; } + +br.big { margin-bottom: 50px; } + +.font2x { font-size: 200%; } + +.system-requirements-list { margin: 0px; padding: 0px 0px 0px 50px; } + +.system-requirements-list strong { font-weight: 400; font-size: 22px; line-height: 36px; } + +.system-requirements-list p { font-family: "Titillium Web", Arial, sans-serif; font-size: 20px; color: rgb(77, 80, 96); line-height: 34px; } + +.system-requirements-list li { margin-bottom: 70px; padding-left: 20px; } + +.accordion-icon { position: relative; } + +.accordion-icon::before { content: ""; position: absolute; top: 0px; left: -60px; width: 40px; height: 35px; } + +.disk-icon::before { background: url("../img/icons/ico_disk.svg?1528322191") center center / contain no-repeat; } + +.download-icon::before { background: url("../img/icons/download-icon.svg?1528322191") center center / contain no-repeat; } + +.upload-icon::before { background: url("../img/icons/ico_upload.svg?1528322191") center center / contain no-repeat; } + +.memory-icon::before { background: url("../img/icons/ico_memory.svg?1528322191") center center / contain no-repeat; } + +.system-icon::before { background: url("../img/icons/ico_system.svg?1528322191") center center / contain no-repeat; } + +.os-icon::before { background: url("../img/icons/ico_os.svg?1528322191") center center / contain no-repeat; } + +.sliderbox { max-width: 940px; margin: 0px auto 30px; } + +.slide-viewer { position: relative; overflow: hidden; height: 200px; padding-bottom: 12px; } + +.slide-group { width: 100%; height: 100%; position: relative; } + +.slide { width: 100%; height: 100%; display: none; position: absolute; text-align: center; } + +.slide:first-child { display: block; } + +.slide-buttons { text-align: center; } + +.slide-btn { width: 11px; height: 11px; margin-right: 15px; border-radius: 50%; background: rgb(255, 234, 204); border: none; } + +.slide-btn.active { background: rgb(255, 149, 0); } + +.two-column-list li { list-style: none; float: left; width: 14em; text-align: left; } + +.two-column-list .fa-li { top: 0.75em; } + +.two-column-list li:nth-child(2n+1) { margin-right: 50px; clear: both; } + +.prevnext a { position: relative; padding-top: 13px; padding-bottom: 15px; border: 1px solid rgb(218, 218, 218); border-radius: 2px; color: rgb(157, 157, 157); } + +.prevnext a::before { content: ""; position: absolute; top: 50%; transform: translateY(-50%); width: 14px; height: 14px; background: url("../img/icons/ico_angle_grey.svg?1528322191") center center / contain no-repeat; } + +.prevnext a:first-child { float: left; padding-left: 50px; padding-right: 15px; } + +.prevnext a:first-child::before { left: 21px; transform: translateY(-50%) rotate(90deg); } + +.prevnext a:last-child::before { right: 21px; transform: translateY(-50%) rotate(-90deg); } + +.prevnext a:last-child { float: right; padding-right: 50px; padding-left: 15px; } + +.callout { max-width: 272px; } + +.callout-btn { display: block; width: 270px; height: 55px; border-radius: 1px; font-size: 100%; color: rgb(255, 255, 255); text-align: center; line-height: 52px; } + +.callout-img { width: 15px; } + +.callout-img:not(:first-child) { margin-left: 12px; } + +.callout-row { -webkit-box-pack: justify; justify-content: space-between; margin-top: 10px; } + +.btn-subtext { color: rgb(157, 157, 157); } + +.btn-separator { margin: 44px 0px 20px; } + +.show_less { margin-bottom: 50px; } + +.show_less_more { padding-bottom: 70px; } + +.show_less_more p { font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; text-align: left; } + +.show_more-row { -webkit-box-pack: justify; justify-content: space-between; margin-bottom: 50px; } + +.show_more-block { width: 48%; } + +.show_more-icon { width: 30px; height: 30px; margin-bottom: 20px; } + +.show_more-title { margin-bottom: 20px; font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; } + +.show_more-list ul { margin: 23px 0px 0px; } + +.show_more-list li { margin: 0px 0px 10px; color: rgb(255, 149, 0); } + +.show_more-list span { font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; } + +.core-content { margin: 70px auto; } + +.core-column-left { float: left; max-width: 272px; } + +.core-column-right { float: right; width: 66%; padding-left: 90px; border-left: 1px solid rgb(223, 223, 223); } + +.corecard { position: relative; padding: 15px 10px 15px 70px; margin-bottom: 5px; width: 270px; min-height: 120px; text-align: left; border: 1px solid rgb(218, 218, 218); box-sizing: border-box; } + +.corecard a { display: block; font-size: 106.25%; color: rgb(19, 22, 31); line-height: 30px; font-weight: 600; } + +.corecard-label { margin-bottom: 10px; font-size: 81.25%; color: rgb(157, 157, 157); letter-spacing: 0.43px; text-align: left; } + +.features-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/bitcoin-core/features.svg?1528322191") 50% 50% no-repeat; } + +.help-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/bitcoin-core/help.svg?1528322191") 50% 50% no-repeat; } + +.contribute-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/bitcoin-core/contribute.svg?1528322191") 50% 50% no-repeat; } + +.releases-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/bitcoin-core/news.svg?1528322191") 50% 50% no-repeat; } + +.rss-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/bitcoin-core/rss.svg?1528322191") 50% 50% no-repeat; } + +.core-separator { margin: 0px 0px 70px; } + +.news-title { margin: 0px 0px 28px; } + +.news-list li { position: relative; padding-left: 50px; list-style: none; } + +.news-list li::before { content: ""; position: absolute; top: 0px; left: 0px; width: 17px; height: 17px; background: url("../img/bitcoin-core/news.svg?1528322191") 50% 50% no-repeat; transform: translateY(50%); } + +.news-list p { color: rgb(255, 149, 0); line-height: 34px; } + +.news-list a { display: block; font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; } + +.wallet_accordion img { float: left; padding-right: 30px; padding-bottom: 10px; } + +.wallet_accordion { text-align: left; } + +.right-hanger { margin-top: 40px; text-align: right; margin-left: auto; } + +.left-float { float: left; } + +.highlight { background: transparent; } + +.highlight .c { color: rgb(153, 153, 136); font-style: italic; } + +.highlight .err { color: rgb(166, 23, 23); background-color: rgb(227, 210, 210); } + +.highlight .k { font-weight: bold; } + +.highlight .o { font-weight: bold; } + +.highlight .cm { color: rgb(153, 153, 136); font-style: italic; } + +.highlight .cp { color: rgb(153, 153, 153); font-weight: bold; } + +.highlight .c1 { color: rgb(153, 153, 136); font-style: italic; } + +.highlight .cs { color: rgb(153, 153, 153); font-weight: bold; font-style: italic; } + +.highlight .gd { color: rgb(0, 0, 0); background-color: rgb(255, 221, 221); } + +.highlight .gd .x { color: rgb(0, 0, 0); background-color: rgb(255, 170, 170); } + +.highlight .ge { font-style: italic; } + +.highlight .gr { color: rgb(170, 0, 0); } + +.highlight .gh { color: rgb(153, 153, 153); } + +.highlight .gi { color: rgb(0, 0, 0); background-color: rgb(221, 255, 221); } + +.highlight .gi .x { color: rgb(0, 0, 0); background-color: rgb(170, 255, 170); } + +.highlight .go { color: rgb(136, 136, 136); } + +.highlight .gp { color: rgb(85, 85, 85); } + +.highlight .gs { font-weight: bold; } + +.highlight .gu { color: rgb(170, 170, 170); } + +.highlight .gt { color: rgb(170, 0, 0); } + +.highlight .kc { font-weight: bold; } + +.highlight .kd { font-weight: bold; } + +.highlight .kp { font-weight: bold; } + +.highlight .kr { font-weight: bold; } + +.highlight .kt { color: rgb(68, 85, 136); font-weight: bold; } + +.highlight .m { color: rgb(0, 153, 153); } + +.highlight .s { color: rgb(221, 17, 68); } + +.highlight .na { color: rgb(0, 128, 128); } + +.highlight .nb { color: rgb(0, 134, 179); } + +.highlight .nc { color: rgb(68, 85, 136); font-weight: bold; } + +.highlight .no { color: rgb(0, 128, 128); } + +.highlight .ni { color: rgb(128, 0, 128); } + +.highlight .ne { color: rgb(153, 0, 0); font-weight: bold; } + +.highlight .nf { color: rgb(153, 0, 0); font-weight: bold; } + +.highlight .nn { color: rgb(85, 85, 85); } + +.highlight .nt { color: rgb(0, 0, 128); } + +.highlight .nv { color: rgb(0, 128, 128); } + +.highlight .ow { font-weight: bold; } + +.highlight .w { color: rgb(187, 187, 187); } + +.highlight .mf { color: rgb(0, 153, 153); } + +.highlight .mh { color: rgb(0, 153, 153); } + +.highlight .mi { color: rgb(0, 153, 153); } + +.highlight .mo { color: rgb(0, 153, 153); } + +.highlight .sb { color: rgb(221, 17, 68); } + +.highlight .sc { color: rgb(221, 17, 68); } + +.highlight .sd { color: rgb(221, 17, 68); } + +.highlight .s2 { color: rgb(221, 17, 68); } + +.highlight .se { color: rgb(221, 17, 68); } + +.highlight .sh { color: rgb(221, 17, 68); } + +.highlight .si { color: rgb(221, 17, 68); } + +.highlight .sx { color: rgb(221, 17, 68); } + +.highlight .sr { color: rgb(0, 153, 38); } + +.highlight .s1 { color: rgb(221, 17, 68); } + +.highlight .ss { color: rgb(153, 0, 115); } + +.highlight .bp { color: rgb(153, 153, 153); } + +.highlight .vc { color: rgb(0, 128, 128); } + +.highlight .vg { color: rgb(0, 128, 128); } + +.highlight .vi { color: rgb(0, 128, 128); } + +.highlight .il { color: rgb(0, 153, 153); } + +.bggreen { background-color: rgb(0, 100, 0); } + +.bgred { background-color: rgb(139, 0, 0); } + +.bgyellow { background-color: rgb(184, 134, 11); } + +.fggreen { color: rgb(0, 100, 0); } + +.fgred { color: rgb(139, 0, 0); } + +.fgyellow { color: rgb(184, 134, 11); } + +.secure-content-block > .box { margin: 0px 0px 40px; padding: 20px 70px 20px 30px; background: rgb(248, 248, 248); } + +.boxexpand { overflow: hidden; transition: height 400ms ease-out 0s; } + +.boxexpand > * { display: none; margin-left: 30px; } + +.boxexpand.expanded { padding-bottom: 40px; } + +.boxexpand.expanded > * { display: block; } + +.boxexpand > h1:first-child, .boxexpand > h2:first-child, .boxexpand > h3:first-child { display: block; position: relative; padding: 40px 35px 40px 30px; margin: 0px; text-align: left; cursor: pointer; } + +.boxexpand.expanded > h1:first-child, .boxexpand.expanded > h2:first-child, .boxexpand.expanded > h3:first-child { padding: 40px 35px 15px 30px; } + +.boxexpand > h1:first-child::after, .boxexpand > h2:first-child::after, .boxexpand > h3:first-child::after { content: ""; position: absolute; top: 50%; right: 30px; width: 10px; height: 6px; background: url("../img/icons/ico_angle.svg?1528322191") no-repeat; transform: translateY(-50%); } + +.boxexpand.expanded > h1:first-child::after, .boxexpand.expanded > h2:first-child::after, .boxexpand.expanded > h3:first-child::after { transform: translateY(-50%) rotate(180deg); } + +.titlelight { color: rgb(140, 140, 140); } + +.help { margin-bottom: 60px; text-align: center; } + +.help p { font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; } + +.individuals-card { min-height: 500px; } + +.individuals-card p { margin: 0px; } + +.developers-link { margin: 0px 0px 20px; text-align: center; font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; } + +.resources-card { min-height: 500px; } + +.resources-card p { margin: 0px 0px 5px; } + +.resources-card p:last-child { margin: 0px; } + +.community { padding: 70px 0px; } + +.community-row { flex-wrap: wrap; -webkit-box-pack: center; justify-content: center; padding-bottom: 70px; margin-bottom: 40px; border-bottom: 1px solid rgb(223, 223, 223); } + +.community-card { min-height: 475px; margin-right: 30px; width: 370px; } + +.community-card:nth-child(3n+3) { margin-right: 30px; } + +.organizations-title { margin: 0px auto 60px; text-align: center; } + +.organizations-row { justify-content: left; flex-wrap: wrap; } + +.organizations-item { width: 31.6%; margin-right: 2.5%; margin-bottom: 50px; text-align: left; } + +.organizations-item:nth-child(3n+3) { margin-right: 0px; } + +.organization-img { width: 40px; height: 33px; margin-right: 28px; border: 1px solid rgb(223, 223, 223); } + +.organization-country { margin: 0px; font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; font-weight: 400; } + +.organization-link { font-size: 112.5%; line-height: 34px; } + +.introlink { text-align: center; font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; } + +.exchanges-title a { color: rgb(255, 126, 0); } + +.alert.exchanges-note { margin-top: 70px; font-weight: 400; } + +.toc-row .toccontent .exchanges-tab-title { position: relative; padding-left: 95px; } + +.toc-row .toccontent .expanded .exchanges-tab-title { padding-left: 95px; } + +.exchanges-tab-title::before { content: ""; position: absolute; top: 40px; left: 25px; width: 40px; height: 40px; } + +.exchanges-international-title::before { background: url("../img/flags/ALL.svg?1528322191") center center / contain no-repeat; } + +.exchanges-europe-title::before { background: url("../img/flags/EU.svg?1528322191") center center / contain no-repeat; } + +.exchanges-asia-title::before { background: url("../img/flags/asia.svg?1528322191") center center / contain no-repeat; } + +.exchanges-south-america-title::before { background: url("../img/flags/south-america.svg?1528322191") center center / contain no-repeat; } + +.exchanges-north-america-title::before { background: url("../img/flags/north-america.svg?1528322191") center center / contain no-repeat; } + +.exchanges-australia-title::before { background: url("../img/flags/australia.svg?1528322191") center center / contain no-repeat; } + +.exchanges-newzealand-title::before { background: url("../img/flags/newzealand.svg?1528322191") center center / contain no-repeat; } + +.exchanges-africa-title::before { background: url("../img/flags/africa.svg?1528322191") center center / contain no-repeat; } + +.exchanges-p2p-title::before { background: url("../img/flags/ALL.svg?1528322191") center center / contain no-repeat; } + +.expanded .exchanges-content-row { display: flex; -webkit-box-pack: justify; justify-content: space-between; } + +.general-marketplace { width: 240px; } + +.expanded .marketplace-row { display: flex; flex-wrap: wrap; } + +.exchanges-europe .marketplace-row { -webkit-box-pack: start; justify-content: flex-start; width: 61%; } + +.marketplace { width: 360px; margin: 0px 0px 45px; } + +.exchanges-europe .marketplace:nth-child(2n) { width: 400px; } + +.exchanges-north-america .marketplace:nth-child(2n) { width: 400px; } + +.marketplace h3 { margin-bottom: 0px; text-align: left; } + +.marketplace img { width: 40px; height: 33px; margin-right: 30px; } + +.marketplace-flag { border: 1px solid rgb(223, 223, 223); } + +.marketplace-link { color: rgb(52, 144, 230); } + +.exchanges-introlink { margin-left: 30px; } + +.exchanges-buy-link { margin-top: 40px; } + +.resourcesmore { text-align: center; margin-top: 40px; } + +.resourcesmore div { display: inline-block; text-align: left; padding: 20px 40px; border-top: 1px solid rgb(224, 224, 224); border-left: 1px solid rgb(224, 224, 224); border-right: 1px solid rgb(224, 224, 224); } + +.resourcesmore div h2 { text-align: center; margin-bottom: 25px; } + +.resourcesmore div p { font-size: 115%; margin: 6px 0px; } + +.coredevtable div div:first-child { width: 200px; } + +.coredevtable div div:first-child + div { width: 220px; } + +.coredevtable div div:first-child + div + div { width: 80px; } + +.chatbox { text-align: center; } + +.devprojectlist { overflow: hidden; transition: height 400ms ease-out 0s; } + +.devprojectlist li:nth-child(n+4) { display: none; } + +.devprojectlist.expanded li:nth-child(n+4) { display: list-item; } + +.devprojectlist li.more { display: block; } + +.devprojectlist.expanded li.more { display: none; } + +.devprojectlist a { display: inline-block; margin-top: 5px; } + +.version { padding: 70px 0px; } + +.back-link { display: block; margin-bottom: 50px; text-align: center; } + +.alert { position: relative; max-width: 970px; margin: 0px auto; padding: 43px 50px 43px 140px; box-sizing: border-box; font-size: 112.5%; color: rgb(119, 118, 126); background: rgb(255, 249, 243); border-radius: 1px; } + +.alert::before { content: ""; position: absolute; top: 50%; left: 40px; width: 60px; height: 60px; transform: translateY(-50%); background: url("../img/icons/badge.svg?1528322191") center center / contain no-repeat; } + +.alerts { padding: 70px 0px; } + +.alertstatusinactive { margin-bottom: 50px; } + +.alertstatusactive { text-align: center; margin-bottom: 40px; } + +.alertsactive { margin-bottom: 20px; } + +.alertsactive a { font-weight: bold; } + +.alerticon { width: 42px; height: 42px; float: left; margin-top: 12px; margin-right: 12px; } + +.alerttext { color: rgb(204, 0, 0); font-weight: 800; } + +.redirectmsg { text-align: center; margin: 20px 0px; } + +.redirectmsg h1 { color: rgb(123, 124, 124); font-weight: 400; font-size: 180%; } + +.redirectmsg p { font-size: 150%; } + +.attribution { font-size: 75%; } + +.download-title { margin: 0px 0px 20px; color: rgb(19, 22, 31); font-size: 137.5%; font-weight: 400; line-height: 36px; } + +.download-text { margin-bottom: 30px; font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; text-align: left; } + +.downloadmore, .downloadkeys { margin-bottom: 30px; } + +.core-link { display: block; font-size: 125%; line-height: 34px; } + +.corecard .download-link { display: inline-block; color: rgb(77, 80, 96); line-height: 22px; font-weight: 400; } + +.windows-card, .mac-card, .linux-card, .arm-card, .snap-card { min-height: 60px; } + +.windows-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/os/med_win.svg?1528322191") 50% 50% no-repeat; } + +.mac-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/os/med_osx.svg?1528322191") 50% 50% no-repeat; } + +.linux-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/os/med_linux.svg?1528322191") 50% 50% no-repeat; } + +.arm-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/os/arm.png?1528322191") 50% 50% / contain no-repeat; } + +.snap-card::before { content: ""; position: absolute; top: 15px; left: 20px; width: 30px; height: 30px; background: url("../img/os/med_snap.svg?1528322191") 50% 50% / contain no-repeat; } + +.downloadkeys-title { display: block; margin-bottom: 10px; } + +.blog { padding: 110px 0px 70px; } + +.eventmap { top: -28px; height: 400px; margin: 0px; z-index: 0; } + +.events-title { margin: 0px auto 70px; } + +.events { padding: 35px 0px 70px; } + +.events-links { -webkit-box-pack: justify; justify-content: space-between; } + +.eventdata { display: none; } + +.about { padding: 70px 0px; } + +.about-title { margin: 0px 0px 50px; } + +.about-row { justify-content: space-between; margin-bottom: 70px; padding-bottom: 70px; border-bottom: 1px solid rgb(223, 223, 223); } + +.own { margin-bottom: 100px; } + +.own p { font-size: 112.5%; color: rgb(157, 157, 157); line-height: 28px; text-align: left; } + +.own h3 { margin: 0px 0px 20px; line-height: 30px; text-align: left; font-weight: 600; } + +.own-alert { margin-top: 70px; } + +.own-alert p { font-size: 18px; color: rgb(119, 118, 126); } + +.own-block { display: flex; align-items: stretch; justify-content: space-between; } + +.own-timeline { display: flex; align-items: flex-start; min-width: 340px; margin-right: 30px; } + +.own-timeline-number { position: relative; height: 100%; margin-right: 95px; z-index: 10; } + +.own-timeline-number::before { content: ""; position: absolute; top: 0px; left: 50%; width: 1px; height: 100%; transform: translate(-50%, 0px); background: url("../img/getting-started/start-path.svg?1528322191") no-repeat; z-index: -1; } + +.own-timeline-number::after { content: ""; position: absolute; top: 25px; left: 0px; width: 100px; height: 3px; background: rgb(255, 126, 0); z-index: -1; } + +.own-timeline-number-4::before { display: none; } + +.own .own-timeline-text { min-width: 100px; margin-right: 20px; font-size: 18px; color: rgb(19, 22, 31); line-height: 45px; font-weight: 600; } + +.own-timeline-icon { margin-top: 5px; } + +.own-text { width: 526px; padding-bottom: 30px; } + +.controll, .mission { text-align: left; } + +.controll { width: 48%; } + +.controll p { font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; } + +.mission { width: 47%; } + +.mission li { font-size: 137.5%; color: rgb(255, 149, 0); } + +.mission li span { color: rgb(19, 22, 31); } + +.expanded .contributor-row { display: flex; flex-wrap: wrap; } + +.contributor-title { font-size: 162.5%; color: rgb(255, 126, 0); } + +.contributor { width: 30%; margin-right: 4%; margin-bottom: 20px; } + +.contributor:nth-child(3n+3) { margin-right: 0px; } + +p.contributor-language { width: 30%; margin-right: 4%; margin-bottom: 20px; color: rgb(255, 126, 0); } + +p.contributor-language span { font-size: 18px; color: rgb(148, 150, 160); } + +.contributor-name { display: block; font-size: 20px; color: rgb(77, 80, 96); } + +.contributor span { font-size: 18px; color: rgb(148, 150, 160); } + +.contributions { font-size: 18px; color: rgb(148, 150, 160); } + +.post-list { position: relative; padding: 0px 0px 15px; margin: 0px; } + +.post-list.is-open { padding-bottom: 0px; } + +.post-list::before { content: ""; position: absolute; top: 55px; left: 50%; width: 1px; height: 100%; background: url("../img/icons/path.svg?1528322191") center center repeat-y; } + +.post { display: none; width: 50%; margin: 0px; padding-bottom: 35px; box-sizing: border-box; list-style: none; } + +.post:nth-child(2n+1) { position: relative; float: left; padding-right: 40px; text-align: right; } + +.post:nth-child(2n+1)::after { content: ""; position: absolute; top: 54px; right: -10px; width: 95px; height: 20px; background: url("../img/icons/timeline-point-left.svg?1528322191") center center no-repeat; } + +.post:nth-child(2n) { position: relative; float: right; padding-left: 40px; text-align: left; } + +.post:nth-child(2n)::after { content: ""; position: absolute; top: 54px; left: -10px; width: 95px; height: 20px; background: url("../img/icons/timeline-point-right.svg?1528322191") center center no-repeat; } + +.post:nth-child(2) { margin-top: 100px; } + +.post:last-child { padding-bottom: 0px; } + +.post:nth-child(2n+1) .post-inner { padding: 50px 74px 50px 50px; } + +.post:nth-child(2n) .post-inner { padding: 50px 50px 50px 74px; } + +.post-inner { border: 1px solid rgb(223, 223, 223); } + +.post-date { font-size: 100%; color: rgb(255, 149, 0); } + +.post-name { margin-bottom: 7px; font-size: 137.5%; color: rgb(19, 22, 31); line-height: 36px; } + +.post-location { margin-bottom: 18px; font-size: 81.25%; color: rgb(140, 150, 160); letter-spacing: 0.43px; } + +.post-description { margin-bottom: 20px; font-size: 125%; color: rgb(77, 80, 96); line-height: 34px; } + +.additional-links { margin: 70px 0px 0px; padding-top: 70px; font-size: 125%; border-top: 1px solid rgb(218, 218, 218); } + +.button { position: relative; display: inline-block; padding: 15px 30px; border-radius: 1px; font-size: 100%; font-weight: 600; color: rgb(255, 255, 255); text-align: center; border: none; z-index: 10; } + +.detectmobile { width: 0px; height: 0px; display: none; } + +.summary { margin: 0px; font-size: 137.5%; color: rgb(157, 157, 157); text-align: center; } + +.summarytxt { max-width: 700px; color: rgb(157, 157, 157); text-align: center; margin: 0px auto; font-size: 137.5%; } + +.press h2 { font-size: 150%; } + +.press-faq { text-align: left; } + +.press-faq > div > a { display: inline-block; font-weight: bold; margin-right: 20px; } + +.press-faq > div > div { height: 0px; overflow: hidden; transition: height 400ms ease-out 0s; } + +.press-faq > div > div.expanded { height: auto; padding: 10px 0px 20px; } + +.press-faq ul { padding-left: 25px; font-size: 125%; } + +.press-faq div span p { margin-bottom: 0px; } + +.press-videos > div { display: inline-block; vertical-align: top; font-size: 125%; line-height: 34px; } + +.press-videos > div:not(:last-child) { margin-right: 20px; } + +.press-videos div a { display: inline-block; margin-bottom: 10px; } + +.press-videos img { width: 250px; height: 136px; border-radius: 10px; } + +.press-videos-link { position: relative; padding-left: 40px; } + +.press-videos-link::before { content: ""; position: absolute; top: 50%; left: 0px; width: 20px; height: 20px; transform: translateY(-50%); background: url("../img/icons/ico_play.svg?1528322191") center center / contain no-repeat; } + +.press-videos-more { margin-top: 20px; font-size: 18px; } + +.press-quotes { overflow: hidden; transition: height 400ms ease-out 0s; } + +.press-quotes.expanded { height: auto; } + +.quote:nth-child(n+9) { display: none; } + +.press-quotes.expanded .quote:nth-child(n+9) { display: block; } + +.press-quotes.expanded .show-more-link { display: none; } + +.show-more-link { font-size: 112.5%; } + +.press-quotes .quote { text-align: center; } + +.quote { position: relative; max-width: 400px; padding-top: 45px; margin: 0px auto 50px; } + +.quote::before { content: ""; position: absolute; top: 0px; left: 50%; width: 33px; height: 29px; transform: translateX(-50%); background: url("../img/icons/quote.svg?1528322191") center center / contain no-repeat; } + +.quote-text { margin-bottom: 10px; font-size: 125%; font-weight: 600; line-height: 34px; color: rgb(77, 80, 96); } + +.quote-author { font-size: 18px; } + +.quote-author-position { font-size: 14px; color: rgb(157, 157, 157); } + +.quote span { display: block; } + +.bitcore-content .callout { margin: 0px auto 90px; } + +.bitcore-content > div > h2 { margin: 0px 0px 45px; } + +.bitcore-content > div > p { font-size: 125%; margin: 0px 0px 40px; } + +.bitcore-content p > img { display: block; max-width: 100%; margin: 0px auto 20px; } + +.bitcore-content ol, .bitcore-content ul { font-size: 125%; } + +.bitcore-content .btn-separator { display: none; } + +.bitcore-content .card-row { margin-top: 0px; } + +.core-card { min-height: 290px; } + +.core-card .js { cursor: pointer; } + +.overview-link { margin-top: 30px; } + +.ui-accordion { max-width: 770px; margin: 0px auto 70px; } + +.ui-accordion .ui-accordion-header { margin: 0px; padding: 15px 15px 17px 65px; border-radius: 0px; border: 1px solid rgb(218, 218, 218); font-size: 112.5%; background: rgb(255, 255, 255); color: rgb(157, 157, 157); text-align: left; } + +.ui-accordion .ui-state-active { border: 1px solid rgb(255, 126, 0); color: rgb(255, 126, 0); } + +.ui-state-default .ui-icon { background: url("../img/icons/ico_angle_grey.svg?1528322191") center center / contain no-repeat; } + +.ui-icon-closethick { background: url("../img/icons/close-btn.svg?1528322191") center center no-repeat !important; } + +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { left: 24px; transform: translateY(-50%); margin-top: 0px; } + +.ui-accordion .ui-state-active .ui-accordion-header-icon { width: 17px; background: url("../img/icons/ico_angle_orange.svg?1528322191") center center / contain no-repeat; } + +.ui-accordion .ui-accordion-content { border-radius: 0px; padding: 30px 20px 30px 40px; } + +.ui-alert { margin: 0px auto 100px; } + +.bitcore-content .ui-alert p { margin: 0px; } + +.lightweight-wallets-row { justify-content: space-between; } + +.lightweight-wallets-row div { width: 45%; } + +.right-hanger a { background: rgb(19, 22, 31); } + +.right-hanger a:hover { background: rgb(51, 55, 67); } + +.right-hanger a:active { background: rgb(0, 0, 0); } + +.bitcore-content .center-hanger.center { margin: 70px 0px; } + +.center-hanger a { background: rgb(247, 147, 26); } + +.center-hanger a:hover { background: rgb(249, 161, 54); } + +.center-hanger a:active { background: rgb(245, 138, 8); } + +.right-hanger a, .center-hanger a { display: inline-block; padding: 16px 60px; box-sizing: border-box; font-weight: 600; font-size: 100%; color: rgb(255, 255, 255); border-radius: 1px; } + +.release-content h1 { color: rgb(255, 126, 0); text-align: left; } + +.dark-theme-toggle input { appearance: none; width: 30px; height: 30px; position: absolute; top: 4px; left: 4px; cursor: pointer; } + +.dark-theme-toggle { position: relative; } + +.dark-theme-toggle::before { background-image: url("../img/icons/moon-regular.svg"); height: 30px; width: 30px; content: ""; background-repeat: no-repeat; cursor: pointer; display: block; } + +html[data-theme="dark"] .dark-theme-toggle::before { background-image: url("../img/icons/moon-solid.svg"); transform: scaleX(-1); } + +@media print { + .head { display: none; } + .footer { display: none; } + .content { padding: 0px; border: 0px; } + .toc { display: none; } + .toccontent { width: auto; } + .develdocdisclaimer { display: none; } +} + +@media handheld, only screen and (max-width: 72.5em), only screen and (max-device-width: 72.5em) { + .core-column-right { padding-left: 60px; } + .develdocdisclaimer div { padding: 0px 60px 0px 90px; } + .develdocdisclaimerclose, .develdocdisclaimerclose:visited, .develdocdisclaimerclose:link, .develdocdisclaimerclose:active { right: 30px; } +} + +@media handheld, only screen and (max-width: 67.5em), only screen and (max-device-width: 67.5em) { + .head > div { flex-wrap: wrap; padding: 15px 0px 0px; } + .logo { margin-left: 30px; } + .lang { margin-right: 27px; } + .menusimple { display: flex; -webkit-box-pack: center; justify-content: center; -webkit-box-ordinal-group: 2; order: 1; width: 100%; padding: 15px 0px; margin: 15px 0px 0px; border-top: 1px solid rgb(218, 218, 218); border-bottom: 1px solid rgb(218, 218, 218); } + .core-column-right { padding-left: 24px; } + .footermenu-item { margin-right: 35px; } +} + +@media handheld, only screen and (max-width: 60em), only screen and (max-device-width: 60em) { + img { max-width: 100%; } + table { display: block; overflow: scroll; } + blockquote { margin: 0px 0px 80px; padding: 16px 50px 45px; } + .section-title { margin: 0px 0px 40px; } + .maindesc-text { max-width: 80%; } + .two-column-row:not(:last-child) { margin: 0px 0px 50px; } + .column-text h2 { margin: 0px 0px 20px; } + .card-row { -webkit-box-pack: justify; justify-content: space-between; } + .card { width: 48.3%; margin-right: 0px; } + .titleicon, .warningicon { display: block; position: static; margin: auto auto 5px; } + .banner-message a span { width: auto; } + .hero { padding: 64px 30px 100px; } + .hero h1 { font-size: 30px; margin-bottom: 10px; } + .content { position: static; } + .footer { line-height: 1.5em; width: auto; padding-top: 100px; } + .logo-footer { margin-bottom: 65px; } + .footer-row { -webkit-box-orient: vertical; -webkit-box-direction: normal; flex-direction: column; } + .footer-bottom-row { flex-wrap: wrap; } + .footerlicense { max-width: 410px; } + .home-title { margin: 0px 0px 43px; } + .donate { max-width: 100%; margin-bottom: 65px; } + .donate-row { flex-direction: row; justify-content: space-between; align-items: center; } + .donate-qrcode { margin-top: 0px; } + .footermenu { justify-content: space-between; max-width: 100%; } + .footer-bottom { margin-top: 75px; } + .toc-row { padding: 50px 0px 70px; } + .toc { min-width: 245px; width: 245px; } + .toc div > ul > li { margin-bottom: 10px; } + .toc div > ul > li > ul > li:first-child { margin-top: 10px; } + #markdown-toc > li > a::after { right: -15px; } + .toccontent .multicode, .toccontent pre { padding: 10px; } + .toccontent .multicode pre { padding: 0px; } + .toc .scroll { min-width: auto; width: 245px; } + .boxexpand > h1:first-child, .boxexpand > h2:first-child, .boxexpand > h3:first-child { padding: 30px 35px 30px 30px; } + .boxexpand.expanded > h1:first-child, .boxexpand.expanded > h2:first-child, .boxexpand.expanded > h3:first-child { padding: 30px 35px 20px 30px; } + .boxexpand > h1 .boxexpand > h2 { font-size: 150%; } + .boxexpand > h1:first-child::after, .boxexpand > h2:first-child::after, .boxexpand > h3:first-child::after { right: 15px; } + .coredevtable div div:first-child, .coredevtable div div:first-child + div, .coredevtable div div:first-child + div + div { width: auto; } + .press-faq > div { width: auto; display: block; margin-right: 0px; } + .press-quotes p { width: auto; } + .mainhero { padding: 110px 0px 100px; } + .mainhero { top: auto; right: 30px; bottom: 0px; transform: translateY(0px); } + .mainsummary { margin: 0px auto 60px; } + .maincard { width: 216px; } + .mainoverview { padding: 225px 0px 115px; background: url("../img/hero/overview-tablet.svg?1528322191") center top / cover no-repeat; } + .maindesc { padding: 85px 0px 60px; } + .maindesc-img { width: 311px; height: 312px; } + .maindesc-text { margin: 0px 0px 25px; } + .recommendation { padding: 50px 0px; } + .recommendation-row { margin: 0px auto 30px; } + .recommendation-text { margin: 0px auto 40px; } + .start { padding-bottom: 145px; } + .starttitle { margin: 60px 0px 30px; } + .start-content::after { width: 45px; } + .left-column, .right-column { max-width: 41%; } + .right-column div, .left-column div { bottom: -87px; } + .start-content div div a, .start-content div div a:link { padding: 15px 20px; } + .resources > div { border-top: 0px; } + .resources div div { display: block; width: auto; padding: 0px 0px 10px; min-height: 0px; } + .resources > div > div:first-child { padding-right: 0px; border-right: 0px; } + .resources > div > div:first-child + div { border-left: 0px; padding-left: 0px; margin-left: 0px; } + .resources, .resources p { text-align: center; } + .resourcesorg div div { width: auto; display: block; } + .resourcesorg div { border-top: 0px; } + .resourcesmore { margin-top: 0px; } + .resourcesmore div { padding: 0px; border: 0px; } + .core-content { margin: 65px auto 18px; } + .core-column-right { width: 65%; } + .callout-btn { width: 216px; height: 53px; } + .corecard { width: 217px; } + .show_more-row { -webkit-box-orient: vertical; -webkit-box-direction: normal; flex-direction: column; margin-bottom: 0px; } + .show_more-block { width: 100%; } + .show_more-block { margin-bottom: 50px; } + .show_more-block .show_more-title { font-size: 112.5%; } + .show_less_more { padding-bottom: 30px; } + .show_less_more p { font-size: 100%; } + .show_more-list span { font-size: 100%; } + .core-separator { margin: 0px 0px 20px; } + .news-block { padding-bottom: 200px; } + .news-title { margin: 0px 0px 11px; text-align: left; font-size: 125%; } + .news-list a { font-size: 112.5%; line-height: 30px; } + .mainbutton { max-width: 217px; } + .mainbutton a, .mainbutton a:link, .mainbutton a:visited, .mainbutton a:active { width: 100%; padding: 16px 15px; } + .corecard-label { max-width: 217px; } + .downloadkeys { margin-bottom: 70px; } + .eventmap { height: 200px; } + .detectmobile { display: block; } + .dev-documentation { padding: 50px 0px 70px; } + .docreference { padding: 30px 0px 0px; } + .docreference-card { min-height: 100px; padding: 15px 0px; } + .docreference-img-block { min-height: 45px; } + .docreference-title { margin: 0px 0px 15px; } + .blog { padding: 70px 0px; } + .post-list::before { top: 40px; } + .post:nth-child(2n+1) { padding-right: 35px; } + .post:nth-child(2n) { padding-left: 35px; } + .post:nth-child(2n+1)::after { top: 40px; width: 54px; background: url("../img/icons/timeline-point-left-tablet.svg?1528322191") center center no-repeat; } + .post:nth-child(2n)::after { top: 40px; width: 54px; background: url("../img/icons/timeline-point-right-tablet.svg?1528322191") center center no-repeat; } + .post:nth-child(2n+1) .post-inner { padding: 35px 40px 35px 30px; } + .post:nth-child(2n) .post-inner { padding: 35px 30px 35px 40px; } + .additional-links { margin: 50px 0px 0px; padding-top: 50px; } + .glossary-subpage-search { float: none; padding: 0px; border: none; width: auto; } + .glossary-subpage-search .glossary_term { max-width: 710px; margin: 0px auto 50px; } + .glossary-subpage-links { min-width: auto; max-width: 220px; } + .glossary-subpage h2 { margin: 0px; font-size: 137.5%; line-height: 36px; } + .glossary-subpage h2 { margin: 0px; font-size: 137.5%; line-height: 36px; } + .glossary-subpage h3 { margin: 0px; font-size: 125%; line-height: 36px; } + .glossary-subpage ul { margin: 0px 0px 20px; } + .glossary-subpage li { margin: 0px 0px 5px; } + .notice { margin: 0px 0px 10px; } + .community-row { -webkit-box-pack: justify; justify-content: space-between; } + .community-card:nth-child(3n+3) { margin-right: 0px; } + .organizations-item { width: 47.5%; } + .organizations-item:nth-child(3n+3) { margin-right: 2.5%; } + .press-videos { text-align: center; } + .exchanges-tab-title::before { top: 30px; } + .about-title { margin: 0px 0px 30px; } + .contributor { width: 48%; } + .contributor:nth-child(3n+3) { margin-right: 4%; } + .contributor:nth-child(2n) { margin-right: 0px; } + .ui-accordion .ui-accordion-content { padding: 30px 20px; } + .two-column-list li:nth-child(2n+1) { margin-right: 20px; } +} + +@media handheld, only screen and (max-width: 48em), only screen and (max-device-width: 48em) { + code { white-space: pre-wrap; } + .container { padding: 0px 15px; } + .hero-container { padding: 0px 40px; } + .footer-bottom-row { flex-direction: column; } + .footer-status-block { order: -1; margin-bottom: 15px; } + .footerlicense { max-width: 100%; text-align: center; } + .maindesc-text { max-width: 90%; } + .bitcore-content { padding: 50px 0px; } + .section-title { font-size: 137.5%; margin: 0px 0px 25px; } + .two-column-layout { padding: 50px 0px; } + .two-column-row { -webkit-box-orient: vertical; -webkit-box-direction: normal; flex-direction: column; -webkit-box-align: center; align-items: center; } + .two-column-row:nth-child(2n) { -webkit-box-orient: vertical; -webkit-box-direction: normal; flex-direction: column; } + .column-img { margin-bottom: 20px; } + .column-text { max-width: 100%; text-align: center; } + .two-column-row:nth-child(2n+1) .column-text { margin-left: 0px; } + .two-column-row:nth-child(2n) .column-text { margin-right: 0px; } + .column-text p { font-size: 125%; } + .column-table { margin-bottom: 20px; } + .maincard:not(:last-child) { margin: 0px 16px 16px 0px; } + .recommendation-text { font-size: 125%; margin: 0px auto 40px; } + .start { padding: 0px 0px 50px 15px; } + .start h2 { margin-bottom: 10px; font-size: 125%; } + .start p { margin-bottom: 25px; font-size: 112.5%; } + .start-content::after { display: none; } + .start-block { padding-left: 30px; } + .start-block:not(:last-child) { padding-bottom: 50px; } + .start-block:not(:last-child)::before { left: 0px; } + .start .start-block::after { left: 0px; width: 40px; height: 40px; background-size: 40px; transform: translate(-50%, -4px); } + .left-column, .right-column { max-width: 100%; } + .left-column div, .right-column div { position: static; } + .left-column, .left-column h2 { text-align: left; } + .mainbutton { max-width: 290px; } + .corecard-label { max-width: 100%; } + .download-title { margin: 0px 0px 30px; font-size: 125%; } + .download-text { margin-bottom: 20px; font-size: 112.5%; } + .downloadkeys { margin-bottom: 40px; } + .corecard-label { padding-bottom: 30px; margin-bottom: 30px; border-bottom: 1px solid rgb(223, 223, 223); } + .toc-container { padding: 0px; } + .toc-row { padding: 40px 0px 50px; } + .toc > div { padding-right: 20px; padding-left: 15px; } + .toccontent-intro { padding: 0px 15px 40px; } + .toccontent .subhead-links a { font-size: 17px; } + .toccontent .subhead-links a:not(:last-child) { margin-right: 10px; } + .toccontent .subhead-links a:not(:first-child) { margin-left: 10px; } + .toc ul li ul li a:hover::before, .toc ul li ul li a.active::before { right: -20px; } + .boxexpand > h2 { padding: 30px 15px; } + .expanded.boxexpand > h2 { padding: 30px 15px 20px; } + .btn:not(:first-child) { margin: 10px auto 0px; } + .core-content { margin: 20px auto 40px; } + .core-column-right, .core-column-left { float: none; width: 100%; } + .core-column-right { padding-left: 0px; border-left: none; } + .core-column-left { margin: 0px auto; max-width: 290px; } + .callout { width: 100%; } + .callout-btn { width: 100%; } + .btn-separator { margin: 30px 0px; } + .corecard { width: 100%; } + .show_less_more { padding-bottom: 30px; } + .show_less_more p { font-size: 112.5%; text-align: center; } + .show_less { margin-bottom: 30px; } + .show_more-block { margin-bottom: 30px; text-align: center; } + .show_more-list { display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; flex-direction: column; -webkit-box-align: center; align-items: center; } + .show_more-list ul { margin: 30px 0px 0px; } + .show_more-list span { font-size: 112.5%; } + .show_more-list p { text-align: left; } + .core-separator { margin: 25px 0px; } + .news-block { padding-bottom: 35px; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; flex-direction: column; -webkit-box-align: center; align-items: center; } + .version { padding: 50px 0px; } + .alerts { padding: 50px 0px; } + .alertstatusinactive { margin-bottom: 30px; } + .alertstatusactive { font-size: 137.5%; margin: 0px 0px 25px; } + .alert::before { left: 20px; width: 50px; height: 50px; } + .alert, .warning { padding: 30px 20px 30px 90px; font-size: 100%; text-align: left; } + .warning::before { left: 23px; top: 30px; transform: translateY(0%); } + .blog { padding: 50px 0px; } + .events { padding: 5px 0px 50px; } + .post-list { margin: 0px 0px 10px; } + .post-list::before { left: 0px; } + .post:nth-child(2n+1), .post:nth-child(2n) { float: none; padding: 0px 0px 15px 25px; width: 100%; text-align: right; } + .post:nth-child(2) { margin-top: 0px; } + .post:nth-child(2n)::after, .post:nth-child(2n+1)::after { right: auto; left: -10px; width: 46px; height: 20px; background: url("../img/icons/timeline-point-right-mob.svg?1528322191") center center no-repeat; } + .post:nth-child(2n+1) .post-inner, .post:nth-child(2n) .post-inner { padding: 35px 15px; } + .additional-links { padding-top: 40px; } + .develdocdisclaimer { padding: 40px 0px 20px; } + .develdocdisclaimer div { padding: 0px 16px; } + .develdocdisclaimerclose, .develdocdisclaimerclose:visited, .develdocdisclaimerclose:link, .develdocdisclaimerclose:active { top: -15px; right: 0px; transform: translateX(-50%); } + .glossary-subpage { padding: 0px 15px; } + .glossary-subpage-left { float: none; max-width: 100%; } + .glossary-subpage-links { float: none; height: auto; max-width: 100%; width: 100%; padding: 20px 0px 0px; margin-top: 25px; border-left: none; border-top: 1px solid rgb(223, 223, 223); } + .community { padding: 50px 0px; } + .boxexpand > * { margin-left: 15px; margin-right: 15px; } + .boxexpand > h1:first-child, .boxexpand > h2:first-child, .boxexpand > h3:first-child { padding: 30px 30px 30px 15px; } + .boxexpand.expanded > h1:first-child, .boxexpand.expanded > h2:first-child, .boxexpand.expanded > h3:first-child { padding: 30px 30px 15px 15px; } + .about { padding: 70px 0px; } + .about-row { flex-direction: column; margin-bottom: 60px; padding-bottom: 60px; } + .own { margin-bottom: 60px; } + .own-alert { margin-top: 60px; } + .controll, .mission { width: 100%; } + .controll { margin-bottom: 60px; } + .mainvideo, .modal, .modal-overlay { display: none; } + .privacy { padding: 50px 0px; } + .own-timeline { min-width: 310px; } + .own-timeline-number { margin-right: 60px; } + .own-timeline-number::after { width: 80px; } +} + +@media handheld, only screen and (max-width: 40em), only screen and (max-device-width: 40em) { + p { line-height: 1.7em; } + blockquote { margin: 0px 0px 50px; padding: 15px 20px 16px; text-align: center; font-size: 112.5%; } + .head { padding: 15px 0px 0px; border: none; } + .head div { padding: 0px; } + .logo { margin: 0px auto 15px 15px; } + .logo img { width: 92px; height: 20px; } + .menumobile { display: block; position: absolute; top: 0px; right: 0px; height: 12px; width: 18px; padding: 4px 15px 10px; background: url("/img/icons/menumobile.svg?1528322191") center center no-repeat; cursor: pointer; } + .menusimple { padding: 0px; margin: 0px; transform: none; border: 0px; } + .menusimple > li a { text-align: center; text-transform: none; } + .menusimple > li > a { font-size: 112.5%; } + .menusimple li:not(:first-child) { margin-left: 0px; } + .langselect { -webkit-box-ordinal-group: 3; order: 2; width: 100%; background-color: rgb(19, 22, 31); border: none; } + .langselect select { font-size: 115%; padding: 32px 0px; color: rgb(255, 255, 255); margin: 0px; width: 100%; appearance: none; cursor: pointer; } + .footer-langselect { display: block; } + .center-select { display: block; position: relative; } + .center-select__input { appearance: none; border: 0px; background: none; width: 100%; height: 30px; } + .center-select__text { position: absolute; inset: 0px; background: rgb(19, 22, 31); color: rgb(255, 255, 255); font-size: 112.5%; line-height: 55px; pointer-events: none; text-align: center; } + .langselect select:hover + .center-select__text, .langselect select:active + .center-select__text { color: rgb(247, 147, 26); } + .lang, .menusimple { display: none; width: 100%; background-color: rgb(19, 22, 31); height: auto; overflow: auto; -webkit-tap-highlight-color: transparent; } + .menusimple > li a, .menusimple > li a:active, .menusimple > li a:visited, .menusimple > li a:link { color: rgb(255, 255, 255); } + .menusimple > li a { padding: 18px 0px; } + .menusimple > li > ul li { width: 100%; } + .menusimple > li > ul > li a { padding: 6px 0px; font-size: 18px; } + .menusimple li { display: block; } + .menusimple > li ul { min-width: 0px; position: relative; } + .menusimple.menutap li:hover > ul { display: none; } + .menusimple.menutap li.hover > ul, .menusimple.menutap li.active > ul { display: block; padding: 20px 0px; background-color: rgb(9, 12, 20); border: none; } + .menusimple.menutap li.hover > ul a, .menusimple.menutap li.active > ul a { color: rgb(157, 157, 157); background: rgb(9, 12, 20); } + .menusimple li:hover > a, .menusimple li.active > a { color: rgb(247, 147, 26); } + .currency { margin-right: 75px; margin-bottom: 10px; } + .is-expand { padding: 0px; } + .is-expand::after { right: 17px; } + .is-expand:hover::after { transform: translateY(-50%); } + .hover .is-expand:hover::after { transform: translateY(-50%) rotate(180deg); } + .summarytxt { font-size: 112.5%; } + .hero { padding: 80px 0px 90px; } + .hero-container { padding: 0px 15px; } + .hero h1 { margin-bottom: 0px; font-size: 137.5%; line-height: 1.7; } + .mainhero { padding: 55px 0px 50px; } + .mainsummary { margin: 0px auto 30px; font-size: 187.5%; } + .mainoverview { padding: 110px 0px 50px; background: url("../img/hero/overview-mob.svg?1528322191") center top / cover no-repeat; } + .mainoverview-title { font-size: 137.5%; } + .maincard { display: flex; width: 290px; height: auto; margin: 0px auto; padding: 18px 33px 20px; text-align: left; } + .maincard:not(:last-child) { margin: 0px auto 10px; } + .maincard img { width: 56px; display: inline-block; margin: 0px 28px 0px 0px; vertical-align: top; } + .maindesc-row { -webkit-box-align: center; align-items: center; -webkit-box-orient: vertical; -webkit-box-direction: reverse; flex-direction: column-reverse; margin: 0px 0px 35px; } + .maindesc-img { margin-bottom: 35px; } + .maindesc-text { max-width: 100%; font-size: 112.5%; } + .home-title { margin: 0px 0px 30px; } + .card-row { margin: 50px 0px; } + .card { width: 100%; } + .card:first-child { margin-top: 0px; } + .card h2 { min-height: auto; } + .startbar { display: none; } + .glossary_term { margin: 0px auto 30px; } + .mob-sidebar-open { display: block; width: 100%; height: 55px; padding: 0px 0px 0px 60px; box-sizing: border-box; margin-bottom: 25px; text-align: left; background: url("../img/icons/ico_burger_light.svg?1528322191") 26px 22px no-repeat rgb(247, 147, 26); font-size: 100%; font-weight: 600; color: rgb(255, 255, 255); border-radius: 1px; border: none; } + .mob-sidebar-open.hide { display: none; } + .mob-sidebar-open.is-fixed { position: fixed; top: 0px; left: 50%; transform: translateX(-50%); z-index: 100; outline: none; } + .sidebar { display: none; } + .sidebar-inner { max-height: 100vh; overflow-y: auto; } + .sidebar.is-open { display: block; position: fixed; top: 0px; left: 0px; width: 265px; height: 100%; background: rgb(29, 32, 40); box-sizing: border-box; z-index: 100; } + .mob-sidebar-close { display: block; position: absolute; right: -55px; width: 55px; height: 55px; background: url("../img/icons/ico_angle_light.svg?1528322191") center center / 18px no-repeat rgb(247, 147, 26); transform: rotate(90deg); border-radius: 1px; border: none; } + .footer { padding-top: 70px; } + .logo-footer { margin-bottom: 30px; } + .donate { margin-bottom: 30px; } + .donate-row { flex-direction: column; } + .donate-btn { margin-left: 60px; } + .donate-qrcode { margin-top: 20px; } + .footermenu { flex-wrap: wrap; } + .footermenu-item { margin-right: 0px; width: 50%; margin-bottom: 30px; } + .footermenu-item:nth-child(2n) { text-align: right; } + .footermenu-item:nth-child(2n) .footer-title { text-align: right; } + .footer-bottom { margin-top: 0px; } + .footer-status-block { align-items: center; } + .footer-bottom-row .center-select__text { background: rgb(9, 12, 20); line-height: 60px; } + .footer-langselect { width: 70px; } + .statusmenu { margin-right: 90px; } + .toc-row { -webkit-box-orient: vertical; -webkit-box-direction: normal; flex-direction: column; } + .toc { padding: 0px 15px; width: 100%; margin: 0px auto; box-sizing: border-box; } + .toc > div { width: 100%; padding: 0px; border: 0px; } + .toc .scroll { position: static; width: auto; padding-bottom: 0px; } + .toc div > ul > li { padding: 15px 20px; margin: 0px; border-bottom: 1px solid rgb(55, 57, 61); } + .toc div > ul > li > a { font-size: 112.5%; color: rgb(255, 255, 255); font-weight: 400; line-height: 24px; } + .toc div > ul > li > ul a { margin-bottom: 10px; color: rgb(187, 188, 190); } + .toc div > ul > .active > a { color: rgb(255, 149, 0); } + .toc div > ul > li > a::after { background: url("../img/icons/ico_angle_light.svg?1528322191") no-repeat; } + .toc ul li ul li a:hover::before, .toc ul li ul li a.active::before { right: auto; left: -20px; } + #markdown-toc > li > a::after { right: 0px; } + .boxexpand > h1 .boxexpand > h2 { font-size: 137.5%; } + .boxexpand > h1:first-child, .boxexpand > h2:first-child, .boxexpand > h3:first-child { padding: 15px 35px 15px 15px; background: rgb(248, 248, 248); } + .boxexpand.expanded > h1:first-child, .boxexpand.expanded > h2:first-child, .boxexpand.expanded > h3:first-child { padding: 15px 35px 15px 15px; background: rgb(255, 255, 255); } + .toc + .toccontent { padding: 0px; border: none; } + .toccontent .toccontent-block { padding-left: 0px; padding-right: 0px; } + .toccontent-block { border-top: none; margin-bottom: 2px; } + .toccontent-block:last-of-type { border-bottom: none; } + .toccontent .subhead-links a:not(:last-child) { margin-right: 2px; } + .toccontent .subhead-links a:not(:first-child) { margin-left: 2px; } + .toccontent .toccontent-intro { padding: 0px 15px 40px; } + .toccontent p { font-size: 18px; } + .toccontent li { font-size: 18px; } + .article > * { padding-left: 15px; padding-right: 15px; } + .dev-documentation { padding: 30px 0px 50px; } + .dev-documentation .card-row { margin: 20px 0px 50px; } + .doc-card { min-height: auto; padding: 15px 20px; } + .doc-card:not(:first-child) { margin-top: 15px; } + .doc-card img { margin: 0px 30px 0px 0px; width: 25px; } + .doc-card h2 { min-height: auto; margin: 0px; line-height: 30px; font-size: 112.5%; } + .doc-card p { font-size: 100%; padding-left: 55px; text-align: left; } + .doc-card a { line-height: 24px; } + .doc-acc-toggle { display: flex; -webkit-box-align: center; align-items: center; } + .resp-acc-toggle { position: relative; cursor: pointer; } + .resp-acc-toggle::after { content: ""; position: absolute; top: 50%; right: 0px; width: 10px; height: 6px; transform: translateY(-50%); background: url("../img/icons/ico_angle.svg?1528322191") center center no-repeat; } + .active.resp-acc-toggle::after { transform: translateY(-50%) rotate(180deg); } + .resp-acc-content { display: none; } + .docreference-row { flex-wrap: wrap; } + .docreference-card { width: 47.5%; min-height: 100px; margin-top: 15px; padding: 17px 0px; } + .docreference-card img { margin: 0px; } + .events-links { -webkit-box-orient: vertical; -webkit-box-direction: reverse; flex-direction: column-reverse; -webkit-box-align: center; align-items: center; } + .event-btn { margin-bottom: 30px; } + .glossary-subpage-search .glossary_term { margin: 0px auto 10px; } + .notice { margin: 0px 0px 20px; text-align: center; } + .notice span { font-size: 90%; } + .glossary-subpage h2 { margin: 0px 0px 10px; font-size: 125%; line-height: 30px; } + .glossary-subpage p { font-size: 112.5%; } + .glossary-subpage-left > p { margin: 0px 0px 10px; } + .organizations-item { width: 100%; } + .post-content { padding-bottom: 30px; } + .exchanges-tab-title::before { top: 15px; } + .expanded .exchanges-content-row { flex-wrap: wrap; } + .exchanges-europe .general-marketplace { width: 187px; margin-bottom: 30px; } + .about-title { font-size: 137.5%; } + .about-row { margin-bottom: 50px; padding-bottom: 50px; } + .own, .controll { margin-bottom: 50px; } + .own-alert { margin-top: 50px; } + .own-alert p { font-size: 16px; } + .controll p, .mission li, .help p { font-size: 112.5%; } + .help { margin: 0px; } + .expanded .contributor-row { flex-direction: column; } + .contributor { width: 100%; } + .lightweight-wallets-row { flex-direction: column; } + .lightweight-wallets-row div { width: 100%; } + .lightweight-wallets-row div:first-child { margin: 0px 0px 40px; } + .prevnext span:first-child { padding-right: 10px; padding-left: 10px; } + .prevnext span:last-child { padding-right: 10px; padding-left: 10px; } + .right-hanger { text-align: center; } + .right-hanger a, .center-hanger a { padding: 16px 30px; } + .bitcore-content > div > h2 { margin: 0px 0px 30px; font-size: 125%; text-align: left; } + .bitcore-content > div > p, .bitcore-content > div > ul { font-size: 112.5%; text-align: left; } + button.js.showcolumn { padding: 22px 10px; margin: 0px 20px 0px 0px; } + button.js.showcolumn.active, button.js.showcolumn:active, button.js.showcolumn:hover { padding: 22px 10px 19px; } + .ui-accordion .ui-accordion-content { padding: 20px 10px; } + .system-requirements-list strong { font-size: 20px; } + .system-requirements-list p { font-size: 18px; } + .two-column-list li { float: none; width: auto; } + .system-requirements-list li { margin-bottom: 35px; } + .help-search { margin: 30px 0px; } + .version-content h1 { font-size: 30px; } + .own-timeline { margin-right: 0px; min-width: auto; } + .own .own-timeline-text, .own-timeline-icon { display: none; } + .own-timeline-number { min-width: 50px; margin-right: 20px; } + .own-timeline-number::after { width: 60px; } + .own-text { padding-top: 10px; } + .own-text h3 { font-size: 20px; } + .own-text p { font-size: 16px; } + .glossary_term.help-search::-webkit-input-placeholder { font-size: 16px; } + .recommendation-card { padding: 33px 15px; } + .donate-btn { display: none; } +} + +.walletmenu { position: relative; display: flex; justify-content: center; text-align: center; z-index: 90; border-bottom: 1px solid rgb(223, 223, 223); } + +.walletmenu-list { display: flex; align-items: center; text-align: left; margin: 0px; padding: 0px; background-color: rgb(255, 255, 255); list-style: none; } + +.walletmenu-list-item { margin: 0px; } + +.walletmenu-list-item + .walletmenu-list-item { margin-left: 80px; } + +.walletmenu-platform-link.active { color: rgb(255, 126, 0); border-bottom: 3px solid rgb(255, 126, 0); } + +.walletmenu-platform-link.active::after { content: ""; position: absolute; bottom: 0px; left: 50%; transform: translate(-50%, 100%); border-width: 8px; border-style: solid; border-color: rgb(255, 126, 0) transparent transparent; border-image: initial; z-index: 15; } + +.walletmenu-platform-link { position: relative; display: block; padding: 18px 10px 18px 42px; font-size: 15px; color: rgb(19, 22, 31); text-transform: uppercase; } + +.allwallets-link { padding-left: 0px; padding-right: 0px; } + +.walletmenu-platform-link.wallet-hardware { background: url("./../img/icons/wallet_menu_hardware.svg") left center no-repeat; } + +.walletmenu-platform-link.wallet-desktop { background: url("./../img/icons/wallet_menu_desktop.svg") left center no-repeat; } + +.walletmenu-platform-link.wallet-mobile { background: url("./../img/icons/wallet_menu_mobile.svg") left center no-repeat; } + +.walletmenu-platform-link.wallet-web { background: url("./../img/icons/wallet_menu_web.svg") left center no-repeat; } + +.walletmenu-accordion { display: none; position: absolute; bottom: 0px; left: 50%; width: 100%; transform: translate(-50%, 100%); } + +.walletmenu-platform-link.active + .walletmenu-accordion { display: block; } + +.walletmenu-sublist { display: flex; align-items: center; justify-content: center; list-style: none; box-sizing: border-box; border-top: 1px solid rgb(223, 223, 223); background-color: rgb(248, 248, 248); } + +.walletmenu-sublist-item { margin: 0px; } + +.walletmenu-sublist-link { display: block; padding: 18px 32px; color: rgb(19, 22, 31); font-size: 15px; text-transform: uppercase; } + +.walletmenu-sublist-link.active { color: rgb(255, 126, 0); } + +.walletmenu-sublist-link.wallet-linux { background: url("./../img/os/wallet_menu_linux.svg") left center no-repeat; } + +.walletmenu-sublist-link.wallet-mac { background: url("./../img/os/wallet_menu_mac.svg") left center no-repeat; } + +.walletmenu-sublist-link.wallet-windows { background: url("./../img/os/wallet_menu_windows.svg") left center no-repeat; } + +.walletmenu-sublist-link.wallet-ios { background: url("./../img/os/wallet_menu_ios.svg") left center no-repeat; } + +.walletmenu-sublist-link.wallet-android { background: url("./../img/os/wallet_menu_android.svg") left center no-repeat; } + +.walletmenu-sublist-link.active.wallet-linux { background: url("./../img/os/wallet_menu_linux_bright.svg") left center no-repeat; } + +.walletmenu-sublist-link.active.wallet-mac { background: url("./../img/os/wallet_menu_mac_bright.svg") left center no-repeat; } + +.walletmenu-sublist-link.active.wallet-windows { background: url("./../img/os/wallet_menu_windows_bright.svg") left center no-repeat; } + +.walletmenu-sublist-link.active.wallet-ios { background: url("./../img/os/wallet_menu_ios_bright.svg") left center no-repeat; } + +.walletmenu-sublist-link.active.wallet-android { background: url("./../img/os/wallet_menu_android_bright.svg") left center no-repeat; } + +.accordion-tab-wallet { display: none; } + +.wallet-list { display: flex; flex-wrap: wrap; max-width: 1230px; width: 100%; margin: 0px auto; padding: 40px 0px; text-align: left; } + +.wallet-list .wallet-list-item { display: inline-block; width: 14.2%; height: auto; margin-bottom: 30px; margin-right: 1.2%; margin-left: 1.2%; border: 1px solid rgb(223, 223, 223); text-align: center; box-sizing: border-box; } + +.wallet-list .allwallets-list-item { padding-bottom: 20px; } + +.wallet-list .wallet-list-item .wallet-list-item-link { display: inline-block; width: 100%; height: 100%; padding: 0px 0px 20px; color: rgb(19, 22, 31); text-align: center; font-weight: 600; vertical-align: top; text-decoration: none; } + +.wallet-list .allwallets-list-item .wallet-list-item-link { height: auto; padding: 0px; } + +.wallet-list .wallet-list-item .wallet-list-item-link img { display: block; width: 80px; height: 80px; margin: 20px auto 5px; transition: all 0.15s ease-out 0s; } + +.wallet-hint { font-size: 11px; text-align: center; color: transparent; } + +.allwallets-list-item:hover .wallet-hint { margin: 0px; color: rgb(137, 143, 143); } + +.wallet-list-os { display: flex; flex-wrap: wrap; justify-content: center; transition: all 0.15s ease-out 0s; } + +.wallet-list-os-link { position: relative; padding: 4px 5px; } + +.wallet-ico-tooltip { display: none; position: absolute; left: -14px; bottom: -5px; width: 77px; padding: 4px 12px; transform: translateY(100%); font-size: 11px; color: rgb(137, 138, 143); text-align: center; text-transform: uppercase; border: 1px solid rgb(218, 218, 218); border-radius: 3px; background: rgb(255, 255, 255); z-index: 100; } + +.wallet-list-os-link:hover .wallet-ico-tooltip { display: block; } + +.allwallets-list-item:hover .wallet-list-item-link img { margin: 20px auto -12px; } + +.wallet-list-item-link:hover img { opacity: 0.9; } + +.wallet-list-item:hover .wallet-list-os { margin-top: 17px; } + +.wallet-list-os-link:hover { background: rgb(248, 248, 248); } + +.wallet-list .wallet-list-item .wallet-list-os-link:hover .wallet-os-ico { display: none; } + +.wallet-list .wallet-list-item .wallet-list-os-link:hover .wallet-os-ico-dark { display: none; } + +.wallet-list .wallet-list-item .wallet-list-os-link:hover .wallet-os-ico-bright { display: block; width: 18px; height: 18px; background-position: center center; } + +.windows-ico { background: url("../img/os/wallet_menu_windows.svg") center center / contain no-repeat; } + +.windows-ico-dark { background: url("../img/os/wallet_menu_windows_dark.svg") -9999px center / contain no-repeat; } + +.windows-ico-bright { background: url("../img/os/wallet_menu_windows_bright.svg") -9999px center / contain no-repeat; } + +.mac-ico { background: url("../img/os/wallet_menu_mac.svg") center center / contain no-repeat; } + +.mac-ico-dark { background: url("../img/os/wallet_menu_mac_dark.svg") -9999px center / contain no-repeat; } + +.mac-ico-bright { background: url("../img/os/wallet_menu_mac_bright.svg") -9999px center / contain no-repeat; } + +.linux-ico { background: url("../img/os/wallet_menu_linux.svg") center center / contain no-repeat; } + +.linux-ico-dark { background: url("../img/os/wallet_menu_linux_dark.svg") -9999px center / contain no-repeat; } + +.linux-ico-bright { background: url("../img/os/wallet_menu_linux_bright.svg") -9999px center / contain no-repeat; } + +.android-ico { background: url("../img/os/wallet_menu_android.svg") center center / contain no-repeat; } + +.android-ico-dark { background: url("../img/os/wallet_menu_android_dark.svg") -9999px center / contain no-repeat; } + +.android-ico-bright { background: url("../img/os/wallet_menu_android_bright.svg") -9999px center / contain no-repeat; } + +.ios-ico { background: url("../img/os/wallet_menu_ios.svg") center center / contain no-repeat; } + +.ios-ico-dark { background: url("../img/os/wallet_menu_ios_dark.svg") -9999px center / contain no-repeat; } + +.ios-ico-bright { background: url("../img/os/wallet_menu_ios_bright.svg") -9999px center / contain no-repeat; } + +.hardware-ico { background: url("../img/os/wallet_menu_hardware.svg") center center / contain no-repeat; } + +.hardware-ico-dark { background: url("../img/os/wallet_menu_hardware_dark.svg") -9999px center / contain no-repeat; } + +.hardware-ico-bright { background: url("../img/os/wallet_menu_hardware_bright.svg") -9999px center / contain no-repeat; } + +.web-ico { background: url("../img/os/wallet_menu_web.svg") center center / contain no-repeat; } + +.web-ico-dark { background: url("../img/os/wallet_menu_web_dark.svg") -9999px center / contain no-repeat; } + +.web-ico-bright { background: url("../img/os/wallet_menu_web_bright.svg") -9999px center / contain no-repeat; } + +.accordion-tab { position: relative; cursor: pointer; } + +.is-expanded + .accordion-content { display: flex; flex-wrap: wrap; } + +.accordion-content .wallet-desktop { background: url("../img/icons/wallet_menu_desktop.svg") center 15px no-repeat; } + +.accordion-content .wallet-hardware { background: url("../img/icons/wallet_menu_hardware.svg") center 15px no-repeat; } + +.accordion-content .wallet-mobile { background: url("../img/icons/wallet_menu_mobile.svg") center 15px no-repeat; } + +.accordion-content .wallet-web { background: url("../img/icons/wallet_menu_web.svg") center 15px no-repeat; } + +.accordion-content .wallet-linux { background: url("../img/icons/wallet_menu_linux.svg") center 15px / 22px no-repeat; } + +.accordion-content .wallet-mac { background: url("../img/icons/wallet_menu_mac.svg") center 15px / 22px no-repeat; } + +.accordion-content .wallet-windows { background: url("../img/icons/wallet_menu_windows.svg") center 15px / 22px no-repeat; } + +.accordion-content .wallet-android { background: url("../img/os/wallet_menu_android.svg") center 15px / 22px no-repeat; } + +.accordion-content .wallet-ios { background: url("../img/os/wallet_menu_ios.svg") center 15px / 22px no-repeat; } + +@media handheld, only screen and (min-width: 769px) { + .wallet-list-item.is-hidden { display: none; } +} + +@media handheld, only screen and (max-width: 60em), only screen and (max-device-width: 60em) { + .wallet-list { padding: 20px 0px 30px; } + .wallet-list .wallet-list-item { width: 30.9%; height: auto; } + .walletmenu-list .walletmenu-list-item { margin: 0px 25px; } +} + +@media handheld, only screen and (max-width: 48em), only screen and (max-device-width: 48em) { + .walletmenu > ul li:hover .wallet-platform-link::after { display: none; } + .wallet-wrapper .wallet-list { display: flex; } + .wallet-list { padding: 20px 0px 30px; } + .wallet-list .allwallets-list-item { display: none; } + .walletmenu { display: none; } + .walletmenu-mobile { display: block; } + .wallet-wrapper { display: block; } + .accordion { margin-bottom: 2px; } + .accordion-tab { width: 100%; height: 60px; padding: 15px 35px 15px 55px; box-sizing: border-box; background: rgb(248, 248, 248); } + .is-selected.accordion-tab { padding: 9px 35px 9px 55px; } + .accordion-tab::before { content: ""; position: absolute; top: 50%; left: 15px; transform: translateY(-50%); width: 30px; height: 30px; } + .accordion-tab-1::before { background: url("../img/getting-started/number-1.svg?") center center / contain no-repeat; } + .accordion-tab-2::before { background: url("../img/getting-started/number-2.svg?") center center / contain no-repeat; } + .is-selected.accordion-tab::before { background: url("../img/icons/checkmark.svg?") center center / contain no-repeat; } + .accordion-content { display: none; } + .is-expanded + .accordion-content { padding: 15px; } + .accordion-item { width: 48.1%; height: 93px; margin: 0px 3% 10px 0px; box-sizing: border-box; text-align: center; background-size: 30px; } + .accordion-item:nth-child(2n) { margin-right: 0px; } + .accordion-link { display: block; padding: 55px 0px 15px; font-size: 15px; color: rgb(19, 22, 31); text-align: center; border: 1px solid rgb(218, 218, 218); } + .accordion-link:hover, .accordion-link:active { padding: 54px 0px 14px; border: 2px solid rgb(255, 126, 0); } + .accordion-wallets { display: none; } + .accordion-wallets.is-visible { display: block; width: 100%; } + .is-visible .accordion-tab-wallet { display: block; } + .accordion-tab-3 { display: block; } + .is-hidden-mobile { display: none; } + .accordion-tab-3::before { background: url("../img/getting-started/number-3.svg") center center / contain no-repeat; } + .accordion-os.is-visible { display: block; } +} + +@media handheld, only screen and (max-width: 40em), only screen and (max-device-width: 40em) { + .wallet .hero { background-color: rgb(255, 255, 255); } + .wallet .wallet-platforms .wallet-platforms-menu { background: rgb(255, 255, 255); text-align: left; padding: 15px; margin-bottom: 30px; } + .wallet .wallet-platforms .wallet-os-container { display: flex; flex-direction: column; } + .wallet .wallet-platforms .wallet-platforms-menu .wallet-os-btn { margin-right: 0px; margin-bottom: 4px; text-align: left; border: 1px solid rgb(218, 218, 218); padding: 10px 16px; border-radius: 1px; } + .wallet .wallet-platforms .active.wallet-os-btn { border: 2px solid rgb(255, 126, 0); padding: 8px 14px; } + .wallet-list { padding: 0px 0px 50px; text-align: center; } + .wallet-list .wallet-list-item { width: 47.6%; height: 140px; padding: 0px; margin-bottom: 10px; } + .wallet-list .wallet-list-item .wallet-list-item-link { width: 100%; height: 100%; } +} + +.wallet .wallet-logo-container { text-align: center; } + +.wallet .wallet-logo-container .wallet-logo { width: 72px; height: 72px; } + +.wallet .wallet-logo-container h1 { text-align: center; } + +.wallet-platforms { margin-top: 50px; } + +.wallet-platforms-row { display: flex; align-items: flex-start; padding-bottom: 25px; margin-bottom: 50px; border-bottom: 1px solid rgb(218, 218, 218); } + +.wallet-os-overview { margin-top: 28px; } + +.wallet-os-check-item { position: relative; margin-bottom: 25px; padding-left: 30px; } + +.wallet-os-check-item::before { content: ""; position: absolute; top: 14px; left: 0px; } + +.wallet-os-check-item.checkgood::before { width: 13px; height: 13px; border-radius: 50%; background: rgb(40, 107, 29); } + +.wallet-os-check-item.checkpass::before { width: 13px; height: 13px; border-radius: 13px 0px 0px; background: rgb(109, 202, 92); } + +.wallet-os-check-item.checkfail::before { width: 0px; height: 0px; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 11px solid rgb(247, 147, 26); } + +.wallet-os-check-item.checkneutral::before { width: 12px; height: 12px; background: rgb(170, 170, 170); } + +.wallet-os-check-title { margin-bottom: 5px; font-size: 22px; color: rgb(19, 22, 31); line-height: 36px; } + +.wallet-os-check-details { font-size: 16px; color: rgb(77, 80, 96); line-height: 22px; text-align: left; } + +.wallet-points { max-width: 536px; min-width: 400px; } + +.wallet-privacy-subhead { font-weight: 600; } + +.os-selector { padding: 30px 25px 25px; background: rgb(248, 248, 248); max-width: 570px; width: 100%; margin-left: 65px; box-sizing: border-box; } + +.os-selector-tabs { display: flex; justify-content: space-between; border-bottom: 1px solid rgb(218, 218, 218); } + +.os-selector-tab { display: flex; align-items: center; justify-content: center; padding-bottom: 17px; transform: translateY(1.5px); text-transform: uppercase; font-size: 15px; color: rgb(19, 22, 31); background: none; border: none; outline: none; } + +.os-selector-tab.active { border-bottom: 2px solid rgb(255, 126, 0); color: rgb(255, 126, 0); } + +.os-selector-icon-active { display: none; } + +.os-selector-tab.active .os-selector-icon-active { display: block; } + +.os-selector-tab.active .os-selector-icon-inactive { display: none; } + +.os-selector-icon { margin-right: 10px; } + +.os-selector-android-icon { width: 12px; height: 14px; } + +.os-selector-windows-icon { width: 15px; height: 15px; } + +.os-selector-ios-icon { width: 16px; height: 16px; } + +.os-selector-mac-icon { width: 12px; height: 15px; } + +.os-selector-linux-icon { width: 15px; height: 18px; } + +.os-selector-content { display: none; } + +.os-selector-content.visible { display: block; } + +.os-selector-links-row { display: flex; align-items: center; justify-content: center; margin-bottom: 25px; } + +.os-selector-link { display: flex; align-items: center; justify-content: center; width: 50%; height: 55px; padding: 0px; text-transform: uppercase; } + +.os-selector-link.btn-light { background: none; } + +.os-selector-link:first-child { margin-right: 25px; } + +.os-screenshot { margin: 0px auto; display: block; } + +.similar-wallets-table { margin-bottom: 50px; } + +.wallet-title { margin-bottom: 12px; } + +.wallet-os-ico { display: block; width: 18px; height: 18px; } + +.wallet-description { color: rgb(157, 157, 157); max-width: 770px; margin: 0px auto; font-size: 19px; line-height: 34px; } + +.features { display: flex; justify-content: center; max-width: 100%; margin: 39px auto 0px; padding: 0px 15px; } + +.features-elements { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; border-top: 1px solid rgb(218, 218, 218); border-bottom: 1px solid rgb(218, 218, 218); padding-right: 15px; } + +.features-element { display: flex; padding: 15px 0px; margin-left: 36px; } + +.feature-header { border-top: 1px solid rgb(218, 218, 218); border-bottom: 1px solid rgb(218, 218, 218); padding-left: 15px; } + +.features-title { padding: 8px 0px; font-size: 20px; line-height: 36px; color: rgb(255, 255, 255); } + +.features-text { font-size: 15px; line-height: 23px; text-transform: uppercase; color: rgb(255, 255, 255); margin: 0px 12px 0px 8px; white-space: nowrap; } + +.tooltip-title { text-align: left; font-weight: 600; font-size: 11px; line-height: 11px; color: rgb(32, 35, 44); margin-bottom: 5px; } + +.tooltip-text { text-align: left; } + +.line { display: none; } + +.features-element-left { display: flex; } + +.close-btn { position: absolute; top: 8px; right: 8px; cursor: pointer; font-size: 200%; line-height: 16px; } + +.close-btn:hover { color: rgb(44, 111, 173); } + +.information-icon { position: relative; } + +.wallet .features-tooltip { left: auto; right: -15px; transform: translate(0px, 100%); } + +.wallet .features-tooltip::before { left: auto; right: 17px; } + +.wallet .features-tooltip::after { display: none; } + +.features-tooltip-overlay { display: none; position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: 1000; } + +.show { display: block; } + +.wallet-accordion { display: none; margin-bottom: 25px; } + +.wallet-accordion.visible { display: block; } + +.wallet-accordion .wallet-accordion-btn { padding: 0px 25px 0px 37px; text-transform: uppercase; color: rgb(255, 126, 0); line-height: 50px; } + +.wallet-accordion-btn { display: none; } + +.wallet-accordion-btn::before { content: ""; position: absolute; top: 50%; left: 15px; transform: translate(0px, -50%); } + +.wallet-accordion-btn[data-button-os="ios"]::before { width: 16px; height: 16px; background: url("../img/os/wallet_menu_ios_bright.svg") center center / contain no-repeat; } + +.wallet-accordion-btn[data-button-os="android"]::before { width: 12px; height: 14px; background: url("../img/os/wallet_menu_android_bright.svg") center center / contain no-repeat; } + +.wallet-accordion-btn[data-button-os="windows"]::before { width: 15px; height: 15px; background: url("../img/os/wallet_menu_windows_bright.svg") center center / contain no-repeat; } + +.wallet-accordion-btn[data-button-os="mac"]::before { width: 12px; height: 15px; background: url("../img/os/wallet_menu_mac_bright.svg") center center / contain no-repeat; } + +.wallet-accordion-btn[data-button-os="web"]::before { width: 16px; height: 16px; background: url("../img/os/wallet_menu_web_bright.svg") center center / contain no-repeat; } + +.wallet-accordion-btn[data-button-os="linux"]::before { width: 15px; height: 18px; background: url("../img/os/wallet_menu_linux_bright.svg") center center / contain no-repeat; } + +.wallet-table-label { display: none; margin: 0px; font-weight: 400; font-size: 20px; color: rgb(19, 22, 31); text-align: center; line-height: 36px; } + +@media screen and (max-width: 1024px) { + .wallet-platforms-row { flex-direction: column-reverse; } + .wallet-points { max-width: initial; min-width: initial; } + .os-selector { max-width: initial; margin: 0px 0px 40px; } +} + +@media screen and (max-width: 900px) { + .features-elements { justify-content: flex-start; } +} + +@media screen and (max-width: 768px) { + .left-column { flex-direction: column; } +} + +@media screen and (max-width: 700px) { + .wallet-accordion-btn { display: flex; } + .wallet-points { display: flex; flex-direction: column-reverse; } + .os-selector-tabs { flex-direction: column; } + .os-selector-tab { padding: 0px 0px 0px 10px; justify-content: flex-start; height: 50px; } + .os-selector-tab.active { border-bottom: none; } + .wallet-table-label { display: block; } + .similar-wallets-table .wallet-hints-row { display: none; } +} + +@media screen and (max-width: 600px) { + .wallet-platforms { margin-top: 30px; } + .wallet-platforms-row { padding-bottom: 35px; margin-bottom: 30px; } + .os-selector { padding: 20px 15px 15px; margin: 0px 0px 15px; } + .wallet-accordion { margin-bottom: 11px; } + .wallet-accordion-btn { display: block; } + .os-selector-links-row { flex-direction: column; } + .os-selector-link { width: 100%; } + .os-selector-link:first-child { margin: 0px 0px 10px; } + .wallet-os-overview { margin: 0px; } + .wallet-os-check-title { font-size: 20px; } + .wallet-hints-row .wallet-hint { margin-right: 0px; } + .wallet-hint + .wallet-hint { margin-left: 35px; } + .features { display: flex; flex-direction: column; height: auto; border-top: none; padding: 0px 0px 16px; margin-top: 17px; } + .features-title { padding: 0px; margin: 0px 7px; } + .line { display: block; border-top: 1px solid rgb(218, 218, 218); width: 100%; margin-top: 19px; } + .feature-header { display: flex; width: 100%; } + .feature-header { padding: 0px; border: none; } + .features-elements { border-top: none; padding: 0px 0px 4px; } + .features-element { justify-content: space-between; width: 100%; margin: 0px 0px 12px; padding: 0px; } + .information-icon { position: initial; } + .information-icon .features-tooltip { transform: translate(50%, 50%); position: fixed; bottom: 50%; right: 50%; } + .information-icon .features-tooltip::before { content: none; } + .information-icon img { width: 20px; height: 20px; } +} + +.tooltip-trigger { position: relative; } + +.tooltip { position: absolute; bottom: 0px; left: 50%; width: 200px; transform: translate(-50%, 100%); padding: 10px; background: rgb(255, 255, 255); border: 1px solid rgb(225, 225, 225); border-radius: 3px; font-size: 12px; color: rgb(19, 22, 31); line-height: 22px; } + +.tooltip-trigger:hover .tooltip { display: block; } + +.tooltip { display: none; position: absolute; bottom: 0px; left: 50%; width: 200px; transform: translate(-50%, 100%); padding: 10px; background: rgb(255, 255, 255); border: 1px solid rgb(225, 225, 225); border-radius: 3px; font-size: 12px; color: rgb(19, 22, 31); line-height: 22px; z-index: 1000; } + +.tooltip::after, .tooltip::before { content: ""; position: absolute; top: 0px; left: 22px; transform: translateY(-100%) rotate(-90deg); border-width: 4px; border-style: solid; border-color: transparent transparent transparent rgb(255, 255, 255); border-image: initial; } + +.tooltip::after { top: 0px; } + +.tooltip::before { top: -1px; border-left: 4px solid rgb(218, 218, 218); } + +label.disabled + .sidebar-selector-info .tooltip-trigger { display: none; } + +.sidebar-selector-info .sidebar-selector-info-text { display: none; font-size: 13px; color: rgb(77, 80, 96); font-weight: 600; opacity: 0.7; } + +label.disabled + .sidebar-selector-info .sidebar-selector-info-text { display: block; } + +.checkbox-wrapper .checkbox { position: absolute; z-index: -1; opacity: 0; margin: 0px; } + +.checkbox-text { position: relative; padding: 0px 0px 0px 36px; font-weight: 600; font-size: 16px; color: rgb(77, 80, 96); line-height: 30px; text-align: left; cursor: pointer; } + +.checkbox-text::before { content: ""; position: absolute; top: 4px; left: 0px; width: 22px; height: 22px; background: rgb(255, 255, 255); border: 1px solid rgb(218, 218, 218); } + +.checkbox:checked + .checkbox-text::before { background: url("../img/icons/check.svg") center center no-repeat rgb(247, 147, 26); border: 1px solid rgb(247, 147, 26); } + +.checkbox:checked + .checkbox-text { color: rgb(19, 22, 31); } + +.checkbox[disabled] + .checkbox-text { cursor: not-allowed; } + +.checkbox[disabled] + .checkbox-text::before { background: rgb(229, 229, 229); border: 1px solid rgb(229, 229, 229); } + +.checkbox[disabled] + .checkbox-text { color: rgb(179, 180, 186); } + +.user-radio-row { display: flex; align-items: center; justify-content: space-between; } + +.user-radio-row + .user-radio-row { margin-top: 5px; } + +.user-radio { position: absolute; z-index: -1; opacity: 0; margin: 0px; } + +.user-radio-text { position: relative; padding: 0px 0px 0px 36px; font-weight: 600; font-size: 16px; color: rgb(77, 80, 96); line-height: 30px; cursor: pointer; } + +.user-radio-text::before { content: ""; position: absolute; top: 3px; left: 0px; width: 22px; height: 22px; border: 1px solid rgb(218, 218, 218); border-radius: 50%; background: rgb(255, 255, 255); } + +.user-radio-text::after { content: ""; position: absolute; top: 10px; left: 7px; width: 10px; height: 10px; border-radius: 50%; background: rgb(247, 147, 26); opacity: 0; } + +.user-radio:checked + .user-radio-text::after { opacity: 1; } + +.user-radio:checked + .user-radio-text { color: rgb(19, 22, 31); } + +.user-radio[disabled] + .user-radio-text { cursor: not-allowed; } + +.user-radio[disabled] + .user-radio-text::before, .user-radio[disabled] + .user-radio-text::after { background: rgb(229, 229, 229); } + +.user-radio[disabled] + .user-radio-text { color: rgb(179, 180, 186); } + +.platform-radio-wrapper + .platform-radio-wrapper { margin-left: 5px; } + +.platform-radio { position: absolute; z-index: -1; opacity: 0; } + +.platform-radio-custom { position: relative; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; background: rgb(255, 255, 255); border: 1px solid rgb(218, 218, 218); box-sizing: border-box; cursor: pointer; } + +.platform-radio-icon-active { display: none; } + +.platform-radio:checked + .platform-radio-custom { border: 2px solid rgb(247, 147, 26); } + +.platform-radio:checked + .platform-radio-custom .platform-radio-icon-active { display: block; } + +.platform-radio:checked + .platform-radio-custom .platform-radio-icon-inactive { display: none; } + +.wallet-selector { display: none; padding: 50px 0px 25px; } + +.wallet-selector.visible { display: block; } + +.wallet-selector-section { display: none; } + +.wallet-selector-section.visible { display: block; } + +.wallet-selector-row { display: flex; align-items: flex-start; } + +.sidebar-selector { width: 270px; padding: 15px; margin-right: 30px; background: rgb(248, 248, 248); } + +.sidebar-selector-section { padding-bottom: 16px; margin-bottom: 10px; border-bottom: 1px solid rgb(218, 218, 218); } + +.sidebar-selector-title { position: relative; margin: 0px 0px 5px; font-size: 20px; color: rgb(19, 22, 31); line-height: 36px; z-index: 0; } + +.sidebar-selector-text { font-size: 16px; color: rgb(77, 80, 96); line-height: 22px; text-align: left; } + +.sidebar-selector-platforms-row + .sidebar-selector-platforms-row { margin-top: 13px; } + +.sidebar-selector-platforms-row { display: flex; } + +.sidebar-selector-platform { width: 118px; } + +.sidebar-selector-platform + .sidebar-selector-platform { margin-left: 15px; } + +.sidebar-selector-label-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 5px; } + +.sidebar-selector-label { margin: 0px; font-weight: 600; font-size: 16px; color: rgb(19, 22, 31); line-height: 30px; } + +.wallet-selector-tooltip { left: -20px; transform: translate(0px, 100%); } + +.sidebar-selector-os-row { display: flex; } + +.sidebar-selector-section-top { display: flex; align-items: center; justify-content: space-between; } + +.important-checkbox-row { display: flex; justify-content: space-between; align-items: center; } + +.important-checkbox-row + .important-checkbox-row { margin-top: 10px; } + +.wallet-selector-content { width: 100%; max-width: 920px; } + +.wallet-selector-title { margin: 0px 0px 40px; text-align: center; font-size: 22px; color: rgb(19, 22, 31); line-height: 36px; } + +.wallet-table-head { display: table-cell; border: none; } + +.wallet-table-wrapper { margin-bottom: 20px; } + +.wallet-table { display: table; width: 100%; border-collapse: separate; border-spacing: 0px 9px; } + +.wallet-table-title { font-weight: 400; font-size: 14px; color: rgb(19, 22, 31); line-height: 1.4; text-align: center; } + +.wallet-label { font-weight: 600; font-size: 17px; line-height: 1.4; vertical-align: middle; } + +.wallet-table-row { display: table-row; } + +.wallet-link { display: none; } + +.wallet-link.visible { display: table-row; } + +.wallet-table-data { display: table-cell; padding: 20px; border-width: 1px 0px; border-top-style: solid; border-bottom-style: solid; border-top-color: rgb(218, 218, 218); border-bottom-color: rgb(218, 218, 218); border-image: initial; border-left-style: initial; border-left-color: initial; border-right-style: initial; border-right-color: initial; } + +.wallet-table-data:first-child { padding-right: 25px; border-left: 1px solid rgb(218, 218, 218); } + +.wallet-table-data:last-child { padding-right: 25px; border-right: 1px solid rgb(218, 218, 218); } + +.wallet-table-text { display: none; font-size: 14px; color: rgb(19, 22, 31); text-align: right; line-height: 30px; } + +.wallet-img { width: 35px; margin-right: 13px; vertical-align: middle; } + +.wallet-hints-row { display: flex; align-items: center; } + +.wallet-hint { display: flex; align-items: center; margin-right: 30px; } + +.wallet-good { margin: 0px auto; width: 13px; height: 13px; background: rgb(40, 107, 29); position: relative; } + +.wallet-good { margin: 0px auto; width: 13px; height: 13px; border-radius: 50%; background: rgb(40, 107, 29); } + +.wallet-pass { margin: 0px auto; width: 13px; height: 13px; border-radius: 13px 0px 0px; background: rgb(109, 202, 92); } + +.wallet-caution { margin: 0px auto; width: 0px; height: 0px; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 11px solid rgb(247, 147, 26); } + +.wallet-neutral { margin: 0px auto; width: 12px; height: 12px; background: rgb(170, 170, 170); } + +.wallet-hint-text { margin-left: 8px; font-size: 1.5em; color: rgb(19, 22, 31); line-height: 30px; } + +.wallet-table-head:first-child .wallet-table-title { text-align: left; font-size: 22px; color: rgb(19, 22, 31); line-height: 36px; } + +.empty-box { width: 96%; border: 1px solid rgb(218, 218, 218); text-align: center; padding: 75px 30px 60px; box-sizing: border-box; } + +.empty-box-title { margin: 15px 0px; font-weight: 400; font-size: 22px; color: rgb(19, 22, 31); text-align: center; line-height: 36px; } + +.empty-box-text { max-width: 505px; margin: 0px auto; } + +.table-sort { display: none; } + +.acc { position: relative; } + +.acc-btn { position: relative; height: 50px; width: 100%; padding: 0px 25px 0px 15px; background: rgb(255, 255, 255); border: 1px solid rgb(218, 218, 218); font-size: 15px; text-align: left; text-transform: capitalize; cursor: pointer; } + +.acc-btn::after { content: ""; position: absolute; top: 50%; right: 15px; width: 9px; height: 8px; transform: translateY(-50%); background: url("../img/icons/angle.svg") center center / contain no-repeat; } + +.acc.open .acc-btn::after { transform: translateY(-50%) rotate(180deg); } + +.acc.open .acc-content { display: block; } + +.acc-content-btn { display: flex; width: 100%; height: 50px; padding: 0px 25px 0px 15px; border: none; cursor: pointer; } + +.sidebar-selector-btn-open, .sidebar-selector-btn-close { display: none; } + +.checkboxes-acc-header { display: none; } + +@media screen and (max-width: 990px) { + .wallet-selector { position: relative; padding-top: 0px; } + .wallet-selector::before { content: ""; position: absolute; top: 0px; left: 0px; width: 100%; height: 30px; transform: translateY(-100%); background: rgb(248, 248, 248); } + .wallet-selector .container { padding: 0px; } + .wallet-selector-row { flex-direction: column; } + .sidebar-selector-btn-open { position: relative; width: 100%; padding: 28px 43px 20px 30px; background: rgb(248, 248, 248); font-size: 20px; color: rgb(19, 22, 31); line-height: 36px; transform: translateY(-15px); text-align: left; border: none; } + .sidebar-selector-btn-open.visible { display: block; } + .sidebar-selector-btn-close { position: absolute; display: block; top: 22px; right: 32px; border: none; background: none; z-index: 10; } + .sidebar-selector-btn-close img { width: 13px; height: 13px; } + .sidebar-selector-btn-open::after { content: ""; position: absolute; right: 30px; bottom: 28px; width: 13px; height: 18px; background: url("../img/icons/angle.svg") center center / contain no-repeat; } + .sidebar-selector.hidden { display: none; } + .sidebar-selector { position: relative; margin: 0px 0px 60px; width: 100%; box-sizing: border-box; padding-left: 30px; padding-right: 30px; } + .sidebar-selector-section { width: 100%; padding-bottom: 10px; } + .sidebar-checkboxes-row .sidebar-selector-section { border: none; } + .features-selectors-section { margin-left: 10px; } + .sidebar-selector-platforms { display: flex; } + .sidebar-selector-platform + .sidebar-selector-platform { margin-left: 40px; } + .sidebar-selector-platforms-row + .sidebar-selector-platforms-row { margin: 0px 0px 0px 40px; } + .sidebar-selector-label-row { justify-content: flex-start; } + .sidebar-selector-label { margin-right: 8px; } + .sidebar-selector-types-row { display: flex; align-items: center; } + .user-radio-row { justify-content: flex-start; } + .user-radio-wrapper { margin-right: 9px; } + .user-radio-row + .user-radio-row { margin: 0px 0px 0px 40px; } + .sidebar-web-platform .wallet-selector-tooltip { left: auto; right: -20px; } + .sidebar-web-platform .tooltip::after, .sidebar-web-platform .tooltip::before { left: auto; right: 22px; } + .sidebar-hardware-platform .wallet-selector-tooltip { left: -55px; } + .sidebar-hardware-platform .tooltip::after, .sidebar-hardware-platform .tooltip::before { left: 55px; } + .features-selectors-section .wallet-selector-tooltip { left: auto; right: -20px; } + .features-selectors-section .tooltip::after, .features-selectors-section .tooltip::before { left: auto; right: 22px; } + .wallet-selector-content { padding: 0px 30px; box-sizing: border-box; } + .sidebar-checkboxes-row { display: flex; } + .checkboxes-acc { position: relative; } + .checkboxes-acc-header { position: relative; display: flex; align-items: center; flex-wrap: wrap; min-height: 50px; padding: 0px 36px 7px 7px; box-sizing: border-box; background: rgb(255, 255, 255); border: 1px solid rgb(218, 218, 218); } + .checkboxes-acc-btn { position: absolute; top: 0px; right: 0px; width: 100%; height: 100%; background: none; border: none; box-sizing: border-box; padding: 0px; z-index: 0; } + .checkboxes-acc .checkboxes-acc-btn img { position: absolute; top: 50%; right: 15px; transform: translateY(-50%); } + .checkboxes-acc.open .checkboxes-acc-btn img { transform: rotate(180deg) translateY(50%); } + .checkboxes-acc-content { display: none; position: absolute; bottom: 0px; left: 0px; width: 100%; transform: translateY(100%); padding: 10px; box-sizing: border-box; background: rgb(255, 255, 255); border-right: 1px solid rgb(218, 218, 218); border-bottom: 1px solid rgb(218, 218, 218); border-left: 1px solid rgb(218, 218, 218); border-image: initial; border-top: none; z-index: 100; } + .checkboxes-acc.open .checkboxes-acc-content { display: block; } + .checkboxes-acc-selected-list { display: flex; align-items: center; flex-wrap: wrap; } + .checkboxes-acc-selected { position: relative; height: 36px; display: flex; align-items: center; padding: 0px 10px; margin-right: 7px; margin-top: 7px; background: rgb(255, 255, 255); border: 2px solid rgb(247, 147, 26); box-sizing: border-box; z-index: 1; } + .checkboxes-acc-selected-text { margin-right: 10px; font-weight: 600; font-size: 16px; color: rgb(19, 22, 31); line-height: 30px; text-transform: capitalize; } + .checkboxes-acc-selected-remove { padding: 0px; border: none; background: none; } + .wallet-selector-help { padding: 6px 20px 9px; background: rgb(239, 239, 239); } +} + +@media screen and (max-width: 700px) { + .acc-btn { display: flex; } + .acc-content { display: none; border-right: 1px solid rgb(218, 218, 218); border-bottom: 1px solid rgb(218, 218, 218); border-left: 1px solid rgb(218, 218, 218); border-image: initial; border-top: none; background: rgb(255, 255, 255); } + .acc-content-btn { background: rgb(255, 255, 255); line-height: 50px; } + .acc-content-btn + .acc-content-btn { border-top: 1px solid rgb(218, 218, 218); } + .table-sort { display: block; } + .table-sort .acc-btn { font-weight: 600; line-height: 50px; } + .table-sort-title { margin: 0px 0px 5px; font-size: 18px; color: rgb(19, 22, 31); line-height: 36px; } + .wallet-table-head { display: none; } + .wallet-table-text { display: block; } + .wallet-hints-row { display: none; } + .wallet-img { margin-right: 5px; } + .wallet-label { font-size: 14px; } + .wallet-table-data { padding: 20px 0px 20px 5px; } + .wallet-table-data.hidden { display: none; } + .wallet-table-data[data-cell]:not(.hidden) { border-right: 1px solid rgb(218, 218, 218); } + .wallet-score-wrapper { display: flex; align-items: center; justify-content: flex-end; } + .wallet-score { margin: 0px 12px; } +} + +@media screen and (max-width: 600px) { + .sidebar-selector { padding: 15px; } + .sidebar-selector-platforms { display: block; } + .sidebar-selector-platform + .sidebar-selector-platform { margin-left: 27px; } + .sidebar-selector-platform { width: 131px; } + .sidebar-selector-platforms-row + .sidebar-selector-platforms-row { margin: 10px 0px 0px; } + .sidebar-selector-types-row { display: block; } + .user-radio-row { justify-content: space-between; } + .user-radio-row + .user-radio-row { margin: 10px 0px 0px; } + .user-radio-row .wallet-selector-tooltip { left: auto; right: -7px; } + .user-radio-row .tooltip::after, .user-radio-row .tooltip::before { left: auto; right: 10px; } + .sidebar-desktop-platform .wallet-selector-tooltip { left: auto; right: -10px; } + .sidebar-desktop-platform .tooltip::after, .sidebar-desktop-platform .tooltip::before { left: auto; right: 12px; } + .important-checkbox-row .wallet-selector-tooltip { left: auto; right: -20px; } + .important-checkbox-row .tooltip::after, .important-checkbox-row .tooltip::before { left: auto; right: 22px; } + .sidebar-checkboxes-row { display: block; } + .features-selectors-section { margin: 13px 0px 0px; } + .wallet-selector-content { padding: 0px 15px; } + .sidebar-selector-btn-open { padding: 25px 31px 15px 15px; } + .sidebar-selector-btn-open::after { right: 18px; } + .sidebar-selector-btn-close { top: 19px; right: 16px; } + .wallet-hints-row { display: none; } + .wallet-selector-title { margin-bottom: 15px; font-size: 20px; } +} + +.choose-wallet-screen { display: none; } + +.choose-wallet-screen.visible { display: block; } + +.helper-step { display: none; } + +.helper-accordion.active .helper-step { display: block; } + +.helper-intro { padding: 50px 0px; } + +.helper-intro-row { display: flex; justify-content: space-between; align-items: center; } + +.helper-intro-img-wrapper { width: 40.5%; } + +.helper-intro-img-wrapper img { max-width: 100%; } + +.helper-intro-description { width: 57%; margin-left: 2.5%; } + +.helper-intro-title { margin: 0px 0px 20px; } + +.helper-intro-text { margin-bottom: 35px; text-align: left; } + +.helper-navigation { display: flex; justify-content: space-between; padding-bottom: 15px; border-bottom: 1px solid rgb(218, 218, 218); } + +.helper-navigation-row { display: flex; } + +.skip-helper-btn { font-size: 16px; color: rgb(77, 80, 96); line-height: 52px; text-decoration: underline; background: none; border: none; } + +.helper-next-btn { display: none; width: 170px; height: 55px; margin-left: 30px; border: none; } + +.helper-next-btn.visible { display: flex; align-items: center; justify-content: center; } + +.wizard { display: none; } + +.wizard.visible { display: block; padding: 50px 0px; } + +.helper-row { display: flex; justify-content: flex-start; align-items: flex-start; } + +.helper-content { width: 100%; padding-left: 73px; } + +.helper-accordion { position: relative; padding-top: 15px; } + +.helper-accordion::before { content: ""; position: absolute; top: 15px; left: -50px; transform: translateX(-100%); width: 1px; height: 100%; background: rgb(218, 218, 218); } + +.helper-accordion.complete::before { background: rgb(255, 126, 0); } + +.helper-accordion:last-child::before { display: none; } + +.helper-header { position: relative; } + +.helper-header::after { position: absolute; top: 0px; left: -30px; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; transform: translateX(-100%); background: rgb(255, 255, 255); border-radius: 50%; border: 1px solid rgb(218, 218, 218); } + +.helper-accordion.active .helper-header::after { color: rgb(255, 126, 0); font-weight: 600; border: 1px solid rgb(255, 126, 0); } + +.helper-accordion.complete .helper-header::after { background: url("../img/icons/check.svg") center center no-repeat rgb(247, 147, 26); color: transparent; border: 1px solid rgb(255, 126, 0); } + +.helper-accordion[data-number="1"] .helper-header::after { content: "1"; } + +.helper-accordion[data-number="2"] .helper-header::after { content: "2"; } + +.helper-accordion[data-number="3"] .helper-header::after { content: "3"; } + +.helper-accordion[data-number="4"] .helper-header::after { content: "4"; } + +.helper-selected-block { display: none; margin-top: 5px; } + +.helper-selected-block.visible { display: block; } + +.helper-header-row { padding: 0px 0px 10px; border-bottom: 1px solid rgb(218, 218, 218); } + +.helper-header-row .row { width: 100%; justify-content: space-between; align-items: flex-start; } + +.helper-selected-filter { font-weight: 600; font-size: 18px; color: rgb(255, 126, 0); text-align: left; line-height: 30px; } + +.helper-accordion[data-number="3"] .helper-selected-filter, .helper-accordion[data-number="4"] .helper-selected-filter { text-transform: capitalize; } + +.helper-change-btn { margin-left: 20px; font-size: 16px; color: rgb(77, 80, 96); text-align: right; line-height: 30px; text-decoration: underline; background: none; border: none; } + +.helper-title { margin: 0px; font-size: 22px; opacity: 0.6; color: rgb(19, 22, 31); line-height: 36px; text-align: left; } + +.helper-accordion.active .helper-title { opacity: 1; } + +.helper-subtitle { font-size: 16px; color: rgb(77, 80, 96); line-height: 22px; } + +.helper-platforms { display: flex; justify-content: space-between; margin-top: 30px; } + +.helper-platforms + .helper-platforms { margin-bottom: 50px; } + +.helper-platforms-section + .helper-platforms-section { margin-left: 30px; } + +.helper-platforms-title { margin: 0px 0px 10px; font-size: 20px; color: rgb(19, 22, 31); line-height: 36px; } + +.helper-platforms-row { display: flex; margin-bottom: 15px; } + +.helper-platforms-radio { width: 113px; height: 90px; } + +.helper-platforms-radio img { width: 25px; } + +.helper-radio-wrapper + .helper-radio-wrapper { margin-left: 15px; } + +.bullet { position: relative; padding-left: 25px; font-size: 16px; color: rgb(77, 80, 96); line-height: 34px; text-align: left; } + +.bullet::before { content: ""; position: absolute; top: 8px; left: 0px; width: 14px; height: 14px; border-radius: 50%; } + +.bullet-negative::before { border: 2px solid rgb(255, 85, 0); background: url("../img/helper/minus.svg") center 5px no-repeat; } + +.bullet-positive::before { border: 2px solid rgb(59, 182, 36); background: url("../img/helper/plus.svg") center 3px no-repeat; } + +.bullet-positive + .bullet-negative { margin-top: 15px; } + +.helper-user-types { display: flex; justify-content: space-between; align-items: center; margin: 40px 0px; } + +.helper-user-separator { margin: 0px 28px; font-size: 16px; color: rgb(77, 80, 96); } + +.helper-user-separator.disabled { opacity: 0.4; } + +.helper-user-radio-wrapper { width: 50%; } + +.helper-user-radio { position: absolute; z-index: -1; opacity: 0; margin: 0px; } + +.helper-user-radio-custom { min-height: 145px; padding: 20px; text-align: center; background: rgb(255, 255, 255); border: 1px solid rgb(218, 218, 218); cursor: pointer; } + +.helper-user-radio:checked + .helper-user-radio-custom { padding: 19px; border: 2px solid rgb(247, 147, 26); } + +.helper-user-radio[disabled] + .helper-user-radio-custom { opacity: 0.4; border: none; } + +.helper-user-radio[disabled] ~ .disabled-checkbox-text { display: block; } + +.helper-user-radio-title { margin: 15px 0px 5px; font-weight: 600; font-size: 18px; color: rgb(19, 22, 31); text-align: center; line-height: 30px; } + +.helper-user-radio-text { max-width: 270px; margin: 0px auto; font-size: 16px; color: rgb(77, 80, 96); text-align: center; line-height: 22px; } + +.helper-checkboxes-row { display: flex; justify-content: space-between; flex-wrap: wrap; margin: 30px 0px 20px; } + +.helper-checkbox-wrapper:nth-child(2n) { margin-left: 4%; } + +.helper-checkbox-wrapper { width: 43%; margin-bottom: 30px; } + +.helper-checkbox-text { font-weight: 400; padding: 0px 0px 0px 45px; } + +.helper-checkbox-text::before { top: 6px; } + +.helper-checkbox-title { margin-bottom: 10px; font-size: 20px; color: rgb(19, 22, 31); line-height: 36px; } + +.checkbox[disabled] + .helper-checkbox-text .helper-checkbox-title { color: rgb(196, 196, 201); } + +.disabled-checkbox-text { display: none; color: rgb(19, 22, 31); font-weight: 600; margin-bottom: 20px; } + +.disabled-checkbox-text span { color: rgb(255, 126, 0); } + +.checkbox[disabled] + .helper-checkbox-text .disabled-checkbox-text { display: block; } + +.helper-checkbox-description { font-size: 16px; color: rgb(77, 80, 96); line-height: 22px; text-align: left; } + +.checkbox[disabled] + .helper-checkbox-text .helper-checkbox-description { color: rgb(196, 196, 201); } + +.discover { max-width: 270px; width: 100%; margin-left: 30px; padding: 25px 25px 30px; background: rgb(248, 248, 248); } + +.discover-title { margin: 0px 0px 10px; font-size: 22px; color: rgb(19, 22, 31); line-height: 36px; } + +.discover-links-list { display: none; } + +.discover-links-list.visible { display: block; } + +.discover-link { display: block; font-size: 16px; color: rgb(77, 80, 96); line-height: 30px; text-decoration: underline; } + +.discover-link + .discover-link { margin-top: 10px; } + +@media screen and (max-width: 1100px) { + .helper-row { flex-direction: column; } + .helper-content { position: relative; padding: 55px 0px 0px; } + .helper-accordion, .helper-header { position: static; } + .helper-accordion .helper-header::after { transform: translateX(0px); } + .helper-accordion[data-number="1"] .helper-header::after { top: 0px; left: 0px; } + .helper-accordion[data-number="2"] .helper-header::after { top: 0px; left: 67px; } + .helper-accordion[data-number="3"] .helper-header::after { top: 0px; left: 134px; } + .helper-accordion[data-number="4"] .helper-header::after { top: 0px; left: 201px; } + .helper-accordion::before { top: 0px; left: 0px; transform: translateX(0px); } + .helper-accordion::before { top: 21px; width: 25px; height: 1px; transform: translateX(0px); } + .helper-accordion[data-number="1"]::before { left: 42px; } + .helper-accordion[data-number="2"]::before { left: 108px; } + .helper-accordion[data-number="3"]::before { left: 176px; } + .helper-accordion[data-number="4"]::before { display: none; } + .discover { margin: 50px 0px 0px; max-width: 100%; box-sizing: border-box; } +} + +@media screen and (max-width: 992px) { + .helper-intro-row { padding: 120px 0px 155px; position: relative; } + .helper-intro-title { position: absolute; top: 0px; left: 50%; transform: translateX(-50%); width: 100%; text-align: center; } + .helper-intro-description { width: 50%; } + .helper-intro-navigation { position: absolute; bottom: 0px; left: 0px; width: 100%; } + .helper-platforms-radio { width: 105px; } + .helper-radio-wrapper + .helper-radio-wrapper { margin-left: 12px; } +} + +@media screen and (max-width: 700px) { + .helper-platforms { flex-direction: column; } + .helper-platforms-section + .helper-platforms-section { margin: 30px 0px 0px; } +} + +@media screen and (max-width: 600px) { + .helper-intro-row { flex-direction: column; padding: 100px 0px 0px; } + .helper-intro-img-wrapper { width: 100%; text-align: center; } + .helper-intro-description { width: 100%; margin: 30px 0px 0px; } + .helper-intro-text { text-align: center; font-size: 18px; } + .helper-intro-navigation { position: static; } + .helper-navigation { flex-direction: column-reverse; align-items: center; } + .helper-back-btn { width: 290px; } + .helper-platforms-radio { width: 90px; } + .bullet-positive + .bullet-negative { margin-top: 25px; } + .discover { margin: 30px 0px 0px; } + .helper-user-types { flex-direction: column; margin: 20px 0px 30px; } + .helper-user-radio-wrapper { width: 290px; } + .helper-user-separator { margin: 20px 0px; } + .helper-checkboxes-row { flex-direction: column; } + .helper-checkbox-wrapper { width: 100%; } + .helper-checkbox-wrapper:nth-child(2n) { margin: 0px 0px 30px; } + .helper-navigation-row { flex-direction: column-reverse; } + .helper-next-btn { margin: 0px 0px 15px; } +} + +.buy-sell-tabs iframe { border: 0px; } + +.tabs { display: flex; flex-wrap: wrap; } + +.tabs label { order: 1; display: block; padding: 1rem 2rem; margin-right: 0.2rem; cursor: pointer; background: rgb(255, 255, 255); color: rgb(255, 126, 0); border: 1px solid rgb(255, 126, 0); font-weight: 600; transition: background 0.2s ease 0s; } + +.tabs .tab { order: 99; flex-grow: 1; width: 100%; display: none; padding: 1rem; background: rgb(255, 255, 255); } + +.tabs input[type="radio"] { display: none; } + +.tabs input[type="radio"]:checked + label { background: rgb(255, 149, 0); color: rgb(255, 255, 255); } + +.tabs input[type="radio"]:checked + label + .tab { display: block; } + +@media (max-width: 45em) { + .tabs .tab, .tabs label { order: initial; } + .tabs label { width: 100%; margin-right: 0px; margin-top: 0.2rem; } +} + +.donation-btn { border: none; border-radius: 1px; color: white; font-weight: 600; background: rgb(247, 147, 26); width: 170px; height: 35px; box-sizing: border-box; } + +.donation-container { text-align: center; } + +.donation-container .donation-text-container { position: relative; max-width: 1230px; margin: 0px auto; } + +.donation-container .donation-text { background-color: rgb(254, 244, 232); color: rgb(0, 0, 0); transition: margin-top 0.2s ease-in 0s; height: 204px; box-sizing: border-box; margin-top: -204px; padding: 35px 0px 45px; } + +.donation-container .donation-text p { margin-bottom: 28px; line-height: 42px; } + +.donation-container .donation-text.expanded { margin-top: 0px; } + +.donation-container .donation-modal-close { position: absolute; top: 0px; right: 30px; border: none; background: transparent; } + +.donation-container .donation-visibility-toggle { cursor: pointer; display: inline-block; background-color: rgb(247, 147, 26); width: 100%; box-sizing: border-box; height: 55px; color: rgb(255, 255, 255); font-weight: 600; border: none; font-size: 16px; } + +.donation-container .donation-visibility-toggle.active { display: none; margin-top: -4px; } + +.donation-modal { background: white; position: fixed; padding: 20px 90px; width: 770px; box-sizing: border-box; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1000; margin: 0px auto; border-radius: 8px; transition: transform 0.2s ease-in 0s, opacity 0.12s ease-in 0s; transform-origin: center top; overflow-y: auto; } + +.donation-modal.hidden { transform: translate(-50%, -50%) scale(0.7); opacity: 0; } + +.donation-modal.open { height: 755px; max-height: 100%; transform: translate(-50%, -50%) scale(1); opacity: 1; } + +.donation-modal .modal-close-btn { position: absolute; top: 20px; right: 30px; cursor: pointer; font-size: 200%; line-height: 16px; } + +.donation-modal .modal-close-btn:hover { color: rgb(44, 111, 173); } + +.donation-modal .modal-header-text { line-height: 65px; text-align: center; } + +.donation-modal .modal-subheader { text-align: center; font-size: 20px; line-height: 34px; margin: 47px 0px 13px; } + +.donation-modal .donation-btc-address { display: block; text-align: center; margin: 27px 0px 25px; line-height: 26px; font-size: 17px; color: rgb(52, 144, 230); text-decoration: underline; } + +.donation-modal .modal-body .donation-amount-btn { width: 170px; height: 65px; box-sizing: border-box; cursor: pointer; background-color: rgb(247, 147, 26); border: none; border-radius: 1px; color: white; margin-right: 30px; margin-bottom: 30px; } + +.donation-modal .modal-body .donation-amount-btn:last-child { margin-right: 0px; } + +.donation-modal .modal-body .donation-amount-btn:hover { background-color: rgb(247, 147, 26); } + +.donation-modal .modal-body .donation-amount-btn .donation-amount-usd-in-btc { font-size: 75%; } + +.donation-modal .modal-body .donation-amount-input { width: 41%; margin-top: 20px; padding: 15px 15px 15px 20px; border: 1px solid rgb(218, 218, 218); border-radius: 1px; } + +.donation-modal .modal-body textarea.donation-amount-input { width: 91%; margin: 33px 0px 30px; } + +.modal-drop { position: fixed; inset: 0px; z-index: 101; background-color: rgba(0, 0, 0, 0.38); opacity: 0; transition: opacity 0.2s ease-in 0s; } + +@media handheld, only screen and (max-width: 60em), only screen and (max-device-width: 60em) { + .donation-container .donation-text { height: auto; padding: 0px 0px 35px; margin-top: -188px; } + .donation-container .donation-text p { margin: 0px auto 28px; line-height: 30px; max-width: 480px; padding-top: 30px; } + .donation-container .donation-modal-close { top: 20px; right: 25px; } + .donation-modal.open { height: 700px; padding: 20px 38px; width: 620px; } + .donation-modal .modal-header-text { margin-bottom: 20px; } + .donation-modal .modal-subheader { margin: 0px 0px 13px; } + .donation-modal .modal-body .donation-amount-btn { width: 157px; margin-right: 20px; margin-bottom: 20px; } + .donation-modal .modal-body .donation-amount-input { width: 39.4%; } + .donation-modal .modal-body textarea.donation-amount-input { width: 88.2%; margin: 30px 0px 0px; } +} + +@media handheld, only screen and (max-width: 40em), only screen and (max-device-width: 40em) { + .donation-container { display: none; } +} +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/hero/footer-bg.svg?1528322191 + + + + + ver 3 Footer bg + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/netstatus_normal.svg?1528322191 + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/menumobile.svg?1528322191 + + + + + menu - material + Created with Sketch. + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/hero/overview-mob.svg?1528322191 + + + + + bottom hero + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/ico_close.svg?1712660896 + + + + + close - material + Created with Sketch. + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/logotop.svg?1712660896 + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/ico_individuals.svg?1712660896 + + + + + user + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/ico_business.svg?1712660896 + + + + + suitcase + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/ico_developers.svg?1712660896 + + + + + notebook + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/ico_arrow_down.svg?1712660896 + + + + + ion-ios-arrow-thin-down - Ionicons + Created with Sketch. + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/main_ico_instant.svg?1712660896 + + +fastP2p +Created using Figma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/main_ico_worldwide.svg?1712660896 + + +Worldwide +Created using Figma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/main_ico_lowfee.svg?1712660896 + + +low processing +Created using Figma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/home/bitcoin-img.svg?1712660896 + + +Ver 3 get strated illustration +Created using Figma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: binary +Content-Location: https://bitcoin.org/img/icons/logo-footer.svg?1712660896 + + + + + Logo + Created with Sketch. + + + + + + + + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q---- +Content-Type: text/html +Content-ID: +Content-Transfer-Encoding: binary + + +------MultipartBoundary--wPC532dnN8Fk636bqfZ6JBmU58jMX1NRLMzuw1RW8q------ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 18b8943..f1c2c6a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,12 +48,3 @@ the helper tool after doing them in this repo. Participation in this project is subject to a [Code of Conduct](https://github.com/bitcoin-dot-org/developer.bitcoin.org/blob/master/CODE_OF_CONDUCT.md). -## Donations - -This project, developer.bitcoin.org, is community supported: -[3FkenCiXpSLqD8L79intRNXUgjRoH9sjXa](bitcoin:3FkenCiXpSLqD8L79intRNXUgjRoH9sjXa) - -## Questions? - -Please contact Will Binns ([will@bitcoin.org](mailto:will@bitcoin.org)) if you -need help. diff --git a/README.md b/README.md index 18b8943..3e148d3 100644 --- a/README.md +++ b/README.md @@ -47,13 +47,3 @@ the helper tool after doing them in this repo. Participation in this project is subject to a [Code of Conduct](https://github.com/bitcoin-dot-org/developer.bitcoin.org/blob/master/CODE_OF_CONDUCT.md). - -## Donations - -This project, developer.bitcoin.org, is community supported: -[3FkenCiXpSLqD8L79intRNXUgjRoH9sjXa](bitcoin:3FkenCiXpSLqD8L79intRNXUgjRoH9sjXa) - -## Questions? - -Please contact Will Binns ([will@bitcoin.org](mailto:will@bitcoin.org)) if you -need help. diff --git a/SHA256SUMS (3).asc b/SHA256SUMS (3).asc new file mode 100644 index 0000000..644ad9f --- /dev/null +++ b/SHA256SUMS (3).asc @@ -0,0 +1,196 @@ +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCAAdFiEEEBWY3II8G1+aZiSrpeCQegOA5sMFAmRvq2AACgkQpeCQegOA +5sNW9ggAqQZ9F2F5widyI8pUpsyx1vdjaqPKE/03OF+B9spKirudstTLaoVfD77n +lfGdd/kFyzBuLzKQWJaQVsUU8BKj5XvtsG5+KfMToXRzPmYGiEqeqZvPyPjbjMYQ +hCPt/dKtSshAIwfevXjfrvBHcZ7KVkI7hk9om9GyISCw/lRHruu4U8gNlSFwhGLh +dr7bbCCH4GAso51at1Ce+ENQ+5A06rvkuzwwnxM1VW4ld3pEtgEymZmdB+b1QdfK +aksJFi9QBUNoTSpxngwakwBAlHT3auWR4SYO9PSzfjbLrVav/PoRu0TKADx0WxzM +ibXLf8Rqcj0LGo+TZG3A1+yKarca6Q== +=s6xs +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJHBAABCAAxFiEE8s/Eq9C5nYN+67fQm3m0VpHbQXMFAmRviVQTHHNlYi5rdW5n +QGdtYWlsLmNvbQAKCRCbebRWkdtBcxX4EADJD9X4mQ6frSMqAcPIYYoNK6Za2nRU +bJOOR8Qx+6jx8FjOb7yzoxnZZDj6+dal5HhoAas2q/MOAvyrUN1MZle89kagNVNW +a539380ruVb5cfTiYMuF6UAKSBblLWZe1DlN4JfQNBBa2PJxDrluWD0CU3wGjWCL +NCxspuwexUzQ8rFqmFZ6GSG5b4nctiwOlueB6v9FhDew+Cry/LGGijj4nqP28uMr +aH/TCafafkwZWY4h4q+QtQb6fHvsJpnKk6YNTS/3kGZnUU36R5eaCWBScmiFAfJL +M/IkkE4U3Lfa8JF510TylpTyfIYHxMp+f7bXSh8BJul7WnCU4eLpDwvPEZnbeYXi +ULohRpqkuuYnLxPQ4vlFnJQMH2S1p5Q1v/QRvKcEAinpN5MkGH8r75zL1AYbYb+e +DGnFKdpuCZC6Yv5uaUVjN5+RpTNTP+mmbYs0UE4KOx/ie/MqBVqAOoqP1AU1rbso ++bTsCLIqpOoKzI9a9igOzNvNmCJH71moKVCgcRKYXQRhQoPvf0E7YaeP1WwBbo8n +IUWVSPE/NpLptmzVhsu+DBKonL1ODqeTjJq/fkDkwckgxQjc2J/WZ2U1GgcKSF+w ++MGcQm+ZXvFCjAAQlF+MYA7i+hi/f7ey8rw0ixeqvJGxYMSZuZ53K+JSs8Fq6KrY +CxXsTiP3Ky6Xaw== +=qx24 +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJIBAABCAAyFiEEFSgSMAeFyWRE0zNNF1ZXMuCOXkEFAmRviLkUHGFuZHJld0Bh +Y2hvdzEwMS5jb20ACgkQF1ZXMuCOXkHJ6g/9GYyPs7NU+YuhGSPWe6gKo28jTu9w +3bkpsaeJVZydKoaCLynq0v7YoSPQQzp4zLt02b0qoivUqSlbyiJpDyGoguJC+vz7 +ohLYqF67C8weEa8wpVjxW7Ki6VrtoAzdGt6Kga5Mj8CfbPO5w1S9ywJ4YC/SzRTe +7VQxknChN5BjqTO3UH5qhAO29A3gsocME7EJsnKc1l8PRN2LWytLm5pE3SnDq+h5 +TLXPdJOVeoD5eUf7+rWyXhOlyrnIlwgHDn+bs1lGAPRG4GDKBL51Uyp/mSXEBJ0V +6WLAwDY28Wik/VrCzWVGMzKgXiGiCyTZ2xnoJ25fNAvB6EP3/vtyWiIe3LborlIu +/eZFWj3ZFtamQNaVkkYl0vjbUOThg3YOQIslBTo5oDMxXFoy8RdZqvHUeoFFU2Ce +5hI7yjke+X79LcMNWSgGnH8P89vL12o5oJ5iIyNuXYGU4WEdVrwE9mYkHs8ykMkA +fRcq87Ecwg3W9JacivRYqpxZJSQTOZhu+Lk04lgvsHd9pZWa1jB7XKolzTPqyVQu +kWIwRDCGHUya0WH8zYMCFV0zoNwcwbB+LuvlXx++Y7iWsnUkqNNR40r5XUkmGIt2 +P5JjdPWboiKX7Da5uuESgJHZqxhyp3IqkgX3WUrxd3vTYkJZy2lLvxVWS3pbtCZE +Jj11FWt2yMmoWa0= +=jloP +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQHKBAABCAA0FiEECtg4d8HwzR7pvWYK18x3C4H9IqgFAmRwGHwWHGJlbnRoZWNh +cm1hbkBsaXZlLmNvbQAKCRDXzHcLgf0iqPYqDACjmeTS7YxYO2ax8oenmtOsWz1B +zJmXTVMYTTETZoOIQ80R0vWEhT/nVcRJKBHdW9gNzE1TGZlOgCG+KW7Nngys4jko +SK/EoC/ULa53PB0rJWyU8N8Vzb4JX/kye0aB/b9xpP5ClJTQNwIPfi9M8RrliED7 +qhmtvIf8tc/1x2ssKp4uQqBO2cqmof7cu5+WWGI1q/96/Fb9ZkKU2OB96rRAWxAW +xZYEWUF3DcZN9iLohPjKQdka/aNmJQE38fOSATNkv6SkuowkWXAq3l8MOd7vdmCs +7EZ07/7vi2IS7nczr2BHNEOe9+4ZgyBWHYhZwEoYQjQX7aCkw8hXAp6dCyX0vDZG +KJXayops2PF95F8SxTZ00HXMgUkbor87SW219wF6ApN3OAYAzsZJsvZG+hjUzE8W +sc/lVwO2CGOVpIdPShknsLw+/VCure5BinxfRuoFo0pZiE8VMIOOqFdnyHqcVotM +L20PfhZNJJjOmkgPPlnfQLAT1tQsrWYT1x9zKOI= +=NfRo +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJSBAABCAA8FiEEwGCmY1kT2Yo1h9fbHCSR/+sO93AFAmRvs3ceHGNmaWVsZHNA +Yml0Y29pbmZvdW5kYXRpb24ub3JnAAoJEBwkkf/rDvdw5oAQAMzotZ4QpFXk7aUK +ZYmZXcSHVr/RZsXtmOJi8F9aEjJdYAQwnVgPzUU+CszGFp3zEaodkICN5hRFUuFA +5ixku4yex0mIvl6r/O6M1loPyRLhpPKA6E29ehed5Sz28QIo3InBv1nkvBKiqwZX +N6RDWrsDgRxiRdtETR5nUSVcLXshjxYCXgQUw7Nc7jFdiBchvdvm7JWsY8jTZhyE +LETbc/PjIRL7lh28IXT9M3EqEWpcIA/a9hYmlSR4FJetxAnHr88Ovnv52Tpun07e +emdeuIIXQ4baIVFkZUMX7XXEArkBBrT2SifjVtlL2f6HH64qu50/e8ez/EfgUSTG +uWPZENwmOvHTtIoDxJz/F0Mn5+2NKYgo0oZVtYOVCEPsG02FtcSxCNh4No00A9ds +v/f8BYtknukzR09ROlEZLisMa4UjlmEcsj9swuuCXJZB0go6VfTROx/nC/X0p860 +ajlktNMEvtBR4IGzwHsz9dDBw/GRxVEF7H43+gNCahOX0s1KPyPE1mV3c/73tq3G +TQeOBI5drO513ZsIhYwYy8H0sR1pJwgOW/b1AtWtJdndWAgfRBF2eRqaZX72wSUG +ueZ+vJ0n055axOyjlGBI2aUGci4TwUOwbtNAG2Z6czsXMuO/PLAanRbuHz+bFHwd +GSrMnUiOl4mQfUMueAYsGyhISTNf +=aU1w +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJHBAABCAAxFiEEz7FuIclQ9n+pXlWPLuufXMCVJsEFAmRviB4THGZhbnF1YWtl +QGdtYWlsLmNvbQAKCRAu659cwJUmwVwcEACxAmVY9f4m6EHn1NeXY+Di2ahTwzGN +tsWLCXXcU/8O0SAgbdKIcCaX1+p3/ELvKVb5dx5z1YByKiGfvcC3NBSw4lyVFPjW +1PTLpLhrXdxyaXsU19H7upRmZ8UJk4Tyj2RwMCDFlyaYpjDCqP+BnCDdNKDUg5Ux +JS0WTJAO5212ooBOf7KvnlbJbYGpySe9d81qnmnmDcafhrqCQ8Mxg+QvNXdn1wcj +nSdsMGl93xqU1yt7UdTZA4TCFkzSRaRazJa2vMLC88jBTC5hORtN0Z9Qv1+FTFWX +F0pZcQ+nhW7Ha851R7Tefek85J/9Q+SKA5TRVPQXKWBLpvWUe/QlWCp4MS3taX1l +1SXx2OM8Z2B0ebxUR52XYgCmZ1Ongyai7ORYdjLy+mkTiEXHTucJm+odWGgYnWEG +zfcmse4oKgQZ4rO+tgrJkjkq1hGt1mC3AkBvvoiv1x1/u//64g777TfvwuRAgLDZ +9nf6cQFcxRMVmXGt52pvfLUGKGtQcxqQHwvhx3p2/x7SjBbF7ps/PKmLk6Tk4ysM +GeNOgzibMkPFmBAHerCgj5raIXHjnN9carKr3BODVxCP3FUAgCLBsB2CisevNLyK +TxD5Drq0ttQhcn4sraCEVB+ynDe2pmcnjDg1LLgPIPN9+b1/xryPhXv/fOOWZffs ++R38EGscZQwqjw== +=7xHu +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEE8Z9f8rBYnsNBIgBFugP02+DGP7QFAmRwgQgACgkQugP02+DG +P7TrtxAAp3ZdSYAUrOfdyzT60DzPZWRkFSjv93yCoeCeE9h6x6bXjxS+78+DaZds +7UNjo3v116ZOVES8MbiEU/qypRqR88r2d34qgRbxqTIS+5fTGFSLUNz/HXwx3qKO +iqcEPZN5vpo2e1bPtYfohL816zxgmRwRTzinHzWx5HLO64oJ5lb/AH/Hkvhgp+qR +NktbZhZBD34nyKCoDVs9QimRewLwV3pGc6DHqSIimSUGSSGl/l607u3DCMM/Vi9d +15XJVsktNR+a/vcF+Oq9kGdE2cm1nq0UnEwMB2Wt1D05Aqb8E4uHDeVkhPFd7gnZ +dpF04bE7uJ62HdgWT0bmeepz4KuDKKEKe8PI0wtWywmtzQVqmJQ4NEo7hkAeOcfV +1hFyKLfD/z691GrMdnwtf7OyRhUis3ArPCfsiRzkiw1tSsIdKIgzv/kKk562jMNe +LD/j/mz3PhQl3CsXHNjndGBdx8cbHvG2McaNQec+HpOR7fHH+tVEc9SP827L27J/ +8HykxmyFCGUoQtnrFJd7oYWlImjS2RcmIBz8abkKXx1gpLdQpk/grwgpEQ7Oq1DX +K7+Wh5FL9u/GPqfcC9xy7eEKhFumE2Wl2tX/wRKU0/XOk02T3Z3k1RtjOG0L0Azi +fW0z1+0AI9CnIRcVrNTXHl8Yv38L74Bs6tFB5DTOjKUmlaAPdZs= +=0gnt +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJFBAABCAAvFiEE9Pxw8HMQAoQk78IKjkJWWT8XdyAFAmRvi9gRHGd1Z2dlckBn +bWFpbC5jb20ACgkQjkJWWT8XdyB5eQ//SoDnuCQL8f6dQre7HnDvFefS9AHMg5Cy +CcTKOCNv7SqMxNPq3cViVQiflOEP38hGd4gV+ayh3+ElMwiov6JxOXl+8XR5pdN0 +o/38iC3wig7ybMl0ya0k1CUEc4SLQmkYkJb9Mmo9YX8YizQs0t8olUftZ3Ygcr5n +eyhfm/csNoDN+YaVNJO6YnsvV6M7A8UYH7kR/lmxUPPKgULh7ftE2PWbsIXgdHf2 +SNeGU1GAxE01cPUXXfLZ0BJUxpomZreJ3cMYxi49fjg7X18RahvmuitWEWA75sYt +36Ek5t/pBM8aiFpHtf8Gt19dVC0zhp4wilU0tsaEvWkwlz6RuYA88Fhi5Ub6y9W6 +zB3saCe/bdo8iRlT0MmE7V/ZkRXTsWvo+kEz7Ep+8e9gBy8kMs9vaEZBorfro3mU +4KxSf6XvaKwQQyCP9//h0nIbQmg/8++e8mQQzf3IT6UlCKSLAufOr0Gnne1e+CBf +eplZ00klP5RbqgVEPF33Qj9djhVL/isemX/ER3/FG3H7tGjO8kkJ7NmlLCdACgxl +aoh4Hv74BpyOMd1J2Za4jKMykieyX1yBSvNx4N2bgYGD7MN5BhdfP/CSyyMpsqOF +DXVMMz/Z87KR8GUNC6RS7FbbtfbcnK8JPmMaZ6/LmSdVF338vlyupLqgudUNFgMX +P7KD9AiFDe4= +=aVsE +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJGBAABCAAwFiEE0dvyxLlvLev0wWZUQQEIES5+qB8FAmRviIISHGhlYmFzdG9A +Z21haWwuY29tAAoJEEEBCBEufqgf8JwP/33uIJ9r8RiPcGYT1wjaucv6NjNETS1f +ErJGGam6pffWA5HsLrNSZacdvMST5YkKiITj5N+M/QueqnWosg3ngpNpsuiEfJby +uf6//m4vDWYqEmbPsfJCCQlGAM+z8+MZj6huojLN3H/VnyoJZkqshYgGYhkC5U+M +QKV9ObacMytB53dMdSEOsjilr4yvsI3hKpmdj8D9QXR9cFjrY6cg+X1uAfLtcsBc +HZJffmeNbdnEp97g60v4pYxyexqcO0kKYu9cycgbtrRZ7SJGz1tfA3Wv1k3CDK9f +kc6LMuGGQ0qTulVzO4IkmdEtbclHbcnJ1ysFADyzo1gmt/4LNaK3aPX52FHwhMqC +f//scegtuGW41EJLAmirJ6leZe6/No2jr9lesCXhXf6XSH++P0prAVtt/NNQeSg6 +pSrctOpWbTcbvKSXyKajj9ZsLCLn6WwoH2U977ycM46IcBXeVMWAlDPFK5Fr9wk+ +YmsuG2ct2/AEVHHU+rdziGmzols99SJK12hNnCqE91ws6g8YGHWpLhhtiQQFsima +TaA3nuc4+zGJdxaUAE7qve2da4scQANKyUMQyR9Ec8KpexC7PG7A7ybSREhFWjCR +p9XPQ6H/MzKCGGQHxQH/Ms2izGWnEDnXnx/ewHiTkWvMdjpw9D7A+CGD7EweJp1j +tCnAHkCFmFc8 +=M9+W +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCAAdFiEEKHrkyhGHxowItJyy0RvU8z8dtJkFAmRwXCEACgkQ0RvU8z8d +tJmgNQf+NHWdZ92Hm033PwI4ictfz0n/vBZ1hqthJ+aLboyd/RpciN+mJ3wkfqIm +cEuew3axvp0A6ObZc8+e+NRiQUSVCQydW4z/MJeJUOJ6we0ZFZRTJ8bqgQEcOMHY +Zj8CVzJkOhasOrCIfJGl5DgSo2C8bTDo81l9BLtsWbkBf/ny80Bx9xS8mNZ1THIg +L5PhfG6xnoDCH1W6f3Hm2Bx+lX8nyi6ZD+Re1YZmU2sB1jO5eq96Lbc5HorKSboo +cQgjDVVpJCEV2fWmBX575AAjfRgmVn5nD6/QWy78fym8NzCLyC+tDZ8lL0IAq9+b +kzT84BM0t/v4bMSJQOPmV8DXRPasjg== +=5bO6 +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAmRvnvMACgkQHkrtYphs +0l3NPAf/SDRLtTVp/ZjEyQ4wZm/OmnzieAJguSdsPud25enjM80FGb9uZ3epuSi7 +nIAO93BIdLufiococ2sYxPbdKAcT5LRhr3YWBARuc8vW4OSYSNPI4J4t3jA9iQXq +D91sa7sMJT1o4FkyaC6xzxS3ScyBYjNG7vWevdOYe5bufS1OVJYs5Cj1l6Dr5HKO +Ro8ogX55D6QTYAvIKPtVvNFzcwZ2FX6CO5gotR0AymWR6HxKpIyPjENohqfNdS2u +jwXagA7gKHEwIsaLmb45f7u+wxoD0706AMBqW0oovzmAYxEUsB0qc3aapnZOf07f +5UZ/ptwokI3cLjAKxGzNoHQFSsnI9Q== +=Q3EX +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJTBAABCAA9FiEEao+cJmUo4lrrHXcxwjcdkctxbqcFAmRviEIfHHNlYmFzdGlh +bi5mYWxiZXNvbmVyQGdtYWlsLmNvbQAKCRDCNx2Ry3Fup9d6EACrlxvZwx8CIprn +yKq3RFSJmA3FGX2wGAP5ClGxtitqQ6iXkV/BhwATm9jbYotCvSfV511iUINS+tZ0 +fkdgzzs9o+dOBbcb2bAJsTZpDiUx/46iK48H8z30faCYvsOua25eOCcK6CyqHNPp +8n5iEojtY4dN3Xdv28mnJzfIdMzRk/2/Zyf6ttMlKBP0fYJLOkxWHndj5QH7u+7b +MyQrLzYN0Rig2siWri3aggCWulenQI5X1wLpHM+Q34Xn6pOzp6rGPHW5R7KoOZH4 +s/p9MkQynGkc9BBBYyrhy56eMZZ1hWl8yCq9C7kAmo2yQ+5aOwJCcZzYzi4xBscn +qAt9McDYO9b/LbxhQ+DsEd8CQrLStDEQyJqocEYSsFIIrgrPTwur8fQUgQQQTnF8 +3Lq5uUJGew+wp2dHNCaylMA+oO6yV4oujKVBVyfnquYd+jhicv7PdaGhWcusff7/ +56tXnmjlK+EfWwfXHzeBW8F6UxgFpJRE3b18faLfjdBucCQOaL68Na29Xa7TMXEK +qwfoTPNMGVz3FMzlzyOBmFwUs1qIR5rIFtZwAIRmDLnGM8qspu3Xw3K48TmmcXf4 +B4dnFVHxOshq/hR0QFa7I+ijT3vhsWOOMnX5XPzlzsmk/5C3FMAakgamoGqJessY +RiIaGphbapNRXC+k52try4ciMBQUUw== +=vYj/ +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQHLBAABCAA1FiEEKOcpCfFxf+lgd1T4p76yYhZ4030FAmRvip0XHHZlcnRpb25A +cHJvdG9ubWFpbC5jb20ACgkQp76yYhZ4030gFAwAgfOGR5UxAAQ/PmwoE1JjG4qP +Q07ee9XoThDNBOxKvY+pUF065y+/kCgcsnaf34GyEM039mJQgWUhUvN/OlJdKJAC +FXTJcDdBC8HklbWyOqEod1cfKmVx4bdqLZnM1rHBKkgvodD8C8o80M8yisL1yxGM +1HWpQfPipj9gM3LdVZF311xuPSUwdlyrk/naSjj9KffNFRBVZp3sqmfaWQ7HXeMG +8ldZm5b9mDIKJVDJy1Oc+U5FZ+WWNNoRM2sP1deLLi6qVYayOzpqqg63yMipKPNT +fF7XPsb9r8nh55Lz82T0zKTLBWunrSlpODG1OQynGkkBuI5QhNY1ec4ev46MxIo6 +9FmwrFrE4Vyra9xpW2/JL69wFKzLieKTFPC0VI4JMB0MJK6gbWRMC9RvY1iydBsP +8AbkAJ3uDOtbMXO+2g8ZFdNtgol5xtLlramLTsOjhTrMFexvIl+eRY6T6YWhUrt8 +zE2gEDzvvRHsOEB7nlkLZQogfrSiAzz8iSY9r5sk +=H/c/ +-----END PGP SIGNATURE----- diff --git a/SHA256SUMS (4).asc b/SHA256SUMS (4).asc new file mode 100644 index 0000000..4b8eb4b --- /dev/null +++ b/SHA256SUMS (4).asc @@ -0,0 +1,136 @@ +-----BEGIN PGP SIGNATURE----- + +iQJEBAABCAAuFiEEFSgSMAeFyWRE0zNNF1ZXMuCOXkEFAmXrSeYQHG1lQGFjaG93 +MTAxLmNvbQAKCRAXVlcy4I5eQUbDD/9O0JFhl66mKiJNP7ToZ6lDEbc1cgPhHu3x +iP457IutKG7NhKqvUyriCeBq3nDn9WFxrQ+m1uy6IWc6xCcmOzxsFKIXTdcg1ZlK +sZTFKdYH5jzqpNKmQOEIzTETxhNsou05TTO7Am07pbgu913JiMCHLcZ0Gi17pJg8 +T+KqIBxyTFmYzxhFsMYGnOC7anzEWJbf59k1wXqUNypYjGjjTaSPRe8GKzFRYNjj +KlLURWoesioRVfhA7nqCaHNaNwlkzu2o/6plXWj0ZbEWDwpo1//9Gz1id2T9pgc8 +gg+zUNqWSCAZI14oRP/YJ4ppGA+0m5NbH8j3OPbMvLQ06BLg1d4tp7pSemdaurzj +kzoFGPjNQqc6vryebXoE6Eh+7tBnKehsJAUBgF8YEiHbAXFFaBwja3FykQ6PKinT +9nn/RbZTZAL4NiefIqCVOrDjcb54OYsP1Vf1Jj4nHSlumlrt3xkrf62ZJLcU8xtF +YjCYfjzsaCzt9zpxNWWCem6i3jadvJIcSlyBeyvLjNJhFvioGGaVi9xpYYZ536gH +VY0ZNujWZaS1lT8gm7z2XrT7KYwYHlohy1+n5j180BOXPcZBh7krgbY4LEKjGjw7 +fENzIKGTB8ve2nPJfp+srKexJvEWX+xeyqx7tfRLAFpDBhvmSjcxo/G5WvzGoabS +b42VBWzCbg== +=asQO +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iI4EABMIADYWIQTDiPaWH7lyqVZ44yf2JxHb3KiuVgUCZetzVxgca3ZhY2lyYWxA +cHJvdG9ubWFpbC5jb20ACgkQ9icR29yorlYqrwD7BTlyYXBU6Vbrn6hYqw/WLMH+ +sZChBZMnE43WPf58zIQBAPocshnDnQNqC0FMSJQ8nKpY0nALcaULaXQxMTSn+8oB +=SDns +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJHBAABCAAxFiEEz7FuIclQ9n+pXlWPLuufXMCVJsEFAmXrSMkTHGZhbnF1YWtl +QGdtYWlsLmNvbQAKCRAu659cwJUmwSLtEACeD0yksff4F6lOBV5tPxj1lrvtJDSI +QbI9R7RnKpYV8BMiC6LDHW8ABeCNawgqiaEo2kRuLD7SkPanK9NuUhtn6jOqMpdz +BnblGdrLL9PQkqVS9x0rMg0yhZucpy63BLbbbLHBY+xjDYRi1vEh+rBV50Qt8O52 +0fzWFj8yKuvMW5JiCIMfrcT6/YPDoeBBHEw1nRWCPnsv6EdjAcnJeoKdtHaJcPDQ +VG66rHzaRkY7y+6gcTOlQW8gL1Zp5nkNf3+Vm/HjnQzH/nOn3MIHW9EIc48PwxtK +8Ut+2rpuAZ2RKWgSjOHGLpb02vOWnMZrf/yQSRWN4vPtUM9Fx0QWmYl8Al3BA92w +1uRJzaZsjcDJ0NE147aeHdln4WLo+aQA+AP6V5C1PzOCSDqlpyl2jvwsmqqFrSfw ++mJBZqEVF9PiZzHw/PaAHvlAARD2NQGeCx3rP4F+DcQ1hTBLVNEMmYgQ8YF4Xh/1 +7V6hcSBsYUGaQDk5kxmKnQqa5B4jxeyZL+0kBrCDnpMgXSFhO2O/QH8k3E/xljzO +g936gIIX7wP5HUxOXLRaTLf/mPdx6dQbMPRhcsIgmzAlzfYviOmoUBll7nT+5Y4O +S1WYIW8aMoe6cnnt0j18wvpn5YSVIn6Cue2HEGrxqzrq/Sod7SYqN7ARJw3vK+W3 +LHcpneutCuSupg== +=tMd+ +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iIcEABYIAC8WIQToauc0OWJbvuMGqua2bUJ/hzyxowUCZe7oNhEcbWVAbWF4ZWR3 +YXJkcy5tZQAKCRC2bUJ/hzyxo4aGAP46HumQuabhB9xzsTRILKS6pjK2/hh7bxSj +8/7mG77ipgEA1+S0lzOYC538s+SXX07MhDEukNzaO05Y0KW8A2bBSws= +=W8iE +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAmXrW+EACgkQHkrtYphs +0l0dUwf/apYic14dM7LmB8XXLIKKTaWP3xPli929F5S3JMpUICB6MUu0ts2TgcrU +DdqI5Rs9qmMQ8B6uoDA/eCtezdxTEiepJ7J4fV88PsYKvB/sfrNOQM9089+t5/t0 +yvsZcid2+8b585LwvUteVKDrha3fGBQ9oW8HpPSDNHa1WirSqNihQmZjV1La70tL +VA34B8Vc200RC+zK+vlnkMKph0R3BcTAjTlrH1Ci06Uz2tCZVZ+wOT1u5ZOhBLXA +AVB1NlRFrGVmbADmgoZYjDqFt5+tI6gGenDzLPaSEjGgQT9DHu1Hrkar7Q9G4fIl ++14Me6zxOW6rtpLYvqzd0mAiV6zJ7A== +=c9/m +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEE7ZvfetalXiMuhFJCV/+b28wwEAkFAmXvH0kACgkQV/+b28ww +EAn5HQ/9FmjXoyxNrwluVgcF2jsPrbfv9AIiUvNk19o0sbAGmVB7qEN6zPzx2/8p +PpznbOOrR6KH8Qt0LWVF9kZIbj3NA5aBHW7r4r8YAyWXb95PVO7UCkKR99PKirsZ ++GjIV3CNBNqSEIkspXpPJBqCy0cONs8/UwpgnCCHCTtnXa5cNOm7OVKdWVCY49of +91BPSvIMaDqYH9OeK1I+svBbPoD0Xd2JRGagFXEUWotg5f1yBGI4GlM9LH1Gvpbs +VfsDdqe/QnHQMUWHZ8LLsSAydtbZZFux7gHZlf0FxHBvYaT7+7mmXsVwWpl/Kxys +NVn9PjANQRA7c05rg8ngzRzKdFUvdkg5z6CJg7PYNm/PV8o1BhMrmerTPP59TK1q +Am8X7o6hJvnp7+FLf8L8kKKgo2xF9M/7GKKANmSpZtG8a25TU7orZti5HYhSFKvb +tWWfQlKMhkpOzDDNoF2w2oUALrOTbh0/J1h58ZB1Jyr/e3fxKCjZOFXTKu2NDYMb +rB2TVX9qf8UWpPM1wAv3FykOFU+tZu8PIzJVNtjgLKlu/ra/+IAVu9tpauOITfT1 +4tJKJoPkd3WN99R0+q16MBV7OxDZH+IAFOG58a3vHr4N7us9JWP5bcNVZMUNGbL1 +B06MxJ20K+0y5rW8fjilb6DKQCQr8QtLHqx3Ud4KBXh2bG1ZhRs= +=RvQa +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEE8Z9f8rBYnsNBIgBFugP02+DGP7QFAmXu9C8ACgkQugP02+DG +P7RkkQ//TkB+m2Ut4RNoqhEjXGI5hqO7bSgx1DLdsjWmJ/L8vg9d3ySdnQHbGqjU +8U2DCBumDm3z55LXeQ1F7SEGqJYOKmSgIv4bsuqApoqKD6cudOdTtyftvdMswnTQ +JZOWCbs0jR3wBKPR2UbzX4HABayV14WM4CcGpHdVrO7OuARmANZjczBclG4ydxoB +BMJ1/m26A/p1Huxfe3525GyGxlcPDTazeUlUL36f/9GYWp+U9zOFdZXbTRtZ5Zw9 +YOSJVpt2HEI+H5Gxb2eRzzXNtNHiGrb6VqqZ1z80qAgKL09GV7NuDXsaTLHY2wSl +xIrjgpVECPy2eZc5q19BRsX+5mi7ye0na5ljg4tO49q6/bSGGb9jZvWlP/GTV/OO +Lb+lcH2eRX/EYEg4+lNjHZzO8HFWId82whwfWsSvTRW7Qdn5f2Z7fjSmf11mV/0i +EiEAUmeBaNpn30MVJiiXkT5E0DFr9sn23g5RU3KU8fjH8FyPBex4xkQwrYEglP/7 +5AwOZ1fAUkiUE4mPXJQwS1U7kXkTaCjLIW1plagkLw+WZT+ywhJiMaCE310/HLC3 +X58D6TW6RLEFiWP5bipUqZChZ9XZd4S5O56Kgrz4qvxLRIFBrndkbUVndcgkdLS3 +p8pXylyMNOddm0yq9O+ViKCQV+hHyMWkGPWjYIOsvyGB23sfPmg= +=eM83 +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJTBAABCAA9FiEEao+cJmUo4lrrHXcxwjcdkctxbqcFAmXvPbYfHHNlYmFzdGlh +bi5mYWxiZXNvbmVyQGdtYWlsLmNvbQAKCRDCNx2Ry3Fup2o/D/9bbXVWwIIdERcg +8e9lBPmQz1EPWJgXA6eAbrfDdfV0tAD5pmaOBTbXAOp/b1DrZwSIaiM/3eODF+vs +SNbS++jnzdEzo3kJg2P1w6vNl2pYXgOimUKv49/fShvbtFePmayx8OEjS+1F8fAH +xKK3IOD8pfLtpUJywFbzz3zD5AbODHlQ+BcdzZZCHdmfUUDG1TGbPGSTvKiJ8OIZ +JHHcYj8BsbHVx437xwG4cP91l4IgCECnUZxD3dKyndPiXIK7/FiNvIFVgyf+zoIj +QKpl+xrC2U0vyWjlc7Nx9hIHZnFKQARZxKRPyyQGt5/lMDHqtGMhzewQLfIFO0H0 +3UokPpq0xZGFKT5uVZh49VwX7xm7t6CPfJnAn8a6XH7DJ7shcHR2OeYwTjlsbvuD +lKe2oARimiU3e54F335hUi0eiLzcO8VrtbBM8cd39BuLHYnsuQ/R3mNmu5uH79L3 +hqBHitb9fRtKZqv3A9DOqmx8D7fL7ErNjxfQO7FoVMdffRsu5jcdOaXKc2o6NH/y +6q40tDIUHStD3XONJLcgdK21eCDps8L6db0Z47WOAFw1km+DNY7nViqZKmoZcx7q +JrAccfeQWyXqCyi1EYopfGOzY6Wja1X1dUbSbSKctiP5rnCWgjLjDKJaEjAwDJJe +9+xOSsDwwGy6r1AaF7j4Yvi2cA9x8A== +=VLU9 +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQJFBAABCAAvFiEE9Pxw8HMQAoQk78IKjkJWWT8XdyAFAmXupNsRHGd1Z2dlckBn +bWFpbC5jb20ACgkQjkJWWT8XdyB54w/9FW8/WnC9OiKbgj6P2mK6nhrTuFY5prGR +uhvmMWfblH5atDjyEjepvHCcSgvJFyv7YRcBcpuKOsDdidlAx8C48pBUOA1qpnWa +iDZbdX12SYSVh4cVyRIihMOBkSkf7CMiCi0oR2CBA7CAeDNnMEEC3KQyqMJiHGtn +V/gxNuUpTy94mG130fIkoYcfx7YliDt2HNtuT0LLLx3pk5cqu95mYm7WaAyk0j/W +fjjhI7WiEvRp8jpXddFacsoyAH9FArTy6hPiQ4IwymImctccNJBjM+MADcbAP3im +ZXvXsnv9GyIkzz8hlM3ok1zgZFrqlpqhRgqEqDe8pjKXsPjs0vi9t5S2t8KPqFpZ +Gdk6Hb9AqvQ/ZqjvurxwukSCp2l0vdSiaArZt8JWP+RVJ87ThYnls9Gc2njMtfsb +UpiyK2cq+n+h50ITAWdBEnYAmfsqLSrKBjpIq/gMmSAiE+q0TT549GKWdh+aOzM6 +zsDYMkoH2gv3vQz6Bzw/DOiKWHYVYWUrzkqBYDTHXPKirCrQbIHhM9JhMmAuNAKG +Tccq6SoEmuYEcsJgTcmPakNiuSxetGvNqdjibQLh8kd7RcM4rLIMFTk03l5rsmH7 +O1hu4KBxcRtX1gbhpitDB6G+sSBDVFC5IBey+GDcfPjegQW3MWh5sl+8ikSq0fvP +cYj9CywUP8Q= +=Zw64 +-----END PGP SIGNATURE----- +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCAAdFiEEEBWY3II8G1+aZiSrpeCQegOA5sMFAmXu9pEACgkQpeCQegOA +5sMcKgf/QJ2p5swmO5I3NtOE17UXhwKtV6DKRFBiMb/oxt+e9BeiZbOAVVXowuLi +O8cUEbQL2+s4TeFr1Z71w02636SkASspwYofBBvqT62jJ23rkk199TledW2TvMy6 +gJT7N5Ib7VAcd4sostIu5juWdXgrgpPJSWwjExcSlgWiJ7/CTkQ379QRNplu0gxs +0EmfGPSc4mlWI0XcjBYDvoUCjlEEqIRCis6LSJGFMj+lour7Xb0dYWFs6mieUGhA +Xy7jNZY1rGbYeSifxu211kv1zcYQ644dH1AOciIJ5Kmsj979dbhWlXyaGxzWCLDr +XuqQalOusNH0cEQ0Y0hvXAnIerDCAA== +=iMVi +-----END PGP SIGNATURE----- diff --git a/_theme/footer.html b/_theme/footer.html index 3285ef2..9febeb1 100644 --- a/_theme/footer.html +++ b/_theme/footer.html @@ -12,12 +12,9 @@ Support Bitcoin.org: - @@ -113,9 +110,6 @@ {%- if last_updated %}
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %} Released under the MIT License.
{%- endif %} -
- Feedback - Questions
@@ -127,15 +121,15 @@
-
+
- 3FkenCiXpSLqD8L79intRNXUgjRoH9sjXa + 3E8ociqZa9mZUSwGdSmAEMAoAxBK3FNDcd
diff --git a/_theme/layout.html b/_theme/layout.html index 236bf29..f4d6c04 100644 --- a/_theme/layout.html +++ b/_theme/layout.html @@ -14,16 +14,6 @@ - - - {{ super() }} {% endblock %} diff --git a/_theme/static/css/main.css b/_theme/static/css/main.css index 747e152..9f03c60 100644 --- a/_theme/static/css/main.css +++ b/_theme/static/css/main.css @@ -102,7 +102,7 @@ body { /* Breadcrumbs */ .breadcrumbs-section { padding: 18px 0; - background: #000; + background: #090c14; } .breadcrumb { align-items: center; @@ -118,6 +118,9 @@ body { color: #3490E6; text-decoration: underline; } +.breadcrumb-item a:hover { + text-decoration: none; +} .breadcrumb-item.active { color: #fff; } @@ -130,8 +133,11 @@ body { border-color: #F7931A; } .btn-group .btn:hover { - background: #F7931A; - border-color: #F7931A; + background: #F9A136; + border-color: #F9A136; +} +h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink, caption:hover > a.headerlink, p.caption:hover > a.headerlink, div.code-block-caption:hover > a.headerlink { + margin-left: 10px; } @media handheld, only screen and ( max-width: 990px ), only screen and ( max-device-width: 990px ) { @@ -145,6 +151,9 @@ body { .hero-nav .toctree-l1:nth-child(odd) { margin-left: 0; } + div.document h1 { + margin-top: 0; + } } @media handheld, only screen and ( max-width: 500px ), only screen and ( max-device-width: 500px ) { .content-container { diff --git a/bitcoin (1).pdf b/bitcoin (1).pdf new file mode 100644 index 0000000..1e19b73 Binary files /dev/null and b/bitcoin (1).pdf differ diff --git a/bitcoin (2).pdf b/bitcoin (2).pdf new file mode 100644 index 0000000..1e19b73 Binary files /dev/null and b/bitcoin (2).pdf differ diff --git a/bitcoin-wallet-backup-2024-05-07-14-43 b/bitcoin-wallet-backup-2024-05-07-14-43 new file mode 100644 index 0000000..044ed80 --- /dev/null +++ b/bitcoin-wallet-backup-2024-05-07-14-43 @@ -0,0 +1,820 @@ +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 +4wD3hqnBbGGhCvb7cG0fUa4F9iuj \ No newline at end of file diff --git a/devguide/block_chain.rst b/devguide/block_chain.rst index 2f61466..4bbfbb3 100644 --- a/devguide/block_chain.rst +++ b/devguide/block_chain.rst @@ -6,14 +6,14 @@ The block chain provides Bitcoin's public ledger, an ordered and timestamped rec Introduction ------------ -Each full node in the Bitcoin `network <../devguide/p2p_network.html>`__ independently stores a block chain containing only blocks validated by that node. When several nodes all have the same blocks in their block chain, they are considered to be in :term:`consensus`. The validation rules these nodes follow to maintain consensus are called :term:`consensus rules`. This section describes many of the consensus rules used by Bitcoin Core. +Each full node in the Bitcoin `network <../devguide/p2p_network.html>`__ independently stores a block chain containing only blocks validated by that node. When several nodes all have the same blocks in their block chain, they are considered to be in :term:`consensus `. The validation rules these nodes follow to maintain consensus are called :term:`consensus rules `. This section describes many of the consensus rules used by Bitcoin Core. .. figure:: /img/dev/en-blockchain-overview.svg :alt: Block Chain Overview Block Chain Overview -The illustration above shows a simplified version of a block chain. A :term:`block` of one or more new transactions is collected into the transaction data part of a block. Copies of each transaction are hashed, and the hashes are then paired, hashed, paired again, and hashed again until a single hash remains, the :term:`merkle root` of a merkle tree. +The illustration above shows a simplified version of a block chain. A :term:`block ` of one or more new transactions is collected into the transaction data part of a block. Copies of each transaction are hashed, and the hashes are then paired, hashed, paired again, and hashed again until a single hash remains, the :term:`merkle root ` of a merkle tree. The merkle root is stored in the block header. Each block also stores the hash of the previous block’s header, chaining the blocks together. This ensures a transaction cannot be modified without modifying the block that records it and all following blocks. @@ -26,11 +26,11 @@ Transactions are also chained together. Bitcoin wallet software gives the impres A single transaction can create multiple outputs, as would be the case when sending to multiple addresses, but each output of a particular transaction can only be used as an input once in the block chain. Any subsequent reference is a forbidden double spend—an attempt to spend the same satoshis twice. -Outputs are tied to :term:`transaction identifiers (TXIDs) `, which are the hashes of signed transactions. +Outputs are tied to :term:`transaction identifiers (TXIDs) `, which are the hashes of signed transactions. -Because each output of a particular transaction can only be spent once, the outputs of all transactions included in the block chain can be categorized as either :term:`Unspent Transaction Outputs (UTXOs) ` or spent transaction outputs. For a payment to be valid, it must only use UTXOs as inputs. +Because each output of a particular transaction can only be spent once, the outputs of all transactions included in the block chain can be categorized as either :term:`Unspent Transaction Outputs (UTXOs) ` or spent transaction outputs. For a payment to be valid, it must only use UTXOs as inputs. -Ignoring coinbase transactions (described later), if the value of a transaction’s outputs exceed its inputs, the transaction will be rejected—but if the inputs exceed the value of the outputs, any difference in value may be claimed as a :term:`transaction fee` by the Bitcoin :term:`miner ` who creates the block containing that transaction. For example, in the illustration above, each transaction spends 10,000 satoshis fewer than it receives from its combined inputs, effectively paying a 10,000 satoshi transaction fee. +Ignoring coinbase transactions (described later), if the value of a transaction’s outputs exceed its inputs, the transaction will be rejected—but if the inputs exceed the value of the outputs, any difference in value may be claimed as a :term:`transaction fee ` by the Bitcoin :term:`miner ` who creates the block containing that transaction. For example, in the illustration above, each transaction spends 10,000 satoshis fewer than it receives from its combined inputs, effectively paying a 10,000 satoshi transaction fee. Proof Of Work ------------- @@ -39,13 +39,13 @@ The block chain is collaboratively maintained by anonymous peers on the `network Chaining blocks together makes it impossible to modify transactions included in any block without modifying all subsequent blocks. As a result, the cost to modify a particular block increases with every new block added to the block chain, magnifying the effect of the proof of work. -The :term:`proof of work` used in Bitcoin takes advantage of the apparently random nature of cryptographic hashes. A good cryptographic hash algorithm converts arbitrary data into a seemingly random number. If the data is modified in any way and the hash re-run, a new seemingly random number is produced, so there is no way to modify the data to make the hash number predictable. +The :term:`proof of work ` used in Bitcoin takes advantage of the apparently random nature of cryptographic hashes. A good cryptographic hash algorithm converts arbitrary data into a seemingly random number. If the data is modified in any way and the hash re-run, a new seemingly random number is produced, so there is no way to modify the data to make the hash number predictable. To prove you did some extra work to create a block, you must create a hash of the block header which does not exceed a certain value. For example, if the maximum possible hash value is 2256 − 1, you can prove that you tried up to two combinations by producing a hash value less than 2255. -In the example given above, you will produce a successful hash on average every other try. You can even estimate the probability that a given hash attempt will generate a number below the :term:`target ` threshold. Bitcoin assumes a linear probability that the lower it makes the target threshold, the more hash attempts (on average) will need to be tried. +In the example given above, you will produce a successful hash on average every other try. You can even estimate the probability that a given hash attempt will generate a number below the :term:`target ` threshold. Bitcoin assumes a linear probability that the lower it makes the target threshold, the more hash attempts (on average) will need to be tried. -New blocks will only be added to the block chain if their hash is at least as challenging as a :term:`difficulty` value expected by the consensus protocol. Every 2,016 blocks, the `network <../devguide/p2p_network.html>`__ uses timestamps stored in each block header to calculate the number of seconds elapsed between generation of the first and last of those last 2,016 blocks. The ideal value is 1,209,600 seconds (two weeks). +New blocks will only be added to the block chain if their hash is at least as challenging as a :term:`difficulty ` value expected by the consensus protocol. Every 2,016 blocks, the `network <../devguide/p2p_network.html>`__ uses timestamps stored in each block header to calculate the number of seconds elapsed between generation of the first and last of those last 2,016 blocks. The ideal value is 1,209,600 seconds (two weeks). - If it took fewer than two weeks to generate the 2,016 blocks, the expected difficulty value is increased proportionally (by as much as 300%) so that the next 2,016 blocks should take exactly two weeks to generate if hashes are checked at the same rate. @@ -60,18 +60,18 @@ The block header provides several easy-to-modify fields, such as a dedicated non Block Height And Forking ------------------------ -Any Bitcoin miner who successfully hashes a block header to a value below the target threshold can add the entire block to the block chain (assuming the block is otherwise valid). These blocks are commonly addressed by their :term:`block height`—the number of blocks between them and the first Bitcoin block (block 0, most commonly known as the :term:`genesis block`). For example, block 2016 is where difficulty could have first been adjusted. +Any Bitcoin miner who successfully hashes a block header to a value below the target threshold can add the entire block to the block chain (assuming the block is otherwise valid). These blocks are commonly addressed by their :term:`block height `—the number of blocks between them and the first Bitcoin block (block 0, most commonly known as the :term:`genesis block `). For example, block 2016 is where difficulty could have first been adjusted. .. figure:: /img/dev/en-blockchain-fork.svg :alt: Common And Uncommon Block Chain Forks Common And Uncommon Block Chain Forks -Multiple blocks can all have the same block height, as is common when two or more miners each produce a block at roughly the same time. This creates an apparent :term:`fork` in the block chain, as shown in the illustration above. +Multiple blocks can all have the same block height, as is common when two or more miners each produce a block at roughly the same time. This creates an apparent :term:`fork ` in the block chain, as shown in the illustration above. When miners produce simultaneous blocks at the end of the block chain, each node individually chooses which block to accept. In the absence of other considerations, discussed below, nodes usually use the first block they see. -Eventually a miner produces another block which attaches to only one of the competing simultaneously-mined blocks. This makes that side of the fork stronger than the other side. Assuming a fork only contains valid blocks, normal peers always follow the most difficult chain to recreate and throw away :term:`stale blocks ` belonging to shorter forks. (Stale blocks are also sometimes called orphans or orphan blocks, but those terms are also used for true orphan blocks without a known parent block.) +Eventually a miner produces another block which attaches to only one of the competing simultaneously-mined blocks. This makes that side of the fork stronger than the other side. Assuming a fork only contains valid blocks, normal peers always follow the most difficult chain to recreate and throw away :term:`stale blocks ` belonging to shorter forks. (Stale blocks are also sometimes called orphans or orphan blocks, but those terms are also used for true orphan blocks without a known parent block.) Long-term forks are possible if different miners work at cross-purposes, such as some miners diligently working to extend the block chain at the same time other miners are attempting a 51 percent attack to revise transaction history. @@ -88,7 +88,7 @@ Blocks are not required to include any non-coinbase transactions, but miners alm All transactions, including the coinbase transaction, are encoded into blocks in binary raw transaction format. -The raw transaction format is hashed to create the transaction identifier (txid). From these txids, the :term:`merkle tree` is constructed by pairing each txid with one other txid and then hashing them together. If there are an odd number of txids, the txid without a partner is hashed with a copy of itself. +The raw transaction format is hashed to create the transaction identifier (txid). From these txids, the :term:`merkle tree ` is constructed by pairing each txid with one other txid and then hashing them together. If there are an odd number of txids, the txid without a partner is hashed with a copy of itself. The resulting hashes themselves are each paired with one other hash and hashed together. Any hash without a partner is hashed with itself. The process repeats until only one hash remains, the merkle root. @@ -119,14 +119,14 @@ To maintain consensus, all full nodes validate blocks using the same consensus r 2. A block violating the new consensus rules is rejected by upgraded nodes but accepted by non-upgraded nodes. For example, an abusive transaction feature is used within a block: upgraded nodes reject it because it violates the new rules, but non-upgraded nodes accept it because it follows the old rules. -In the first case, rejection by non-upgraded nodes, mining software which gets block chain data from those non-upgraded nodes refuses to build on the same chain as mining software getting data from upgraded nodes. This creates permanently divergent chains—one for non-upgraded nodes and one for upgraded nodes—called a :term:`hard fork`. +In the first case, rejection by non-upgraded nodes, mining software which gets block chain data from those non-upgraded nodes refuses to build on the same chain as mining software getting data from upgraded nodes. This creates permanently divergent chains—one for non-upgraded nodes and one for upgraded nodes—called a :term:`hard fork `. .. figure:: /img/dev/en-hard-fork.svg :alt: Hard Fork Hard Fork -In the second case, rejection by upgraded nodes, it’s possible to keep the block chain from permanently diverging if upgraded nodes control a majority of the hash rate. That’s because, in this case, non-upgraded nodes will accept as valid all the same blocks as upgraded nodes, so the upgraded nodes can build a stronger chain that the non-upgraded nodes will accept as the best valid block chain. This is called a :term:`soft fork`. +In the second case, rejection by upgraded nodes, it’s possible to keep the block chain from permanently diverging if upgraded nodes control a majority of the hash rate. That’s because, in this case, non-upgraded nodes will accept as valid all the same blocks as upgraded nodes, so the upgraded nodes can build a stronger chain that the non-upgraded nodes will accept as the best valid block chain. This is called a :term:`soft fork `. .. figure:: /img/dev/en-soft-fork.svg :alt: Soft Fork @@ -135,9 +135,9 @@ In the second case, rejection by upgraded nodes, it’s possible to keep the blo Although a fork is an actual divergence in block chains, changes to the consensus rules are often described by their potential to create either a hard or soft fork. For example, “increasing the block size above 1 MB requires a hard fork.” In this example, an actual block chain fork is not required—but it is a possible outcome. -Consensus rule changes may be activated in various ways. During Bitcoin’s first two years, Satoshi Nakamoto performed several soft forks by just releasing the backwards-compatible change in a client that began immediately enforcing the new rule. Multiple soft forks such as `BIP30 `__ have been activated via a flag day where the new rule began to be enforced at a preset time or block height. Such forks activated via a flag day are known as :term:`User Activated Soft Forks ` (UASF) as they are dependent on having sufficient users (nodes) to enforce the new rules after the flag day. +Consensus rule changes may be activated in various ways. During Bitcoin’s first two years, Satoshi Nakamoto performed several soft forks by just releasing the backwards-compatible change in a client that began immediately enforcing the new rule. Multiple soft forks such as `BIP30 `__ have been activated via a flag day where the new rule began to be enforced at a preset time or block height. Such forks activated via a flag day are known as :term:`User Activated Soft Forks ` (UASF) as they are dependent on having sufficient users (nodes) to enforce the new rules after the flag day. -Later soft forks waited for a majority of hash rate (typically 75% or 95%) to signal their readiness for enforcing the new consensus rules. Once the signalling threshold has been passed, all nodes will begin enforcing the new rules. Such forks are known as :term:`Miner Activated Soft Forks ` (MASF) as they are dependent on miners for activation. +Later soft forks waited for a majority of hash rate (typically 75% or 95%) to signal their readiness for enforcing the new consensus rules. Once the signalling threshold has been passed, all nodes will begin enforcing the new rules. Such forks are known as :term:`Miner Activated Soft Forks ` (MASF) as they are dependent on miners for activation. **Resources:** `BIP16 `__, `BIP30 `__, and `BIP34 `__ were implemented as changes which might have lead to soft forks. `BIP50 `__ describes both an accidental hard fork, resolved by temporary downgrading the capabilities of upgraded nodes, and an intentional hard fork when the temporary downgrade was removed. A document from Gavin Andresen outlines `how future rule changes may be implemented `__. diff --git a/devguide/contracts.rst b/devguide/contracts.rst index d44a446..77832b4 100644 --- a/devguide/contracts.rst +++ b/devguide/contracts.rst @@ -17,9 +17,9 @@ Charlie-the-customer wants to buy a product from Bob-the-businessman, but neithe A simple contract could say that Charlie will spend satoshis to an output which can only be spent if Charlie and Bob both sign the input spending it. That means Bob won’t get paid unless Charlie gets his merchandise, but Charlie can’t get the merchandise and keep his payment. -This simple contract isn’t much help if there’s a dispute, so Bob and Charlie enlist the help of Alice-the-arbitrator to create an :term:`escrow contract`. Charlie spends his satoshis to an output which can only be spent if two of the three people sign the input. Now Charlie can pay Bob if everything is ok, Bob can `refund <../devguide/payment_processing.html#issuing-refunds>`__ Charlie’s money if there’s a problem, or Alice can arbitrate and decide who should get the satoshis if there’s a dispute. +This simple contract isn’t much help if there’s a dispute, so Bob and Charlie enlist the help of Alice-the-arbitrator to create an :term:`escrow contract `. Charlie spends his satoshis to an output which can only be spent if two of the three people sign the input. Now Charlie can pay Bob if everything is ok, Bob can `refund <../devguide/payment_processing.html#issuing-refunds>`__ Charlie’s money if there’s a problem, or Alice can arbitrate and decide who should get the satoshis if there’s a dispute. -To create a multiple-signature (:term:`multisig`) output, they each give the others a public key. Then Bob creates the following :term:`P2SH multisig ` redeem script: +To create a multiple-signature (:term:`multisig `) output, they each give the others a public key. Then Bob creates the following :term:`P2SH multisig ` redeem script: :: diff --git a/devguide/mining.rst b/devguide/mining.rst index 964de8e..b28fa47 100644 --- a/devguide/mining.rst +++ b/devguide/mining.rst @@ -90,4 +90,4 @@ Using the coinbase transaction received, the mining software adds a nonce to the Unlike `“getblocktemplate” <../reference/rpc/getblocktemplate.html>`__, miners using Stratum cannot inspect or add transactions to the block they’re currently mining. Also unlike `“getblocktemplate” <../reference/rpc/getblocktemplate.html>`__, the Stratum protocol uses a two-way TCP socket directly, so miners don’t need to use HTTP longpoll to ensure they receive immediate updates from mining pools when a new block is broadcast to the `peer-to-peer network <../devguide/p2p_network.html>`__. -**Resources:** The GPLv3 `BFGMiner `__ mining software and AGPLv3 `Eloipool `__ mining pool software are widely-used among miners and pools. The `libblkmaker `__ C library and `python-blkmaker `__ library, both MIT licensed, can interpret GetBlockTemplate for your programs. +**Resources:** The GPLv3 `BFGMiner `__ mining software and AGPLv3 `Eloipool `__ mining pool software are widely-used among miners and pools. The `libblkmaker `__ C library and `python-blkmaker `__ library, both MIT licensed, can interpret GetBlockTemplate for your programs. diff --git a/devguide/p2p_network.rst b/devguide/p2p_network.rst index 77a03a5..66896cd 100644 --- a/devguide/p2p_network.rst +++ b/devguide/p2p_network.rst @@ -15,7 +15,7 @@ To provide practical examples of the Bitcoin `peer-to-peer network <../devguide/ Peer Discovery -------------- -When started for the first time, programs don’t know the IP addresses of any active full nodes. In order to discover some IP addresses, they query one or more DNS names (called :term:`DNS seeds `) hardcoded into Bitcoin Core and `BitcoinJ `__. The response to the lookup should include one or more `DNS A records `__ with the IP addresses of full nodes that may accept new incoming connections. For example, using the `Unix ``dig`` command `__: +When started for the first time, programs don’t know the IP addresses of any active full nodes. In order to discover some IP addresses, they query one or more DNS names (called :term:`DNS seeds `) hardcoded into Bitcoin Core and `BitcoinJ `__. The response to the lookup should include one or more `DNS A records `__ with the IP addresses of full nodes that may accept new incoming connections. For example, using the `Unix ``dig`` command `__: :: @@ -155,7 +155,7 @@ All of these problems are addressed in part or in full by the headers-first IBD Headers-First ~~~~~~~~~~~~~ -`Bitcoin Core 0.10.0 `__ uses an initial block download (IBD) method called *headers-first*. The goal is to download the headers for the best :term:`header chain`, partially validate them as best as possible, and then download the corresponding blocks in parallel. This solves several problems with the older blocks-first IBD method. +`Bitcoin Core 0.10.0 `__ uses an initial block download (IBD) method called *headers-first*. The goal is to download the headers for the best :term:`header chain
`, partially validate them as best as possible, and then download the corresponding blocks in parallel. This solves several problems with the older blocks-first IBD method. .. figure:: /img/dev/en-headers-first-flowchart.svg :alt: Overview Of Headers-First Method @@ -230,7 +230,7 @@ When a miner discovers a new block, it broadcasts the new block to its peers usi The miner replies to each request accordingly by sending the block in a `“block” message <../reference/p2p_networking.html#block>`__, one or more headers in a `“headers” message <../reference/p2p_networking.html#headers>`__, or the merkle block and transactions relative to the SPV client’s bloom filter in a `“merkleblock” message <../reference/p2p_networking.html#merkleblock>`__ followed by zero or more `“tx” messages <../reference/p2p_networking.html#tx>`__. -- :term:`Direct Headers Announcement `\ **:** a relay node may skip the round trip overhead of an `“inv” message <../reference/p2p_networking.html#inv>`__ followed by ``getheaders`` by instead immediately sending a `“headers” message <../reference/p2p_networking.html#headers>`__ containing the full header of the new block. A HF peer receiving this message will partially validate the block header as it would during headers-first IBD, then request the full block contents with a `“getdata” message <../reference/p2p_networking.html#getdata>`__ if the header is valid. The relay node then responds to the ``getdata`` request with the full or filtered block data in a ``block`` or `“merkleblock” message <../reference/p2p_networking.html#merkleblock>`__, respectively. A HF node may signal that it prefers to receive ``headers`` instead of ``inv`` announcements by sending a special `“sendheaders” message <../reference/p2p_networking.html#sendheaders>`__ during the connection handshake. +- :term:`Direct Headers Announcement `\ **:** a relay node may skip the round trip overhead of an `“inv” message <../reference/p2p_networking.html#inv>`__ followed by ``getheaders`` by instead immediately sending a `“headers” message <../reference/p2p_networking.html#headers>`__ containing the full header of the new block. A HF peer receiving this message will partially validate the block header as it would during headers-first IBD, then request the full block contents with a `“getdata” message <../reference/p2p_networking.html#getdata>`__ if the header is valid. The relay node then responds to the ``getdata`` request with the full or filtered block data in a ``block`` or `“merkleblock” message <../reference/p2p_networking.html#merkleblock>`__, respectively. A HF node may signal that it prefers to receive ``headers`` instead of ``inv`` announcements by sending a special `“sendheaders” message <../reference/p2p_networking.html#sendheaders>`__ during the connection handshake. This protocol for block broadcasting was proposed in BIP 130 and has been implemented in Bitcoin Core since version 0.12. diff --git a/devguide/payment_processing.rst b/devguide/payment_processing.rst index 2d6a964..8b75923 100644 --- a/devguide/payment_processing.rst +++ b/devguide/payment_processing.rst @@ -126,7 +126,7 @@ Payment Protocol |Warning icon| **Warning:** The payment protocol is considered to be deprecated and will be removed in a later version of Bitcoin Core. The protocol has multiple security design flaws and implementation flaws in some wallets. Users will begin receiving deprecation warnings in Bitcoin Core version 0.18 when using `BIP70 `__ URI’s. Merchants should transition away from `BIP70 `__ to more secure options such as `BIP21 `__. Merchants should never require `BIP70 `__ payments and should provide `BIP21 `__ fallbacks. -Bitcoin Core 0.9 supports the new :term:`payment protocol`. The payment protocol adds many important features to payment requests: +Bitcoin Core 0.9 supports the new :term:`payment protocol `. The payment protocol adds many important features to payment requests: - Supports `X.509 `__ certificates and SSL encryption to verify receivers’ identity and help prevent `man-in-the-middle `__ attacks. @@ -215,11 +215,11 @@ If a `refund <../devguide/payment_processing.html#issuing-refunds>`__ needs to b Verifying Payment ----------------- -As explained in the `Transactions <../devguide/transactions.html>`__ and `Block Chain <../devguide/blockchain.html>`__ sections, broadcasting a transaction to the `network <../devguide/p2p_network.html>`__ doesn’t ensure that the receiver gets paid. A malicious spender can create one transaction that pays the receiver and a second one that pays the same input back to himself. Only one of these transactions will be added to the block chain, and nobody can say for sure which one it will be. +As explained in the `Transactions <../devguide/transactions.html>`__ and `Block Chain <../devguide/block_chain.html>`__ sections, broadcasting a transaction to the `network <../devguide/p2p_network.html>`__ doesn’t ensure that the receiver gets paid. A malicious spender can create one transaction that pays the receiver and a second one that pays the same input back to himself. Only one of these transactions will be added to the block chain, and nobody can say for sure which one it will be. -Two or more transactions spending the same input are commonly referred to as a :term:`double spend`. +Two or more transactions spending the same input are commonly referred to as a :term:`double spend `. -Once the transaction is included in a block, double spends are impossible without modifying block chain history to replace the transaction, which is quite difficult. Using this system, the Bitcoin protocol can give each of your transactions an updating confidence score based on the number of blocks which would need to be modified to replace a transaction. For each block, the transaction gains one :term:`confirmation `. Since modifying blocks is quite difficult, higher confirmation scores indicate greater protection. +Once the transaction is included in a block, double spends are impossible without modifying block chain history to replace the transaction, which is quite difficult. Using this system, the Bitcoin protocol can give each of your transactions an updating confidence score based on the number of blocks which would need to be modified to replace a transaction. For each block, the transaction gains one :term:`confirmation `. Since modifying blocks is quite difficult, higher confirmation scores indicate greater protection. **0 confirmations**: The transaction has been broadcast but is still not included in any block. Zero confirmation transactions (unconfirmed transactions) should generally not be trusted without risk analysis. Although miners usually confirm the first transaction they receive, fraudsters may be able to manipulate the `network <../devguide/p2p_network.html>`__ into including their version of a transaction. @@ -243,7 +243,7 @@ An interesting source of double-spend risk analysis can be acquired by connectin For example, unconfirmed transactions can be compared among all connected peers to see if any UTXO is used in multiple unconfirmed transactions, indicating a double-spend attempt, in which case the payment can be refused until it is confirmed. Transactions can also be ranked by their transaction fee to estimate the amount of time until they’re added to a block. -Another example could be to detect a fork when multiple peers report differing block header hashes at the same block height. Your program can go into a safe mode if the fork extends for more than two blocks, indicating a possible problem with the block chain. For more details, see the `Detecting Forks subsection <../devguide/blockchain.html#detecting-forks>`__. +Another example could be to detect a fork when multiple peers report differing block header hashes at the same block height. Your program can go into a safe mode if the fork extends for more than two blocks, indicating a possible problem with the block chain. For more details, see the `Detecting Forks subsection <../devguide/block_chain.html#detecting-forks>`__. Another good source of double-spend protection can be human intelligence. For example, fraudsters may act differently from legitimate customers, letting savvy merchants manually flag them as high risk. Your program can provide a safe mode which stops automatic payment acceptance on a global or per-customer basis. diff --git a/devguide/transactions.rst b/devguide/transactions.rst index 24c7e7f..b743325 100644 --- a/devguide/transactions.rst +++ b/devguide/transactions.rst @@ -15,7 +15,7 @@ To keep things simple, this section pretends coinbase transactions do not exist. The Parts Of A Transaction -The figure above shows the main parts of a Bitcoin transaction. Each transaction has at least one input and one output. Each :term:`input` spends the satoshis paid to a previous output. Each :term:`output` then waits as an Unspent Transaction Output (UTXO) until a later input spends it. When your Bitcoin wallet tells you that you have a 10,000 satoshi balance, it really means that you have 10,000 satoshis waiting in one or more UTXOs. +The figure above shows the main parts of a Bitcoin transaction. Each transaction has at least one input and one output. Each :term:`input ` spends the satoshis paid to a previous output. Each :term:`output ` then waits as an Unspent Transaction Output (UTXO) until a later input spends it. When your Bitcoin wallet tells you that you have a 10,000 satoshi balance, it really means that you have 10,000 satoshis waiting in one or more UTXOs. Each transaction is prefixed by a four-byte :ref:`transaction version number ` which tells Bitcoin peers and miners which set of rules to use to validate it. This lets developers create new rules for future transactions without invalidating previous transactions. @@ -28,24 +28,24 @@ An output has an implied index number based on its location in the transaction An input uses a transaction identifier (txid) and an :ref:`output index ` number (often called “vout” for output vector) to identify a particular output to be spent. It also has a signature script which allows it to provide data parameters that satisfy the conditionals in the pubkey script. (The sequence number and locktime are related and will be covered together in a later subsection.) -The figures below help illustrate how these features are used by showing the workflow Alice uses to send Bob a transaction and which Bob later uses to spend that transaction. Both Alice and Bob will use the most common form of the standard Pay-To-Public-Key-Hash (P2PKH) transaction type. :term:`P2PKH ` lets Alice spend satoshis to a typical Bitcoin address, and then lets Bob further spend those satoshis using a simple cryptographic :ref:`key pair `. +The figures below help illustrate how these features are used by showing the workflow Alice uses to send Bob a transaction and which Bob later uses to spend that transaction. Both Alice and Bob will use the most common form of the standard Pay-To-Public-Key-Hash (P2PKH) transaction type. :term:`P2PKH ` lets Alice spend satoshis to a typical Bitcoin address, and then lets Bob further spend those satoshis using a simple cryptographic :ref:`key pair `. .. figure:: /img/dev/en-creating-p2pkh-output.svg :alt: Creating A P2PKH Public Key Hash To Receive Payment Creating A P2PKH Public Key Hash To Receive Payment -Bob must first generate a private/public :ref:`key pair ` before Alice can create the first transaction. Bitcoin uses the Elliptic Curve Digital Signature Algorithm (`ECDSA `__) with the `secp256k1 `__ curve; `secp256k1 `__ :term:`private keys ` are 256 bits of random data. A copy of that data is deterministically transformed into an `secp256k1 `__ :term:`public key`. Because the transformation can be reliably repeated later, the public key does not need to be stored. +Bob must first generate a private/public :ref:`key pair ` before Alice can create the first transaction. Bitcoin uses the Elliptic Curve Digital Signature Algorithm (`ECDSA `__) with the `secp256k1 `__ curve; `secp256k1 `__ :term:`private keys ` are 256 bits of random data. A copy of that data is deterministically transformed into an `secp256k1 `__ :term:`public key `. Because the transformation can be reliably repeated later, the public key does not need to be stored. The public key (pubkey) is then cryptographically hashed. This pubkey hash can also be reliably repeated later, so it also does not need to be stored. The hash shortens and obfuscates the public key, making manual transcription easier and providing security against unanticipated problems which might allow reconstruction of private keys from public key data at some later point. -Bob provides the pubkey hash to Alice. Pubkey hashes are almost always sent encoded as Bitcoin :term:`addresses
`, which are base58-encoded strings containing an address version number, the hash, and an error-detection checksum to catch typos. The address can be transmitted through any medium, including one-way mediums which prevent the spender from communicating with the receiver, and it can be further encoded into another format, such as a QR code containing a :ref:`“bitcoin:” URI `. +Bob provides the pubkey hash to Alice. Pubkey hashes are almost always sent encoded as Bitcoin :term:`addresses
`, which are base58-encoded strings containing an address version number, the hash, and an error-detection checksum to catch typos. The address can be transmitted through any medium, including one-way mediums which prevent the spender from communicating with the receiver, and it can be further encoded into another format, such as a QR code containing a :ref:`“bitcoin:” URI `. -Once Alice has the address and decodes it back into a standard hash, she can create the first transaction. She creates a standard P2PKH transaction output containing instructions which allow anyone to spend that output if they can prove they control the private key corresponding to Bob’s hashed public key. These instructions are called the :term:`pubkey script` or scriptPubKey. +Once Alice has the address and decodes it back into a standard hash, she can create the first transaction. She creates a standard P2PKH transaction output containing instructions which allow anyone to spend that output if they can prove they control the private key corresponding to Bob’s hashed public key. These instructions are called the :term:`pubkey script ` or scriptPubKey. Alice broadcasts the transaction and it is added to the block chain. The `network <../devguide/p2p_network.html>`__ categorizes it as an Unspent Transaction Output (UTXO), and Bob’s wallet software displays it as a spendable balance. -When, some time later, Bob decides to spend the UTXO, he must create an input which references the transaction Alice created by its hash, called a Transaction Identifier (txid), and the specific output she used by its index number (:ref:`output index `). He must then create a :term:`signature script`—a collection of data parameters which satisfy the conditions Alice placed in the previous output’s pubkey script. Signature scripts are also called scriptSigs. +When, some time later, Bob decides to spend the UTXO, he must create an input which references the transaction Alice created by its hash, called a Transaction Identifier (txid), and the specific output she used by its index number (:ref:`output index `). He must then create a :term:`signature script `—a collection of data parameters which satisfy the conditions Alice placed in the previous output’s pubkey script. Signature scripts are also called scriptSigs. Pubkey scripts and signature scripts combine `secp256k1 `__ pubkeys and signatures with conditional logic, creating a programmable authorization mechanism. @@ -58,7 +58,7 @@ For a P2PKH-style output, Bob’s signature script will contain the following tw 1. His full (unhashed) public key, so the pubkey script can check that it hashes to the same value as the pubkey hash provided by Alice. -2. An `secp256k1 `__ :term:`signature` made by using the `ECDSA `__ cryptographic formula to combine certain transaction data (described below) with Bob’s private key. This lets the pubkey script verify that Bob owns the private key which created the public key. +2. An `secp256k1 `__ :term:`signature ` made by using the `ECDSA `__ cryptographic formula to combine certain transaction data (described below) with Bob’s private key. This lets the pubkey script verify that Bob owns the private key which created the public key. Bob’s `secp256k1 `__ signature doesn’t just prove Bob controls his private key; it also makes the non-signature-script parts of his transaction tamper-proof so Bob can safely broadcast them over the `peer-to-peer network <../devguide/p2p_network.html>`__. @@ -118,7 +118,7 @@ P2SH Scripts Pubkey scripts are created by spenders who have little interest what that script does. Receivers do care about the script conditions and, if they want, they can ask spenders to use a particular pubkey script. Unfortunately, custom pubkey scripts are less convenient than short Bitcoin addresses and there was no standard way to communicate them between programs prior to widespread implementation of the now deprecated `BIP70 `__ Payment Protocol discussed later. -To solve these problems, pay-to-script-hash (:term:`P2SH `) transactions were created in 2012 to let a spender create a pubkey script containing a hash of a second script, the :term:`redeem script`. +To solve these problems, pay-to-script-hash (:term:`P2SH `) transactions were created in 2012 to let a spender create a pubkey script containing a hash of a second script, the :term:`redeem script `. The basic P2SH workflow, illustrated below, looks almost identical to the P2PKH workflow. Bob creates a redeem script with whatever script he wants, hashes the redeem script, and provides the redeem script hash to Alice. Alice creates a P2SH-style output containing Bob’s redeem script hash. @@ -218,7 +218,7 @@ Pubkey outputs are a simplified form of the P2PKH pubkey script, but they aren Null Data ~~~~~~~~~ -:term:`Null data ` transaction type relayed and mined by default in `Bitcoin Core 0.9.0 `__ and later that adds arbitrary data to a provably unspendable pubkey script that full nodes don’t have to store in their UTXO database. It is preferable to use null data transactions over transactions that bloat the UTXO database because they cannot be automatically pruned; however, it is usually even more preferable to store data outside transactions if possible. +:term:`Null data ` transaction type relayed and mined by default in `Bitcoin Core 0.9.0 `__ and later that adds arbitrary data to a provably unspendable pubkey script that full nodes don’t have to store in their UTXO database. It is preferable to use null data transactions over transactions that bloat the UTXO database because they cannot be automatically pruned; however, it is usually even more preferable to store data outside transactions if possible. Consensus rules allow null data outputs up to the maximum allowed pubkey script size of 10,000 bytes provided they follow all other consensus rules, such as not having any data pushes larger than 520 bytes. @@ -263,15 +263,15 @@ Signature Hash Types :ref:`“OP_CHECKSIG” ` extracts a non-stack argument from each signature it evaluates, allowing the signer to decide which parts of the transaction to sign. Since the signature protects those parts of the transaction from modification, this lets signers selectively choose to let other people modify their transactions. -The various options for what to sign are called :term:`signature hash` types. There are three base SIGHASH types currently available: +The various options for what to sign are called :term:`signature hash ` types. There are three base SIGHASH types currently available: -- :term:`“SIGHASH_ALL” `, the default, signs all the inputs and outputs, protecting everything except the signature scripts against modification. +- :term:`“SIGHASH_ALL” `, the default, signs all the inputs and outputs, protecting everything except the signature scripts against modification. -- :term:`“SIGHASH_NONE” ` signs all of the inputs but none of the outputs, allowing anyone to change where the satoshis are going unless other signatures using other signature hash flags protect the outputs. +- :term:`“SIGHASH_NONE” ` signs all of the inputs but none of the outputs, allowing anyone to change where the satoshis are going unless other signatures using other signature hash flags protect the outputs. -- :term:`“SIGHASH_SINGLE” ` the only output signed is the one corresponding to this input (the output with the same :ref:`output index ` number as this input), ensuring nobody can change your part of the transaction but allowing other signers to change their part of the transaction. The corresponding output must exist or the value “1” will be signed, breaking the security scheme. This input, as well as other inputs, are included in the signature. The sequence numbers of other inputs are not included in the signature, and can be updated. +- :term:`“SIGHASH_SINGLE” ` the only output signed is the one corresponding to this input (the output with the same :ref:`output index ` number as this input), ensuring nobody can change your part of the transaction but allowing other signers to change their part of the transaction. The corresponding output must exist or the value “1” will be signed, breaking the security scheme. This input, as well as other inputs, are included in the signature. The sequence numbers of other inputs are not included in the signature, and can be updated. -The base types can be modified with the :term:`“SIGHASH_ANYONECANPAY” ` (anyone can pay) flag, creating three new combined types: +The base types can be modified with the :term:`“SIGHASH_ANYONECANPAY” ` (anyone can pay) flag, creating three new combined types: - ``SIGHASH_ALL|SIGHASH_ANYONECANPAY`` signs all of the outputs but only this one input, and it also allows anyone to add or remove other inputs, so anyone can contribute additional satoshis but they cannot change how many satoshis are sent nor where they go. @@ -284,7 +284,7 @@ Because each input is signed, a transaction with multiple inputs can have multip Locktime And Sequence Number ---------------------------- -One thing all signature hash types sign is the transaction’s :term:`locktime`. (Called nLockTime in the Bitcoin Core source code.) The locktime indicates the earliest time a transaction can be added to the block chain. +One thing all signature hash types sign is the transaction’s :term:`locktime `. (Called nLockTime in the Bitcoin Core source code.) The locktime indicates the earliest time a transaction can be added to the block chain. Locktime allows signers to create time-locked transactions which will only become valid in the future, giving the signers a chance to change their minds. @@ -292,7 +292,7 @@ If any of the signers change their mind, they can create a new non-locktime tran Care must be taken near the expiry time of a time lock. The `peer-to-peer network <../devguide/p2p_network.html>`__ allows block time to be up to two hours ahead of real time, so a locktime transaction can be added to the block chain up to two hours before its time lock officially expires. Also, blocks are not created at guaranteed intervals, so any attempt to cancel a valuable transaction should be made a few hours before the time lock expires. -Previous versions of Bitcoin Core provided a feature which prevented transaction signers from using the method described above to cancel a time-locked transaction, but a necessary part of this feature was disabled to prevent denial of service attacks. A legacy of this system are four-byte :term:`sequence numbers ` in every input. Sequence numbers were meant to allow multiple signers to agree to update a transaction; when they finished updating the transaction, they could agree to set every input’s sequence number to the four-byte unsigned maximum (0xffffffff), allowing the transaction to be added to a block even if its time lock had not expired. +Previous versions of Bitcoin Core provided a feature which prevented transaction signers from using the method described above to cancel a time-locked transaction, but a necessary part of this feature was disabled to prevent denial of service attacks. A legacy of this system are four-byte :term:`sequence numbers ` in every input. Sequence numbers were meant to allow multiple signers to agree to update a transaction; when they finished updating the transaction, they could agree to set every input’s sequence number to the four-byte unsigned maximum (0xffffffff), allowing the transaction to be added to a block even if its time lock had not expired. Even today, setting all sequence numbers to 0xffffffff (the default in Bitcoin Core) can still disable the time lock, so if you want to use locktime, at least one input must have a sequence number below the maximum. Since sequence numbers are not used by the `network <../devguide/p2p_network.html>`__ for any other purpose, setting any sequence number to zero is sufficient to enable locktime. @@ -305,17 +305,17 @@ Locktime itself is an unsigned 4-byte integer which can be parsed two ways: Transaction Fees And Change --------------------------- -Transactions pay fees based on the total byte size of the signed transaction. Fees per byte are calculated based on current demand for space in mined blocks with fees rising as demand increases. The transaction fee is given to the Bitcoin miner, as explained in the `block chain section <../devguide/blockchain.html>`__, and so it is ultimately up to each miner to choose the minimum transaction fee they will accept. +Transactions pay fees based on the total byte size of the signed transaction. Fees per byte are calculated based on current demand for space in mined blocks with fees rising as demand increases. The transaction fee is given to the Bitcoin miner, as explained in the `block chain section <../devguide/block_chain.html>`__, and so it is ultimately up to each miner to choose the minimum transaction fee they will accept. -There is also a concept of so-called “:term:`high-priority transactions `” which spend satoshis that have not moved for a long time. +There is also a concept of so-called “:term:`high-priority transactions `” which spend satoshis that have not moved for a long time. In the past, these “priority” transaction were often exempt from the normal fee requirements. Before Bitcoin Core 0.12, 50 KB of each block would be reserved for these high-priority transactions, however this is now set to 0 KB by default. After the priority area, all transactions are prioritized based on their fee per byte, with higher-paying transactions being added in sequence until all of the available space is filled. -As of Bitcoin Core 0.9, a :term:`minimum fee ` (currently 1,000 satoshis) has been required to broadcast a transaction across the `network <../devguide/p2p_network.html>`__. Any transaction paying only the minimum fee should be prepared to wait a long time before there’s enough spare space in a block to include it. Please see the `verifying payment section <../devguide/payment_processing.html#verifying-payment>`__ for why this could be important. +As of Bitcoin Core 0.9, a :term:`minimum fee ` (currently 1,000 satoshis) has been required to broadcast a transaction across the `network <../devguide/p2p_network.html>`__. Any transaction paying only the minimum fee should be prepared to wait a long time before there’s enough spare space in a block to include it. Please see the `verifying payment section <../devguide/payment_processing.html#verifying-payment>`__ for why this could be important. Since each transaction spends Unspent Transaction Outputs (UTXOs) and because a UTXO can only be spent once, the full value of the included UTXOs must be spent or given to a miner as a transaction fee. Few people will have UTXOs that exactly match the amount they want to pay, so most transactions include a change output. -:term:`Change outputs ` are regular outputs which spend the surplus satoshis from the UTXOs back to the spender. They can reuse the same P2PKH pubkey hash or P2SH script hash as was used in the UTXO, but for the reasons described in the `next subsection <../transactions.html#avoiding-key-reuse>`__, it is highly recommended that change outputs be sent to a new P2PKH or P2SH address. +:term:`Change outputs ` are regular outputs which spend the surplus satoshis from the UTXOs back to the spender. They can reuse the same P2PKH pubkey hash or P2SH script hash as was used in the UTXO, but for the reasons described in the `next subsection <../devguide/transactions.html#avoiding-key-reuse>`__, it is highly recommended that change outputs be sent to a new P2PKH or P2SH address. Avoiding Key Reuse ------------------ @@ -339,7 +339,7 @@ So, for both privacy and security, we encourage you to build your applications t Transaction Malleability ------------------------ -None of Bitcoin’s signature hash types protect the signature script, leaving the door open for a limited denial of service attack called :term:`transaction malleability`\ {:.term}{:#term-transaction-malleability}. The signature script contains the `secp256k1 `__ signature, which can’t sign itself, allowing attackers to make non-functional modifications to a transaction without rendering it invalid. For example, an attacker can add some data to the signature script which will be dropped before the previous pubkey script is processed. +None of Bitcoin’s signature hash types protect the signature script, leaving the door open for a limited denial of service attack called :term:`transaction malleability `. The signature script contains the `secp256k1 `__ signature, which can’t sign itself, allowing attackers to make non-functional modifications to a transaction without rendering it invalid. For example, an attacker can add some data to the signature script which will be dropped before the previous pubkey script is processed. Although the modifications are non-functional—so they do not change what inputs the transaction uses nor what outputs it pays—they do change the computed hash of the transaction. Since each transaction links to previous transactions using hashes as a transaction identifier (txid), a modified transaction will not have the txid its creator expected. diff --git a/devguide/wallets.rst b/devguide/wallets.rst index c8d8e58..273deeb 100644 --- a/devguide/wallets.rst +++ b/devguide/wallets.rst @@ -132,7 +132,7 @@ Private keys are what are used to unlock satoshis from a particular address. In Wallet Import Format (WIF) ^^^^^^^^^^^^^^^^^^^^^^^^^^ -In order to make copying of private keys less prone to error, :term:`Wallet Import Format ` may be utilized. WIF uses base58Check encoding on a private key, greatly decreasing the chance of copying error, much like standard Bitcoin addresses. +In order to make copying of private keys less prone to error, :term:`Wallet Import Format ` may be utilized. WIF uses base58Check encoding on a private key, greatly decreasing the chance of copying error, much like standard Bitcoin addresses. 1. Take a private key. @@ -205,7 +205,7 @@ Hierarchical Deterministic Key Creation [normal|hardened|] [master|parent|child|grandchild] [extended|non-extended|] [private|public|chain] [key|code] --> -The hierarchical deterministic key creation and transfer protocol (:term:`HD protocol `) greatly simplifies wallet backups, eliminates the need for repeated communication between multiple programs using the same wallet, permits creation of child accounts which can operate independently, gives each parent account the ability to monitor or control its children even if the child account is compromised, and divides each account into full-access and restricted-access parts so untrusted users or programs can be allowed to receive or monitor payments without being able to spend them. +The hierarchical deterministic key creation and transfer protocol (:term:`HD protocol `) greatly simplifies wallet backups, eliminates the need for repeated communication between multiple programs using the same wallet, permits creation of child accounts which can operate independently, gives each parent account the ability to monitor or control its children even if the child account is compromised, and divides each account into full-access and restricted-access parts so untrusted users or programs can be allowed to receive or monitor payments without being able to spend them. The HD protocol takes advantage of the `ECDSA `__ public key creation function, :ref:`“point()” `, which takes a large integer (the private key) and turns it into a graph point (the public key): @@ -213,13 +213,13 @@ The HD protocol takes advantage of the `ECDSA ` works, it’s possible to create a :term:`child public key ` by combining an existing :term:`(parent) public key ` with another public key created from any integer (*i*) value. This child public key is the same public key which would be created by the :ref:`“point()” ` function if you added the *i* value to the original (parent) private key and then found the remainder of that sum divided by a global constant used by all Bitcoin software (*p*): +Because of the way :ref:`“point()” ` works, it’s possible to create a :term:`child public key ` by combining an existing :term:`(parent) public key ` with another public key created from any integer (*i*) value. This child public key is the same public key which would be created by the :ref:`“point()” ` function if you added the *i* value to the original (parent) private key and then found the remainder of that sum divided by a global constant used by all Bitcoin software (*p*): :: point( (parent_private_key + i) % p ) == parent_public_key + point(i) -This means that two or more independent programs which agree on a sequence of integers can create a series of unique :term:`child key` pairs from a single :term:`parent key` pair without any further communication. Moreover, the program which distributes new public keys for receiving payment can do so without any access to the private keys, allowing the public key distribution program to run on a possibly-insecure platform such as a public web server. +This means that two or more independent programs which agree on a sequence of integers can create a series of unique :term:`child key ` pairs from a single :term:`parent key ` pair without any further communication. Moreover, the program which distributes new public keys for receiving payment can do so without any access to the private keys, allowing the public key distribution program to run on a possibly-insecure platform such as a public web server. Child public keys can also create their own child public keys (grandchild public keys) by repeating the child key derivation operations: @@ -229,7 +229,7 @@ Child public keys can also create their own child public keys (grandchild public Whether creating child public keys or further-descended public keys, a predictable sequence of integer values would be no better than using a single public key for all transactions, as anyone who knew one child public key could find all of the other child public keys created from the same parent public key. Instead, a random seed can be used to deterministically generate the sequence of integer values so that the relationship between the child public keys is invisible to anyone without that seed. -The HD protocol uses a single root seed to create a hierarchy of child, grandchild, and other descended keys with unlinkable deterministically-generated integer values. Each child key also gets a deterministically-generated seed from its parent, called a :term:`chain code`, so the compromising of one chain code doesn’t necessarily compromise the integer sequence for the whole hierarchy, allowing the :term:`master chain code` to continue being useful even if, for example, a web-based public key distribution program gets hacked. +The HD protocol uses a single root seed to create a hierarchy of child, grandchild, and other descended keys with unlinkable deterministically-generated integer values. Each child key also gets a deterministically-generated seed from its parent, called a :term:`chain code `, so the compromising of one chain code doesn’t necessarily compromise the integer sequence for the whole hierarchy, allowing the :term:`master chain code ` to continue being useful even if, for example, a web-based public key distribution program gets hacked. .. figure:: /img/dev/en-hd-overview.svg :alt: Overview Of Hierarchical Deterministic Key Derivation @@ -238,9 +238,9 @@ The HD protocol uses a single root seed to create a hierarchy of child, grandchi As illustrated above, HD key derivation takes four inputs: -- The :term:`parent private key ` and *parent public key* are regular uncompressed 256-bit `ECDSA `__ keys. +- The :term:`parent private key ` and *parent public key* are regular uncompressed 256-bit `ECDSA `__ keys. -- The :term:`parent chain code ` is 256 bits of seemingly-random data. +- The :term:`parent chain code ` is 256 bits of seemingly-random data. - The :ref:`index ` number is a 32-bit integer specified by the program. @@ -254,14 +254,14 @@ In the normal form shown in the above illustration, the parent chain code, the p Specifying different index numbers will create different unlinkable child keys from the same parent keys. Repeating the procedure for the child keys using the child chain code will create unlinkable grandchild keys. -Because creating child keys requires both a key and a chain code, the key and chain code together are called the :term:`extended key`. An :term:`extended private key ` and its corresponding :term:`extended public key ` have the same chain code. The (top-level parent) :term:`master private key ` and master chain code are derived from random data, as illustrated below. +Because creating child keys requires both a key and a chain code, the key and chain code together are called the :term:`extended key `. An :term:`extended private key ` and its corresponding :term:`extended public key ` have the same chain code. The (top-level parent) :term:`master private key ` and master chain code are derived from random data, as illustrated below. .. figure:: /img/dev/en-hd-root-keys.svg :alt: Creating A Root Extended Key Pair Creating A Root Extended Key Pair -A :term:`root seed ` is created from either 128 bits, 256 bits, or 512 bits of random data. This root seed of as little as 128 bits is the only data the user needs to backup in order to derive every key created by a particular wallet program using particular settings. +A :term:`root seed ` is created from either 128 bits, 256 bits, or 512 bits of random data. This root seed of as little as 128 bits is the only data the user needs to backup in order to derive every key created by a particular wallet program using particular settings. |Warning icon| **Warning:** As of this writing, HD wallet programs are not expected to be fully compatible, so users must only use the same HD wallet program with the same HD-related settings for a particular root seed. @@ -292,7 +292,7 @@ The normal key derivation formula, described in the section above, combines toge The hardened formula, illustrated above, combines together the index number, the parent chain code, and the parent private key to create the data used to generate the child chain code and child private key. This formula makes it impossible to create child public keys without knowing the parent private key. In other words, parent extended public keys can’t create hardened child public keys. -Because of that, a :term:`hardened extended private key ` is much less useful than a normal extended private key—however, hardened extended private keys create a firewall through which multi-level key derivation compromises cannot happen. Because hardened child extended public keys cannot generate grandchild chain codes on their own, the compromise of a parent extended public key cannot be combined with the compromise of a grandchild private key to create great-grandchild extended private keys. +Because of that, a :term:`hardened extended private key ` is much less useful than a normal extended private key—however, hardened extended private keys create a firewall through which multi-level key derivation compromises cannot happen. Because hardened child extended public keys cannot generate grandchild chain codes on their own, the compromise of a parent extended public key cannot be combined with the compromise of a grandchild private key to create great-grandchild extended private keys. The HD protocol uses different index numbers to indicate whether a normal or hardened key should be generated. Index numbers from 0x00 to 0x7fffffff (0 to 231-1) will generate a normal key; index numbers from 0x80000000 to 0xffffffff will generate a hardened key. To make descriptions easy, many developers use the `prime symbol `__ to indicate hardened keys, so the first normal key (0x00) is 0 and the first hardened key (0x80000000) is 0´. diff --git a/examples/payment_processing.rst b/examples/payment_processing.rst index 1c93b49..48d3e13 100644 --- a/examples/payment_processing.rst +++ b/examples/payment_processing.rst @@ -32,7 +32,7 @@ The full sequence of events is illustrated below, starting with the spender clic BIP70 Payment Protocol -For the script to use the `protocol buffer `__, you will need a copy of Google’s `Protocol Buffer `__ compiler (``protoc``), which is available in most modern Linux package managers and `directly from Google. `__ Non-Google `protocol buffer `__ compilers are available for a variety of programming languages. You will also need a copy of the :ref:`PaymentRequest ` `Protocol Buffer description `__ from the Bitcoin Core source code. +For the script to use the `protocol buffer `__, you will need a copy of Google’s `Protocol Buffer `__ compiler (``protoc``), which is available in most modern Linux package managers and `directly from Google. `__ Non-Google `protocol buffer `__ compilers are available for a variety of programming languages. You will also need a copy of the :ref:`PaymentRequest ` `Protocol Buffer description `__ from the Bitcoin Core source code. Initialization Code ''''''''''''''''''' diff --git a/examples/testing.rst b/examples/testing.rst index 430b7d4..a02076c 100644 --- a/examples/testing.rst +++ b/examples/testing.rst @@ -6,7 +6,7 @@ Bitcoin Core provides testing tools designed to let developers test their applic Testnet ~~~~~~~ -When run with no arguments, all Bitcoin Core programs default to Bitcoin’s main `network <../devguide/p2p_network.html>`__ (:term:`mainnet`). However, for development, it’s safer and cheaper to use Bitcoin’s test `network <../devguide/p2p_network.html>`__ (testnet) where the satoshis spent have no real-world value. Testnet also relaxes some restrictions (such as standard transaction checks) so you can test functions which might currently be disabled by default on mainnet. +When run with no arguments, all Bitcoin Core programs default to Bitcoin’s main `network <../devguide/p2p_network.html>`__ (:term:`mainnet `). However, for development, it’s safer and cheaper to use Bitcoin’s test `network <../devguide/p2p_network.html>`__ (testnet) where the satoshis spent have no real-world value. Testnet also relaxes some restrictions (such as standard transaction checks) so you can test functions which might currently be disabled by default on mainnet. To use testnet, use the argument ``-testnet`` with ``bitcoin-cli``, ``bitcoind`` or ``bitcoin-qt`` or add ``testnet=1`` to your ``bitcoin.conf`` file as `described earlier <../examples/index.html>`__. To get free satoshis for testing, use `Piotr Piasecki’s testnet faucet `__. Testnet is a public resource provided for free by members of the community, so please don’t abuse it. diff --git a/examples/transactions.rst b/examples/transactions.rst index 3a8b40b..317bd94 100644 --- a/examples/transactions.rst +++ b/examples/transactions.rst @@ -93,7 +93,7 @@ Re-running the `“listunspent” RPC <../reference/rpc/listunspent.html>`__ wit :: - > bitcoin-cli -regtest generate 1 + > bitcoin-cli -regtest -generate 1 > unset NEW_ADDRESS @@ -303,7 +303,7 @@ Send the signed transaction to the connected node using the `“sendrawtransacti :: - > bitcoin-cli -regtest generate 1 + > bitcoin-cli -regtest -generate 1 > unset UTXO_TXID UTXO_VOUT NEW_ADDRESS RAW_TX SIGNED_RAW_TX diff --git a/glossary.rst b/glossary.rst index d49ca56..3c5c281 100644 --- a/glossary.rst +++ b/glossary.rst @@ -492,4 +492,158 @@ Glossary Watch-only address An address or pubkey script stored in the wallet without the corresponding private key, allowing the wallet to watch for outputs but not spend them. + + Bitcoin URI + A URI which allows receivers to encode payment details so spenders don't have to manually enter addresses and other details. + + Certificate chain + A chain of certificates connecting a individual's leaf certificate to the certificate authority's root certificate. + + Coinbase block height + The current block's height encoded into the first bytes of the coinbase field. + + Fiat + National currencies such as the dollar or euro. + + Intermediate certificate + A intermediate certificate authority certificate which helps connect a leaf (receiver) certificate to a root certificate authority. + + Key index + An index number used in the HD wallet formula to generate child keys from a parent key. + + Key pair + A private key and its derived public key. + + Label + The label parameter of a bitcoin: URI which provides the spender with the receiver's name (unauthenticated). + + Leaf certificate + The end-node in a certificate chain; in the payment protocol, it is the certificate belonging to the receiver of satoshis. + + Merge + Spending, in the same transaction, multiple outputs which can be traced back to different previous spenders, leaking information about how many satoshis you control. + + Merge avoidance + A strategy for selecting which outputs to spend that avoids merging outputs with different histories that could leak private information. + + Message + A parameter of bitcoin: URIs which allows the receiver to optionally specify a message to the spender. + + Micropayment channel + term-micropayment-channel (contracts-guide) (`original target `__) + + .. _term-msg_block: + The block header hash data type identifier of an inventory on the P2P network. + + .. _term-msg_cmpct_block: + An alternative to the block header hash data type identifier of an inventory on the P2P network used to request a compact block. + + .. _term-msg_filtered_witness_block: + An alternative to the block header hash data type identifier of an inventory on the P2P network that is reserved for future use and unused. + + .. _term-msg_tx: + The TXID data type identifier of an inventory on the P2P network. + + .. _term-msg_witness_block: + An alternative to the block header hash data type identifier of an inventory on the P2P network used to request a block with witness serialization for SegWit. + + .. _term-msg_witness_tx: + An alternative of the transaction data type identifier of an inventory on the P2P network used to request a transaction with witness serialization for SegWit. + + OP CHECKMULTISIG + Opcode which returns true if one or more provided signatures (m) sign the correct parts of a transaction and match one or more provided public keys (n). + + .. _term-op-checksig: + Opcode which returns true if a signature signs the correct parts of a transaction and matches a provided public key. + + .. _term-op-dup: + Operation which duplicates the entry below it on the stack. + + .. _term-op-equal: + Operation which returns true if the two entries below it on the stack are equivalent. + + .. _term-op-equalverify: + Operation which terminates the script in failure unless the two entries below it on the stack are equivalent. + + .. _term-op-hash160: + Operation which converts the entry below it on the stack into a RIPEMD(SHA256()) hashed version of itself. + + .. _term-op-return: + Operation which terminates the script in failure. + + .. _term-op-verify: + Operation which terminates the script if the entry below it on the stack is non-true (zero). + + Output index + The sequentially-numbered index of outputs in a single transaction starting from 0. + + .. _term-paymentdetails: + The PaymentDetails of the payment protocol which allows the receiver to specify the payment details to the spender. + + .. _term-paymentrequest: + The PaymentRequest of the payment protocol which contains and allows signing of the PaymentDetails. + + PKI + Public Key Infrastructure; usually meant to indicate the X.509 certificate system used for HTTP Secure (https). + + Point function + The ECDSA function used to create a public key from a private key. + + PP amount + Part of the Output part of the PaymentDetails part of a payment protocol where receivers can specify the amount of satoshis they want paid to a particular pubkey script. + + PP expires + The expires field of a PaymentDetails where the receiver tells the spender when the PaymentDetails expires. + + PP memo + The memo fields of PaymentDetails, Payment, and PaymentACK which allow spenders and receivers to send each other memos. + + PP merchant data + The merchant_data part of PaymentDetails and Payment which allows the receiver to send arbitrary data to the spender in PaymentDetails and receive it back in Payments. + + PP pki data + The pki_data field of a PaymentRequest which provides details such as certificates necessary to validate the request. + + PP pki type + The PKI field of a PaymentRequest which tells spenders how to validate this request as being from a specific recipient. + + PP script + The script field of a PaymentDetails where the receiver tells the spender what pubkey scripts to pay. + + Previous block header hash + A field in the block header which contains the SHA256(SHA256()) hash of the previous block's header. + + R parameter + The payment request parameter in a bitcoin: URI. + + Receipt + A cryptographically-verifiable receipt created using parts of a payment request and a confirmed transaction. + + Root certificate + A certificate belonging to a certificate authority (CA). + + SSL signature + Signatures created and recognized by major SSL implementations such as OpenSSL. + + Stanndard block relay + The regular block relay method: announcing a block with an inv message and waiting for a response. + + Transaction version number + A version number prefixed to transactions to allow upgrading. + + Unique Address + Address which are only used once to protect privacy and increase security. + + Unsolicited block push + When a miner sends a block message without sending an inv message first. + + URI qr code + A QR code containing a bitcoin: URI. + + V2 block + The current version of Bitcoin blocks. + + x509certificates + + term-x509certificates (developer-examples) (`original target `__) diff --git a/helpers/post_processor_rst.rb b/helpers/post_processor_rst.rb index 4269b1b..8eb0f72 100644 --- a/helpers/post_processor_rst.rb +++ b/helpers/post_processor_rst.rb @@ -180,7 +180,7 @@ def process_link(link) elsif target =~ /\/en\/developer-reference/ replace_reference_link(text, target) elsif target == "#avoiding-key-reuse" - "`#{text} <../transactions.html#avoiding-key-reuse>`__" + "`#{text} <../devguide/transactions.html#avoiding-key-reuse>`__" elsif target =~ /\/en\/release\/(.*)/ "`#{text} `__" elsif target =~ /\/en\/download/ diff --git a/helpers/rpc/.gitignore b/helpers/rpc/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/helpers/rpc/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/helpers/rpc/TODO.md b/helpers/rpc/TODO.md index 15b0d95..01788d1 100644 --- a/helpers/rpc/TODO.md +++ b/helpers/rpc/TODO.md @@ -1,10 +1,12 @@ # RPC helper To do -* Add RST - * Add basic renderer - * Try rendered result - * Add unit tests - * Refactor (share between backends, abstract rst page) +* Add command to add deprecation notice and deprecate getbalance, getunconfirmedbalance in 0.19 + +* Remove markdown support + * Remove renderer + * Remove helper subcommands which rely on markdown files + +* Add command to add "see also" and add references, e.g. in importaddress, importmulti, importprivkey, importpubkey, importwallet, rescanblockchain, walletprocesspsbt * Fix description * gettxoutproof (first line cut off before "txids") diff --git a/helpers/rpc/annotations-bitcoin-0.21.json b/helpers/rpc/annotations-bitcoin-0.21.json new file mode 100644 index 0000000..c9a637b --- /dev/null +++ b/helpers/rpc/annotations-bitcoin-0.21.json @@ -0,0 +1,937 @@ +{ + "abandontransaction": { + "added": "0.12.0", + "args": { + "txid": { + "type": "hex" + } + }, + "see_also": { + "commands": [ + "sendrawtransaction" + ] + }, + "summary": "marks an in-wallet transaction and all its in-wallet descendants as abandoned. This allows their inputs to be respent." + }, + "abortrescan": { + "summary": "Stops current wallet rescan" + }, + "addmultisigaddress": { + "see_also": { + "commands": [ + "createmultisig", + "decodescript" + ], + "glossary": [ + [ + "p2sh-address", + "Pay-To-Script-Hash (P2SH)" + ] + ] + }, + "summary": "adds a P2SH multisig address to the wallet.", + "wallet": true + }, + "addnode": { + "args": { + "command": { + "description": "What to do with the IP address above. Options are:
\u2022 `add` to add a node to the addnode list. Up to 8 nodes can be added additional to the default 8 nodes. Not limited by `-maxconnections`
\u2022 `remove` to remove a node from the list. If currently connected, this will disconnect immediately
\u2022 `onetry` to immediately attempt connection to the node even if the outgoing connection slots are full; this will only attempt the connection once" + }, + "node": { + "description": "The node to add as a string in the form of `:`. The IP address may be a hostname resolvable through DNS, an IPv4 address, an IPv4-as-IPv6 address, or an IPv6 address" + } + }, + "changed": "0.14.0", + "see_also": { + "commands": [ + "getaddednodeinfo" + ] + } + }, + "addwitnessaddress": { + "deprecated": "0.16.0", + "removed": "0.17.0" + }, + "analyzepsbt": { + "added": "0.18.0" + }, + "backupwallet": { + "see_also": { + "commands": [ + "dumpwallet", + "importwallet" + ] + }, + "wallet": true + }, + "bumpfee": { + "added": "0.14.0", + "see_also": { + "commands": [ + "createrawtransaction", + "fundrawtransaction", + "sendrawtransaction" + ] + } + }, + "clearbanned": { + "added": "0.12.0", + "see_also": { + "commands": [ + "listbanned", + "setban" + ] + } + }, + "createmultisig": { + "see_also": { + "commands": [ + "addmultisigaddress", + "decodescript" + ] + } + }, + "createrawtransaction": { + "changed": "0.14.1", + "see_also": { + "commands": [ + "decoderawtransaction", + "sendrawtransaction" + ] + } + }, + "decoderawtransaction": { + "changed": "0.13.0", + "see_also": { + "commands": [ + "createrawtransaction", + "sendrawtransaction" + ] + } + }, + "decodescript": { + "see_also": { + "commands": [ + "createmultisig" + ] + } + }, + "deriveaddresses": { + "added": "0.18.0" + }, + "disconnectnode": { + "added": "0.12.0", + "changed": "0.14.1", + "see_also": { + "commands": [ + "addnode", + "getaddednodeinfo" + ] + } + }, + "dumpprivkey": { + "see_also": { + "commands": [ + "importprivkey", + "dumpwallet" + ] + } + }, + "dumptxoutset": { + "added": "0.20" + }, + "dumpwallet": { + "see_also": { + "commands": [ + "backupwallet", + "importwallet" + ] + } + }, + "encryptwallet": { + "see_also": { + "commands": [ + "walletpassphrase", + "walletlock", + "walletpassphrasechange" + ] + } + }, + "estimatefee": { + "deprecated": "0.15.0", + "removed": "0.17.0", + "see_also": { + "commands": [ + "settxfee" + ] + } + }, + "estimatepriority": { + "removed": "0.15.0" + }, + "fundrawtransaction": { + "added": "0.12.0", + "changed": "0.14.0", + "see_also": { + "commands": [ + "createrawtransaction", + "decoderawtransaction", + "sendrawtransaction" + ] + } + }, + "generate": { + "added": "0.11.0", + "changed": "0.13.0", + "deprecated": "0.18.0", + "removed": "0.19" + }, + "generateblock": { + "added": "0.21" + }, + "generatetoaddress": { + "added": "0.13.0", + "see_also": { + "commands": [ + "generate", + "getmininginfo", + "getblocktemplate" + ] + } + }, + "generatetodescriptor": { + "added": "0.20" + }, + "getaccount": { + "removed": "0.18.0" + }, + "getaccountaddress": { + "deprecated": true, + "removed": "0.18.0" + }, + "getaddednodeinfo": { + "changed": "0.14.0", + "see_also": { + "commands": [ + "addnode", + "getpeerinfo" + ] + } + }, + "getaddressbyaccount": { + "deprecated": true, + "removed": "0.18.0" + }, + "getaddressesbyaccount": { + "removed": "0.18.0", + "see_also": { + "commands": [ + "getbalance" + ] + } + }, + "getaddressesbylabel": { + "added": "0.17.0" + }, + "getaddressinfo": { + "added": "0.17.0" + }, + "getbalance": { + "see_also": { + "commands": [ + "getreceivedbyaddress" + ] + } + }, + "getbalances": { + "added": "0.19" + }, + "getbestblockhash": { + "see_also": { + "commands": [ + "getblock", + "getblockhash" + ] + } + }, + "getblock": { + "args": { + "blockhash": { + "type": "hex" + } + }, + "changed": "0.13.0", + "see_also": { + "commands": [ + "getblockhash", + "getbestblockhash" + ] + }, + "summary": "gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block." + }, + "getblockchaininfo": { + "changed": "0.12.1", + "see_also": { + "commands": [ + "getmininginfo", + "getnetworkinfo", + "getwalletinfo" + ] + } + }, + "getblockcount": { + "see_also": { + "commands": [ + "getblockhash", + "getblock" + ] + } + }, + "getblockfilter": { + "added": "0.19" + }, + "getblockhash": { + "see_also": { + "commands": [ + "getblock", + "getbestblockhash" + ] + } + }, + "getblockheader": { + "added": "0.12.0", + "see_also": { + "commands": [ + "getblock", + "getblockhash", + "getbestblockhash" + ] + } + }, + "getblocktemplate": { + "see_also": { + "commands": [ + "getmininginfo", + "submitblock", + "prioritisetransaction" + ] + } + }, + "getchaintips": { + "see_also": { + "commands": [ + "getbestblockhash", + "getblock", + "getblockchaininfo" + ] + } + }, + "getconnectioncount": { + "see_also": { + "commands": [ + "getnettotals", + "getpeerinfo", + "getnetworkinfo" + ] + } + }, + "getdescriptorinfo": { + "added": "0.18.0" + }, + "getdifficulty": { + "see_also": { + "commands": [ + "getnetworkhashps", + "getmininginfo" + ] + } + }, + "getgenerate": { + "removed": "0.13.0", + "see_also": { + "commands": [ + "generate", + "generatetoaddress", + "getmininginfo" + ] + } + }, + "gethashespersec": { + "removed": "0.11.0", + "see_also": { + "commands": [ + "generate", + "getmininginfo" + ] + } + }, + "getindexinfo": { + "added": "0.20" + }, + "getinfo": { + "removed": "0.16.0", + "see_also": { + "commands": [ + "getblockchaininfo", + "getmempoolinfo", + "getmininginfo", + "getnetworkinfo", + "getwalletinfo" + ] + } + }, + "getmemoryinfo": { + "added": "0.14.0", + "see_also": { + "commands": [ + "getmempoolinfo" + ] + } + }, + "getmempoolancestors": { + "added": "0.13.0", + "see_also": { + "commands": [ + "getmempooldescendants", + "getrawmempool" + ] + } + }, + "getmempooldescendants": { + "added": "0.13.0", + "see_also": { + "commands": [ + "getmempoolancestors", + "getrawmempool" + ] + } + }, + "getmempoolentry": { + "added": "0.13.0", + "see_also": { + "commands": [ + "getmempoolancestors", + "getmempooldescendants", + "getrawmempool" + ] + } + }, + "getmempoolinfo": { + "changed": "0.12.0", + "see_also": { + "commands": [ + "getblockchaininfo", + "getrawmempool", + "gettxoutsetinfo" + ] + } + }, + "getmininginfo": { + "changed": "0.14.0", + "see_also": { + "commands": [ + "getmempoolinfo", + "getrawmempool", + "getblocktemplate", + "generate" + ] + } + }, + "getnettotals": { + "changed": "0.12.0", + "see_also": { + "commands": [ + "getnetworkinfo", + "getpeerinfo" + ] + } + }, + "getnetworkhashps": { + "see_also": { + "commands": [ + "getdifficulty", + "getblock" + ] + } + }, + "getnetworkinfo": { + "changed": "0.13.0", + "see_also": { + "commands": [ + "getpeerinfo", + "getnettotals" + ] + } + }, + "getnewaddress": { + "see_also": { + "commands": [ + "getrawchangeaddress", + "getbalance" + ] + } + }, + "getnodeaddresses": { + "added": "0.18.0" + }, + "getpeerinfo": { + "changed": "0.13.0", + "see_also": { + "commands": [ + "getaddednodeinfo", + "getnettotals", + "getnetworkinfo" + ] + } + }, + "getrawchangeaddress": { + "see_also": { + "commands": [ + "getnewaddress" + ] + } + }, + "getrawmempool": { + "changed": "0.13.0", + "see_also": { + "commands": [ + "getmempoolinfo", + "getmempoolentry", + "gettxoutsetinfo" + ] + } + }, + "getrawtransaction": { + "changed": "0.14.0", + "see_also": { + "commands": [ + "gettransaction" + ] + } + }, + "getreceivedbyaccount": { + "deprecated": true, + "removed": "0.18.0" + }, + "getreceivedbyaddress": {}, + "getreceivedbylabel": { + "added": "0.17.0" + }, + "getrpcinfo": { + "added": "0.18.0" + }, + "gettransaction": { + "changed": "0.12.0", + "see_also": { + "commands": [ + "getrawtransaction" + ] + } + }, + "gettxout": { + "see_also": { + "commands": [ + "getrawtransaction", + "gettransaction" + ] + } + }, + "gettxoutproof": { + "added": "0.11.0", + "see_also": { + "commands": [ + "verifytxoutproof" + ], + "messages": [ + [ + "merkleblock", + "A description of the\n format used for the proof." + ] + ] + } + }, + "gettxoutsetinfo": { + "see_also": { + "commands": [ + "getblockchaininfo", + "getmempoolinfo" + ] + } + }, + "getunconfirmedbalance": { + "see_also": { + "commands": [ + "getbalance" + ] + } + }, + "getwalletinfo": { + "see_also": { + "commands": [ + "listtransactions" + ] + } + }, + "getwork": { + "removed": "0.10.0", + "see_also": { + "commands": [ + "getblocktemplate", + "submitblock" + ] + } + }, + "importaddress": { + "see_also": { + "commands": [ + "importprivkey", + "listreceivedbyaddress" + ] + } + }, + "importdescriptors": { + "added": "0.21" + }, + "importmulti": { + "added": "0.14.0", + "see_also": { + "commands": [ + "importprivkey", + "importaddress", + "importwallet" + ] + } + }, + "importprivkey": { + "see_also": { + "commands": [ + "dumpprivkey", + "importaddress", + "importwallet" + ] + } + }, + "importprunedfunds": { + "added": "0.13.0", + "see_also": { + "commands": [ + "importprivkey", + "removeprunedfunds" + ] + } + }, + "importwallet": { + "see_also": { + "commands": [ + "dumpwallet", + "importprivkey" + ] + } + }, + "joinpsbts": { + "added": "0.18.0" + }, + "keypoolrefill": { + "see_also": { + "commands": [ + "getnewaddress", + "getwalletinfo" + ] + } + }, + "listaccounts": { + "deprecated": true, + "removed": "0.18.0" + }, + "listaddressgroupings": { + "see_also": { + "commands": [ + "gettransaction" + ] + } + }, + "listbanned": { + "added": "0.12.0", + "see_also": { + "commands": [ + "setban", + "clearbanned" + ] + } + }, + "listlabels": { + "added": "0.17.0" + }, + "listlockunspent": { + "see_also": { + "commands": [ + "lockunspent" + ] + } + }, + "listreceivedbyaccount": { + "deprecated": true, + "removed": "0.18.0" + }, + "listreceivedbyaddress": { + "see_also": { + "commands": [ + "getreceivedbyaddress" + ] + } + }, + "listreceivedbylabel": { + "added": "0.17.0" + }, + "listsinceblock": { + "see_also": { + "commands": [ + "listreceivedbyaddress" + ] + } + }, + "listtransactions": { + "changed": "0.12.1", + "see_also": { + "commands": [ + "gettransaction", + "listsinceblock" + ] + } + }, + "listunspent": { + "changed": "0.13.0", + "see_also": { + "commands": [ + "listtransactions", + "lockunspent" + ] + } + }, + "listwalletdir": { + "added": "0.18.0" + }, + "lockunspent": { + "see_also": { + "commands": [ + "listlockunspent", + "listunspent" + ] + } + }, + "move": { + "deprecated": true, + "removed": "0.18.0" + }, + "ping": { + "see_also": { + "commands": [ + "getpeerinfo" + ] + } + }, + "preciousblock": { + "added": "0.14.0" + }, + "prioritisetransaction": { + "see_also": { + "commands": [ + "getrawmempool", + "getblocktemplate" + ] + } + }, + "pruneblockchain": { + "added": "0.14.0", + "see_also": { + "commands": [ + "importprunedfunds" + ] + } + }, + "psbtbumpfee": { + "added": "0.21" + }, + "removeprunedfunds": { + "added": "0.13.0", + "see_also": { + "commands": [ + "importprivkey", + "importprunedfunds" + ] + } + }, + "rescanblockchain": { + "added": "0.16.0" + }, + "savemempool": { + "added": "0.16.0" + }, + "sendfrom": { + "deprecated": true, + "removed": "0.18.0" + }, + "sendmany": { + "see_also": { + "commands": [ + "sendtoaddress" + ] + } + }, + "sendrawtransaction": { + "see_also": { + "commands": [ + "createrawtransaction", + "decoderawtransaction" + ] + } + }, + "sendtoaddress": { + "see_also": { + "commands": [ + "sendmany" + ] + } + }, + "setaccount": { + "deprecated": true, + "removed": "0.18.0" + }, + "setban": { + "added": "0.12.0", + "see_also": { + "commands": [ + "listbanned", + "clearbanned" + ] + } + }, + "setgenerate": { + "removed": "0.13.0", + "see_also": { + "commands": [ + "generate", + "generatetoaddress", + "getmininginfo", + "getblocktemplate" + ] + } + }, + "setlabel": { + "added": "0.17.0" + }, + "setnetworkactive": { + "added": "0.14.0", + "see_also": { + "commands": [ + "getnetworkinfo" + ] + } + }, + "settxfee": { + "see_also": { + "commands": [ + "getwalletinfo", + "getnetworkinfo" + ] + } + }, + "setwalletflag": { + "added": "0.19" + }, + "signmessage": { + "see_also": { + "commands": [ + "signmessagewithprivkey", + "verifymessage" + ] + } + }, + "signmessagewithprivkey": { + "added": "0.13.0", + "see_also": { + "commands": [ + "signmessage", + "verifymessage" + ] + } + }, + "signrawtransaction": { + "removed": "0.18.0" + }, + "submitblock": { + "see_also": { + "commands": [ + "getblocktemplate" + ] + } + }, + "submitheader": { + "added": "0.18.0" + }, + "upgradewallet": { + "added": "0.21" + }, + "utxoupdatepsbt": { + "added": "0.18.0" + }, + "validateaddress": { + "changed": "0.13.0", + "see_also": { + "commands": [ + "importaddress", + "getnewaddress" + ] + } + }, + "verifychain": { + "see_also": { + "commands": [ + "getblockchaininfo", + "gettxoutsetinfo" + ] + } + }, + "verifymessage": { + "see_also": { + "commands": [ + "signmessage" + ] + } + }, + "verifytxoutproof": { + "added": "0.11.0", + "see_also": { + "commands": [ + "gettxoutproof" + ] + } + }, + "walletlock": { + "see_also": { + "commands": [ + "encryptwallet", + "walletpassphrase", + "walletpassphrasechange" + ] + } + }, + "walletpassphrase": { + "see_also": { + "commands": [ + "encryptwallet", + "walletpassphrasechange", + "walletlock" + ] + } + }, + "walletpassphrasechange": { + "see_also": { + "commands": [ + "encryptwallet", + "walletpassphrase", + "walletlock" + ] + } + } +} \ No newline at end of file diff --git a/helpers/rpc/renderer_rst.py b/helpers/rpc/renderer_rst.py index 67847f7..27a9b6c 100644 --- a/helpers/rpc/renderer_rst.py +++ b/helpers/rpc/renderer_rst.py @@ -14,7 +14,7 @@ class RendererRst: def __init__(self, output_dir): self.output_dir = Path(output_dir) - self.annotations = Annotations("annotations-bitcoin-0.18.json") + self.annotations = Annotations("annotations-bitcoin-0.21.json") def add_version_note(self, page): if "added" in self.annotation: diff --git a/helpers/rpc/test_data/deriveaddresses b/helpers/rpc/test_data/deriveaddresses index f3c3ba2..7adc250 100644 --- a/helpers/rpc/test_data/deriveaddresses +++ b/helpers/rpc/test_data/deriveaddresses @@ -22,5 +22,5 @@ Result: Examples: First three native segwit receive addresses -> bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#trd0mf0l" "[0,2]" +> bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#cjjspncu" "[0,2]" diff --git a/helpers/rpc/test_data/markdown/deriveaddresses.md b/helpers/rpc/test_data/markdown/deriveaddresses.md index 9da71ba..9185570 100644 --- a/helpers/rpc/test_data/markdown/deriveaddresses.md +++ b/helpers/rpc/test_data/markdown/deriveaddresses.md @@ -70,7 +70,7 @@ For more information on output descriptors, see the documentation in the doc/des First three native segwit receive addresses {% highlight bash %} -bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#trd0mf0l" "[0,2]" +bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#cjjspncu" "[0,2]" {% endhighlight %} {% endautocrossref %} diff --git a/helpers/rpc/test_data/rst/deriveaddresses.rst b/helpers/rpc/test_data/rst/deriveaddresses.rst index 73a8b0d..e9b37f5 100644 --- a/helpers/rpc/test_data/rst/deriveaddresses.rst +++ b/helpers/rpc/test_data/rst/deriveaddresses.rst @@ -51,5 +51,5 @@ Examples First three native segwit receive addresses:: - bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#trd0mf0l" "[0,2]" + bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#cjjspncu" "[0,2]" diff --git a/img/dev/en-p2p-control-messages.dot b/img/dev/en-p2p-control-messages.dot index ddb3523..8fd91bb 100644 --- a/img/dev/en-p2p-control-messages.dot +++ b/img/dev/en-p2p-control-messages.dot @@ -13,10 +13,12 @@ graph [ penwidth = 1.75, fontname="Sans" ] version -> verack; ping -> pong; getaddr -> addr; +getaddr -> addrv2 filterload -> filteradd; filterload -> filterclear; alert; +sendaddrv2; sendheaders; ERROR [ style = "invis" ]; diff --git a/img/dev/en-p2p-control-messages.png b/img/dev/en-p2p-control-messages.png index f9b69d2..e93fc1d 100644 Binary files a/img/dev/en-p2p-control-messages.png and b/img/dev/en-p2p-control-messages.png differ diff --git a/img/dev/en-p2p-control-messages.svg b/img/dev/en-p2p-control-messages.svg index eab7012..0aa1051 100644 --- a/img/dev/en-p2p-control-messages.svg +++ b/img/dev/en-p2p-control-messages.svg @@ -1,96 +1,129 @@ - - - - -%3 - - -Overview Of P2P Protocol Control And Advisory Messages + + + + + +Overview Of P2P Protocol Control And Advisory Messages -version - -version + +version + +version -verack - -verack + +verack + +verack -version->verack - + +version->verack + -ping - -ping + +ping + +ping -pong - -pong + +pong + +pong -ping->pong - + +ping->pong + -getaddr - -getaddr + +getaddr + +getaddr -addr - -addr + +addr + +addr -getaddr->addr - + +getaddr->addr + + + + +addrv2 + +addrv2 + + + +getaddr->addrv2 + -filterload - -filterload + +filterload + +filterload -filteradd - -filteradd + +filteradd + +filteradd -filterload->filteradd - + +filterload->filteradd + -filterclear - -filterclear + +filterclear + +filterclear -filterload->filterclear - + +filterload->filterclear + -alert - -alert + +alert + +alert + + + +sendaddrv2 + +sendaddrv2 -sendheaders - -sendheaders + +sendheaders + +sendheaders -reject - -reject + +reject + +reject diff --git a/index.rst b/index.rst index a004ea6..49dc437 100644 --- a/index.rst +++ b/index.rst @@ -1,5 +1,5 @@ Getting Started -======== +=============== The site aims to provide the information you need to understand Bitcoin and start building Bitcoin-based applications. To make the best use of diff --git a/reference/block_chain.rst b/reference/block_chain.rst index 6bacca8..0a7b7e4 100644 --- a/reference/block_chain.rst +++ b/reference/block_chain.rst @@ -11,7 +11,7 @@ Block headers are serialized in the 80-byte format described below and then hash +-------+------------------------------------------------------------------------------------------+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Bytes | Name | Data Type | Description | +=======+==========================================================================================+===========+=================================================================================================================================================================================================================================================================================================================================================+ -| 4 | version | int32_t | The :term:`block version ` number indicates which set of block validation rules to follow. See the list of block versions below. | +| 4 | version | int32_t | The :term:`block version ` number indicates which set of block validation rules to follow. See the list of block versions below. | +-------+------------------------------------------------------------------------------------------+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 32 | :ref:`previous block header hash ` | char[32] | A SHA256(SHA256()) hash in internal byte order of the previous block’s header. This ensures no previous block can be changed without also changing this block’s header. | +-------+------------------------------------------------------------------------------------------+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -50,9 +50,7 @@ Block Versions - :ref:`Version 2 ` was introduced in `Bitcoin Core 0.7.0 `__ (September 2012) as a soft fork. As described in `BIP34 `__, valid :ref:`version 2 blocks ` require a :ref:`block height parameter in the coinbase `. Also described in `BIP34 `__ are rules for rejecting certain blocks; based on those rules, `Bitcoin Core 0.7.0 `__ and later versions began to reject :ref:`version 2 blocks ` without the block height in coinbase at block height 224,412 (March 2013) and began to reject new version 1 blocks three weeks later at block height 227,930. -- **Version 3** blocks were introduced in `Bitcoin Core 0.10.0 `__ (February - - 2015) as a soft fork. When the fork reached full enforcement (July 2015), it required strict `DER `__ encoding of all `ECDSA `__ signatures in new blocks as described in `BIP66 `__. Transactions that do not use strict `DER `__ encoding had previously been non-standard since `Bitcoin Core 0.8.0 `__ (February 2012). +- **Version 3** blocks were introduced in `Bitcoin Core 0.10.0 `__ (February 2015) as a soft fork. When the fork reached full enforcement (July 2015), it required strict `DER `__ encoding of all `ECDSA `__ signatures in new blocks as described in `BIP66 `__. Transactions that do not use strict `DER `__ encoding had previously been non-standard since `Bitcoin Core 0.8.0 `__ (February 2012). - **Version 4** blocks specified in BIP65 and introduced in `Bitcoin Core 0.11.2 `__ (November 2015) as a soft fork became active in December 2015. These blocks now support the new ``OP_CHECKLOCKTIMEVERIFY`` opcode described in that BIP. @@ -135,8 +133,8 @@ Under current consensus rules, a block is not valid unless its serialized size i | *Varies* | txns | raw transaction | Every transaction in this block, one after another, in raw transaction format. Transactions must appear in the data stream in the same order their TXIDs appeared in the first row of the merkle tree. See the `merkle tree section <../reference/block_chain.html#merkle-trees>`__ for details. | +----------+--------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -The first transaction in a block must be a :term:`coinbase transaction` which should collect and spend any transaction fees paid by transactions included in this block. +The first transaction in a block must be a :term:`coinbase transaction ` which should collect and spend any transaction fees paid by transactions included in this block. All blocks with a block height less than 6,930,000 are entitled to receive a block subsidy of newly created bitcoin value, which also should be spent in the coinbase transaction. (The block subsidy started at 50 bitcoins and is being halved every 210,000 blocks—approximately once every four years. As of November 2017, it’s 12.5 bitcoins.) -Together, the transaction fees and block subsidy are called the :term:`block reward`. A coinbase transaction is invalid if it tries to spend more value than is available from the block reward. +Together, the transaction fees and block subsidy are called the :term:`block reward `. A coinbase transaction is invalid if it tries to spend more value than is available from the block reward. diff --git a/reference/p2p_networking.rst b/reference/p2p_networking.rst index 5afbdca..488ba3a 100644 --- a/reference/p2p_networking.rst +++ b/reference/p2p_networking.rst @@ -1,7 +1,7 @@ P2P Network ----------- -This section describes the Bitcoin P2P `network <../devguide/p2p_network.html>`__ protocol (but it is `not a specification <../reference/intro.html#not-a-specification>`__). It does not describe the discontinued direct `IP-to-IP payment protocol `__, the :term:`deprecated BIP70 payment protocol `, the `GetBlockTemplate mining protocol <../devguide/mining.html#getblocktemplate-rpc>`__, or any `network <../devguide/p2p_network.html>`__ protocol never implemented in an official version of Bitcoin Core. +This section describes the Bitcoin P2P `network <../devguide/p2p_network.html>`__ protocol (but it is `not a specification <../reference/intro.html#not-a-specification>`__). It does not describe the discontinued direct `IP-to-IP payment protocol `__, the :term:`deprecated BIP70 payment protocol `, the `GetBlockTemplate mining protocol <../devguide/mining.html#getblocktemplate-rpc>`__, or any `network <../devguide/p2p_network.html>`__ protocol never implemented in an official version of Bitcoin Core. All `peer-to-peer <../devguide/p2p_network.html>`__ communication occurs entirely over TCP. @@ -13,7 +13,7 @@ Constants And Defaults The following constants and defaults are taken from Bitcoin Core’s `chainparams.cpp `__ source code file. +--------------------------------------------+--------------+------------------------------------------+------------+ -| `Network <../devguide/p2p_network.html>`__ | Default Port | :term:`Start String ` | Max nBits | +| `Network <../devguide/p2p_network.html>`__ | Default Port | :term:`Start String ` | Max nBits | +============================================+==============+==========================================+============+ | Mainnet | 8333 | 0xf9beb4d9 | 0x1d00ffff | +--------------------------------------------+--------------+------------------------------------------+------------+ @@ -107,7 +107,7 @@ The following `network <../devguide/p2p_network.html>`__ messages all request or Overview Of P2P Protocol Data Request And Reply Messages -Many of the data messages use :term:`inventories ` as unique identifiers for transactions and blocks. Inventories have a simple 36-byte structure: +Many of the data messages use :term:`inventories ` as unique identifiers for transactions and blocks. Inventories have a simple 36-byte structure: +-------+-----------------+-----------+--------------------------------------------------------------------------+ | Bytes | Name | Data Type | Description | @@ -598,7 +598,7 @@ Note that almost none of the control messages are authenticated in any way, mean Addr ^^^^ -The ``addr`` (IP address) message relays connection information for peers on the `network <../devguide/p2p_network.html>`__. Each peer which wants to accept incoming connections creates an `“addr” message <../reference/p2p_networking.html#addr>`__ providing its connection information and then sends that message to its peers unsolicited. Some of its peers send that information to their peers (also unsolicited), some of which further distribute it, allowing decentralized peer discovery for any program already on the `network <../devguide/p2p_network.html>`__. +The ``addr`` (IP address) message relays connection information for peers on the `network <../devguide/p2p_network.html>`__. Each peer which wants to accept incoming connections creates an `“addr” <../reference/p2p_networking.html#addr>`__ or `“addrv2” <../reference/p2p_networking.html#addrv2>`__ message providing its connection information and then sends that message to its peers unsolicited. Some of its peers send that information to their peers (also unsolicited), some of which further distribute it, allowing decentralized peer discovery for any program already on the `network <../devguide/p2p_network.html>`__. An `“addr” message <../reference/p2p_networking.html#addr>`__ may also be sent in response to a `“getaddr” message <../reference/p2p_networking.html#getaddr>`__. @@ -639,6 +639,54 @@ The following annotated hexdump shows part of an `“addr” message <../referen [...] .............................. (999 more addresses omitted) +Addrv2 +^^^^^^ + +The ``addrv2`` (address version two) message relays connection information for peers on the `network <../devguide/p2p_network.html>`__ in a similar way to the `“addr“ message <../reference/p2p_networking.html#addr>`__ except that it uses a different encoding which supports addresses longer than 16 bytes. + ++----------+------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| Bytes | Name | Data Type | Description | ++==========+==================+=======================================================+============================================================================================================================+ +| *Varies* | address count | compactSize uint | The number of address entries up to a maximum of 1,000. | ++----------+------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| *Varies* | addresses | `network <../devguide/p2p_network.html>`__ address | Address entries. See the table below for the format of a Bitcoin `network <../devguide/p2p_network.html>`__ addrv2 address.| ++----------+------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + +Each encapsulated address uses the following structure (``addrv2`` encoding): + ++----------+----------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ +| Bytes | Name | Data Type | Description | ++==========+================+==================+===================================================================================================================================================+ +| 4 | time | uint32 | Same as in the `“addr” message <../reference/p2p_networking.html#addr>`__. | ++----------+----------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ +| *Varies* | services | compactSize uint | Same as in the `“addr” message <../reference/p2p_networking.html#addr>`__, but encoded as compactSize. | ++----------+----------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ +| 1 | network id | uint8_t | The id of the network to which the address belongs to, as defined in `BIP155 `__. | ++----------+----------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ +| *Varies* | address length | compactSize uint | The size of the address in the following field (in bytes). | ++----------+----------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ +| *Varies* | address | byte[] | The network address. The interpretation depends on the network id. | ++----------+----------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ +| 2 | port | uint16_t | Same as in the `“addr” message <../reference/p2p_networking.html#addr>`__. | ++----------+----------------+------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+ + +The following annotated hexdump shows part of an `“addrv2” message <../reference/p2p_networking.html#addrv2>`__ (the message header has been omitted). + +.. highlight:: text + +:: + + fde803 ............................. Address count: 1000 + + d91f4854 ........................... [Epoch time][unix epoch time]: 1414012889 + fd4804 ............................. Service bits: compactSize(NODE_WITNESS | NODE_COMPACT_FILTERS | NODE_NETWORK_LIMITED) + 01 ................................. BIP155 network id: IPv4 + 04 ................................. Address length: compactSize(4) + c0000233 ........................... Address: 192.0.2.51 + 208d ............................... Port: 8333 + + [...] .............................. (999 more addresses omitted) + Alert ^^^^^ @@ -879,7 +927,7 @@ In addition, because the filter size stays the same even though additional eleme GetAddr ^^^^^^^ -The `“getaddr” message <../reference/p2p_networking.html#getaddr>`__ requests an `“addr” message <../reference/p2p_networking.html#addr>`__ from the receiving node, preferably one with lots of IP addresses of other receiving nodes. The transmitting node can use those IP addresses to quickly update its database of available nodes rather than waiting for unsolicited `“addr” messages <../reference/p2p_networking.html#addr>`__ to arrive over time. +The `“getaddr” message <../reference/p2p_networking.html#getaddr>`__ requests an `“addr” <../reference/p2p_networking.html#addr>`__ or `“addrv2” <../reference/p2p_networking.html#addrv2>`__ message from the receiving node, preferably one with lots of addresses of other receiving nodes. The transmitting node can use those addresses to quickly update its database of available nodes rather than waiting for unsolicited `“addr” <../reference/p2p_networking.html#addr>`__ or `“addrv2” <../reference/p2p_networking.html#addrv2>`__ messages to arrive over time. There is no payload in a `“getaddr” message <../reference/p2p_networking.html#getaddr>`__. See the `message header section <../reference/p2p_networking.html#message-headers>`__ for an example of a message without a payload. @@ -990,6 +1038,13 @@ The `“sendheaders” message <../reference/p2p_networking.html#sendheaders>`__ There is no payload in a `“sendheaders” message <../reference/p2p_networking.html#sendheaders>`__. See the `message header section <../reference/p2p_networking.html#message-headers>`__ for an example of a message without a payload. +SendAddrv2 +^^^^^^^^^^^ + +The `“sendaddrv2” message <../reference/p2p_networking.html#sendaddrv2>`__ tells the receiving peer that the sender can understand `“addrv2” messages <../reference/p2p_networking.html#addrv2>`__ and prefers to receive them instead of `“addr” messages <../reference/p2p_networking.html#addr>`__. + +There is no payload in a `“sendaddrv2” message <../reference/p2p_networking.html#sendaddrv2>`__. See the `message header section <../reference/p2p_networking.html#message-headers>`__ for an example of a message without a payload. + VerAck ^^^^^^ diff --git a/reference/rpc/abandontransaction.rst b/reference/rpc/abandontransaction.rst index ae6f9b7..b999f86 100644 --- a/reference/rpc/abandontransaction.rst +++ b/reference/rpc/abandontransaction.rst @@ -21,6 +21,13 @@ Argument #1 - txid The transaction id +Result +~~~~~~ + +:: + + null (json null) + Examples ~~~~~~~~ @@ -33,5 +40,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "abandontransaction", "params": ["1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "abandontransaction", "params": ["1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/abortrescan.rst b/reference/rpc/abortrescan.rst index 2378796..15fa0d6 100644 --- a/reference/rpc/abortrescan.rst +++ b/reference/rpc/abortrescan.rst @@ -8,6 +8,21 @@ abortrescan Stops current wallet rescan triggered by an RPC call, e.g. by an importprivkey call. +Note: Use "getwalletinfo" to query the scanning progress. + +Result +~~~~~~ + +.. list-table:: + :header-rows: 1 + + * - Name + - Type + - Description + * - true|false + - boolean + - Whether the abort was successful + Examples ~~~~~~~~ @@ -24,5 +39,5 @@ Abort the running wallet rescan:: As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "abortrescan", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "abortrescan", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/addmultisigaddress.rst b/reference/rpc/addmultisigaddress.rst index e9fb9e1..35bcff5 100644 --- a/reference/rpc/addmultisigaddress.rst +++ b/reference/rpc/addmultisigaddress.rst @@ -6,7 +6,7 @@ addmultisigaddress ``addmultisigaddress nrequired ["key",...] ( "label" "address_type" )`` -Add a nrequired-to-sign multisignature address to the wallet. Requires a new wallet backup. +Add an nrequired-to-sign multisignature address to the wallet. Requires a new wallet backup. Each key is a Bitcoin address or hex-encoded public key. @@ -28,7 +28,7 @@ Argument #2 - keys **Type:** json array, required -A json array of bitcoin addresses or hex-encoded public keys +The bitcoin addresses or hex-encoded public keys :: @@ -56,9 +56,10 @@ Result :: - { - "address":"multisigaddress", (string) The value of the new multisig address. - "redeemScript":"script" (string) The string value of the hex-encoded redemption script. + { (json object) + "address" : "str", (string) The value of the new multisig address + "redeemScript" : "hex", (string) The string value of the hex-encoded redemption script + "descriptor" : "str" (string) The descriptor for this multisig } Examples @@ -69,9 +70,9 @@ Examples Add a multisig address from 2 addresses:: - bitcoin-cli addmultisigaddress 2 "[\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\",\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\"]" + bitcoin-cli addmultisigaddress 2 "[\"bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl\",\"bc1q02ad21edsxd23d32dfgqqsz4vv4nmtfzuklhy3\"]" As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "addmultisigaddress", "params": [2, "[\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\",\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\"]"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "addmultisigaddress", "params": [2, "[\"bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl\",\"bc1q02ad21edsxd23d32dfgqqsz4vv4nmtfzuklhy3\"]"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/addnode.rst b/reference/rpc/addnode.rst index 58d91a7..2d66366 100644 --- a/reference/rpc/addnode.rst +++ b/reference/rpc/addnode.rst @@ -27,6 +27,13 @@ Argument #2 - command 'add' to add a node to the list, 'remove' to remove a node from the list, 'onetry' to try a connection to the node once +Result +~~~~~~ + +:: + + null (json null) + Examples ~~~~~~~~ @@ -39,5 +46,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "addnode", "params": ["192.168.0.6:8333", "onetry"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "addnode", "params": ["192.168.0.6:8333", "onetry"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/analyzepsbt.rst b/reference/rpc/analyzepsbt.rst index 3931797..85b1fa7 100644 --- a/reference/rpc/analyzepsbt.rst +++ b/reference/rpc/analyzepsbt.rst @@ -20,29 +20,32 @@ Result :: - { - "inputs" : [ (array of json objects) - { - "has_utxo" : true|false (boolean) Whether a UTXO is provided - "is_final" : true|false (boolean) Whether the input is finalized - "missing" : { (json object, optional) Things that are missing that are required to complete this input - "pubkeys" : [ (array, optional) - "keyid" (string) Public key ID, hash160 of the public key, of a public key whose BIP 32 derivation path is missing - ] - "signatures" : [ (array, optional) - "keyid" (string) Public key ID, hash160 of the public key, of a public key whose signature is missing - ] - "redeemscript" : "hash" (string, optional) Hash160 of the redeemScript that is missing - "witnessscript" : "hash" (string, optional) SHA256 of the witnessScript that is missing - } - "next" : "role" (string, optional) Role of the next person that this input needs to go to - } - ,... - ] - "estimated_vsize" : vsize (numeric, optional) Estimated vsize of the final signed transaction - "estimated_feerate" : feerate (numeric, optional) Estimated feerate of the final signed transaction in BTC/kB. Shown only if all UTXO slots in the PSBT have been filled. - "fee" : fee (numeric, optional) The transaction fee paid. Shown only if all UTXO slots in the PSBT have been filled. - "next" : "role" (string) Role of the next person that this psbt needs to go to + { (json object) + "inputs" : [ (json array) + { (json object) + "has_utxo" : true|false, (boolean) Whether a UTXO is provided + "is_final" : true|false, (boolean) Whether the input is finalized + "missing" : { (json object, optional) Things that are missing that are required to complete this input + "pubkeys" : [ (json array, optional) + "hex", (string) Public key ID, hash160 of the public key, of a public key whose BIP 32 derivation path is missing + ... + ], + "signatures" : [ (json array, optional) + "hex", (string) Public key ID, hash160 of the public key, of a public key whose signature is missing + ... + ], + "redeemscript" : "hex", (string, optional) Hash160 of the redeemScript that is missing + "witnessscript" : "hex" (string, optional) SHA256 of the witnessScript that is missing + }, + "next" : "str" (string, optional) Role of the next person that this input needs to go to + }, + ... + ], + "estimated_vsize" : n, (numeric, optional) Estimated vsize of the final signed transaction + "estimated_feerate" : n, (numeric, optional) Estimated feerate of the final signed transaction in BTC/kB. Shown only if all UTXO slots in the PSBT have been filled + "fee" : n, (numeric, optional) The transaction fee paid. Shown only if all UTXO slots in the PSBT have been filled + "next" : "str", (string) Role of the next person that this psbt needs to go to + "error" : "str" (string, optional) Error message (if there is one) } Examples diff --git a/reference/rpc/backupwallet.rst b/reference/rpc/backupwallet.rst index 7b60b36..d24e1d9 100644 --- a/reference/rpc/backupwallet.rst +++ b/reference/rpc/backupwallet.rst @@ -15,6 +15,13 @@ Argument #1 - destination The destination directory or file +Result +~~~~~~ + +:: + + null (json null) + Examples ~~~~~~~~ @@ -27,5 +34,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "backupwallet", "params": ["backup.dat"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "backupwallet", "params": ["backup.dat"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/bumpfee.rst b/reference/rpc/bumpfee.rst index 4e26110..b6877fd 100644 --- a/reference/rpc/bumpfee.rst +++ b/reference/rpc/bumpfee.rst @@ -10,21 +10,25 @@ Bumps the fee of an opt-in-RBF transaction T, replacing it with a new transactio An opt-in RBF transaction with the given txid must be in the wallet. -The command will pay the additional fee by decreasing (or perhaps removing) its change output. +The command will pay the additional fee by reducing change outputs or adding inputs when necessary. + +It may add a new change output if one does not already exist. + +All inputs in the original transaction will be included in the replacement transaction. -If the change output is not big enough to cover the increased fee, the command will currently fail -instead of adding new inputs to compensate. (A future implementation could improve this.) The command will fail if the wallet or mempool contains a transaction that spends one of T's outputs. -By default, the new fee will be calculated automatically using estimatesmartfee. +By default, the new fee will be calculated automatically using the estimatesmartfee RPC. The user can specify a confirmation target for estimatesmartfee. -Alternatively, the user can specify totalFee, or use RPC settxfee to set a higher fee rate. +Alternatively, the user can specify a fee rate in sat/vB for the new transaction. At a minimum, the new fee rate must be high enough to pay an additional new relay fee (incrementalfee returned by getnetworkinfo) to enter the node's mempool. +\* WARNING: before version 0.21, fee_rate was in BTC/kvB. As of 0.21, fee_rate is in sat/vB. \* + Argument #1 - txid ~~~~~~~~~~~~~~~~~~ @@ -40,11 +44,13 @@ Argument #2 - options :: { - "confTarget": n, (numeric, optional, default=fallback to wallet's default) Confirmation target (in blocks) - "totalFee": n, (numeric, optional, default=fallback to 'confTarget') Total fee (NOT feerate) to pay, in satoshis. - In rare cases, the actual fee paid might be slightly higher than the specified - totalFee if the tx change output has to be removed because it is too close to - the dust threshold. + "conf_target": n, (numeric, optional, default=wallet -txconfirmtarget) Confirmation target in blocks + + "fee_rate": amount, (numeric or string, optional, default=not set, fall back to wallet fee estimation) + Specify a fee rate in sat/vB instead of relying on the built-in fee estimator. + Must be at least 1.000 sat/vB higher than the current transaction fee rate. + WARNING: before version 0.21, fee_rate was in BTC/kvB. As of 0.21, fee_rate is in sat/vB. + "replaceable": bool, (boolean, optional, default=true) Whether the new transaction should still be marked bip-125 replaceable. If true, the sequence numbers in the transaction will be left unchanged from the original. If false, any input sequence numbers in the @@ -52,10 +58,11 @@ Argument #2 - options so the new transaction will not be explicitly bip-125 replaceable (though it may still be replaceable in practice, for example if it has unconfirmed ancestors which are replaceable). - "estimate_mode": "str", (string, optional, default=UNSET) The fee estimate mode, must be one of: - "UNSET" - "ECONOMICAL" - "CONSERVATIVE" + + "estimate_mode": "str", (string, optional, default=unset) The fee estimate mode, must be one of (case insensitive): + "unset" + "economical" + "conservative" } Result @@ -63,11 +70,15 @@ Result :: - { - "txid": "value", (string) The id of the new transaction - "origfee": n, (numeric) Fee of the replaced transaction - "fee": n, (numeric) Fee of the new transaction - "errors": [ str... ] (json array of strings) Errors encountered during processing (may be empty) + { (json object) + "psbt" : "str", (string) The base64-encoded unsigned PSBT of the new transaction. Only returned when wallet private keys are disabled. (DEPRECATED) + "txid" : "hex", (string) The id of the new transaction. Only returned when wallet private keys are enabled. + "origfee" : n, (numeric) The fee of the replaced transaction. + "fee" : n, (numeric) The fee of the new transaction. + "errors" : [ (json array) Errors encountered during processing (may be empty). + "str", (string) + ... + ] } Examples @@ -76,7 +87,7 @@ Examples .. highlight:: shell -Bump the fee, get the new transaction's txid:: +Bump the fee, get the new transaction'stxid:: bitcoin-cli bumpfee diff --git a/reference/rpc/clearbanned.rst b/reference/rpc/clearbanned.rst index 688c0a8..5398f34 100644 --- a/reference/rpc/clearbanned.rst +++ b/reference/rpc/clearbanned.rst @@ -8,6 +8,13 @@ clearbanned Clear all banned IPs. +Result +~~~~~~ + +:: + + null (json null) + Examples ~~~~~~~~ @@ -20,5 +27,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "clearbanned", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "clearbanned", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/combinepsbt.rst b/reference/rpc/combinepsbt.rst index 42ae6bc..c86eade 100644 --- a/reference/rpc/combinepsbt.rst +++ b/reference/rpc/combinepsbt.rst @@ -15,7 +15,7 @@ Argument #1 - txs **Type:** json array, required -A json array of base64 strings of partially signed transactions +The base64 strings of partially signed transactions :: @@ -24,6 +24,19 @@ A json array of base64 strings of partially signed transactions ... ] +Result +~~~~~~ + +.. list-table:: + :header-rows: 1 + + * - Name + - Type + - Description + * - str + - string + - The base64-encoded partially signed transaction + Examples ~~~~~~~~ @@ -32,5 +45,5 @@ Examples :: - bitcoin-cli combinepsbt ["mybase64_1", "mybase64_2", "mybase64_3"] + bitcoin-cli combinepsbt '["mybase64_1", "mybase64_2", "mybase64_3"]' diff --git a/reference/rpc/combinerawtransaction.rst b/reference/rpc/combinerawtransaction.rst index 0696d9f..8287b2a 100644 --- a/reference/rpc/combinerawtransaction.rst +++ b/reference/rpc/combinerawtransaction.rst @@ -16,12 +16,12 @@ Argument #1 - txs **Type:** json array, required -A json array of hex strings of partially signed transactions +The hex strings of partially signed transactions :: [ - "hexstring", (string) A transaction hash + "hexstring", (string) A hex-encoded raw transaction ... ] @@ -34,7 +34,7 @@ Result * - Name - Type - Description - * - hex + * - str - string - The hex-encoded raw transaction with signature(s) @@ -46,5 +46,5 @@ Examples :: - bitcoin-cli combinerawtransaction ["myhex1", "myhex2", "myhex3"] + bitcoin-cli combinerawtransaction '["myhex1", "myhex2", "myhex3"]' diff --git a/reference/rpc/converttopsbt.rst b/reference/rpc/converttopsbt.rst index 53678e1..91cd85a 100644 --- a/reference/rpc/converttopsbt.rst +++ b/reference/rpc/converttopsbt.rst @@ -21,7 +21,7 @@ Argument #2 - permitsigdata **Type:** boolean, optional, default=false -If true, any signatures in the input will be discarded and conversion. +If true, any signatures in the input will be discarded and conversion will continue. If false, RPC will fail if any signatures are present. Argument #3 - iswitness @@ -30,9 +30,24 @@ Argument #3 - iswitness **Type:** boolean, optional, default=depends on heuristic tests Whether the transaction hex is a serialized witness transaction. - If iswitness is not present, heuristic tests will be used in decoding. If true, only witness deserializaion - will be tried. If false, only non-witness deserialization will be tried. Only has an effect if - permitsigdata is true. + If iswitness is not present, heuristic tests will be used in decoding. + If true, only witness deserialization will be tried. + If false, only non-witness deserialization will be tried. + This boolean should reflect whether the transaction has inputs + (e.g. fully valid, or on-chain transactions), if known by the caller. + +Result +~~~~~~ + +.. list-table:: + :header-rows: 1 + + * - Name + - Type + - Description + * - str + - string + - The resulting raw transaction (base64-encoded string) Examples ~~~~~~~~ diff --git a/reference/rpc/createmultisig.rst b/reference/rpc/createmultisig.rst index f6739a5..23a3bea 100644 --- a/reference/rpc/createmultisig.rst +++ b/reference/rpc/createmultisig.rst @@ -22,7 +22,7 @@ Argument #2 - keys **Type:** json array, required -A json array of hex-encoded public keys. +The hex-encoded public keys. :: @@ -43,9 +43,10 @@ Result :: - { - "address":"multisigaddress", (string) The value of the new multisig address. - "redeemScript":"script" (string) The string value of the hex-encoded redemption script. + { (json object) + "address" : "str", (string) The value of the new multisig address. + "redeemScript" : "hex", (string) The string value of the hex-encoded redemption script. + "descriptor" : "str" (string) The descriptor for this multisig } Examples @@ -60,5 +61,5 @@ Create a multisig address from 2 public keys:: As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "createmultisig", "params": [2, "[\"03789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd\",\"03dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a61626\"]"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "createmultisig", "params": [2, "[\"03789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd\",\"03dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a61626\"]"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/createpsbt.rst b/reference/rpc/createpsbt.rst index 5d12c45..2e5f3d5 100644 --- a/reference/rpc/createpsbt.rst +++ b/reference/rpc/createpsbt.rst @@ -15,7 +15,7 @@ Argument #1 - inputs **Type:** json array, required -A json array of json objects +The json objects :: @@ -33,7 +33,7 @@ Argument #2 - outputs **Type:** json array, required -a json array with outputs (key-value pairs), where none of the keys are duplicated. +The outputs (key-value pairs), where none of the keys are duplicated. That is, each address can only appear once and there can only be one 'data' object. For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also accepted as second parameter. @@ -65,6 +65,19 @@ Argument #4 - replaceable Marks this transaction as BIP125 replaceable. Allows this transaction to be replaced by a transaction with higher fees. If provided, it is an error if explicit sequence numbers are incompatible. +Result +~~~~~~ + +.. list-table:: + :header-rows: 1 + + * - Name + - Type + - Description + * - str + - string + - The resulting raw transaction (base64-encoded string) + Examples ~~~~~~~~ diff --git a/reference/rpc/createrawtransaction.rst b/reference/rpc/createrawtransaction.rst index 9bb3526..33444e8 100644 --- a/reference/rpc/createrawtransaction.rst +++ b/reference/rpc/createrawtransaction.rst @@ -20,7 +20,7 @@ Argument #1 - inputs **Type:** json array, required -A json array of json objects +The inputs :: @@ -38,7 +38,7 @@ Argument #2 - outputs **Type:** json array, required -a json array with outputs (key-value pairs), where none of the keys are duplicated. +The outputs (key-value pairs), where none of the keys are duplicated. That is, each address can only appear once and there can only be one 'data' object. For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also accepted as second parameter. @@ -79,7 +79,7 @@ Result * - Name - Type - Description - * - transaction + * - hex - string - hex string of the transaction @@ -99,9 +99,9 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "createrawtransaction", "params": ["[{\"txid\":\"myid\",\"vout\":0}]", "[{\"address\":0.01}]"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "createrawtransaction", "params": ["[{\"txid\":\"myid\",\"vout\":0}]", "[{\"address\":0.01}]"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "createrawtransaction", "params": ["[{\"txid\":\"myid\",\"vout\":0}]", "[{\"data\":\"00010203\"}]"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "createrawtransaction", "params": ["[{\"txid\":\"myid\",\"vout\":0}]", "[{\"data\":\"00010203\"}]"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/createwallet.rst b/reference/rpc/createwallet.rst index 91e991f..c978840 100644 --- a/reference/rpc/createwallet.rst +++ b/reference/rpc/createwallet.rst @@ -4,7 +4,7 @@ createwallet ============ -``createwallet "wallet_name" ( disable_private_keys blank )`` +``createwallet "wallet_name" ( disable_private_keys blank "passphrase" avoid_reuse descriptors load_on_startup )`` Creates and loads a new wallet. @@ -29,14 +29,42 @@ Argument #3 - blank Create a blank wallet. A blank wallet has no keys or HD seed. One can be set using sethdseed. +Argument #4 - passphrase +~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** string + +Encrypt the wallet with this passphrase. + +Argument #5 - avoid_reuse +~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** boolean, optional, default=false + +Keep track of coin reuse, and treat dirty and clean coins differently with privacy considerations in mind. + +Argument #6 - descriptors +~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** boolean, optional, default=false + +Create a native descriptor wallet. The wallet will use descriptors internally to handle address creation + +Argument #7 - load_on_startup +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** boolean, optional, default=null + +Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged. + Result ~~~~~~ :: - { - "name" : , (string) The wallet name if created successfully. If the wallet was created using a full path, the wallet_name will be the full path. - "warning" : , (string) Warning message if wallet was not loaded cleanly. + { (json object) + "name" : "str", (string) The wallet name if created successfully. If the wallet was created using a full path, the wallet_name will be the full path. + "warning" : "str" (string) Warning message if wallet was not loaded cleanly. } Examples @@ -51,5 +79,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "createwallet", "params": ["testwallet"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "createwallet", "params": ["testwallet"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/decodepsbt.rst b/reference/rpc/decodepsbt.rst index 137c6e4..c7e0609 100644 --- a/reference/rpc/decodepsbt.rst +++ b/reference/rpc/decodepsbt.rst @@ -20,91 +20,93 @@ Result :: - { - "tx" : { (json object) The decoded network-serialized unsigned transaction. - ... The layout is the same as the output of decoderawtransaction. + { (json object) + "tx" : { (json object) The decoded network-serialized unsigned transaction. + ... The layout is the same as the output of decoderawtransaction. }, - "unknown" : { (json object) The unknown global fields - "key" : "value" (key-value pair) An unknown key-value pair - ... + "unknown" : { (json object) The unknown global fields + "key" : "hex", (string) (key-value pair) An unknown key-value pair + ... }, - "inputs" : [ (array of json objects) - { - "non_witness_utxo" : { (json object, optional) Decoded network transaction for non-witness UTXOs + "inputs" : [ (json array) + { (json object) + "non_witness_utxo" : { (json object, optional) Decoded network transaction for non-witness UTXOs ... }, - "witness_utxo" : { (json object, optional) Transaction output for witness UTXOs - "amount" : x.xxx, (numeric) The value in BTC - "scriptPubKey" : { (json object) - "asm" : "asm", (string) The asm - "hex" : "hex", (string) The hex - "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' - "address" : "address" (string) Bitcoin address if there is one + "witness_utxo" : { (json object, optional) Transaction output for witness UTXOs + "amount" : n, (numeric) The value in BTC + "scriptPubKey" : { (json object) + "asm" : "str", (string) The asm + "hex" : "hex", (string) The hex + "type" : "str", (string) The type, eg 'pubkeyhash' + "address" : "str" (string) Bitcoin address if there is one } }, "partial_signatures" : { (json object, optional) - "pubkey" : "signature", (string) The public key and signature that corresponds to it. - ,... - } - "sighash" : "type", (string, optional) The sighash type to be used - "redeem_script" : { (json object, optional) - "asm" : "asm", (string) The asm - "hex" : "hex", (string) The hex - "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' - } - "witness_script" : { (json object, optional) - "asm" : "asm", (string) The asm - "hex" : "hex", (string) The hex - "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' - } - "bip32_derivs" : { (json object, optional) - "pubkey" : { (json object, optional) The public key with the derivation path as the value. - "master_fingerprint" : "fingerprint" (string) The fingerprint of the master key - "path" : "path", (string) The path - } - ,... - } - "final_scriptsig" : { (json object, optional) - "asm" : "asm", (string) The asm - "hex" : "hex", (string) The hex - } - "final_scriptwitness": ["hex", ...] (array of string) hex-encoded witness data (if any) - "unknown" : { (json object) The unknown global fields - "key" : "value" (key-value pair) An unknown key-value pair - ... + "pubkey" : "str", (string) The public key and signature that corresponds to it. + ... }, - } - ,... - ] - "outputs" : [ (array of json objects) - { - "redeem_script" : { (json object, optional) - "asm" : "asm", (string) The asm - "hex" : "hex", (string) The hex - "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' - } - "witness_script" : { (json object, optional) - "asm" : "asm", (string) The asm - "hex" : "hex", (string) The hex - "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' - } - "bip32_derivs" : [ (array of json objects, optional) - { - "pubkey" : "pubkey", (string) The public key this path corresponds to - "master_fingerprint" : "fingerprint" (string) The fingerprint of the master key - "path" : "path", (string) The path - } - } - ,... + "sighash" : "str", (string, optional) The sighash type to be used + "redeem_script" : { (json object, optional) + "asm" : "str", (string) The asm + "hex" : "hex", (string) The hex + "type" : "str" (string) The type, eg 'pubkeyhash' + }, + "witness_script" : { (json object, optional) + "asm" : "str", (string) The asm + "hex" : "hex", (string) The hex + "type" : "str" (string) The type, eg 'pubkeyhash' + }, + "bip32_derivs" : [ (json array, optional) + { (json object, optional) The public key with the derivation path as the value. + "master_fingerprint" : "str", (string) The fingerprint of the master key + "path" : "str" (string) The path + }, + ... + ], + "final_scriptsig" : { (json object, optional) + "asm" : "str", (string) The asm + "hex" : "str" (string) The hex + }, + "final_scriptwitness" : [ (json array) + "hex", (string) hex-encoded witness data (if any) + ... ], - "unknown" : { (json object) The unknown global fields - "key" : "value" (key-value pair) An unknown key-value pair - ... + "unknown" : { (json object) The unknown global fields + "key" : "hex", (string) (key-value pair) An unknown key-value pair + ... + } + }, + ... + ], + "outputs" : [ (json array) + { (json object) + "redeem_script" : { (json object, optional) + "asm" : "str", (string) The asm + "hex" : "hex", (string) The hex + "type" : "str" (string) The type, eg 'pubkeyhash' }, - } - ,... - ] - "fee" : fee (numeric, optional) The transaction fee paid if all UTXOs slots in the PSBT have been filled. + "witness_script" : { (json object, optional) + "asm" : "str", (string) The asm + "hex" : "hex", (string) The hex + "type" : "str" (string) The type, eg 'pubkeyhash' + }, + "bip32_derivs" : [ (json array, optional) + { (json object) + "pubkey" : "str", (string) The public key this path corresponds to + "master_fingerprint" : "str", (string) The fingerprint of the master key + "path" : "str" (string) The path + }, + ... + ], + "unknown" : { (json object) The unknown global fields + "key" : "hex", (string) (key-value pair) An unknown key-value pair + ... + } + }, + ... + ], + "fee" : n (numeric, optional) The transaction fee paid if all UTXOs slots in the PSBT have been filled. } Examples diff --git a/reference/rpc/decoderawtransaction.rst b/reference/rpc/decoderawtransaction.rst index 923ad18..2dfe594 100644 --- a/reference/rpc/decoderawtransaction.rst +++ b/reference/rpc/decoderawtransaction.rst @@ -20,52 +20,59 @@ Argument #2 - iswitness **Type:** boolean, optional, default=depends on heuristic tests -Whether the transaction hex is a serialized witness transaction - If iswitness is not present, heuristic tests will be used in decoding +Whether the transaction hex is a serialized witness transaction. + If iswitness is not present, heuristic tests will be used in decoding. + If true, only witness deserialization will be tried. + If false, only non-witness deserialization will be tried. + This boolean should reflect whether the transaction has inputs + (e.g. fully valid, or on-chain transactions), if known by the caller. Result ~~~~~~ :: - { - "txid" : "id", (string) The transaction id - "hash" : "id", (string) The transaction hash (differs from txid for witness transactions) - "size" : n, (numeric) The transaction size - "vsize" : n, (numeric) The virtual transaction size (differs from size for witness transactions) - "weight" : n, (numeric) The transaction's weight (between vsize*4 - 3 and vsize*4) - "version" : n, (numeric) The version - "locktime" : ttt, (numeric) The lock time - "vin" : [ (array of json objects) - { - "txid": "id", (string) The transaction id - "vout": n, (numeric) The output number - "scriptSig": { (json object) The script - "asm": "asm", (string) asm - "hex": "hex" (string) hex - }, - "txinwitness": ["hex", ...] (array of string) hex-encoded witness data (if any) - "sequence": n (numeric) The script sequence number - } - ,... - ], - "vout" : [ (array of json objects) - { - "value" : x.xxx, (numeric) The value in BTC - "n" : n, (numeric) index - "scriptPubKey" : { (json object) - "asm" : "asm", (string) the asm - "hex" : "hex", (string) the hex - "reqSigs" : n, (numeric) The required sigs - "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' - "addresses" : [ (json array of string) - "12tvKAXCxZjSmdNbao16dKXC8tRWfcF5oc" (string) bitcoin address - ,... - ] - } - } - ,... + { (json object) + "txid" : "hex", (string) The transaction id + "hash" : "hex", (string) The transaction hash (differs from txid for witness transactions) + "size" : n, (numeric) The transaction size + "vsize" : n, (numeric) The virtual transaction size (differs from size for witness transactions) + "weight" : n, (numeric) The transaction's weight (between vsize*4 - 3 and vsize*4) + "version" : n, (numeric) The version + "locktime" : xxx, (numeric) The lock time + "vin" : [ (json array) + { (json object) + "txid" : "hex", (string) The transaction id + "vout" : n, (numeric) The output number + "scriptSig" : { (json object) The script + "asm" : "str", (string) asm + "hex" : "hex" (string) hex + }, + "txinwitness" : [ (json array) + "hex", (string) hex-encoded witness data (if any) + ... + ], + "sequence" : n (numeric) The script sequence number + }, + ... ], + "vout" : [ (json array) + { (json object) + "value" : n, (numeric) The value in BTC + "n" : n, (numeric) index + "scriptPubKey" : { (json object) + "asm" : "str", (string) the asm + "hex" : "hex", (string) the hex + "reqSigs" : n, (numeric) The required sigs + "type" : "str", (string) The type, eg 'pubkeyhash' + "addresses" : [ (json array) + "str", (string) bitcoin address + ... + ] + } + }, + ... + ] } Examples @@ -80,5 +87,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "decoderawtransaction", "params": ["hexstring"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "decoderawtransaction", "params": ["hexstring"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/decodescript.rst b/reference/rpc/decodescript.rst index 02212c9..123ed9c 100644 --- a/reference/rpc/decodescript.rst +++ b/reference/rpc/decodescript.rst @@ -20,16 +20,26 @@ Result :: - { - "asm":"asm", (string) Script public key - "hex":"hex", (string) hex-encoded public key - "type":"type", (string) The output type - "reqSigs": n, (numeric) The required signatures - "addresses": [ (json array of string) - "address" (string) bitcoin address - ,... + { (json object) + "asm" : "str", (string) Script public key + "type" : "str", (string) The output type (e.g. nonstandard, pubkey, pubkeyhash, scripthash, multisig, nulldata, witness_v0_scripthash, witness_v0_keyhash, witness_v1_taproot, witness_unknown) + "reqSigs" : n, (numeric) The required signatures + "addresses" : [ (json array) + "str", (string) bitcoin address + ... ], - "p2sh","address" (string) address of P2SH script wrapping this redeem script (not returned if the script is already a P2SH). + "p2sh" : "str", (string) address of P2SH script wrapping this redeem script (not returned if the script is already a P2SH) + "segwit" : { (json object) Result of a witness script public key wrapping this redeem script (not returned if the script is a P2SH or witness) + "asm" : "str", (string) String representation of the script public key + "hex" : "hex", (string) Hex string of the script public key + "type" : "str", (string) The type of the script public key (e.g. witness_v0_keyhash or witness_v0_scripthash) + "reqSigs" : n, (numeric) The required signatures (always 1) + "addresses" : [ (json array) (always length 1) + "str", (string) segwit address + ... + ], + "p2sh-segwit" : "str" (string) address of the P2SH script wrapping this witness redeem script + } } Examples @@ -44,5 +54,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "decodescript", "params": ["hexstring"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "decodescript", "params": ["hexstring"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/deriveaddresses.rst b/reference/rpc/deriveaddresses.rst index c87a04b..dbc6976 100644 --- a/reference/rpc/deriveaddresses.rst +++ b/reference/rpc/deriveaddresses.rst @@ -39,7 +39,10 @@ Result :: - [ address ] (array) the derived addresses + [ (json array) + "str", (string) the derived addresses + ... + ] Examples ~~~~~~~~ @@ -49,5 +52,5 @@ Examples First three native segwit receive addresses:: - bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#trd0mf0l" "[0,2]" + bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#cjjspncu" "[0,2]" diff --git a/reference/rpc/disconnectnode.rst b/reference/rpc/disconnectnode.rst index c319021..ec4db53 100644 --- a/reference/rpc/disconnectnode.rst +++ b/reference/rpc/disconnectnode.rst @@ -26,6 +26,13 @@ Argument #2 - nodeid The node ID (see getpeerinfo for node IDs) +Result +~~~~~~ + +:: + + null (json null) + Examples ~~~~~~~~ @@ -42,9 +49,9 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "disconnectnode", "params": ["192.168.0.6:8333"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "disconnectnode", "params": ["192.168.0.6:8333"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "disconnectnode", "params": ["", 1] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "disconnectnode", "params": ["", 1]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/dumpprivkey.rst b/reference/rpc/dumpprivkey.rst index 4d214b9..52bfe2b 100644 --- a/reference/rpc/dumpprivkey.rst +++ b/reference/rpc/dumpprivkey.rst @@ -26,7 +26,7 @@ Result * - Name - Type - Description - * - key + * - str - string - The private key @@ -46,5 +46,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "dumpprivkey", "params": ["myaddress"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "dumpprivkey", "params": ["myaddress"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/dumpwallet.rst b/reference/rpc/dumpwallet.rst index 872d09e..6e426b0 100644 --- a/reference/rpc/dumpwallet.rst +++ b/reference/rpc/dumpwallet.rst @@ -18,15 +18,15 @@ Argument #1 - filename **Type:** string, required -The filename with path (either absolute or relative to bitcoind) +The filename with path (absolute path recommended) Result ~~~~~~ :: - { (json object) - "filename" : { (string) The filename with full absolute path + { (json object) + "filename" : "str" (string) The filename with full absolute path } Examples @@ -41,5 +41,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "dumpwallet", "params": ["test"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "dumpwallet", "params": ["test"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/encryptwallet.rst b/reference/rpc/encryptwallet.rst index f21b7e5..a2085c3 100644 --- a/reference/rpc/encryptwallet.rst +++ b/reference/rpc/encryptwallet.rst @@ -22,6 +22,19 @@ Argument #1 - passphrase The pass phrase to encrypt the wallet with. It must be at least 1 character, but should be long. +Result +~~~~~~ + +.. list-table:: + :header-rows: 1 + + * - Name + - Type + - Description + * - str + - string + - A string with further instructions + Examples ~~~~~~~~ @@ -46,5 +59,5 @@ Now lock the wallet again by removing the passphrase:: As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "encryptwallet", "params": ["my pass phrase"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "encryptwallet", "params": ["my pass phrase"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/estimatesmartfee.rst b/reference/rpc/estimatesmartfee.rst index edfe95b..678bc74 100644 --- a/reference/rpc/estimatesmartfee.rst +++ b/reference/rpc/estimatesmartfee.rst @@ -38,10 +38,17 @@ Result :: - { - "feerate" : x.x, (numeric, optional) estimate fee rate in BTC/kB - "errors": [ str... ] (json array of strings, optional) Errors encountered during processing - "blocks" : n (numeric) block number where estimate was found + { (json object) + "feerate" : n, (numeric, optional) estimate fee rate in BTC/kB (only present if no errors were encountered) + "errors" : [ (json array, optional) Errors encountered during processing (if there are any) + "str", (string) error + ... + ], + "blocks" : n (numeric) block number where estimate was found + The request target will be clamped between 2 and the highest target + fee estimation is able to return based on how long it has been running. + An error is returned if not enough transactions and blocks + have been observed to make an estimate for any number of blocks. } Examples diff --git a/reference/rpc/finalizepsbt.rst b/reference/rpc/finalizepsbt.rst index bb18890..c9f3ae5 100644 --- a/reference/rpc/finalizepsbt.rst +++ b/reference/rpc/finalizepsbt.rst @@ -32,11 +32,10 @@ Result :: - { - "psbt" : "value", (string) The base64-encoded partially signed transaction if not extracted - "hex" : "value", (string) The hex-encoded network transaction if extracted - "complete" : true|false, (boolean) If the transaction has a complete set of signatures - ] + { (json object) + "psbt" : "str", (string) The base64-encoded partially signed transaction if not extracted + "hex" : "hex", (string) The hex-encoded network transaction if extracted + "complete" : true|false (boolean) If the transaction has a complete set of signatures } Examples diff --git a/reference/rpc/fundrawtransaction.rst b/reference/rpc/fundrawtransaction.rst index f35ab03..0a1280a 100644 --- a/reference/rpc/fundrawtransaction.rst +++ b/reference/rpc/fundrawtransaction.rst @@ -6,9 +6,9 @@ fundrawtransaction ``fundrawtransaction "hexstring" ( options iswitness )`` -Add inputs to a transaction until it has enough in value to meet its out value. +If the transaction has no inputs, they will be automatically selected to meet its out value. -This will not modify existing inputs, and will add at most one change output to the outputs. +It will add at most one change output to the outputs. No existing outputs will be modified unless "subtractFeeFromOutputs" is specified. @@ -39,25 +39,29 @@ Argument #2 - options **Type:** json object, optional for backward compatibility: passing in a true instead of an object will result in {"includeWatching":true} - "replaceable": bool, (boolean, optional, default=fallback to wallet's default) Marks this transaction as BIP125 replaceable. + "replaceable": bool, (boolean, optional, default=wallet default) Marks this transaction as BIP125 replaceable. Allows this transaction to be replaced by a transaction with higher fees - "conf_target": n, (numeric, optional, default=fallback to wallet's default) Confirmation target (in blocks) - "estimate_mode": "str", (string, optional, default=UNSET) The fee estimate mode, must be one of: - "UNSET" - "ECONOMICAL" - "CONSERVATIVE" + "conf_target": n, (numeric, optional, default=wallet -txconfirmtarget) Confirmation target in blocks + "estimate_mode": "str", (string, optional, default=unset) The fee estimate mode, must be one of (case insensitive): + "unset" + "economical" + "conservative" } :: { + "add_inputs": bool, (boolean, optional, default=true) For a transaction with existing inputs, automatically include more if they are not enough. "changeAddress": "str", (string, optional, default=pool address) The bitcoin address to receive the change "changePosition": n, (numeric, optional, default=random) The index of the change output "change_type": "str", (string, optional, default=set by -changetype) The output type to use. Only valid if changeAddress is not specified. Options are "legacy", "p2sh-segwit", and "bech32". - "includeWatching": bool, (boolean, optional, default=false) Also select inputs which are watch only + "includeWatching": bool, (boolean, optional, default=true for watch-only wallets, otherwise false) Also select inputs which are watch only. + Only solvable inputs can be used. Watch-only destinations are solvable if the public key and/or output script was imported, + e.g. with 'importpubkey' or 'importmulti' with the 'pubkeys' or 'desc' field. "lockUnspents": bool, (boolean, optional, default=false) Lock selected unspent outputs - "feeRate": amount, (numeric or string, optional, default=not set: makes wallet determine the fee) Set a specific fee rate in BTC/kB - "subtractFeeFromOutputs": [ (json array, optional, default=empty array) A json array of integers. + "fee_rate": amount, (numeric or string, optional, default=not set, fall back to wallet fee estimation) Specify a fee rate in sat/vB. + "feeRate": amount, (numeric or string, optional, default=not set, fall back to wallet fee estimation) Specify a fee rate in BTC/kvB. + "subtractFeeFromOutputs": [ (json array, optional, default=empty array) The integers. The fee will be equally deducted from the amount of each specified output. Those recipients will receive less bitcoins than you enter in their corresponding amount field. If no outputs are specified here, the sender pays the fee. @@ -70,18 +74,22 @@ Argument #3 - iswitness **Type:** boolean, optional, default=depends on heuristic tests -Whether the transaction hex is a serialized witness transaction - If iswitness is not present, heuristic tests will be used in decoding +Whether the transaction hex is a serialized witness transaction. + If iswitness is not present, heuristic tests will be used in decoding. + If true, only witness deserialization will be tried. + If false, only non-witness deserialization will be tried. + This boolean should reflect whether the transaction has inputs + (e.g. fully valid, or on-chain transactions), if known by the caller. Result ~~~~~~ :: - { - "hex": "value", (string) The resulting raw transaction (hex-encoded string) - "fee": n, (numeric) Fee in BTC the resulting transaction pays - "changepos": n (numeric) The position of the added change output, or -1 + { (json object) + "hex" : "hex", (string) The resulting raw transaction (hex-encoded string) + "fee" : n, (numeric) Fee in BTC the resulting transaction pays + "changepos" : n (numeric) The position of the added change output, or -1 } Examples diff --git a/reference/rpc/generate.rst b/reference/rpc/generate.rst deleted file mode 100644 index 421c97a..0000000 --- a/reference/rpc/generate.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. This file is licensed under the MIT License (MIT) available on - http://opensource.org/licenses/MIT. - -generate -======== - -``generate nblocks ( maxtries )`` - -Mine up to nblocks blocks immediately (before the RPC call returns) to an address in the wallet. - -Argument #1 - nblocks -~~~~~~~~~~~~~~~~~~~~~ - -**Type:** numeric, required - -How many blocks are generated immediately. - -Argument #2 - maxtries -~~~~~~~~~~~~~~~~~~~~~~ - -**Type:** numeric, optional, default=1000000 - -How many iterations to try. - -Result -~~~~~~ - -:: - - [ blockhashes ] (array) hashes of blocks generated - -Examples -~~~~~~~~ - - -.. highlight:: shell - -Generate 11 blocks:: - - bitcoin-cli generate 11 - diff --git a/reference/rpc/generateblock.rst b/reference/rpc/generateblock.rst new file mode 100644 index 0000000..b703155 --- /dev/null +++ b/reference/rpc/generateblock.rst @@ -0,0 +1,52 @@ +.. This file is licensed under the MIT License (MIT) available on + http://opensource.org/licenses/MIT. + +generateblock +============= + +``generateblock "output" ["rawtx/txid",...]`` + +Mine a block with a set of ordered transactions immediately to a specified address or descriptor (before the RPC call returns) + +Argument #1 - output +~~~~~~~~~~~~~~~~~~~~ + +**Type:** string, required + +The address or descriptor to send the newly generated bitcoin to. + +Argument #2 - transactions +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** json array, required + +An array of hex strings which are either txids or raw transactions. + Txids must reference transactions currently in the mempool. + All transactions must be valid and in valid order, otherwise the block will be rejected. + +:: + + [ + "rawtx/txid", (string) + ... + ] + +Result +~~~~~~ + +:: + + { (json object) + "hash" : "hex" (string) hash of generated block + } + +Examples +~~~~~~~~ + + +.. highlight:: shell + +Generate a block to myaddress, with txs rawtx and mempool_txid:: + + bitcoin-cli generateblock "myaddress" '["rawtx", "mempool_txid"]' + diff --git a/reference/rpc/generatetoaddress.rst b/reference/rpc/generatetoaddress.rst index ccbc335..0bbbea0 100644 --- a/reference/rpc/generatetoaddress.rst +++ b/reference/rpc/generatetoaddress.rst @@ -34,7 +34,10 @@ Result :: - [ blockhashes ] (array) hashes of blocks generated + [ (json array) hashes of blocks generated + "hex", (string) blockhash + ... + ] Examples ~~~~~~~~ @@ -46,7 +49,7 @@ Generate 11 blocks to myaddress:: bitcoin-cli generatetoaddress 11 "myaddress" -If you are running the bitcoin core wallet, you can get a new address to send the newly generated bitcoin to with::: +If you are using the Bitcoin Core wallet, you can get a new address to send the newly generated bitcoin to with::: bitcoin-cli getnewaddress diff --git a/reference/rpc/generatetodescriptor.rst b/reference/rpc/generatetodescriptor.rst new file mode 100644 index 0000000..bed3987 --- /dev/null +++ b/reference/rpc/generatetodescriptor.rst @@ -0,0 +1,51 @@ +.. This file is licensed under the MIT License (MIT) available on + http://opensource.org/licenses/MIT. + +generatetodescriptor +==================== + +``generatetodescriptor num_blocks "descriptor" ( maxtries )`` + +Mine blocks immediately to a specified descriptor (before the RPC call returns) + +Argument #1 - num_blocks +~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** numeric, required + +How many blocks are generated immediately. + +Argument #2 - descriptor +~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** string, required + +The descriptor to send the newly generated bitcoin to. + +Argument #3 - maxtries +~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** numeric, optional, default=1000000 + +How many iterations to try. + +Result +~~~~~~ + +:: + + [ (json array) hashes of blocks generated + "hex", (string) blockhash + ... + ] + +Examples +~~~~~~~~ + + +.. highlight:: shell + +Generate 11 blocks to mydesc:: + + bitcoin-cli generatetodescriptor 11 "mydesc" + diff --git a/reference/rpc/getaddednodeinfo.rst b/reference/rpc/getaddednodeinfo.rst index 8a73faa..984b09c 100644 --- a/reference/rpc/getaddednodeinfo.rst +++ b/reference/rpc/getaddednodeinfo.rst @@ -21,18 +21,19 @@ Result :: - [ - { - "addednode" : "192.168.0.201", (string) The node IP address or name (as provided to addnode) - "connected" : true|false, (boolean) If connected - "addresses" : [ (list of objects) Only when connected = true - { - "address" : "192.168.0.201:8333", (string) The bitcoin server IP and port we're connected to - "connected" : "outbound" (string) connection, inbound or outbound - } - ] - } - ,... + [ (json array) + { (json object) + "addednode" : "str", (string) The node IP address or name (as provided to addnode) + "connected" : true|false, (boolean) If connected + "addresses" : [ (json array) Only when connected = true + { (json object) + "address" : "str", (string) The bitcoin server IP and port we're connected to + "connected" : "str" (string) connection, inbound or outbound + }, + ... + ] + }, + ... ] Examples @@ -47,5 +48,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getaddednodeinfo", "params": ["192.168.0.201"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getaddednodeinfo", "params": ["192.168.0.201"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getaddressesbylabel.rst b/reference/rpc/getaddressesbylabel.rst index 5bcf409..9e833d1 100644 --- a/reference/rpc/getaddressesbylabel.rst +++ b/reference/rpc/getaddressesbylabel.rst @@ -20,10 +20,11 @@ Result :: - { (json object with addresses as keys) - "address": { (json object with information about address) - "purpose": "string" (string) Purpose of address ("send" for sending address, "receive" for receiving address) - },... + { (json object) json object with addresses as keys + "address" : { (json object) json object with information about address + "purpose" : "str" (string) Purpose of address ("send" for sending address, "receive" for receiving address) + }, + ... } Examples @@ -38,5 +39,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getaddressesbylabel", "params": ["tabby"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getaddressesbylabel", "params": ["tabby"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getaddressinfo.rst b/reference/rpc/getaddressinfo.rst index 3e18de1..8690aae 100644 --- a/reference/rpc/getaddressinfo.rst +++ b/reference/rpc/getaddressinfo.rst @@ -6,56 +6,58 @@ getaddressinfo ``getaddressinfo "address"`` -Return information about the given bitcoin address. Some information requires the address -to be in the wallet. +Return information about the given bitcoin address. + +Some of the information will only be present if the address is in the active wallet. Argument #1 - address ~~~~~~~~~~~~~~~~~~~~~ **Type:** string, required -The bitcoin address to get the information of. +The bitcoin address for which to get information. Result ~~~~~~ :: - { - "address" : "address", (string) The bitcoin address validated - "scriptPubKey" : "hex", (string) The hex-encoded scriptPubKey generated by the address - "ismine" : true|false, (boolean) If the address is yours or not - "iswatchonly" : true|false, (boolean) If the address is watchonly - "solvable" : true|false, (boolean) Whether we know how to spend coins sent to this address, ignoring the possible lack of private keys - "desc" : "desc", (string, optional) A descriptor for spending coins sent to this address (only when solvable) - "isscript" : true|false, (boolean) If the key is a script - "ischange" : true|false, (boolean) If the address was used for change output - "iswitness" : true|false, (boolean) If the address is a witness address - "witness_version" : version (numeric, optional) The version number of the witness program - "witness_program" : "hex" (string, optional) The hex value of the witness program - "script" : "type" (string, optional) The output script type. Only if "isscript" is true and the redeemscript is known. Possible types: nonstandard, pubkey, pubkeyhash, scripthash, multisig, nulldata, witness_v0_keyhash, witness_v0_scripthash, witness_unknown - "hex" : "hex", (string, optional) The redeemscript for the p2sh address - "pubkeys" (string, optional) Array of pubkeys associated with the known redeemscript (only if "script" is "multisig") - [ - "pubkey" - ,... - ] - "sigsrequired" : xxxxx (numeric, optional) Number of signatures required to spend multisig output (only if "script" is "multisig") - "pubkey" : "publickeyhex", (string, optional) The hex value of the raw public key, for single-key addresses (possibly embedded in P2SH or P2WSH) - "embedded" : {...}, (object, optional) Information about the address embedded in P2SH or P2WSH, if relevant and known. It includes all getaddressinfo output fields for the embedded address, excluding metadata ("timestamp", "hdkeypath", "hdseedid") and relation to the wallet ("ismine", "iswatchonly"). - "iscompressed" : true|false, (boolean, optional) If the pubkey is compressed - "label" : "label" (string) The label associated with the address, "" is the default label - "timestamp" : timestamp, (number, optional) The creation time of the key if available in seconds since epoch (Jan 1 1970 GMT) - "hdkeypath" : "keypath" (string, optional) The HD keypath if the key is HD and available - "hdseedid" : "" (string, optional) The Hash160 of the HD seed - "hdmasterfingerprint" : "" (string, optional) The fingperint of the master key. - "labels" (object) Array of labels associated with the address. - [ - { (json object of label data) - "name": "labelname" (string) The label - "purpose": "string" (string) Purpose of address ("send" for sending address, "receive" for receiving address) - },... - ] + { (json object) + "address" : "str", (string) The bitcoin address validated. + "scriptPubKey" : "hex", (string) The hex-encoded scriptPubKey generated by the address. + "ismine" : true|false, (boolean) If the address is yours. + "iswatchonly" : true|false, (boolean) If the address is watchonly. + "solvable" : true|false, (boolean) If we know how to spend coins sent to this address, ignoring the possible lack of private keys. + "desc" : "str", (string, optional) A descriptor for spending coins sent to this address (only when solvable). + "isscript" : true|false, (boolean) If the key is a script. + "ischange" : true|false, (boolean) If the address was used for change output. + "iswitness" : true|false, (boolean) If the address is a witness address. + "witness_version" : n, (numeric, optional) The version number of the witness program. + "witness_program" : "hex", (string, optional) The hex value of the witness program. + "script" : "str", (string, optional) The output script type. Only if isscript is true and the redeemscript is known. Possible + types: nonstandard, pubkey, pubkeyhash, scripthash, multisig, nulldata, witness_v0_keyhash, + witness_v0_scripthash, witness_unknown. + "hex" : "hex", (string, optional) The redeemscript for the p2sh address. + "pubkeys" : [ (json array, optional) Array of pubkeys associated with the known redeemscript (only if script is multisig). + "str", (string) + ... + ], + "sigsrequired" : n, (numeric, optional) The number of signatures required to spend multisig output (only if script is multisig). + "pubkey" : "hex", (string, optional) The hex value of the raw public key for single-key addresses (possibly embedded in P2SH or P2WSH). + "embedded" : { (json object, optional) Information about the address embedded in P2SH or P2WSH, if relevant and known. + ... Includes all getaddressinfo output fields for the embedded address, excluding metadata (timestamp, hdkeypath, hdseedid) + and relation to the wallet (ismine, iswatchonly). + }, + "iscompressed" : true|false, (boolean, optional) If the pubkey is compressed. + "timestamp" : xxx, (numeric, optional) The creation time of the key, if available, expressed in UNIX epoch time. + "hdkeypath" : "str", (string, optional) The HD keypath, if the key is HD and available. + "hdseedid" : "hex", (string, optional) The Hash160 of the HD seed. + "hdmasterfingerprint" : "hex", (string, optional) The fingerprint of the master key. + "labels" : [ (json array) Array of labels associated with the address. Currently limited to one label but returned + as an array to keep the API stable if multiple labels are enabled in the future. + "str", (string) Label name (defaults to ""). + ... + ] } Examples @@ -66,9 +68,9 @@ Examples :: - bitcoin-cli getaddressinfo "1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc" + bitcoin-cli getaddressinfo "bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl" :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getaddressinfo", "params": ["1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getaddressinfo", "params": ["bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getbalance.rst b/reference/rpc/getbalance.rst index 382da4d..6733c20 100644 --- a/reference/rpc/getbalance.rst +++ b/reference/rpc/getbalance.rst @@ -4,7 +4,7 @@ getbalance ========== -``getbalance ( "dummy" minconf include_watchonly )`` +``getbalance ( "dummy" minconf include_watchonly avoid_reuse )`` Returns the total available balance. @@ -28,10 +28,17 @@ Only include transactions confirmed at least this many times. Argument #3 - include_watchonly ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**Type:** boolean, optional, default=false +**Type:** boolean, optional, default=true for watch-only wallets, otherwise false Also include balance in watch-only addresses (see 'importaddress') +Argument #4 - avoid_reuse +~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** boolean, optional, default=true + +(only available if avoid_reuse wallet flag is set) Do not include balance in dirty outputs; addresses are considered dirty if they have previously been used in a transaction. + Result ~~~~~~ @@ -41,7 +48,7 @@ Result * - Name - Type - Description - * - amount + * - n - numeric - The total amount in BTC received for this wallet. @@ -51,15 +58,15 @@ Examples .. highlight:: shell -The total amount in the wallet with 1 or more confirmations:: +The total amount in the wallet with 0 or more confirmations:: bitcoin-cli getbalance -The total amount in the wallet at least 6 blocks confirmed:: +The total amount in the wallet with at least 6 confirmations:: bitcoin-cli getbalance "*" 6 As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getbalance", "params": ["*", 6] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getbalance", "params": ["*", 6]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getbalances.rst b/reference/rpc/getbalances.rst new file mode 100644 index 0000000..b8f94dc --- /dev/null +++ b/reference/rpc/getbalances.rst @@ -0,0 +1,43 @@ +.. This file is licensed under the MIT License (MIT) available on + http://opensource.org/licenses/MIT. + +getbalances +=========== + +``getbalances`` + +Returns an object with all balances in BTC. + +Result +~~~~~~ + +:: + + { (json object) + "mine" : { (json object) balances from outputs that the wallet can sign + "trusted" : n, (numeric) trusted balance (outputs created by the wallet or confirmed outputs) + "untrusted_pending" : n, (numeric) untrusted pending balance (outputs created by others that are in the mempool) + "immature" : n, (numeric) balance from immature coinbase outputs + "used" : n (numeric) (only present if avoid_reuse is set) balance from coins sent to addresses that were previously spent from (potentially privacy violating) + }, + "watchonly" : { (json object) watchonly balances (not present if wallet does not watch anything) + "trusted" : n, (numeric) trusted balance (outputs created by the wallet or confirmed outputs) + "untrusted_pending" : n, (numeric) untrusted pending balance (outputs created by others that are in the mempool) + "immature" : n (numeric) balance from immature coinbase outputs + } + } + +Examples +~~~~~~~~ + + +.. highlight:: shell + +:: + + bitcoin-cli getbalances + +:: + + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getbalances", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + diff --git a/reference/rpc/getbestblockhash.rst b/reference/rpc/getbestblockhash.rst index fc8061d..297af4b 100644 --- a/reference/rpc/getbestblockhash.rst +++ b/reference/rpc/getbestblockhash.rst @@ -6,7 +6,7 @@ getbestblockhash ``getbestblockhash`` -Returns the hash of the best (tip) block in the longest blockchain. +Returns the hash of the best (tip) block in the most-work fully-validated chain. Result ~~~~~~ @@ -33,5 +33,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getbestblockhash", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getbestblockhash", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getblock.rst b/reference/rpc/getblock.rst index ac4b01c..729b0c5 100644 --- a/reference/rpc/getblock.rst +++ b/reference/rpc/getblock.rst @@ -35,38 +35,38 @@ Result (for verbosity = 0) * - Name - Type - Description - * - data + * - hex - string - - A string that is serialized, hex-encoded data for block 'hash'. + - A string that is serialized, hex-encoded data for block 'hash' Result (for verbosity = 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~ :: - { - "hash" : "hash", (string) the block hash (same as provided) - "confirmations" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain - "size" : n, (numeric) The block size - "strippedsize" : n, (numeric) The block size excluding witness data - "weight" : n (numeric) The block weight as defined in BIP 141 - "height" : n, (numeric) The block height or index - "version" : n, (numeric) The block version - "versionHex" : "00000000", (string) The block version formatted in hexadecimal - "merkleroot" : "xxxx", (string) The merkle root - "tx" : [ (array of string) The transaction ids - "transactionid" (string) The transaction id - ,... + { (json object) + "hash" : "hex", (string) the block hash (same as provided) + "confirmations" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain + "size" : n, (numeric) The block size + "strippedsize" : n, (numeric) The block size excluding witness data + "weight" : n, (numeric) The block weight as defined in BIP 141 + "height" : n, (numeric) The block height or index + "version" : n, (numeric) The block version + "versionHex" : "hex", (string) The block version formatted in hexadecimal + "merkleroot" : "hex", (string) The merkle root + "tx" : [ (json array) The transaction ids + "hex", (string) The transaction id + ... ], - "time" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT) - "mediantime" : ttt, (numeric) The median block time in seconds since epoch (Jan 1 1970 GMT) - "nonce" : n, (numeric) The nonce - "bits" : "1d00ffff", (string) The bits - "difficulty" : x.xxx, (numeric) The difficulty - "chainwork" : "xxxx", (string) Expected number of hashes required to produce the chain up to this block (in hex) - "nTx" : n, (numeric) The number of transactions in the block. - "previousblockhash" : "hash", (string) The hash of the previous block - "nextblockhash" : "hash" (string) The hash of the next block + "time" : xxx, (numeric) The block time expressed in UNIX epoch time + "mediantime" : xxx, (numeric) The median block time expressed in UNIX epoch time + "nonce" : n, (numeric) The nonce + "bits" : "hex", (string) The bits + "difficulty" : n, (numeric) The difficulty + "chainwork" : "hex", (string) Expected number of hashes required to produce the chain up to this block (in hex) + "nTx" : n, (numeric) The number of transactions in the block + "previousblockhash" : "hex", (string) The hash of the previous block + "nextblockhash" : "hex" (string) The hash of the next block } Result (for verbosity = 2) @@ -74,12 +74,14 @@ Result (for verbosity = 2) :: - { - ..., Same output as verbosity = 1. - "tx" : [ (array of Objects) The transactions in the format of the getrawtransaction RPC. Different from verbosity = 1 "tx" result. - ,... - ], - ,... Same output as verbosity = 1. + { (json object) + ..., Same output as verbosity = 1 + "tx" : [ (json array) + { (json object) + ... The transactions in the format of the getrawtransaction RPC. Different from verbosity = 1 "tx" result + }, + ... + ] } Examples @@ -94,5 +96,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblock", "params": ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblock", "params": ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getblockchaininfo.rst b/reference/rpc/getblockchaininfo.rst index 6ba9559..e4c726f 100644 --- a/reference/rpc/getblockchaininfo.rst +++ b/reference/rpc/getblockchaininfo.rst @@ -13,47 +13,44 @@ Result :: - { - "chain": "xxxx", (string) current network name as defined in BIP70 (main, test, regtest) - "blocks": xxxxxx, (numeric) the current number of blocks processed in the server - "headers": xxxxxx, (numeric) the current number of headers we have validated - "bestblockhash": "...", (string) the hash of the currently best block - "difficulty": xxxxxx, (numeric) the current difficulty - "mediantime": xxxxxx, (numeric) median time for the current best block - "verificationprogress": xxxx, (numeric) estimate of verification progress [0..1] - "initialblockdownload": xxxx, (bool) (debug information) estimate of whether this node is in Initial Block Download mode. - "chainwork": "xxxx" (string) total amount of work in active chain, in hexadecimal - "size_on_disk": xxxxxx, (numeric) the estimated size of the block and undo files on disk - "pruned": xx, (boolean) if the blocks are subject to pruning - "pruneheight": xxxxxx, (numeric) lowest-height complete block stored (only present if pruning is enabled) - "automatic_pruning": xx, (boolean) whether automatic pruning is enabled (only present if pruning is enabled) - "prune_target_size": xxxxxx, (numeric) the target size used by pruning (only present if automatic pruning is enabled) - "softforks": [ (array) status of softforks in progress - { - "id": "xxxx", (string) name of softfork - "version": xx, (numeric) block version - "reject": { (object) progress toward rejecting pre-softfork blocks - "status": xx, (boolean) true if threshold reached - }, - }, ... - ], - "bip9_softforks": { (object) status of BIP9 softforks in progress - "xxxx" : { (string) name of the softfork - "status": "xxxx", (string) one of "defined", "started", "locked_in", "active", "failed" - "bit": xx, (numeric) the bit (0-28) in the block version field used to signal this softfork (only for "started" status) - "startTime": xx, (numeric) the minimum median time past of a block at which the bit gains its meaning - "timeout": xx, (numeric) the median time past of a block at which the deployment is considered failed if not yet locked in - "since": xx, (numeric) height of the first block to which the status applies - "statistics": { (object) numeric statistics about BIP9 signalling for a softfork (only for "started" status) - "period": xx, (numeric) the length in blocks of the BIP9 signalling period - "threshold": xx, (numeric) the number of blocks with the version bit set required to activate the feature - "elapsed": xx, (numeric) the number of blocks elapsed since the beginning of the current period - "count": xx, (numeric) the number of blocks with the version bit set in the current period - "possible": xx (boolean) returns false if there are not enough blocks left in this period to pass activation threshold + { (json object) + "chain" : "str", (string) current network name (main, test, regtest) + "blocks" : n, (numeric) the height of the most-work fully-validated chain. The genesis block has height 0 + "headers" : n, (numeric) the current number of headers we have validated + "bestblockhash" : "str", (string) the hash of the currently best block + "difficulty" : n, (numeric) the current difficulty + "mediantime" : n, (numeric) median time for the current best block + "verificationprogress" : n, (numeric) estimate of verification progress [0..1] + "initialblockdownload" : true|false, (boolean) (debug information) estimate of whether this node is in Initial Block Download mode + "chainwork" : "hex", (string) total amount of work in active chain, in hexadecimal + "size_on_disk" : n, (numeric) the estimated size of the block and undo files on disk + "pruned" : true|false, (boolean) if the blocks are subject to pruning + "pruneheight" : n, (numeric) lowest-height complete block stored (only present if pruning is enabled) + "automatic_pruning" : true|false, (boolean) whether automatic pruning is enabled (only present if pruning is enabled) + "prune_target_size" : n, (numeric) the target size used by pruning (only present if automatic pruning is enabled) + "softforks" : { (json object) status of softforks + "xxxx" : { (json object) name of the softfork + "type" : "str", (string) one of "buried", "bip9" + "bip9" : { (json object) status of bip9 softforks (only for "bip9" type) + "status" : "str", (string) one of "defined", "started", "locked_in", "active", "failed" + "bit" : n, (numeric) the bit (0-28) in the block version field used to signal this softfork (only for "started" status) + "start_time" : xxx, (numeric) the minimum median time past of a block at which the bit gains its meaning + "timeout" : xxx, (numeric) the median time past of a block at which the deployment is considered failed if not yet locked in + "since" : n, (numeric) height of the first block to which the status applies + "statistics" : { (json object) numeric statistics about BIP9 signalling for a softfork (only for "started" status) + "period" : n, (numeric) the length in blocks of the BIP9 signalling period + "threshold" : n, (numeric) the number of blocks with the version bit set required to activate the feature + "elapsed" : n, (numeric) the number of blocks elapsed since the beginning of the current period + "count" : n, (numeric) the number of blocks with the version bit set in the current period + "possible" : true|false (boolean) returns false if there are not enough blocks left in this period to pass activation threshold } - } - } - "warnings" : "...", (string) any network and blockchain warnings. + }, + "height" : n, (numeric) height of the first block which the rules are or will be enforced (only for "buried" type, or "bip9" type with "active" status) + "active" : true|false (boolean) true if the rules are enforced for the mempool and the next block + }, + ... + }, + "warnings" : "str" (string) any network and blockchain warnings } Examples @@ -68,5 +65,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockchaininfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockchaininfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getblockcount.rst b/reference/rpc/getblockcount.rst index 61ba39c..41446c8 100644 --- a/reference/rpc/getblockcount.rst +++ b/reference/rpc/getblockcount.rst @@ -6,7 +6,9 @@ getblockcount ``getblockcount`` -Returns the number of blocks in the longest blockchain. +Returns the height of the most-work fully-validated chain. + +The genesis block has height 0. Result ~~~~~~ @@ -33,5 +35,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockcount", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockcount", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getblockfilter.rst b/reference/rpc/getblockfilter.rst new file mode 100644 index 0000000..f027549 --- /dev/null +++ b/reference/rpc/getblockfilter.rst @@ -0,0 +1,48 @@ +.. This file is licensed under the MIT License (MIT) available on + http://opensource.org/licenses/MIT. + +getblockfilter +============== + +``getblockfilter "blockhash" ( "filtertype" )`` + +Retrieve a BIP 157 content filter for a particular block. + +Argument #1 - blockhash +~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** string, required + +The hash of the block + +Argument #2 - filtertype +~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** string, optional, default=basic + +The type name of the filter + +Result +~~~~~~ + +:: + + { (json object) + "filter" : "hex", (string) the hex-encoded filter data + "header" : "hex" (string) the hex-encoded filter header + } + +Examples +~~~~~~~~ + + +.. highlight:: shell + +:: + + bitcoin-cli getblockfilter "00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09" "basic" + +:: + + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockfilter", "params": ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09", "basic"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + diff --git a/reference/rpc/getblockhash.rst b/reference/rpc/getblockhash.rst index 826893a..caec69e 100644 --- a/reference/rpc/getblockhash.rst +++ b/reference/rpc/getblockhash.rst @@ -24,7 +24,7 @@ Result * - Name - Type - Description - * - hash + * - hex - string - The block hash @@ -40,5 +40,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockhash", "params": [1000] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockhash", "params": [1000]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getblockheader.rst b/reference/rpc/getblockheader.rst index 2e17c3f..b15871b 100644 --- a/reference/rpc/getblockheader.rst +++ b/reference/rpc/getblockheader.rst @@ -29,22 +29,22 @@ Result (for verbose = true) :: - { - "hash" : "hash", (string) the block hash (same as provided) - "confirmations" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain - "height" : n, (numeric) The block height or index - "version" : n, (numeric) The block version - "versionHex" : "00000000", (string) The block version formatted in hexadecimal - "merkleroot" : "xxxx", (string) The merkle root - "time" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT) - "mediantime" : ttt, (numeric) The median block time in seconds since epoch (Jan 1 1970 GMT) - "nonce" : n, (numeric) The nonce - "bits" : "1d00ffff", (string) The bits - "difficulty" : x.xxx, (numeric) The difficulty - "chainwork" : "0000...1f3" (string) Expected number of hashes required to produce the current chain (in hex) - "nTx" : n, (numeric) The number of transactions in the block. - "previousblockhash" : "hash", (string) The hash of the previous block - "nextblockhash" : "hash", (string) The hash of the next block + { (json object) + "hash" : "hex", (string) the block hash (same as provided) + "confirmations" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain + "height" : n, (numeric) The block height or index + "version" : n, (numeric) The block version + "versionHex" : "hex", (string) The block version formatted in hexadecimal + "merkleroot" : "hex", (string) The merkle root + "time" : xxx, (numeric) The block time expressed in UNIX epoch time + "mediantime" : xxx, (numeric) The median block time expressed in UNIX epoch time + "nonce" : n, (numeric) The nonce + "bits" : "hex", (string) The bits + "difficulty" : n, (numeric) The difficulty + "chainwork" : "hex", (string) Expected number of hashes required to produce the current chain + "nTx" : n, (numeric) The number of transactions in the block + "previousblockhash" : "hex", (string) The hash of the previous block + "nextblockhash" : "hex" (string) The hash of the next block } Result (for verbose=false) @@ -56,9 +56,9 @@ Result (for verbose=false) * - Name - Type - Description - * - data + * - hex - string - - A string that is serialized, hex-encoded data for block 'hash'. + - A string that is serialized, hex-encoded data for block 'hash' Examples ~~~~~~~~ @@ -72,5 +72,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockheader", "params": ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockheader", "params": ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getblockstats.rst b/reference/rpc/getblockstats.rst index 72a917e..9f57901 100644 --- a/reference/rpc/getblockstats.rst +++ b/reference/rpc/getblockstats.rst @@ -10,8 +10,6 @@ Compute per block statistics for a given window. All amounts are in satoshis. It won't work for some heights with pruning. -It won't work without -txindex for utxo_size_inc, \*fee or \*feerate stats. - Argument #1 - hash_or_height ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -39,42 +37,42 @@ Result :: - { (json object) - "avgfee": xxxxx, (numeric) Average fee in the block - "avgfeerate": xxxxx, (numeric) Average feerate (in satoshis per virtual byte) - "avgtxsize": xxxxx, (numeric) Average transaction size - "blockhash": xxxxx, (string) The block hash (to check for potential reorgs) - "feerate_percentiles": [ (array of numeric) Feerates at the 10th, 25th, 50th, 75th, and 90th percentile weight unit (in satoshis per virtual byte) - "10th_percentile_feerate", (numeric) The 10th percentile feerate - "25th_percentile_feerate", (numeric) The 25th percentile feerate - "50th_percentile_feerate", (numeric) The 50th percentile feerate - "75th_percentile_feerate", (numeric) The 75th percentile feerate - "90th_percentile_feerate", (numeric) The 90th percentile feerate + { (json object) + "avgfee" : n, (numeric) Average fee in the block + "avgfeerate" : n, (numeric) Average feerate (in satoshis per virtual byte) + "avgtxsize" : n, (numeric) Average transaction size + "blockhash" : "hex", (string) The block hash (to check for potential reorgs) + "feerate_percentiles" : [ (json array) Feerates at the 10th, 25th, 50th, 75th, and 90th percentile weight unit (in satoshis per virtual byte) + n, (numeric) The 10th percentile feerate + n, (numeric) The 25th percentile feerate + n, (numeric) The 50th percentile feerate + n, (numeric) The 75th percentile feerate + n (numeric) The 90th percentile feerate ], - "height": xxxxx, (numeric) The height of the block - "ins": xxxxx, (numeric) The number of inputs (excluding coinbase) - "maxfee": xxxxx, (numeric) Maximum fee in the block - "maxfeerate": xxxxx, (numeric) Maximum feerate (in satoshis per virtual byte) - "maxtxsize": xxxxx, (numeric) Maximum transaction size - "medianfee": xxxxx, (numeric) Truncated median fee in the block - "mediantime": xxxxx, (numeric) The block median time past - "mediantxsize": xxxxx, (numeric) Truncated median transaction size - "minfee": xxxxx, (numeric) Minimum fee in the block - "minfeerate": xxxxx, (numeric) Minimum feerate (in satoshis per virtual byte) - "mintxsize": xxxxx, (numeric) Minimum transaction size - "outs": xxxxx, (numeric) The number of outputs - "subsidy": xxxxx, (numeric) The block subsidy - "swtotal_size": xxxxx, (numeric) Total size of all segwit transactions - "swtotal_weight": xxxxx, (numeric) Total weight of all segwit transactions divided by segwit scale factor (4) - "swtxs": xxxxx, (numeric) The number of segwit transactions - "time": xxxxx, (numeric) The block time - "total_out": xxxxx, (numeric) Total amount in all outputs (excluding coinbase and thus reward [ie subsidy + totalfee]) - "total_size": xxxxx, (numeric) Total size of all non-coinbase transactions - "total_weight": xxxxx, (numeric) Total weight of all non-coinbase transactions divided by segwit scale factor (4) - "totalfee": xxxxx, (numeric) The fee total - "txs": xxxxx, (numeric) The number of transactions (excluding coinbase) - "utxo_increase": xxxxx, (numeric) The increase/decrease in the number of unspent outputs - "utxo_size_inc": xxxxx, (numeric) The increase/decrease in size for the utxo index (not discounting op_return and similar) + "height" : n, (numeric) The height of the block + "ins" : n, (numeric) The number of inputs (excluding coinbase) + "maxfee" : n, (numeric) Maximum fee in the block + "maxfeerate" : n, (numeric) Maximum feerate (in satoshis per virtual byte) + "maxtxsize" : n, (numeric) Maximum transaction size + "medianfee" : n, (numeric) Truncated median fee in the block + "mediantime" : n, (numeric) The block median time past + "mediantxsize" : n, (numeric) Truncated median transaction size + "minfee" : n, (numeric) Minimum fee in the block + "minfeerate" : n, (numeric) Minimum feerate (in satoshis per virtual byte) + "mintxsize" : n, (numeric) Minimum transaction size + "outs" : n, (numeric) The number of outputs + "subsidy" : n, (numeric) The block subsidy + "swtotal_size" : n, (numeric) Total size of all segwit transactions + "swtotal_weight" : n, (numeric) Total weight of all segwit transactions + "swtxs" : n, (numeric) The number of segwit transactions + "time" : n, (numeric) The block time + "total_out" : n, (numeric) Total amount in all outputs (excluding coinbase and thus reward [ie subsidy + totalfee]) + "total_size" : n, (numeric) Total size of all non-coinbase transactions + "total_weight" : n, (numeric) Total weight of all non-coinbase transactions + "totalfee" : n, (numeric) The fee total + "txs" : n, (numeric) The number of transactions (including coinbase) + "utxo_increase" : n, (numeric) The increase/decrease in the number of unspent outputs + "utxo_size_inc" : n (numeric) The increase/decrease in size for the utxo index (not discounting op_return and similar) } Examples @@ -83,11 +81,19 @@ Examples .. highlight:: shell +:: + + bitcoin-cli getblockstats '"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"' '["minfeerate","avgfeerate"]' + :: bitcoin-cli getblockstats 1000 '["minfeerate","avgfeerate"]' :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockstats", "params": [1000 '["minfeerate","avgfeerate"]'] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockstats", "params": ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09", ["minfeerate","avgfeerate"]]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + +:: + + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockstats", "params": [1000, ["minfeerate","avgfeerate"]]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getblocktemplate.rst b/reference/rpc/getblocktemplate.rst index 4312cb6..14b1e6e 100644 --- a/reference/rpc/getblocktemplate.rst +++ b/reference/rpc/getblocktemplate.rst @@ -4,7 +4,7 @@ getblocktemplate ================ -``getblocktemplate "template_request"`` +``getblocktemplate ( "template_request" )`` If the request parameters include a 'mode' key, that is used to explicitly select between the default 'template' request or a 'proposal'. @@ -20,11 +20,12 @@ For full specification, see BIPs 22, 23, 9, and 145: Argument #1 - template_request ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**Type:** json object, required +**Type:** json object, optional, default={} -A json object in the following spec +Format of the template "rules": [ (json array, required) A list of strings - "support", (string) client side supported softfork deployment + "segwit", (string, required) (literal) indicates client side segwit support + "str", (string) other client side supported softfork deployment ... ], } @@ -34,7 +35,7 @@ A json object in the following spec { "mode": "str", (string, optional) This must be set to "template", "proposal" (see BIP 23), or omitted "capabilities": [ (json array, optional) A list of strings - "support", (string) client side supported feature, 'longpoll', 'coinbasetxn', 'coinbasevalue', 'proposal', 'serverlist', 'workid' + "str", (string) client side supported feature, 'longpoll', 'coinbasevalue', 'proposal', 'serverlist', 'workid' ... ], @@ -43,48 +44,53 @@ Result :: - { - "version" : n, (numeric) The preferred block version - "rules" : [ "rulename", ... ], (array of strings) specific block rules that are to be enforced - "vbavailable" : { (json object) set of pending, supported versionbit (BIP 9) softfork deployments - "rulename" : bitnumber (numeric) identifies the bit number as indicating acceptance and readiness for the named softfork rule - ,... + { (json object) + "version" : n, (numeric) The preferred block version + "rules" : [ (json array) specific block rules that are to be enforced + "str", (string) name of a rule the client must understand to some extent; see BIP 9 for format + ... + ], + "vbavailable" : { (json object) set of pending, supported versionbit (BIP 9) softfork deployments + "rulename" : n, (numeric) identifies the bit number as indicating acceptance and readiness for the named softfork rule + ... }, - "vbrequired" : n, (numeric) bit mask of versionbits the server requires set in submissions - "previousblockhash" : "xxxx", (string) The hash of current highest block - "transactions" : [ (array) contents of non-coinbase transactions that should be included in the next block - { - "data" : "xxxx", (string) transaction data encoded in hexadecimal (byte-for-byte) - "txid" : "xxxx", (string) transaction id encoded in little-endian hexadecimal - "hash" : "xxxx", (string) hash encoded in little-endian hexadecimal (including witness data) - "depends" : [ (array) array of numbers - n (numeric) transactions before this one (by 1-based index in 'transactions' list) that must be present in the final block if this one is - ,... - ], - "fee": n, (numeric) difference in value between transaction inputs and outputs (in satoshis); for coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and clients MUST NOT assume there isn't one - "sigops" : n, (numeric) total SigOps cost, as counted for purposes of block limits; if key is not present, sigop cost is unknown and clients MUST NOT assume it is zero - "weight" : n, (numeric) total transaction weight, as counted for purposes of block limits - } - ,... + "vbrequired" : n, (numeric) bit mask of versionbits the server requires set in submissions + "previousblockhash" : "str", (string) The hash of current highest block + "transactions" : [ (json array) contents of non-coinbase transactions that should be included in the next block + { (json object) + "data" : "hex", (string) transaction data encoded in hexadecimal (byte-for-byte) + "txid" : "hex", (string) transaction id encoded in little-endian hexadecimal + "hash" : "hex", (string) hash encoded in little-endian hexadecimal (including witness data) + "depends" : [ (json array) array of numbers + n, (numeric) transactions before this one (by 1-based index in 'transactions' list) that must be present in the final block if this one is + ... + ], + "fee" : n, (numeric) difference in value between transaction inputs and outputs (in satoshis); for coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and clients MUST NOT assume there isn't one + "sigops" : n, (numeric) total SigOps cost, as counted for purposes of block limits; if key is not present, sigop cost is unknown and clients MUST NOT assume it is zero + "weight" : n (numeric) total transaction weight, as counted for purposes of block limits + }, + ... ], - "coinbaseaux" : { (json object) data that should be included in the coinbase's scriptSig content - "flags" : "xx" (string) key name is to be ignored, and value included in scriptSig + "coinbaseaux" : { (json object) data that should be included in the coinbase's scriptSig content + "key" : "hex", (string) values must be in the coinbase (keys may be ignored) + ... }, - "coinbasevalue" : n, (numeric) maximum allowable input to coinbase transaction, including the generation award and transaction fees (in satoshis) - "coinbasetxn" : { ... }, (json object) information for coinbase transaction - "target" : "xxxx", (string) The hash target - "mintime" : xxx, (numeric) The minimum timestamp appropriate for next block time in seconds since epoch (Jan 1 1970 GMT) - "mutable" : [ (array of string) list of ways the block template may be changed - "value" (string) A way the block template may be changed, e.g. 'time', 'transactions', 'prevblock' - ,... + "coinbasevalue" : n, (numeric) maximum allowable input to coinbase transaction, including the generation award and transaction fees (in satoshis) + "longpollid" : "str", (string) an id to include with a request to longpoll on an update to this template + "target" : "str", (string) The hash target + "mintime" : xxx, (numeric) The minimum timestamp appropriate for the next block time, expressed in UNIX epoch time + "mutable" : [ (json array) list of ways the block template may be changed + "str", (string) A way the block template may be changed, e.g. 'time', 'transactions', 'prevblock' + ... ], - "noncerange" : "00000000ffffffff",(string) A range of valid nonces - "sigoplimit" : n, (numeric) limit of sigops in blocks - "sizelimit" : n, (numeric) limit of block size - "weightlimit" : n, (numeric) limit of block weight - "curtime" : ttt, (numeric) current timestamp in seconds since epoch (Jan 1 1970 GMT) - "bits" : "xxxxxxxx", (string) compressed target of next block - "height" : n (numeric) The height of the next block + "noncerange" : "hex", (string) A range of valid nonces + "sigoplimit" : n, (numeric) limit of sigops in blocks + "sizelimit" : n, (numeric) limit of block size + "weightlimit" : n, (numeric) limit of block weight + "curtime" : xxx, (numeric) current timestamp in UNIX epoch time + "bits" : "str", (string) compressed target of next block + "height" : n, (numeric) The height of the next block + "default_witness_commitment" : "str" (string, optional) a valid witness commitment for the unmodified block template } Examples @@ -95,9 +101,9 @@ Examples :: - bitcoin-cli getblocktemplate {"rules": ["segwit"]} + bitcoin-cli getblocktemplate '{"rules": ["segwit"]}' :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblocktemplate", "params": [{"rules": ["segwit"]}] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblocktemplate", "params": [{"rules": ["segwit"]}]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getchaintips.rst b/reference/rpc/getchaintips.rst index 5aeec3e..c6b3ecd 100644 --- a/reference/rpc/getchaintips.rst +++ b/reference/rpc/getchaintips.rst @@ -13,19 +13,20 @@ Result :: - [ - { - "height": xxxx, (numeric) height of the chain tip - "hash": "xxxx", (string) block hash of the tip - "branchlen": 0 (numeric) zero for main chain - "status": "active" (string) "active" for the main chain + [ (json array) + { (json object) + "height" : n, (numeric) height of the chain tip + "hash" : "hex", (string) block hash of the tip + "branchlen" : n, (numeric) zero for main chain, otherwise length of branch connecting the tip to the main chain + "status" : "str" (string) status of the chain, "active" for the main chain + Possible values for status: + 1. "invalid" This branch contains at least one invalid block + 2. "headers-only" Not all blocks for this branch are available, but the headers are valid + 3. "valid-headers" All blocks are available for this branch, but they were never fully validated + 4. "valid-fork" This branch is not part of the active chain, but is fully validated + 5. "active" This is the tip of the active main chain, which is certainly valid }, - { - "height": xxxx, - "hash": "xxxx", - "branchlen": 1 (numeric) length of branch connecting the tip to the main chain - "status": "xxxx" (string) status of the chain (active, valid-fork, valid-headers, headers-only, invalid) - } + ... ] Examples @@ -40,5 +41,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getchaintips", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getchaintips", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getchaintxstats.rst b/reference/rpc/getchaintxstats.rst index d284e38..a75fd59 100644 --- a/reference/rpc/getchaintxstats.rst +++ b/reference/rpc/getchaintxstats.rst @@ -27,14 +27,15 @@ Result :: - { - "time": xxxxx, (numeric) The timestamp for the final block in the window in UNIX format. - "txcount": xxxxx, (numeric) The total number of transactions in the chain up to that point. - "window_final_block_hash": "...", (string) The hash of the final block in the window. - "window_block_count": xxxxx, (numeric) Size of the window in number of blocks. - "window_tx_count": xxxxx, (numeric) The number of transactions in the window. Only returned if "window_block_count" is > 0. - "window_interval": xxxxx, (numeric) The elapsed time in the window in seconds. Only returned if "window_block_count" is > 0. - "txrate": x.xx, (numeric) The average rate of transactions per second in the window. Only returned if "window_interval" is > 0. + { (json object) + "time" : xxx, (numeric) The timestamp for the final block in the window, expressed in UNIX epoch time + "txcount" : n, (numeric) The total number of transactions in the chain up to that point + "window_final_block_hash" : "hex", (string) The hash of the final block in the window + "window_final_block_height" : n, (numeric) The height of the final block in the window. + "window_block_count" : n, (numeric) Size of the window in number of blocks + "window_tx_count" : n, (numeric) The number of transactions in the window. Only returned if "window_block_count" is > 0 + "window_interval" : n, (numeric) The elapsed time in the window in seconds. Only returned if "window_block_count" is > 0 + "txrate" : n (numeric) The average rate of transactions per second in the window. Only returned if "window_interval" is > 0 } Examples @@ -49,5 +50,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getchaintxstats", "params": [2016] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getchaintxstats", "params": [2016]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getconnectioncount.rst b/reference/rpc/getconnectioncount.rst index 5b6ccd3..2d89c62 100644 --- a/reference/rpc/getconnectioncount.rst +++ b/reference/rpc/getconnectioncount.rst @@ -33,5 +33,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getconnectioncount", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getconnectioncount", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getdescriptorinfo.rst b/reference/rpc/getdescriptorinfo.rst index a061f47..c66918e 100644 --- a/reference/rpc/getdescriptorinfo.rst +++ b/reference/rpc/getdescriptorinfo.rst @@ -20,11 +20,12 @@ Result :: - { - "descriptor" : "desc", (string) The descriptor in canonical form, without private keys - "isrange" : true|false, (boolean) Whether the descriptor is ranged - "issolvable" : true|false, (boolean) Whether the descriptor is solvable - "hasprivatekeys" : true|false, (boolean) Whether the input descriptor contained at least one private key + { (json object) + "descriptor" : "str", (string) The descriptor in canonical form, without private keys + "checksum" : "str", (string) The checksum for the input descriptor + "isrange" : true|false, (boolean) Whether the descriptor is ranged + "issolvable" : true|false, (boolean) Whether the descriptor is solvable + "hasprivatekeys" : true|false (boolean) Whether the input descriptor contained at least one private key } Examples diff --git a/reference/rpc/getdifficulty.rst b/reference/rpc/getdifficulty.rst index c5baafd..053a0ac 100644 --- a/reference/rpc/getdifficulty.rst +++ b/reference/rpc/getdifficulty.rst @@ -17,7 +17,7 @@ Result * - Name - Type - Description - * - n.nnn + * - n - numeric - the proof-of-work difficulty as a multiple of the minimum difficulty. @@ -33,5 +33,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getdifficulty", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getdifficulty", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getindexinfo.rst b/reference/rpc/getindexinfo.rst new file mode 100644 index 0000000..2c575e4 --- /dev/null +++ b/reference/rpc/getindexinfo.rst @@ -0,0 +1,51 @@ +.. This file is licensed under the MIT License (MIT) available on + http://opensource.org/licenses/MIT. + +getindexinfo +============ + +``getindexinfo ( "index_name" )`` + +Returns the status of one or all available indices currently running in the node. + +Argument #1 - index_name +~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** string, optional + +Filter results for an index with a specific name. + +Result +~~~~~~ + +:: + + { (json object) + "name" : { (json object) The name of the index + "synced" : true|false, (boolean) Whether the index is synced or not + "best_block_height" : n (numeric) The block height to which the index is synced + } + } + +Examples +~~~~~~~~ + + +.. highlight:: shell + +:: + + bitcoin-cli getindexinfo + +:: + + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getindexinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + +:: + + bitcoin-cli getindexinfo txindex + +:: + + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getindexinfo", "params": [txindex]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + diff --git a/reference/rpc/getmemoryinfo.rst b/reference/rpc/getmemoryinfo.rst index 386bbfe..202caa2 100644 --- a/reference/rpc/getmemoryinfo.rst +++ b/reference/rpc/getmemoryinfo.rst @@ -22,23 +22,29 @@ Result (mode "stats") :: - { - "locked": { (json object) Information about locked memory manager - "used": xxxxx, (numeric) Number of bytes used - "free": xxxxx, (numeric) Number of bytes available in current arenas - "total": xxxxxxx, (numeric) Total number of bytes managed - "locked": xxxxxx, (numeric) Amount of bytes that succeeded locking. If this number is smaller than total, locking pages failed at some point and key data could be swapped to disk. - "chunks_used": xxxxx, (numeric) Number allocated chunks - "chunks_free": xxxxx, (numeric) Number unused chunks + { (json object) + "locked" : { (json object) Information about locked memory manager + "used" : n, (numeric) Number of bytes used + "free" : n, (numeric) Number of bytes available in current arenas + "total" : n, (numeric) Total number of bytes managed + "locked" : n, (numeric) Amount of bytes that succeeded locking. If this number is smaller than total, locking pages failed at some point and key data could be swapped to disk. + "chunks_used" : n, (numeric) Number allocated chunks + "chunks_free" : n (numeric) Number unused chunks } } Result (mode "mallocinfo") ~~~~~~~~~~~~~~~~~~~~~~~~~~ -:: +.. list-table:: + :header-rows: 1 - "..." + * - Name + - Type + - Description + * - str + - string + - "..." Examples ~~~~~~~~ @@ -52,5 +58,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getmemoryinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getmemoryinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getmempoolancestors.rst b/reference/rpc/getmempoolancestors.rst index 9fc50d6..06b0e84 100644 --- a/reference/rpc/getmempoolancestors.rst +++ b/reference/rpc/getmempoolancestors.rst @@ -27,9 +27,9 @@ Result (for verbose = false) :: - [ (json array of strings) - "transactionid" (string) The transaction id of an in-mempool ancestor transaction - ,... + [ (json array) + "hex", (string) The transaction id of an in-mempool ancestor transaction + ... ] Result (for verbose = true) @@ -37,34 +37,39 @@ Result (for verbose = true) :: - { (json object) - "transactionid" : { (json object) - "size" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. - "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) - "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) - "time" : n, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT - "height" : n, (numeric) block height when transaction entered pool - "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) - "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) - "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) - "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) - "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) - "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) - "wtxid" : hash, (string) hash of serialized transaction, including witness data - "fees" : { - "base" : n, (numeric) transaction fee in BTC - "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC - "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC - "descendant" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC - } - "depends" : [ (array) unconfirmed transactions used as inputs for this transaction - "transactionid", (string) parent transaction id - ... ] - "spentby" : [ (array) unconfirmed transactions spending outputs from this transaction - "transactionid", (string) child transaction id - ... ] - "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) - }, ... + { (json object) + "transactionid" : { (json object) + "vsize" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. + "weight" : n, (numeric) transaction weight as defined in BIP 141. + "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) + "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) + "time" : xxx, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT + "height" : n, (numeric) block height when transaction entered pool + "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) + "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) + "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) + "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) + "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) + "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) + "wtxid" : "hex", (string) hash of serialized transaction, including witness data + "fees" : { (json object) + "base" : n, (numeric) transaction fee in BTC + "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC + "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC + "descendant" : n (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC + }, + "depends" : [ (json array) unconfirmed transactions used as inputs for this transaction + "hex", (string) parent transaction id + ... + ], + "spentby" : [ (json array) unconfirmed transactions spending outputs from this transaction + "hex", (string) child transaction id + ... + ], + "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) + "unbroadcast" : true|false (boolean) Whether this transaction is currently unbroadcast (initial broadcast not yet acknowledged by any peers) + }, + ... } Examples @@ -79,5 +84,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getmempoolancestors", "params": ["mytxid"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getmempoolancestors", "params": ["mytxid"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getmempooldescendants.rst b/reference/rpc/getmempooldescendants.rst index 9dc4657..6de89b9 100644 --- a/reference/rpc/getmempooldescendants.rst +++ b/reference/rpc/getmempooldescendants.rst @@ -27,9 +27,9 @@ Result (for verbose = false) :: - [ (json array of strings) - "transactionid" (string) The transaction id of an in-mempool descendant transaction - ,... + [ (json array) + "hex", (string) The transaction id of an in-mempool descendant transaction + ... ] Result (for verbose = true) @@ -37,34 +37,39 @@ Result (for verbose = true) :: - { (json object) - "transactionid" : { (json object) - "size" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. - "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) - "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) - "time" : n, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT - "height" : n, (numeric) block height when transaction entered pool - "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) - "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) - "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) - "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) - "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) - "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) - "wtxid" : hash, (string) hash of serialized transaction, including witness data - "fees" : { - "base" : n, (numeric) transaction fee in BTC - "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC - "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC - "descendant" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC - } - "depends" : [ (array) unconfirmed transactions used as inputs for this transaction - "transactionid", (string) parent transaction id - ... ] - "spentby" : [ (array) unconfirmed transactions spending outputs from this transaction - "transactionid", (string) child transaction id - ... ] - "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) - }, ... + { (json object) + "transactionid" : { (json object) + "vsize" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. + "weight" : n, (numeric) transaction weight as defined in BIP 141. + "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) + "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) + "time" : xxx, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT + "height" : n, (numeric) block height when transaction entered pool + "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) + "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) + "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) + "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) + "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) + "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) + "wtxid" : "hex", (string) hash of serialized transaction, including witness data + "fees" : { (json object) + "base" : n, (numeric) transaction fee in BTC + "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC + "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC + "descendant" : n (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC + }, + "depends" : [ (json array) unconfirmed transactions used as inputs for this transaction + "hex", (string) parent transaction id + ... + ], + "spentby" : [ (json array) unconfirmed transactions spending outputs from this transaction + "hex", (string) child transaction id + ... + ], + "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) + "unbroadcast" : true|false (boolean) Whether this transaction is currently unbroadcast (initial broadcast not yet acknowledged by any peers) + }, + ... } Examples @@ -79,5 +84,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getmempooldescendants", "params": ["mytxid"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getmempooldescendants", "params": ["mytxid"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getmempoolentry.rst b/reference/rpc/getmempoolentry.rst index be93f9d..e5c3582 100644 --- a/reference/rpc/getmempoolentry.rst +++ b/reference/rpc/getmempoolentry.rst @@ -20,32 +20,36 @@ Result :: - { (json object) - "size" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. - "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) - "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) - "time" : n, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT - "height" : n, (numeric) block height when transaction entered pool - "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) - "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) - "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) - "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) - "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) - "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) - "wtxid" : hash, (string) hash of serialized transaction, including witness data - "fees" : { - "base" : n, (numeric) transaction fee in BTC - "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC - "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC - "descendant" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC - } - "depends" : [ (array) unconfirmed transactions used as inputs for this transaction - "transactionid", (string) parent transaction id - ... ] - "spentby" : [ (array) unconfirmed transactions spending outputs from this transaction - "transactionid", (string) child transaction id - ... ] - "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) + { (json object) + "vsize" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. + "weight" : n, (numeric) transaction weight as defined in BIP 141. + "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) + "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) + "time" : xxx, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT + "height" : n, (numeric) block height when transaction entered pool + "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) + "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) + "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) + "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) + "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) + "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) + "wtxid" : "hex", (string) hash of serialized transaction, including witness data + "fees" : { (json object) + "base" : n, (numeric) transaction fee in BTC + "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC + "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC + "descendant" : n (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC + }, + "depends" : [ (json array) unconfirmed transactions used as inputs for this transaction + "hex", (string) parent transaction id + ... + ], + "spentby" : [ (json array) unconfirmed transactions spending outputs from this transaction + "hex", (string) child transaction id + ... + ], + "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) + "unbroadcast" : true|false (boolean) Whether this transaction is currently unbroadcast (initial broadcast not yet acknowledged by any peers) } Examples @@ -60,5 +64,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getmempoolentry", "params": ["mytxid"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getmempoolentry", "params": ["mytxid"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getmempoolinfo.rst b/reference/rpc/getmempoolinfo.rst index 4cb8c43..079233a 100644 --- a/reference/rpc/getmempoolinfo.rst +++ b/reference/rpc/getmempoolinfo.rst @@ -13,13 +13,15 @@ Result :: - { - "size": xxxxx, (numeric) Current tx count - "bytes": xxxxx, (numeric) Sum of all virtual transaction sizes as defined in BIP 141. Differs from actual serialized size because witness data is discounted - "usage": xxxxx, (numeric) Total memory usage for the mempool - "maxmempool": xxxxx, (numeric) Maximum memory usage for the mempool - "mempoolminfee": xxxxx (numeric) Minimum fee rate in BTC/kB for tx to be accepted. Is the maximum of minrelaytxfee and minimum mempool fee - "minrelaytxfee": xxxxx (numeric) Current minimum relay fee for transactions + { (json object) + "loaded" : true|false, (boolean) True if the mempool is fully loaded + "size" : n, (numeric) Current tx count + "bytes" : n, (numeric) Sum of all virtual transaction sizes as defined in BIP 141. Differs from actual serialized size because witness data is discounted + "usage" : n, (numeric) Total memory usage for the mempool + "maxmempool" : n, (numeric) Maximum memory usage for the mempool + "mempoolminfee" : n, (numeric) Minimum fee rate in BTC/kB for tx to be accepted. Is the maximum of minrelaytxfee and minimum mempool fee + "minrelaytxfee" : n, (numeric) Current minimum relay fee for transactions + "unbroadcastcount" : n (numeric) Current number of transactions that haven't passed initial broadcast yet } Examples @@ -34,5 +36,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getmempoolinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getmempoolinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getmininginfo.rst b/reference/rpc/getmininginfo.rst index 5a36f4c..dbd0060 100644 --- a/reference/rpc/getmininginfo.rst +++ b/reference/rpc/getmininginfo.rst @@ -13,15 +13,15 @@ Result :: - { - "blocks": nnn, (numeric) The current block - "currentblockweight": nnn, (numeric, optional) The block weight of the last assembled block (only present if a block was ever assembled) - "currentblocktx": nnn, (numeric, optional) The number of block transactions of the last assembled block (only present if a block was ever assembled) - "difficulty": xxx.xxxxx (numeric) The current difficulty - "networkhashps": nnn, (numeric) The network hashes per second - "pooledtx": n (numeric) The size of the mempool - "chain": "xxxx", (string) current network name as defined in BIP70 (main, test, regtest) - "warnings": "..." (string) any network and blockchain warnings + { (json object) + "blocks" : n, (numeric) The current block + "currentblockweight" : n, (numeric, optional) The block weight of the last assembled block (only present if a block was ever assembled) + "currentblocktx" : n, (numeric, optional) The number of block transactions of the last assembled block (only present if a block was ever assembled) + "difficulty" : n, (numeric) The current difficulty + "networkhashps" : n, (numeric) The network hashes per second + "pooledtx" : n, (numeric) The size of the mempool + "chain" : "str", (string) current network name (main, test, regtest) + "warnings" : "str" (string) any network and blockchain warnings } Examples @@ -36,5 +36,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getmininginfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getmininginfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getnettotals.rst b/reference/rpc/getnettotals.rst index 2f4aa27..f3194ae 100644 --- a/reference/rpc/getnettotals.rst +++ b/reference/rpc/getnettotals.rst @@ -14,18 +14,17 @@ Result :: - { - "totalbytesrecv": n, (numeric) Total bytes received - "totalbytessent": n, (numeric) Total bytes sent - "timemillis": t, (numeric) Current UNIX time in milliseconds - "uploadtarget": - { - "timeframe": n, (numeric) Length of the measuring timeframe in seconds - "target": n, (numeric) Target in bytes - "target_reached": true|false, (boolean) True if target is reached - "serve_historical_blocks": true|false, (boolean) True if serving historical blocks - "bytes_left_in_cycle": t, (numeric) Bytes left in current time cycle - "time_left_in_cycle": t (numeric) Seconds left in current time cycle + { (json object) + "totalbytesrecv" : n, (numeric) Total bytes received + "totalbytessent" : n, (numeric) Total bytes sent + "timemillis" : xxx, (numeric) Current UNIX epoch time in milliseconds + "uploadtarget" : { (json object) + "timeframe" : n, (numeric) Length of the measuring timeframe in seconds + "target" : n, (numeric) Target in bytes + "target_reached" : true|false, (boolean) True if target is reached + "serve_historical_blocks" : true|false, (boolean) True if serving historical blocks + "bytes_left_in_cycle" : n, (numeric) Bytes left in current time cycle + "time_left_in_cycle" : n (numeric) Seconds left in current time cycle } } @@ -41,5 +40,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnettotals", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getnettotals", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getnetworkhashps.rst b/reference/rpc/getnetworkhashps.rst index 70629e3..bab864b 100644 --- a/reference/rpc/getnetworkhashps.rst +++ b/reference/rpc/getnetworkhashps.rst @@ -35,7 +35,7 @@ Result * - Name - Type - Description - * - x + * - n - numeric - Hashes per second estimated @@ -51,5 +51,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnetworkhashps", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getnetworkhashps", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getnetworkinfo.rst b/reference/rpc/getnetworkinfo.rst index 083b1ff..6179424 100644 --- a/reference/rpc/getnetworkinfo.rst +++ b/reference/rpc/getnetworkinfo.rst @@ -13,36 +13,42 @@ Result :: - { - "version": xxxxx, (numeric) the server version - "subversion": "/Satoshi:x.x.x/", (string) the server subversion string - "protocolversion": xxxxx, (numeric) the protocol version - "localservices": "xxxxxxxxxxxxxxxx", (string) the services we offer to the network - "localrelay": true|false, (bool) true if transaction relay is requested from peers - "timeoffset": xxxxx, (numeric) the time offset - "connections": xxxxx, (numeric) the number of connections - "networkactive": true|false, (bool) whether p2p networking is enabled - "networks": [ (array) information per network - { - "name": "xxx", (string) network (ipv4, ipv6 or onion) - "limited": true|false, (boolean) is the network limited using -onlynet? - "reachable": true|false, (boolean) is the network reachable? - "proxy": "host:port" (string) the proxy that is used for this network, or empty if none - "proxy_randomize_credentials": true|false, (string) Whether randomized credentials are used - } - ,... + { (json object) + "version" : n, (numeric) the server version + "subversion" : "str", (string) the server subversion string + "protocolversion" : n, (numeric) the protocol version + "localservices" : "hex", (string) the services we offer to the network + "localservicesnames" : [ (json array) the services we offer to the network, in human-readable form + "str", (string) the service name + ... ], - "relayfee": x.xxxxxxxx, (numeric) minimum relay fee for transactions in BTC/kB - "incrementalfee": x.xxxxxxxx, (numeric) minimum fee increment for mempool limiting or BIP 125 replacement in BTC/kB - "localaddresses": [ (array) list of local addresses - { - "address": "xxxx", (string) network address - "port": xxx, (numeric) network port - "score": xxx (numeric) relative score - } - ,... - ] - "warnings": "..." (string) any network and blockchain warnings + "localrelay" : true|false, (boolean) true if transaction relay is requested from peers + "timeoffset" : n, (numeric) the time offset + "connections" : n, (numeric) the total number of connections + "connections_in" : n, (numeric) the number of inbound connections + "connections_out" : n, (numeric) the number of outbound connections + "networkactive" : true|false, (boolean) whether p2p networking is enabled + "networks" : [ (json array) information per network + { (json object) + "name" : "str", (string) network (ipv4, ipv6 or onion) + "limited" : true|false, (boolean) is the network limited using -onlynet? + "reachable" : true|false, (boolean) is the network reachable? + "proxy" : "str", (string) ("host:port") the proxy that is used for this network, or empty if none + "proxy_randomize_credentials" : true|false (boolean) Whether randomized credentials are used + }, + ... + ], + "relayfee" : n, (numeric) minimum relay fee for transactions in BTC/kB + "incrementalfee" : n, (numeric) minimum fee increment for mempool limiting or BIP 125 replacement in BTC/kB + "localaddresses" : [ (json array) list of local addresses + { (json object) + "address" : "str", (string) network address + "port" : n, (numeric) network port + "score" : n (numeric) relative score + }, + ... + ], + "warnings" : "str" (string) any network and blockchain warnings } Examples @@ -57,5 +63,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnetworkinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getnetworkinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getnewaddress.rst b/reference/rpc/getnewaddress.rst index 8a0e5ae..9fdbd0f 100644 --- a/reference/rpc/getnewaddress.rst +++ b/reference/rpc/getnewaddress.rst @@ -34,7 +34,7 @@ Result * - Name - Type - Description - * - address + * - str - string - The new bitcoin address @@ -50,5 +50,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnewaddress", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getnewaddress", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getnodeaddresses.rst b/reference/rpc/getnodeaddresses.rst index 42c5402..e34ca37 100644 --- a/reference/rpc/getnodeaddresses.rst +++ b/reference/rpc/getnodeaddresses.rst @@ -13,21 +13,21 @@ Argument #1 - count **Type:** numeric, optional, default=1 -How many addresses to return. Limited to the smaller of 2500 or 23% of all known addresses. +The maximum number of addresses to return. Specify 0 to return all known addresses. Result ~~~~~~ :: - [ - { - "time": ttt, (numeric) Timestamp in seconds since epoch (Jan 1 1970 GMT) keeping track of when the node was last seen - "services": n, (numeric) The services offered - "address": "host", (string) The address of the node - "port": n (numeric) The port of the node - } - ,.... + [ (json array) + { (json object) + "time" : xxx, (numeric) The UNIX epoch time of when the node was last seen + "services" : n, (numeric) The services offered + "address" : "str", (string) The address of the node + "port" : n (numeric) The port of the node + }, + ... ] Examples @@ -42,5 +42,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnodeaddresses", "params": [8] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getnodeaddresses", "params": [8]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getpeerinfo.rst b/reference/rpc/getpeerinfo.rst index ca26320..76360b4 100644 --- a/reference/rpc/getpeerinfo.rst +++ b/reference/rpc/getpeerinfo.rst @@ -13,51 +13,82 @@ Result :: - [ - { - "id": n, (numeric) Peer index - "addr":"host:port", (string) The IP address and port of the peer - "addrbind":"ip:port", (string) Bind address of the connection to the peer - "addrlocal":"ip:port", (string) Local address as reported by the peer - "services":"xxxxxxxxxxxxxxxx", (string) The services offered - "relaytxes":true|false, (boolean) Whether peer has asked us to relay transactions to it - "lastsend": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last send - "lastrecv": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last receive - "bytessent": n, (numeric) The total bytes sent - "bytesrecv": n, (numeric) The total bytes received - "conntime": ttt, (numeric) The connection time in seconds since epoch (Jan 1 1970 GMT) - "timeoffset": ttt, (numeric) The time offset in seconds - "pingtime": n, (numeric) ping time (if available) - "minping": n, (numeric) minimum observed ping time (if any at all) - "pingwait": n, (numeric) ping wait (if non-zero) - "version": v, (numeric) The peer version, such as 70001 - "subver": "/Satoshi:0.8.5/", (string) The string version - "inbound": true|false, (boolean) Inbound (true) or Outbound (false) - "addnode": true|false, (boolean) Whether connection was due to addnode/-connect or if it was an automatic/inbound connection - "startingheight": n, (numeric) The starting height (block) of the peer - "banscore": n, (numeric) The ban score - "synced_headers": n, (numeric) The last header we have in common with this peer - "synced_blocks": n, (numeric) The last block we have in common with this peer - "inflight": [ - n, (numeric) The heights of blocks we're currently asking from this peer - ... + [ (json array) + { (json object) + "id" : n, (numeric) Peer index + "addr" : "str", (string) (host:port) The IP address and port of the peer + "addrbind" : "str", (string) (ip:port) Bind address of the connection to the peer + "addrlocal" : "str", (string) (ip:port) Local address as reported by the peer + "network" : "str", (string) Network (ipv4, ipv6, or onion) the peer connected through + "mapped_as" : n, (numeric) The AS in the BGP route to the peer used for diversifying + peer selection (only available if the asmap config flag is set) + "services" : "hex", (string) The services offered + "servicesnames" : [ (json array) the services offered, in human-readable form + "str", (string) the service name if it is recognised + ... ], - "whitelisted": true|false, (boolean) Whether the peer is whitelisted - "minfeefilter": n, (numeric) The minimum fee rate for transactions this peer accepts - "bytessent_per_msg": { - "msg": n, (numeric) The total bytes sent aggregated by message type - When a message type is not listed in this json object, the bytes sent are 0. - Only known message types can appear as keys in the object. - ... + "relaytxes" : true|false, (boolean) Whether peer has asked us to relay transactions to it + "lastsend" : xxx, (numeric) The UNIX epoch time of the last send + "lastrecv" : xxx, (numeric) The UNIX epoch time of the last receive + "last_transaction" : xxx, (numeric) The UNIX epoch time of the last valid transaction received from this peer + "last_block" : xxx, (numeric) The UNIX epoch time of the last block received from this peer + "bytessent" : n, (numeric) The total bytes sent + "bytesrecv" : n, (numeric) The total bytes received + "conntime" : xxx, (numeric) The UNIX epoch time of the connection + "timeoffset" : n, (numeric) The time offset in seconds + "pingtime" : n, (numeric) ping time (if available) + "minping" : n, (numeric) minimum observed ping time (if any at all) + "pingwait" : n, (numeric) ping wait (if non-zero) + "version" : n, (numeric) The peer version, such as 70001 + "subver" : "str", (string) The string version + "inbound" : true|false, (boolean) Inbound (true) or Outbound (false) + "addnode" : true|false, (boolean) Whether connection was due to addnode/-connect or if it was an automatic/inbound connection + (DEPRECATED, returned only if the config option -deprecatedrpc=getpeerinfo_addnode is passed) + "connection_type" : "str", (string) Type of connection: + outbound-full-relay (default automatic connections), + block-relay-only (does not relay transactions or addresses), + inbound (initiated by the peer), + manual (added via addnode RPC or -addnode/-connect configuration options), + addr-fetch (short-lived automatic connection for soliciting addresses), + feeler (short-lived automatic connection for testing addresses). + Please note this output is unlikely to be stable in upcoming releases as we iterate to + best capture connection behaviors. + "startingheight" : n, (numeric) The starting height (block) of the peer + "banscore" : n, (numeric) The ban score (DEPRECATED, returned only if config option -deprecatedrpc=banscore is passed) + "synced_headers" : n, (numeric) The last header we have in common with this peer + "synced_blocks" : n, (numeric) The last block we have in common with this peer + "inflight" : [ (json array) + n, (numeric) The heights of blocks we're currently asking from this peer + ... + ], + "whitelisted" : true|false, (boolean, optional) Whether the peer is whitelisted with default permissions + (DEPRECATED, returned only if config option -deprecatedrpc=whitelisted is passed) + "permissions" : [ (json array) Any special permissions that have been granted to this peer + "str", (string) bloomfilter (allow requesting BIP37 filtered blocks and transactions), + noban (do not ban for misbehavior; implies download), + forcerelay (relay transactions that are already in the mempool; implies relay), + relay (relay even in -blocksonly mode, and unlimited transaction announcements), + mempool (allow requesting BIP35 mempool contents), + download (allow getheaders during IBD, no disconnect after maxuploadtarget limit), + addr (responses to GETADDR avoid hitting the cache and contain random records with the most up-to-date info). + + ... + ], + "minfeefilter" : n, (numeric) The minimum fee rate for transactions this peer accepts + "bytessent_per_msg" : { (json object) + "msg" : n, (numeric) The total bytes sent aggregated by message type + When a message type is not listed in this json object, the bytes sent are 0. + Only known message types can appear as keys in the object. + ... }, - "bytesrecv_per_msg": { - "msg": n, (numeric) The total bytes received aggregated by message type - When a message type is not listed in this json object, the bytes received are 0. - Only known message types can appear as keys in the object and all bytes received of unknown message types are listed under '*other*'. - ... + "bytesrecv_per_msg" : { (json object) + "msg" : n (numeric) The total bytes received aggregated by message type + When a message type is not listed in this json object, the bytes received are 0. + Only known message types can appear as keys in the object and all bytes received + of unknown message types are listed under '*other*'. } - } - ,... + }, + ... ] Examples @@ -72,5 +103,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getpeerinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getpeerinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getrawchangeaddress.rst b/reference/rpc/getrawchangeaddress.rst index c3db397..a5fe923 100644 --- a/reference/rpc/getrawchangeaddress.rst +++ b/reference/rpc/getrawchangeaddress.rst @@ -26,7 +26,7 @@ Result * - Name - Type - Description - * - address + * - str - string - The address @@ -42,5 +42,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getrawchangeaddress", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawchangeaddress", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getrawmempool.rst b/reference/rpc/getrawmempool.rst index d36c444..cefe7a9 100644 --- a/reference/rpc/getrawmempool.rst +++ b/reference/rpc/getrawmempool.rst @@ -4,7 +4,7 @@ getrawmempool ============= -``getrawmempool ( verbose )`` +``getrawmempool ( verbose mempool_sequence )`` Returns all transaction ids in memory pool as a json array of string transaction ids. @@ -17,14 +17,21 @@ Argument #1 - verbose True for a json object, false for array of transaction ids +Argument #2 - mempool_sequence +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** boolean, optional, default=false + +If verbose=false, returns a json object with transaction list and mempool sequence number attached. + Result (for verbose = false) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: - [ (json array of string) - "transactionid" (string) The transaction id - ,... + [ (json array) + "hex", (string) The transaction id + ... ] Result (for verbose = true) @@ -32,34 +39,52 @@ Result (for verbose = true) :: - { (json object) - "transactionid" : { (json object) - "size" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. - "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) - "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) - "time" : n, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT - "height" : n, (numeric) block height when transaction entered pool - "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) - "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) - "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) - "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) - "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) - "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) - "wtxid" : hash, (string) hash of serialized transaction, including witness data - "fees" : { - "base" : n, (numeric) transaction fee in BTC - "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC - "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC - "descendant" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC - } - "depends" : [ (array) unconfirmed transactions used as inputs for this transaction - "transactionid", (string) parent transaction id - ... ] - "spentby" : [ (array) unconfirmed transactions spending outputs from this transaction - "transactionid", (string) child transaction id - ... ] - "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) - }, ... + { (json object) + "transactionid" : { (json object) + "vsize" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted. + "weight" : n, (numeric) transaction weight as defined in BIP 141. + "fee" : n, (numeric) transaction fee in BTC (DEPRECATED) + "modifiedfee" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED) + "time" : xxx, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT + "height" : n, (numeric) block height when transaction entered pool + "descendantcount" : n, (numeric) number of in-mempool descendant transactions (including this one) + "descendantsize" : n, (numeric) virtual transaction size of in-mempool descendants (including this one) + "descendantfees" : n, (numeric) modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED) + "ancestorcount" : n, (numeric) number of in-mempool ancestor transactions (including this one) + "ancestorsize" : n, (numeric) virtual transaction size of in-mempool ancestors (including this one) + "ancestorfees" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED) + "wtxid" : "hex", (string) hash of serialized transaction, including witness data + "fees" : { (json object) + "base" : n, (numeric) transaction fee in BTC + "modified" : n, (numeric) transaction fee with fee deltas used for mining priority in BTC + "ancestor" : n, (numeric) modified fees (see above) of in-mempool ancestors (including this one) in BTC + "descendant" : n (numeric) modified fees (see above) of in-mempool descendants (including this one) in BTC + }, + "depends" : [ (json array) unconfirmed transactions used as inputs for this transaction + "hex", (string) parent transaction id + ... + ], + "spentby" : [ (json array) unconfirmed transactions spending outputs from this transaction + "hex", (string) child transaction id + ... + ], + "bip125-replaceable" : true|false, (boolean) Whether this transaction could be replaced due to BIP125 (replace-by-fee) + "unbroadcast" : true|false (boolean) Whether this transaction is currently unbroadcast (initial broadcast not yet acknowledged by any peers) + }, + ... + } + +Result (for verbose = false and mempool_sequence = true) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + { (json object) + "txids" : [ (json array) + "hex", (string) The transaction id + ... + ], + "mempool_sequence" : n (numeric) The mempool sequence value. } Examples @@ -74,5 +99,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getrawmempool", "params": [true] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawmempool", "params": [true]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getrawtransaction.rst b/reference/rpc/getrawtransaction.rst index 04dbb0d..855f36e 100644 --- a/reference/rpc/getrawtransaction.rst +++ b/reference/rpc/getrawtransaction.rst @@ -50,7 +50,7 @@ Result (if verbose is not set or set to false) * - Name - Type - Description - * - data + * - str - string - The serialized, hex-encoded data for 'txid' @@ -59,50 +59,53 @@ Result (if verbose is set to true) :: - { - "in_active_chain": b, (bool) Whether specified block is in the active chain or not (only present with explicit "blockhash" argument) - "hex" : "data", (string) The serialized, hex-encoded data for 'txid' - "txid" : "id", (string) The transaction id (same as provided) - "hash" : "id", (string) The transaction hash (differs from txid for witness transactions) - "size" : n, (numeric) The serialized transaction size - "vsize" : n, (numeric) The virtual transaction size (differs from size for witness transactions) - "weight" : n, (numeric) The transaction's weight (between vsize*4-3 and vsize*4) - "version" : n, (numeric) The version - "locktime" : ttt, (numeric) The lock time - "vin" : [ (array of json objects) - { - "txid": "id", (string) The transaction id - "vout": n, (numeric) - "scriptSig": { (json object) The script - "asm": "asm", (string) asm - "hex": "hex" (string) hex - }, - "sequence": n (numeric) The script sequence number - "txinwitness": ["hex", ...] (array of string) hex-encoded witness data (if any) - } - ,... + { (json object) + "in_active_chain" : true|false, (boolean) Whether specified block is in the active chain or not (only present with explicit "blockhash" argument) + "hex" : "hex", (string) The serialized, hex-encoded data for 'txid' + "txid" : "hex", (string) The transaction id (same as provided) + "hash" : "hex", (string) The transaction hash (differs from txid for witness transactions) + "size" : n, (numeric) The serialized transaction size + "vsize" : n, (numeric) The virtual transaction size (differs from size for witness transactions) + "weight" : n, (numeric) The transaction's weight (between vsize*4-3 and vsize*4) + "version" : n, (numeric) The version + "locktime" : xxx, (numeric) The lock time + "vin" : [ (json array) + { (json object) + "txid" : "hex", (string) The transaction id + "vout" : n, (numeric) The output number + "scriptSig" : { (json object) The script + "asm" : "str", (string) asm + "hex" : "hex" (string) hex + }, + "sequence" : n, (numeric) The script sequence number + "txinwitness" : [ (json array) + "hex", (string) hex-encoded witness data (if any) + ... + ] + }, + ... ], - "vout" : [ (array of json objects) - { - "value" : x.xxx, (numeric) The value in BTC - "n" : n, (numeric) index - "scriptPubKey" : { (json object) - "asm" : "asm", (string) the asm - "hex" : "hex", (string) the hex - "reqSigs" : n, (numeric) The required sigs - "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' - "addresses" : [ (json array of string) - "address" (string) bitcoin address - ,... - ] - } - } - ,... + "vout" : [ (json array) + { (json object) + "value" : n, (numeric) The value in BTC + "n" : n, (numeric) index + "scriptPubKey" : { (json object) + "asm" : "str", (string) the asm + "hex" : "str", (string) the hex + "reqSigs" : n, (numeric) The required sigs + "type" : "str", (string) The type, eg 'pubkeyhash' + "addresses" : [ (json array) + "str", (string) bitcoin address + ... + ] + } + }, + ... ], - "blockhash" : "hash", (string) the block hash - "confirmations" : n, (numeric) The confirmations - "blocktime" : ttt (numeric) The block time in seconds since epoch (Jan 1 1970 GMT) - "time" : ttt, (numeric) Same as "blocktime" + "blockhash" : "hex", (string) the block hash + "confirmations" : n, (numeric) The confirmations + "blocktime" : xxx, (numeric) The block time expressed in UNIX epoch time + "time" : n (numeric) Same as "blocktime" } Examples @@ -121,7 +124,7 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getrawtransaction", "params": ["mytxid", true] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawtransaction", "params": ["mytxid", true]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ :: diff --git a/reference/rpc/getreceivedbyaddress.rst b/reference/rpc/getreceivedbyaddress.rst index cb17041..9d40507 100644 --- a/reference/rpc/getreceivedbyaddress.rst +++ b/reference/rpc/getreceivedbyaddress.rst @@ -31,7 +31,7 @@ Result * - Name - Type - Description - * - amount + * - n - numeric - The total amount in BTC received at this address. @@ -43,17 +43,17 @@ Examples The amount from transactions with at least 1 confirmation:: - bitcoin-cli getreceivedbyaddress "1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX" + bitcoin-cli getreceivedbyaddress "bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl" The amount including unconfirmed transactions, zero confirmations:: - bitcoin-cli getreceivedbyaddress "1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX" 0 + bitcoin-cli getreceivedbyaddress "bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl" 0 The amount with at least 6 confirmations:: - bitcoin-cli getreceivedbyaddress "1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX" 6 + bitcoin-cli getreceivedbyaddress "bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl" 6 As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getreceivedbyaddress", "params": ["1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX", 6] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getreceivedbyaddress", "params": ["bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl", 6]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getreceivedbylabel.rst b/reference/rpc/getreceivedbylabel.rst index a83fdcf..b5612f2 100644 --- a/reference/rpc/getreceivedbylabel.rst +++ b/reference/rpc/getreceivedbylabel.rst @@ -31,7 +31,7 @@ Result * - Name - Type - Description - * - amount + * - n - numeric - The total amount in BTC received for this label. @@ -55,5 +55,5 @@ The amount with at least 6 confirmations:: As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getreceivedbylabel", "params": ["tabby", 6] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getreceivedbylabel", "params": ["tabby", 6]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getrpcinfo.rst b/reference/rpc/getrpcinfo.rst index e82655a..0041dde 100644 --- a/reference/rpc/getrpcinfo.rst +++ b/reference/rpc/getrpcinfo.rst @@ -13,14 +13,15 @@ Result :: - { - "active_commands" (array) All active commands - [ - { (object) Information about an active command - "method" (string) The name of the RPC command - "duration" (numeric) The running time in microseconds - },... - ] + { (json object) + "active_commands" : [ (json array) All active commands + { (json object) Information about an active command + "method" : "str", (string) The name of the RPC command + "duration" : n (numeric) The running time in microseconds + }, + ... + ], + "logpath" : "str" (string) The complete file path to the debug log } Examples @@ -35,5 +36,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getrpcinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrpcinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/gettransaction.rst b/reference/rpc/gettransaction.rst index 3cbfbf4..b7fcad0 100644 --- a/reference/rpc/gettransaction.rst +++ b/reference/rpc/gettransaction.rst @@ -4,7 +4,7 @@ gettransaction ============== -``gettransaction "txid" ( include_watchonly )`` +``gettransaction "txid" ( include_watchonly verbose )`` Get detailed information about in-wallet transaction @@ -18,48 +18,68 @@ The transaction id Argument #2 - include_watchonly ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**Type:** boolean, optional, default=false +**Type:** boolean, optional, default=true for watch-only wallets, otherwise false Whether to include watch-only addresses in balance calculation and details[] +Argument #3 - verbose +~~~~~~~~~~~~~~~~~~~~~ + +**Type:** boolean, optional, default=false + +Whether to include a `decoded` field containing the decoded transaction (equivalent to RPC decoderawtransaction) + Result ~~~~~~ :: - { - "amount" : x.xxx, (numeric) The transaction amount in BTC - "fee": x.xxx, (numeric) The amount of the fee in BTC. This is negative and only available for the - 'send' category of transactions. - "confirmations" : n, (numeric) The number of confirmations - "blockhash" : "hash", (string) The block hash - "blockindex" : xx, (numeric) The index of the transaction in the block that includes it - "blocktime" : ttt, (numeric) The time in seconds since epoch (1 Jan 1970 GMT) - "txid" : "transactionid", (string) The transaction id. - "time" : ttt, (numeric) The transaction time in seconds since epoch (1 Jan 1970 GMT) - "timereceived" : ttt, (numeric) The time received in seconds since epoch (1 Jan 1970 GMT) - "bip125-replaceable": "yes|no|unknown", (string) Whether this transaction could be replaced due to BIP125 (replace-by-fee); - may be unknown for unconfirmed transactions not in the mempool - "details" : [ - { - "address" : "address", (string) The bitcoin address involved in the transaction - "category" : (string) The transaction category. - "send" Transactions sent. - "receive" Non-coinbase transactions received. - "generate" Coinbase transactions received with more than 100 confirmations. - "immature" Coinbase transactions received with 100 or fewer confirmations. - "orphan" Orphaned coinbase transactions received. - "amount" : x.xxx, (numeric) The amount in BTC - "label" : "label", (string) A comment for the address/transaction, if any - "vout" : n, (numeric) the vout value - "fee": x.xxx, (numeric) The amount of the fee in BTC. This is negative and only available for the + { (json object) + "amount" : n, (numeric) The amount in BTC + "fee" : n, (numeric) The amount of the fee in BTC. This is negative and only available for the 'send' category of transactions. - "abandoned": xxx (bool) 'true' if the transaction has been abandoned (inputs are respendable). Only available for the + "confirmations" : n, (numeric) The number of confirmations for the transaction. Negative confirmations means the + transaction conflicted that many blocks ago. + "generated" : true|false, (boolean) Only present if transaction only input is a coinbase one. + "trusted" : true|false, (boolean) Only present if we consider transaction to be trusted and so safe to spend from. + "blockhash" : "hex", (string) The block hash containing the transaction. + "blockheight" : n, (numeric) The block height containing the transaction. + "blockindex" : n, (numeric) The index of the transaction in the block that includes it. + "blocktime" : xxx, (numeric) The block time expressed in UNIX epoch time. + "txid" : "hex", (string) The transaction id. + "walletconflicts" : [ (json array) Conflicting transaction ids. + "hex", (string) The transaction id. + ... + ], + "time" : xxx, (numeric) The transaction time expressed in UNIX epoch time. + "timereceived" : xxx, (numeric) The time received expressed in UNIX epoch time. + "comment" : "str", (string) If a comment is associated with the transaction, only present if not empty. + "bip125-replaceable" : "str", (string) ("yes|no|unknown") Whether this transaction could be replaced due to BIP125 (replace-by-fee); + may be unknown for unconfirmed transactions not in the mempool + "details" : [ (json array) + { (json object) + "involvesWatchonly" : true|false, (boolean) Only returns true if imported addresses were involved in transaction. + "address" : "str", (string) The bitcoin address involved in the transaction. + "category" : "str", (string) The transaction category. + "send" Transactions sent. + "receive" Non-coinbase transactions received. + "generate" Coinbase transactions received with more than 100 confirmations. + "immature" Coinbase transactions received with 100 or fewer confirmations. + "orphan" Orphaned coinbase transactions received. + "amount" : n, (numeric) The amount in BTC + "label" : "str", (string) A comment for the address/transaction, if any + "vout" : n, (numeric) the vout value + "fee" : n, (numeric) The amount of the fee in BTC. This is negative and only available for the + 'send' category of transactions. + "abandoned" : true|false (boolean) 'true' if the transaction has been abandoned (inputs are respendable). Only available for the 'send' category of transactions. - } - ,... + }, + ... ], - "hex" : "data" (string) Raw data for transaction + "hex" : "hex", (string) Raw data for transaction + "decoded" : { (json object) Optional, the decoded transaction (only present when `verbose` is passed) + ... Equivalent to the RPC decoderawtransaction method, or the RPC getrawtransaction method when `verbose` is passed. + } } Examples @@ -78,5 +98,9 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "gettransaction", "params": ["1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + bitcoin-cli gettransaction "1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d" false true + +:: + + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "gettransaction", "params": ["1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/gettxout.rst b/reference/rpc/gettxout.rst index 9b397e9..366f511 100644 --- a/reference/rpc/gettxout.rst +++ b/reference/rpc/gettxout.rst @@ -34,21 +34,21 @@ Result :: - { - "bestblock": "hash", (string) The hash of the block at the tip of the chain - "confirmations" : n, (numeric) The number of confirmations - "value" : x.xxx, (numeric) The transaction value in BTC - "scriptPubKey" : { (json object) - "asm" : "code", (string) - "hex" : "hex", (string) - "reqSigs" : n, (numeric) Number of required signatures - "type" : "pubkeyhash", (string) The type, eg pubkeyhash - "addresses" : [ (array of string) array of bitcoin addresses - "address" (string) bitcoin address - ,... - ] + { (json object) + "bestblock" : "hex", (string) The hash of the block at the tip of the chain + "confirmations" : n, (numeric) The number of confirmations + "value" : n, (numeric) The transaction value in BTC + "scriptPubKey" : { (json object) + "asm" : "hex", (string) + "hex" : "hex", (string) + "reqSigs" : n, (numeric) Number of required signatures + "type" : "hex", (string) The type, eg pubkeyhash + "addresses" : [ (json array) array of bitcoin addresses + "str", (string) bitcoin address + ... + ] }, - "coinbase" : true|false (boolean) Coinbase or not + "coinbase" : true|false (boolean) Coinbase or not } Examples @@ -67,5 +67,5 @@ View the details:: As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "gettxout", "params": ["txid", 1] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "gettxout", "params": ["txid", 1]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/gettxoutproof.rst b/reference/rpc/gettxoutproof.rst index c5af663..ac77b36 100644 --- a/reference/rpc/gettxoutproof.rst +++ b/reference/rpc/gettxoutproof.rst @@ -18,7 +18,7 @@ Argument #1 - txids **Type:** json array, required -A json array of txids to filter +The txids to filter :: @@ -43,7 +43,7 @@ Result * - Name - Type - Description - * - data + * - str - string - A string that is a serialized, hex-encoded data for the proof. diff --git a/reference/rpc/gettxoutsetinfo.rst b/reference/rpc/gettxoutsetinfo.rst index 2e08b93..12edd32 100644 --- a/reference/rpc/gettxoutsetinfo.rst +++ b/reference/rpc/gettxoutsetinfo.rst @@ -4,26 +4,33 @@ gettxoutsetinfo =============== -``gettxoutsetinfo`` +``gettxoutsetinfo ( "hash_type" )`` Returns statistics about the unspent transaction output set. Note this call may take some time. +Argument #1 - hash_type +~~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** string, optional, default=hash_serialized_2 + +Which UTXO set hash should be calculated. Options: 'hash_serialized_2' (the legacy algorithm), 'none'. + Result ~~~~~~ :: - { - "height":n, (numeric) The current block height (index) - "bestblock": "hex", (string) The hash of the block at the tip of the chain - "transactions": n, (numeric) The number of transactions with unspent outputs - "txouts": n, (numeric) The number of unspent transaction outputs - "bogosize": n, (numeric) A meaningless metric for UTXO set size - "hash_serialized_2": "hash", (string) The serialized hash - "disk_size": n, (numeric) The estimated size of the chainstate on disk - "total_amount": x.xxx (numeric) The total amount + { (json object) + "height" : n, (numeric) The current block height (index) + "bestblock" : "hex", (string) The hash of the block at the tip of the chain + "transactions" : n, (numeric) The number of transactions with unspent outputs + "txouts" : n, (numeric) The number of unspent transaction outputs + "bogosize" : n, (numeric) A meaningless metric for UTXO set size + "hash_serialized_2" : "hex", (string) The serialized hash (only present if 'hash_serialized_2' hash_type is chosen) + "disk_size" : n, (numeric) The estimated size of the chainstate on disk + "total_amount" : n (numeric) The total amount } Examples @@ -38,5 +45,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "gettxoutsetinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "gettxoutsetinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/getunconfirmedbalance.rst b/reference/rpc/getunconfirmedbalance.rst index 5484257..6006988 100644 --- a/reference/rpc/getunconfirmedbalance.rst +++ b/reference/rpc/getunconfirmedbalance.rst @@ -6,5 +6,19 @@ getunconfirmedbalance ``getunconfirmedbalance`` -Returns the server's total unconfirmed balance +DEPRECATED +Identical to getbalances().mine.untrusted_pending + +Result +~~~~~~ + +.. list-table:: + :header-rows: 1 + + * - Name + - Type + - Description + * - n + - numeric + - The balance diff --git a/reference/rpc/getwalletinfo.rst b/reference/rpc/getwalletinfo.rst index 076c676..384979c 100644 --- a/reference/rpc/getwalletinfo.rst +++ b/reference/rpc/getwalletinfo.rst @@ -13,20 +13,27 @@ Result :: - { - "walletname": xxxxx, (string) the wallet name - "walletversion": xxxxx, (numeric) the wallet version - "balance": xxxxxxx, (numeric) the total confirmed balance of the wallet in BTC - "unconfirmed_balance": xxx, (numeric) the total unconfirmed balance of the wallet in BTC - "immature_balance": xxxxxx, (numeric) the total immature balance of the wallet in BTC - "txcount": xxxxxxx, (numeric) the total number of transactions in the wallet - "keypoololdest": xxxxxx, (numeric) the timestamp (seconds since Unix epoch) of the oldest pre-generated key in the key pool - "keypoolsize": xxxx, (numeric) how many new keys are pre-generated (only counts external keys) - "keypoolsize_hd_internal": xxxx, (numeric) how many new keys are pre-generated for internal use (used for change outputs, only appears if the wallet is using this feature, otherwise external keys are used) - "unlocked_until": ttt, (numeric) the timestamp in seconds since epoch (midnight Jan 1 1970 GMT) that the wallet is unlocked for transfers, or 0 if the wallet is locked - "paytxfee": x.xxxx, (numeric) the transaction fee configuration, set in BTC/kB - "hdseedid": "" (string, optional) the Hash160 of the HD seed (only present when HD is enabled) - "private_keys_enabled": true|false (boolean) false if privatekeys are disabled for this wallet (enforced watch-only wallet) + { (json object) + "walletname" : "str", (string) the wallet name + "walletversion" : n, (numeric) the wallet version + "format" : "str", (string) the database format (bdb or sqlite) + "balance" : n, (numeric) DEPRECATED. Identical to getbalances().mine.trusted + "unconfirmed_balance" : n, (numeric) DEPRECATED. Identical to getbalances().mine.untrusted_pending + "immature_balance" : n, (numeric) DEPRECATED. Identical to getbalances().mine.immature + "txcount" : n, (numeric) the total number of transactions in the wallet + "keypoololdest" : xxx, (numeric) the UNIX epoch time of the oldest pre-generated key in the key pool. Legacy wallets only. + "keypoolsize" : n, (numeric) how many new keys are pre-generated (only counts external keys) + "keypoolsize_hd_internal" : n, (numeric) how many new keys are pre-generated for internal use (used for change outputs, only appears if the wallet is using this feature, otherwise external keys are used) + "unlocked_until" : xxx, (numeric, optional) the UNIX epoch time until which the wallet is unlocked for transfers, or 0 if the wallet is locked (only present for passphrase-encrypted wallets) + "paytxfee" : n, (numeric) the transaction fee configuration, set in BTC/kvB + "hdseedid" : "hex", (string, optional) the Hash160 of the HD seed (only present when HD is enabled) + "private_keys_enabled" : true|false, (boolean) false if privatekeys are disabled for this wallet (enforced watch-only wallet) + "avoid_reuse" : true|false, (boolean) whether this wallet tracks clean/dirty coins in terms of reuse + "scanning" : { (json object) current scanning details, or false if no scan is in progress + "duration" : n, (numeric) elapsed seconds since scan start + "progress" : n (numeric) scanning progress percentage [0.0, 1.0] + }, + "descriptors" : true|false (boolean) whether this wallet uses descriptors for scriptPubKey management } Examples @@ -41,5 +48,5 @@ Examples :: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getwalletinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getwalletinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/help.rst b/reference/rpc/help.rst index f3353b9..31959e7 100644 --- a/reference/rpc/help.rst +++ b/reference/rpc/help.rst @@ -24,7 +24,7 @@ Result * - Name - Type - Description - * - text + * - str - string - The help text diff --git a/reference/rpc/importaddress.rst b/reference/rpc/importaddress.rst index 26fb8fa..8e10df7 100644 --- a/reference/rpc/importaddress.rst +++ b/reference/rpc/importaddress.rst @@ -13,9 +13,13 @@ may report that the imported address exists but related transactions are still m If you have the full public key, you should call importpubkey instead of this. +Hint: use importmulti to import more than one address. + Note: If you import a non-standard raw script in hex form, outputs sending to it will be treated as change, and not show up in many RPCs. +Note: Use "getwalletinfo" to query the scanning progress. + Argument #1 - address ~~~~~~~~~~~~~~~~~~~~~ @@ -44,6 +48,13 @@ Argument #4 - p2sh Add the P2SH version of the script as well +Result +~~~~~~ + +:: + + null (json null) + Examples ~~~~~~~~ @@ -60,5 +71,5 @@ Import using a label without rescan:: As a JSON-RPC call:: - curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "importaddress", "params": ["myaddress", "testing", false] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ + curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "importaddress", "params": ["myaddress", "testing", false]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/ diff --git a/reference/rpc/importdescriptors.rst b/reference/rpc/importdescriptors.rst new file mode 100644 index 0000000..3e7ca1e --- /dev/null +++ b/reference/rpc/importdescriptors.rst @@ -0,0 +1,72 @@ +.. This file is licensed under the MIT License (MIT) available on + http://opensource.org/licenses/MIT. + +importdescriptors +================= + +``importdescriptors "requests"`` + +Import descriptors. This will trigger a rescan of the blockchain based on the earliest timestamp of all descriptors being imported. Requires a new wallet backup. + +Note: This call can take over an hour to complete if using an early timestamp; during that time, other rpc calls +may report that the imported keys, addresses or scripts exist but related transactions are still missing. + +Argument #1 - requests +~~~~~~~~~~~~~~~~~~~~~~ + +**Type:** json array, required + +Data to be imported + +:: + + [ + { (json object) + "desc": "str", (string, required) Descriptor to import. + "active": bool, (boolean, optional, default=false) Set this descriptor to be the active descriptor for the corresponding output type/externality + "range": n or [n,n], (numeric or array) If a ranged descriptor is used, this specifies the end or the range (in the form [begin,end]) to import + "next_index": n, (numeric) If a ranged descriptor is set to active, this specifies the next index to generate addresses from + "timestamp": timestamp | "now", (integer / string, required) Time from which to start rescanning the blockchain for this descriptor, in UNIX epoch time + Use the string "now" to substitute the current synced blockchain time. + "now" can be specified to bypass scanning, for outputs which are known to never have been used, and + 0 can be specified to scan the entire blockchain. Blocks up to 2 hours before the earliest timestamp + of all descriptors being imported will be scanned. + "internal": bool, (boolean, optional, default=false) Whether matching outputs should be treated as not incoming payments (e.g. change) + "label": "str", (string, optional, default='') Label to assign to the address, only allowed with internal=false + }, + ... + ] + +Result +~~~~~~ + +:: + + [ (json array) Response is an array with the same size as the input that has the execution result + { (json object) + "success" : true|false, (boolean) + "warnings" : [ (json array, optional) + "str", (string) + ... + ], + "error" : { (json object, optional) + ... JSONRPC error + } + }, + ... + ] + +Examples +~~~~~~~~ + + +.. highlight:: shell + +:: + + bitcoin-cli importdescriptors '[{ "desc": "", "timestamp":1455191478, "internal": true }, { "desc": "", "label": "example 2", "timestamp": 1455191480 }]' + +:: + + bitcoin-cli importdescriptors '[{ "desc": "", "timestamp":1455191478, "active": true, "range": [0,100], "label": "" }]' + diff --git a/reference/rpc/importmulti.rst b/reference/rpc/importmulti.rst index 632d7fd..83535f3 100644 --- a/reference/rpc/importmulti.rst +++ b/reference/rpc/importmulti.rst @@ -13,7 +13,9 @@ If an address/script is imported without all of the private keys required to spe Conversely, if all the private keys are provided and the address/script is spendable, the watchonly option must be set to false, or a warning will be returned. Note: This call can take over an hour to complete if rescan is true, during that time, other rpc calls -may report that the imported keys, addresses or scripts exists but related transactions are still missing. +may report that the imported keys, addresses or scripts exist but related transactions are still missing. + +Note: Use "getwalletinfo" to query the scanning progress. Argument #1 - requests ~~~~~~~~~~~~~~~~~~~~~~ @@ -21,6 +23,14 @@ Argument #1 - requests **Type:** json array, required Data to be imported + "range": n or [n,n], (numeric or array) If a ranged descriptor is used, this specifies the end or the range (in the form [begin,end]) to import + "internal": bool, (boolean, optional, default=false) Stating whether matching outputs should be treated as not incoming payments (also known as change) + "watchonly": bool, (boolean, optional, default=false) Stating whether matching outputs should be considered watchonly. + "label": "str", (string, optional, default='') Label to assign to the address, only allowed with internal=false + "keypool": bool, (boolean, optional, default=false) Stating whether imported public keys should be added to the keypool for when users request new addresses. Only allowed when wallet private keys are disabled + }, + ... + ] :: @@ -28,7 +38,7 @@ Data to be imported { (json object) "desc": "str", (string) Descriptor to import. If using descriptor, do not also provide address/scriptPubKey, scripts, or pubkeys "scriptPubKey": "