diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..74f1bcca88 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + # Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.) + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fc69902048..ec01a5ad1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: include: - name: linux-32-bit host: i686-pc-linux-gnu - os: ubuntu-22.04 + os: ubuntu-20.04 packages: g++-multilib check-security: false check-symbols: false @@ -43,12 +43,12 @@ jobs: - name: linux-64-bit host: x86_64-pc-linux-gnu - os: ubuntu-22.04 + os: ubuntu-20.04 packages: python3 check-security: false check-symbols: false dep-opts: "" - config-opts: "--enable-glibc-back-compat LDFLAGS=-static-libstdc++" + config-opts: "--enable-sse2 --enable-glibc-back-compat LDFLAGS=-static-libstdc++" goal: install - name: windows-64-bit @@ -63,7 +63,7 @@ jobs: check-security: false check-symbols: false dep-opts: "" - config-opts: "LDFLAGS=-static-libgcc" + config-opts: "--enable-sse2 LDFLAGS=-static-libgcc" goal: install - name: macos-64-bit @@ -73,13 +73,13 @@ jobs: check-security: false check-symbols: false dep-opts: "" - config-opts: "" + config-opts: "--enable-sse2" goal: deploy sdk: 12.2-12B45b - name: linux-arm-32-bit host: arm-linux-gnueabihf - os: ubuntu-22.04 + os: ubuntu-20.04 packages: g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf check-security: false check-symbols: false @@ -89,7 +89,7 @@ jobs: - name: linux-arm-64-bit host: aarch64-linux-gnu - os: ubuntu-22.04 + os: ubuntu-20.04 packages: g++-aarch64-linux-gnu binutils-aarch64-linux-gnu check-security: false check-symbols: false @@ -119,11 +119,11 @@ jobs: run: ${{ matrix.postinstall }} - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.7 - name: SDK cache if: ${{ matrix.sdk }} - uses: actions/cache@v3 + uses: actions/cache@v4.0.2 env: cache-name: sdk with: @@ -139,7 +139,7 @@ jobs: tar -C depends/SDKs -xzvf depends/sdk-sources/Xcode-${{ matrix.sdk }}-extracted-SDK-with-libcxx-headers.tar.gz - name: Dependency cache - uses: actions/cache@v3 + uses: actions/cache@v4.0.2 env: cache-name: depends with: @@ -164,7 +164,7 @@ jobs: run: make -C src check-symbols - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4.4.0 with: name: blackmore-${{ github.sha }}-${{ matrix.name }} path: | @@ -174,6 +174,6 @@ jobs: retention-days: 7 - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4.1.8 with: name: blackmore-${{ github.sha }}-${{ matrix.name }} diff --git a/.github/workflows/docker_build_push_26.yml b/.github/workflows/docker_build_push_26.yml new file mode 100644 index 0000000000..04979da95d --- /dev/null +++ b/.github/workflows/docker_build_push_26.yml @@ -0,0 +1,20 @@ +name: Build and Push Docker - 26.x +on: [push] +jobs: + test: + name: Build and Push Docker - 26.x + runs-on: ubuntu-20.04 + steps: + - name: Checkout code + uses: actions/checkout@v4.1.7 + with: + repository: BlackcoinDev/docker-blk + ref: main + - name: Set environment variables + run: echo "GIT_CURRENT_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + - name: Show GITHUB_ENV content + run: cat $GITHUB_ENV + - name: Login to DockerHub Registry + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login --username "${{ secrets.DOCKER_USERNAME }}" --password-stdin + - name: Run build script + run: ./gh-build-26.sh \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b5b45eb3f..afafbb790a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## v26.2.0-beta-2 (2024-XX-XX) +- Activated SegWit on testnet on Sep 23, 2024 +- Changed miner activation window parameters for BIP9 soft fork deployment +- Updated derivation path with the BIP44 coin type for descriptor wallets +- Abandon coinstake transactions when orphaned (Peercoin commit `f6896a4`) +- Show P2PK addresses for coinstake transactions in RPC +- Show the reward value for coinstake transactions in RPC + +## v26.2.0-beta-1 (2024-08-07) +- Updated to Bitcoin Core 26.2 +- Activated Segwit on regtest +- New mempool.dat format (backport of Core's PR28207) + ## v26.1.0-beta-1 (2024-05-24) - Updated to Bitcoin Core 26.1 - Create V2 transactions by default diff --git a/COPYING b/COPYING index bd3d73ad32..07f4b77551 100644 --- a/COPYING +++ b/COPYING @@ -2,7 +2,7 @@ The MIT License (MIT) Copyright (c) 2009-2024 The Bitcoin Core developers Copyright (c) 2009-2024 Bitcoin Developers -Copyright (c) 2011-2023 Peercoin developers +Copyright (c) 2011-2024 Peercoin developers Copyright (c) 2013-2014 The NovaCoin developers Copyright (c) 2016-2023 The Qtum developers Copyright (c) 2014-2018 The Blackcoin developers diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt index 1b1d2c7b5b..c446274473 100644 --- a/contrib/seeds/nodes_main.txt +++ b/contrib/seeds/nodes_main.txt @@ -1,55 +1,30 @@ # List of fixed seed nodes for main network # IPv4 nodes +185.197.251.199:15714 +109.123.251.87:15714 +84.46.245.181:15714 167.86.117.103:15714 -167.86.117.144:15714 167.86.117.143:15714 +167.86.117.144:15714 45.137.91.173:15714 -5.189.160.139:15714 -81.0.246.79:15714 -5.189.159.220:15714 -161.97.80.103:15714 45.138.55.128:15714 -45.138.55.129:15714 45.138.55.130:15714 -45.138.55.131:15714 -45.138.55.132:15714 -45.138.55.133:15714 -45.138.55.134:15714 -45.138.55.135:15714 -116.86.146.44:15714 -118.195.208.33:15714 -119.45.242.241:15714 -91.121.217.71:15714 -216.39.250.91:15714 -172.99.189.198:15714 -50.47.255.100:15714 # IPv6 nodes -[2a02:c207:2041:3853::1]:15714 +[2a02:c206:2210:3221::1]:15714 +[2a02:c206:2210:3222::1]:15714 +[2a02:c206:2210:3223::1]:15714 [2a02:c207:2056:6532::1]:15714 -[2a02:c207:2056:6534::1]:15714 [2a02:c207:2056:6533::1]:15714 -[2a02:c207:2110:9257::1]:15714 -[2a02:c204:2110:9258::1]:15714 -[2a02:c207:2110:9259::1]:15714 -[2a10:3781:525:1::210]:15714 -[2a10:3781:525:1::201]:15714 +[2a02:c207:2056:6534::1]:15714 +[2a10:3781:525:1::1]:15714 [2a10:3781:525:1::210]:15714 -[2a10:3781:525:1::201]:15714 -[2a10:3781:525:1::211]:15714 -[2a10:3781:525:1::212]:15714 -[2a10:3781:525:1::213]:15714 -[2a10:3781:525:1::215]:15714 -[2a10:3781:525:6::10]:15714 -[2a10:3781:525:6::11]:15714 -[2602:fec3:2:10::9:91]:15714 -[2001:41d0:303:6855::501]:15714 -[2604:86c0:f201:6::10:91]:15714 -[2a01:5a8:302:f394:5870:53f7:cb1f:9cfb]:15714 -[2a01:5a8:302:f394:8cd0:93fc:9953:3223]:15714 -[2a01:5a8:302:f394:5d2:e182:3f6:b054]:15714 +[2a10:3781:525::1]:15714 + # Onion nodes jgsfxfwhm7vdabt5dxl42il7uenvysknyedtzuaiajo7w5bv5jf2jpid.onion:15714 +hqnztorcojz5gsomamrxgqvoriitu4dfeze46hclmwd5zht4eic6jfid.onion:15714 +5evnjurdgzorvoty6qnrgqnmb7xot237b4rafgnt3t2vth2hy2bju7id.onion:15714 diff --git a/contrib/seeds/nodes_test.txt b/contrib/seeds/nodes_test.txt index 78ef93aca5..936f9a5a20 100644 --- a/contrib/seeds/nodes_test.txt +++ b/contrib/seeds/nodes_test.txt @@ -1,39 +1,30 @@ # List of fixed seed nodes for testnet # IPv4 nodes +185.197.251.199:25714 +109.123.251.87:25714 +84.46.245.181:25714 167.86.117.103:25714 -167.86.117.144:25714 167.86.117.143:25714 +167.86.117.144:25714 45.137.91.173:25714 -5.189.160.139:25714 -81.0.246.79:25714 -5.189.159.220:25714 -161.97.80.103:25714 45.138.55.128:25714 -45.138.55.129:25714 45.138.55.130:25714 -45.138.55.131:25714 -45.138.55.132:25714 -45.138.55.133:25714 -45.138.55.134:25714 -45.138.55.135:25714 + # IPv6 nodes -[2a02:c207:2041:3853::1]:25714 +[2a02:c206:2210:3221::1]:25714 +[2a02:c206:2210:3222::1]:25714 +[2a02:c206:2210:3223::1]:25714 [2a02:c207:2056:6532::1]:25714 -[2a02:c207:2056:6534::1]:25714 [2a02:c207:2056:6533::1]:25714 -[2a02:c207:2110:9257::1]:25714 -[2a02:c204:2110:9258::1]:25714 -[2a02:c207:2110:9259::1]:25714 +[2a02:c207:2056:6534::1]:25714 +[2a10:3781:525:1::1]:25714 [2a10:3781:525:1::210]:25714 -[2a10:3781:525:1::201]:25714 -[2a10:3781:525:1::211]:25714 -[2a10:3781:525:1::212]:25714 -[2a10:3781:525:1::213]:25714 -[2a10:3781:525:1::215]:25714 -[2a10:3781:525:6::10]:25714 -[2a10:3781:525:6::11]:25714 +[2a10:3781:525::1]:25714 + # Onion nodes tzpgz5hg5d2xxipzgy6fuwhkcxun2at3z37bc53k3krerwo4dhwk4xad.onion:25714 +s3fhynnohiq666qor6tegsxcxzsirgecp425hc3nwfcsqdurxtsazzyd.onion:25714 +v2zvr54qt5zf677vnczxzekyqn4hk6efpvx3u77vq7iwhulf2ajmsbid.onion:25714 \ No newline at end of file diff --git a/doc/release-notes.md b/doc/release-notes.md index 85bf57c500..fa6162a4f4 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -5,7 +5,7 @@ Bitcoin Core version 27.2 is now available from: -This release includes various bug fixes and performance +This release includes new features, various bug fixes and performance improvements, as well as updated translations. Please report bugs using the issue tracker at GitHub: @@ -69,7 +69,7 @@ Notable changes - #30283 upnp: fix build with miniupnpc 2.2.8 - #30633 Fixes for GCC 15 compatibility -### CI +### Misc - #30193 ci: move ASan job to GitHub Actions from Cirrus CI - #30299 ci: remove unused bcc variable from workflow diff --git a/doc/release-notes/release-notes-26.1.md b/doc/release-notes/release-notes-26.1.md new file mode 100644 index 0000000000..cb64d1bbe8 --- /dev/null +++ b/doc/release-notes/release-notes-26.1.md @@ -0,0 +1,105 @@ +26.1 Release Notes +================== + +Bitcoin Core version 26.1 is now available from: + + + +This release includes various bug fixes and performance +improvements, as well as updated translations. + +Please report bugs using the issue tracker at GitHub: + + + +To receive security and update notifications, please subscribe to: + + + +How to Upgrade +============== + +If you are running an older version, shut it down. Wait until it has completely +shut down (which might take a few minutes in some cases), then run the +installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on macOS) +or `bitcoind`/`bitcoin-qt` (on Linux). + +Upgrading directly from a version of Bitcoin Core that has reached its EOL is +possible, but it might take some time if the data directory needs to be migrated. Old +wallet versions of Bitcoin Core are generally supported. + +Compatibility +============== + +Bitcoin Core is supported and extensively tested on operating systems +using the Linux kernel, macOS 11.0+, and Windows 7 and newer. Bitcoin +Core should also work on most other Unix-like systems but is not as +frequently tested on them. It is not recommended to use Bitcoin Core on +unsupported systems. + +Notable changes +=============== + +### Wallet + +- #28994 wallet: skip BnB when SFFO is enabled +- #28920 wallet: birth time update during tx scanning +- #29176 wallet: Fix use-after-free in WalletBatch::EraseRecords +- #29510 wallet: getrawchangeaddress and getnewaddress failures should not affect keypools for descriptor wallets + +### RPC + +- #29003 rpc: fix getrawtransaction segfault +- #28784 rpc: keep .cookie file if it was not generated + +### Logs + +- #29227 log mempool loading progress + +### P2P and network changes + +- #29200 net: create I2P sessions using both ECIES-X25519 and ElGamal encryption +- #29412 p2p: Don't process mutated blocks +- #29524 p2p: Don't consider blocks mutated if they don't connect to known prev block + +### Build + +- #29127 Use hardened runtime on macOS release builds. +- #29195 build: Fix -Xclang -internal-isystem option + +### CI + +- #28992 ci: Use Ubuntu 24.04 Noble for asan,tsan,tidy,fuzz +- #29080 ci: Set HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK to avoid unrelated failures +- #29610 ci: Fix "macOS native" job + +### Miscellaneous + +- #28391 refactor: Simplify CTxMempool/BlockAssembler fields, remove some external mapTx access +- #29179 test: wallet rescan with reorged parent + IsFromMe child in mempool +- #28791 snapshots: don't core dump when running -checkblockindex after loadtxoutset +- #29357 test: Drop x modifier in fsbridge::fopen call for MinGW builds +- #29529 fuzz: restrict fopencookie usage to Linux & FreeBSD + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- dergoegge +- fanquake +- furszy +- glozow +- Greg Sanders +- Hennadii Stepanov +- Jon Atack +- MarcoFalke +- Mark Friedenbach +- Martin Zumsande +- Murch +- Roman Zeyde +- stickies-v +- UdjinM6 + +As well as to everyone that helped with translations on +[Transifex](https://www.transifex.com/bitcoin/bitcoin/). diff --git a/src/addresstype.cpp b/src/addresstype.cpp index 3f7b3c6527..082caff915 100644 --- a/src/addresstype.cpp +++ b/src/addresstype.cpp @@ -105,9 +105,16 @@ bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet) } case TxoutType::MULTISIG: case TxoutType::NULL_DATA: - case TxoutType::NONSTANDARD: + case TxoutType::NONSTANDARD: { addressRet = CNoDestination(scriptPubKey); + + // Blackcoin: Allow non-standard type with empty scriptPubKey + if (scriptPubKey.empty()) { + return true; + } + return false; + } } // no default case, so the compiler can warn about missing cases assert(false); } diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index 02788817ad..ca07f374bf 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -7,87 +7,50 @@ * Each line contains a BIP155 serialized (networkID, addr, port) tuple. */ static const uint8_t chainparams_seed_main[] = { + 0x01,0x04,0xb9,0xc5,0xfb,0xc7,0x3d,0x62, + 0x01,0x04,0x6d,0x7b,0xfb,0x57,0x3d,0x62, + 0x01,0x04,0x54,0x2e,0xf5,0xb5,0x3d,0x62, 0x01,0x04,0xa7,0x56,0x75,0x67,0x3d,0x62, - 0x01,0x04,0xa7,0x56,0x75,0x90,0x3d,0x62, 0x01,0x04,0xa7,0x56,0x75,0x8f,0x3d,0x62, + 0x01,0x04,0xa7,0x56,0x75,0x90,0x3d,0x62, 0x01,0x04,0x2d,0x89,0x5b,0xad,0x3d,0x62, - 0x01,0x04,0x05,0xbd,0xa0,0x8b,0x3d,0x62, - 0x01,0x04,0x51,0x00,0xf6,0x4f,0x3d,0x62, - 0x01,0x04,0x05,0xbd,0x9f,0xdc,0x3d,0x62, - 0x01,0x04,0xa1,0x61,0x50,0x67,0x3d,0x62, 0x01,0x04,0x2d,0x8a,0x37,0x80,0x3d,0x62, - 0x01,0x04,0x2d,0x8a,0x37,0x81,0x3d,0x62, 0x01,0x04,0x2d,0x8a,0x37,0x82,0x3d,0x62, - 0x01,0x04,0x2d,0x8a,0x37,0x83,0x3d,0x62, - 0x01,0x04,0x2d,0x8a,0x37,0x84,0x3d,0x62, - 0x01,0x04,0x2d,0x8a,0x37,0x85,0x3d,0x62, - 0x01,0x04,0x2d,0x8a,0x37,0x86,0x3d,0x62, - 0x01,0x04,0x2d,0x8a,0x37,0x87,0x3d,0x62, - 0x01,0x04,0x74,0x56,0x92,0x2c,0x3d,0x62, - 0x01,0x04,0x76,0xc3,0xd0,0x21,0x3d,0x62, - 0x01,0x04,0x77,0x2d,0xf2,0xf1,0x3d,0x62, - 0x01,0x04,0x5b,0x79,0xd9,0x47,0x3d,0x62, - 0x01,0x04,0xd8,0x27,0xfa,0x5b,0x3d,0x62, - 0x01,0x04,0xac,0x63,0xbd,0xc6,0x3d,0x62, - 0x01,0x04,0x32,0x2f,0xff,0x64,0x3d,0x62, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x41,0x38,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, + 0x02,0x10,0x2a,0x02,0xc2,0x06,0x22,0x10,0x32,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, + 0x02,0x10,0x2a,0x02,0xc2,0x06,0x22,0x10,0x32,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, + 0x02,0x10,0x2a,0x02,0xc2,0x06,0x22,0x10,0x32,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x21,0x10,0x92,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, - 0x02,0x10,0x2a,0x02,0xc2,0x04,0x21,0x10,0x92,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x21,0x10,0x92,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x3d,0x62, + 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, + 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x11,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x12,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x13,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x15,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3d,0x62, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x3d,0x62, - 0x02,0x10,0x26,0x02,0xfe,0xc3,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x91,0x3d,0x62, - 0x02,0x10,0x20,0x01,0x41,0xd0,0x03,0x03,0x68,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,0x3d,0x62, - 0x02,0x10,0x26,0x04,0x86,0xc0,0xf2,0x01,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x91,0x3d,0x62, - 0x02,0x10,0x2a,0x01,0x05,0xa8,0x03,0x02,0xf3,0x94,0x58,0x70,0x53,0xf7,0xcb,0x1f,0x9c,0xfb,0x3d,0x62, - 0x02,0x10,0x2a,0x01,0x05,0xa8,0x03,0x02,0xf3,0x94,0x8c,0xd0,0x93,0xfc,0x99,0x53,0x32,0x23,0x3d,0x62, - 0x02,0x10,0x2a,0x01,0x05,0xa8,0x03,0x02,0xf3,0x94,0x05,0xd2,0xe1,0x82,0x03,0xf6,0xb0,0x54,0x3d,0x62, + 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3d,0x62, 0x04,0x20,0x49,0xa4,0x5b,0x96,0xc7,0x67,0xea,0x30,0x06,0x7d,0x1d,0xd7,0xcd,0x21,0x7f,0xa1,0x1b,0x5c,0x49,0x4d,0xc1,0x07,0x3c,0xd0,0x08,0x02,0x5d,0xfb,0x74,0x35,0xea,0x4b,0x3d,0x62, + 0x04,0x20,0x3c,0x1b,0x99,0xba,0x22,0x72,0x73,0xd3,0x49,0xcc,0x03,0x23,0x73,0x42,0xae,0x8a,0x11,0x3a,0x70,0x65,0x26,0x49,0xcf,0x1c,0x4b,0x65,0x87,0xdc,0x9e,0x7c,0x22,0x05,0x3d,0x62, + 0x04,0x20,0xe9,0x2a,0xd4,0xd2,0x23,0x36,0x5d,0x1a,0xba,0x78,0xf4,0x1b,0x13,0x41,0xac,0x0f,0xee,0xe9,0xeb,0x7f,0x0f,0x22,0x02,0x99,0xb3,0xdc,0xf5,0x59,0x9f,0x47,0xc6,0x82,0x3d,0x62, }; static const uint8_t chainparams_seed_test[] = { + 0x01,0x04,0xb9,0xc5,0xfb,0xc7,0x64,0x72, + 0x01,0x04,0x6d,0x7b,0xfb,0x57,0x64,0x72, + 0x01,0x04,0x54,0x2e,0xf5,0xb5,0x64,0x72, 0x01,0x04,0xa7,0x56,0x75,0x67,0x64,0x72, - 0x01,0x04,0xa7,0x56,0x75,0x90,0x64,0x72, 0x01,0x04,0xa7,0x56,0x75,0x8f,0x64,0x72, + 0x01,0x04,0xa7,0x56,0x75,0x90,0x64,0x72, 0x01,0x04,0x2d,0x89,0x5b,0xad,0x64,0x72, - 0x01,0x04,0x05,0xbd,0xa0,0x8b,0x64,0x72, - 0x01,0x04,0x51,0x00,0xf6,0x4f,0x64,0x72, - 0x01,0x04,0x05,0xbd,0x9f,0xdc,0x64,0x72, - 0x01,0x04,0xa1,0x61,0x50,0x67,0x64,0x72, 0x01,0x04,0x2d,0x8a,0x37,0x80,0x64,0x72, - 0x01,0x04,0x2d,0x8a,0x37,0x81,0x64,0x72, 0x01,0x04,0x2d,0x8a,0x37,0x82,0x64,0x72, - 0x01,0x04,0x2d,0x8a,0x37,0x83,0x64,0x72, - 0x01,0x04,0x2d,0x8a,0x37,0x84,0x64,0x72, - 0x01,0x04,0x2d,0x8a,0x37,0x85,0x64,0x72, - 0x01,0x04,0x2d,0x8a,0x37,0x86,0x64,0x72, - 0x01,0x04,0x2d,0x8a,0x37,0x87,0x64,0x72, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x41,0x38,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, + 0x02,0x10,0x2a,0x02,0xc2,0x06,0x22,0x10,0x32,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, + 0x02,0x10,0x2a,0x02,0xc2,0x06,0x22,0x10,0x32,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, + 0x02,0x10,0x2a,0x02,0xc2,0x06,0x22,0x10,0x32,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x21,0x10,0x92,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, - 0x02,0x10,0x2a,0x02,0xc2,0x04,0x21,0x10,0x92,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, - 0x02,0x10,0x2a,0x02,0xc2,0x07,0x21,0x10,0x92,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, + 0x02,0x10,0x2a,0x02,0xc2,0x07,0x20,0x56,0x65,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, + 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x64,0x72, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x64,0x72, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x11,0x64,0x72, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x12,0x64,0x72, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x13,0x64,0x72, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x15,0x64,0x72, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x64,0x72, - 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x64,0x72, + 0x02,0x10,0x2a,0x10,0x37,0x81,0x05,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x64,0x72, 0x04,0x20,0x9e,0x5e,0x6c,0xf4,0xe6,0xe8,0xf5,0x7b,0xa1,0xf9,0x36,0x3c,0x5a,0x58,0xea,0x15,0xe8,0xdd,0x02,0x7b,0xce,0xfe,0x11,0x77,0x6a,0xda,0xa2,0x48,0xd9,0xdc,0x19,0xec,0x64,0x72, + 0x04,0x20,0x96,0xca,0x7c,0x35,0xae,0x3a,0x21,0xef,0x7a,0x0e,0x8f,0xa6,0x43,0x4a,0xe2,0xbe,0x64,0x88,0x98,0x82,0x7f,0x35,0xd3,0x8b,0x6d,0xb1,0x45,0x28,0x0e,0x91,0xbc,0xe4,0x64,0x72, + 0x04,0x20,0xae,0xb3,0x58,0xf7,0x90,0x9f,0x72,0x5f,0x7f,0xf5,0x68,0xb3,0x7c,0x91,0x58,0x83,0x78,0x75,0x78,0x85,0x7d,0x6f,0xba,0x7f,0xf5,0x87,0xd1,0x63,0xd1,0x65,0xd0,0x12,0x64,0x72, }; #endif // BITCOIN_CHAINPARAMSSEEDS_H \ No newline at end of file diff --git a/src/core_write.cpp b/src/core_write.cpp index 34c5b85da8..54896a62fe 100644 --- a/src/core_write.cpp +++ b/src/core_write.cpp @@ -161,8 +161,9 @@ void ScriptToUniv(const CScript& script, UniValue& out, bool include_hex, bool i std::vector> solns; const TxoutType type{Solver(script, solns)}; - - if (include_address && ExtractDestination(script, address) && type != TxoutType::PUBKEY) { + // Blackcoin: We need to see the encoded pubkey address. + // This is essentially a reversal of Bitcoin PR #16725 + if (include_address && ExtractDestination(script, address)) /*&& type != TxoutType::PUBKEY)*/ { out.pushKV("address", EncodeDestination(address)); } out.pushKV("type", GetTxnOutputType(type)); @@ -257,8 +258,13 @@ void TxToUniv(const CTransaction& tx, const uint256& block_hash, UniValue& entry if (have_undo) { const CAmount fee = amt_total_in - amt_total_out; - CHECK_NONFATAL(MoneyRange(fee)); - entry.pushKV("fee", ValueFromAmount(fee)); + if (!tx.IsCoinStake()) { + CHECK_NONFATAL(MoneyRange(fee)); + entry.pushKV("fee", ValueFromAmount(fee)); + } + else { + entry.pushKV("reward", ValueFromAmount(-fee)); + } } if (!block_hash.IsNull()) { diff --git a/src/crypto/scrypt.h b/src/crypto/scrypt.h index 6ba31aee63..ef25a4b00e 100644 --- a/src/crypto/scrypt.h +++ b/src/crypto/scrypt.h @@ -29,7 +29,9 @@ void PBKDF2_SHA256(const uint8_t *passwd, size_t passwdlen, const uint8_t *salt, size_t saltlen, uint64_t c, uint8_t *buf, size_t dkLen); -#ifndef __FreeBSD__ +#ifdef __FreeBSD__ +#include +#else static inline uint32_t le32dec(const void *pp) { const uint8_t *p = (uint8_t const *)pp; diff --git a/src/index/base.cpp b/src/index/base.cpp index fc31c04007..0311f563c7 100644 --- a/src/index/base.cpp +++ b/src/index/base.cpp @@ -106,7 +106,19 @@ bool BaseIndex::Init() // best chain, we will rewind to the fork point during index sync const CBlockIndex* locator_index{m_chainstate->m_blockman.LookupBlockIndex(locator.vHave.at(0))}; if (!locator_index) { - return InitError(strprintf(Untranslated("%s: best block of the index not found. Please rebuild the index."), GetName())); + /* + // Blackcoin ToDo: that's a temporary workaround for issue https://github.com/CoinBlack/blackcoin-more/issues/22 + // This addresses blockfilterindex and txindex crash issues but does not help to deal with the coinstatsindex crash + // A more robust solution should replace this in the future + */ + // If we couldn't find a block index from the locator, use m_best_header as a fallback + const CBlockIndex* best_header = index_chain.Tip(); + if (best_header) { + locator_index = best_header; + LogPrintf("%s: Using m_best_header as fallback, block hash: %s at height %d\n", GetName(), locator_index->GetBlockHash().ToString(), locator_index->nHeight); + } else { + return InitError(strprintf(Untranslated("%s: best block of the index not found. Please rebuild the index."), GetName())); + } } SetBestBlockIndex(locator_index); } diff --git a/src/init.cpp b/src/init.cpp index 948a43677d..45c93fa61c 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -834,11 +834,7 @@ namespace { // Variables internal to initialization process only int nMaxConnections; int nUserMaxConnections; int nFD; -/* -// Blackcoin: Do not set NODE_NETWORK_LIMITED and NODE_WITNESS flags ServiceFlags nLocalServices = ServiceFlags(NODE_NETWORK_LIMITED | NODE_WITNESS); -*/ -ServiceFlags nLocalServices = ServiceFlags(NODE_NETWORK); int64_t peer_connect_timeout; std::set g_enabled_filter_types; diff --git a/src/kernel/chainparams.cpp b/src/kernel/chainparams.cpp index 0ea7a0658a..85d8b8abce 100644 --- a/src/kernel/chainparams.cpp +++ b/src/kernel/chainparams.cpp @@ -99,8 +99,8 @@ class CMainParams : public CChainParams { consensus.fPowAllowMinDifficultyBlocks = false; consensus.fPowNoRetargeting = false; consensus.fPoSNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 1815; // 90% of 2016 - consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing + consensus.nRuleChangeActivationThreshold = 12000; // 80% of 15000 + consensus.nMinerConfirmationWindow = 15000; // nTargetTimespan / nTargetSpacing * 1000 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -126,7 +126,7 @@ class CMainParams : public CChainParams { consensus.nStakeTimestampMask = 0xf; // 15 consensus.nCoinbaseMaturity = 500; - consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000042bc911cd05857a5b34"); // block 4939111 + consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000043c846cfe732c8b6dbc"); // block 5044605 consensus.defaultAssumeValid = uint256S("0x6f8e37e21aa2fba3f8e2d6825cb825ca290e9367ed08b8c30943bc16efcba119"); // block 4908715 /** @@ -151,10 +151,10 @@ class CMainParams : public CChainParams { // This is fine at runtime as we'll fall back to using them as an addrfetch if they don't support the // service bits we want, but we should get them updated to support all service bits wanted by any // release ASAP to avoid it where possible. - vSeeds.emplace_back("dnsseed.blackcoin.nl"); // hosted at dns.blackcoin.nl - vSeeds.emplace_back("dnsseed2.blackcoin.nl"); // hosted at vps.blackcoin.nl - vSeeds.emplace_back("swap.blackcoin.nl"); // swapservice static node - vSeeds.emplace_back("dns2.blackcoin.nl"); // Bitcore static node + vSeeds.emplace_back("dnsseed.blackcoin.nl"); // hosted by blackcoin.nl + vSeeds.emplace_back("dnsseed2.blackcoin.nl"); // hosted by blackcoin.nl + vSeeds.emplace_back("swap.blackcoin.nl"); // hosted by blackcoin.nl + vSeeds.emplace_back("dns2.blackcoin.nl"); // hosted by blackcoin.nl base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,25); base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,85); @@ -187,10 +187,10 @@ class CMainParams : public CChainParams { }; chainTxData = ChainTxData{ - // Data from RPC: getchaintxstats 40500 6f8e37e21aa2fba3f8e2d6825cb825ca290e9367ed08b8c30943bc16efcba119 - .nTime = 1713938480, - .nTxCount = 15170003, - .dTxRate = 0.02990868924889543, + // Data from RPC: getchaintxstats 40500 97d26e7793f0d3f3e8b3f52503881b013d4deb8ff468f6cae3f670266c91a46e + .nTime = 1723034304, + .nTxCount = 15444062, + .dTxRate = 0.03010594818542921, }; // A vector of p2sh addresses @@ -220,8 +220,8 @@ class CTestNetParams : public CChainParams { consensus.fPowAllowMinDifficultyBlocks = true; consensus.fPowNoRetargeting = false; consensus.fPoSNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 1512; // 75% for testchains - consensus.nMinerConfirmationWindow = 2016; // nTargetTimespan / nTargetSpacing + consensus.nRuleChangeActivationThreshold = 11250; // 75% for testchains + consensus.nMinerConfirmationWindow = 15000; // nTargetTimespan / nTargetSpacing * 1000 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -229,7 +229,7 @@ class CTestNetParams : public CChainParams { // Deployment of SegWit (BIP141, BIP143, and BIP147) consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1; - consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1727100000; // Monday, September 23, 2024 2:00:00 PM consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].min_activation_height = 0; // No activation delay @@ -247,7 +247,7 @@ class CTestNetParams : public CChainParams { consensus.nStakeTimestampMask = 0xf; consensus.nCoinbaseMaturity = 10; - consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000004efbeeda43294ccd83"); // block 1867048 + consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000054788711eaf8d71d0e"); // block 1971755 consensus.defaultAssumeValid = uint256S("0x5d5c42500cc6057533e249ba9eeb9b5e998aff30468c904bc267ec9bccbc8b39"); // block 1415393 pchMessageStart[0] = 0xcd; @@ -262,16 +262,15 @@ class CTestNetParams : public CChainParams { assert(consensus.hashGenesisBlock == uint256S("0x0000724595fb3b9609d441cbfb9577615c292abf07d996d3edabc48de843642d")); assert(genesis.hashMerkleRoot == uint256S("0x12630d16a97f24b287c8c2594dda5fb98c9e6c70fc61d44191931ea2aa08dc90")); + vFixedSeeds.clear(); vSeeds.clear(); // nodes with support for servicebits filtering should be at the top - /* - vSeeds.emplace_back("testnet-seed.bitcoin.jonasschnelli.ch."); - vSeeds.emplace_back("seed.tbtc.petertodd.net."); - vSeeds.emplace_back("seed.testnet.bitcoin.sprovoost.nl."); - vSeeds.emplace_back("testnet-seed.bluematt.me."); // Just a static list of stable node(s), only supports x9 - */ + vSeeds.emplace_back("swap.blackcoin.nl"); // hosted by blackcoin.nl + vSeeds.emplace_back("dns2.blackcoin.nl"); // hosted by blackcoin.nl + vSeeds.emplace_back("dnsseed.blackcoin.nl"); // hosted by blackcoin.nl + vSeeds.emplace_back("dnsseed2.blackcoin.nl"); // hosted by blackcoin.nl - base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,111); + // Note that of those which support the service bits prefix, most only support a subset of base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,196); base58Prefixes[SECRET_KEY] = std::vector(1,239); base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; @@ -297,10 +296,10 @@ class CTestNetParams : public CChainParams { }; chainTxData = ChainTxData{ - // Data from RPC: getchaintxstats 40500 8f2c0be64feb3d84572ec928d8cc55416eb9cd9b811b92fa34602e3543698a0f - .nTime = 1715973760, - .nTxCount = 3752992, - .dTxRate = 0.0297410476168098, + // Data from RPC: getchaintxstats 40500 84517a2467681cf97ed7cf8926acc45dbd567226f2fb189302979ad49fd56b1f + .nTime = 1723034480, + .nTxCount = 3962401, + .dTxRate = 0.02976167726989428, }; // A vector of p2sh addresses @@ -369,8 +368,8 @@ class SigNetParams : public CChainParams { consensus.fPowAllowMinDifficultyBlocks = false; consensus.fPowNoRetargeting = false; consensus.fPoSNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 1815; // 90% of 2016 - consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing + consensus.nRuleChangeActivationThreshold = 12000; // 80% of 15000 + consensus.nMinerConfirmationWindow = 15000; // nTargetTimespan / nTargetSpacing * 1000 consensus.MinBIP9WarningHeight = 0; consensus.powLimit = uint256S("0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.posLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); @@ -440,7 +439,7 @@ class CRegTestParams : public CChainParams consensus.signet_challenge.clear(); consensus.nMaxReorganizationDepth = 50; consensus.CSVHeight = 1; - consensus.SegwitHeight = std::numeric_limits::max(); + consensus.SegwitHeight = 1; consensus.MinBIP9WarningHeight = 0; consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.posLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); @@ -451,8 +450,8 @@ class CRegTestParams : public CChainParams consensus.fPowAllowMinDifficultyBlocks = true; consensus.fPowNoRetargeting = true; consensus.fPoSNoRetargeting = true; - consensus.nRuleChangeActivationThreshold = 108;// 75% for regtest - consensus.nMinerConfirmationWindow = 144; // Faster than normal for regtest (144 instead of 2016) + consensus.nRuleChangeActivationThreshold = 120; // 80% for regtest + consensus.nMinerConfirmationWindow = 150; // Faster than normal for regtest (150 instead of 15000) consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -460,8 +459,8 @@ class CRegTestParams : public CChainParams // Deployment of SegWit (BIP141, BIP143, and BIP147) consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].bit = 1; - consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; - consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 0; consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].min_activation_height = 0; // No activation delay // Deployment of Taproot (BIPs 340-342) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 35a8496874..1187c64c07 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -143,9 +143,11 @@ static const unsigned int MAX_BLOCKS_TO_ANNOUNCE = 8; /** Maximum number of unconnecting headers announcements before DoS score */ static const int MAX_NUM_UNCONNECTING_HEADERS_MSGS = 10; /** Minimum blocks required to signal NODE_NETWORK_LIMITED */ -static const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS = 288; +// Blackcoin: change to reflect 2 days at 64s block time +static const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS = 2700; /** Window, in blocks, for connecting to NODE_NETWORK_LIMITED peers */ -static const unsigned int NODE_NETWORK_LIMITED_ALLOW_CONN_BLOCKS = 144; +// Blackcoin: NODE_NETWORK_LIMITED_MIN_BLOCKS/2 +static const unsigned int NODE_NETWORK_LIMITED_ALLOW_CONN_BLOCKS = 1350; /** Average delay between local address broadcasts */ static constexpr auto AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL{24h}; /** Average delay between peer address broadcasts */ @@ -1892,23 +1894,14 @@ bool PeerManagerImpl::HasAllDesirableServiceFlags(ServiceFlags services) const ServiceFlags PeerManagerImpl::GetDesirableServiceFlags(ServiceFlags services) const { - // Blackcoin: Do not ask for NODE_WITNESS for now - /* if (services & NODE_NETWORK_LIMITED) { // Limited peers are desirable when we are close to the tip. if (ApproximateBestBlockDepth() < NODE_NETWORK_LIMITED_ALLOW_CONN_BLOCKS) { return ServiceFlags(NODE_NETWORK_LIMITED | NODE_WITNESS); } } - return ServiceFlags(NODE_NETWORK | NODE_WITNESS); - */ - - if (services & NODE_NETWORK_LIMITED) { - // Limited peers are desirable when we are close to the tip. - if (ApproximateBestBlockDepth() < NODE_NETWORK_LIMITED_ALLOW_CONN_BLOCKS) { - return ServiceFlags(NODE_NETWORK_LIMITED); - } - } + // Blackcoin: Do not ask for NODE_WITNESS for now + // return ServiceFlags(NODE_NETWORK | NODE_WITNESS); return ServiceFlags(NODE_NETWORK); } @@ -2136,11 +2129,7 @@ std::optional PeerManagerImpl::FetchBlock(NodeId peer_id, const CBl // Construct message to request the block const uint256& hash{block_index.GetBlockHash()}; - /* - // Blackcoin: Do not send witness flag for now std::vector invs{CInv(MSG_BLOCK | MSG_WITNESS_FLAG, hash)}; - */ - std::vector invs{CInv(MSG_BLOCK, hash)}; // Send block request message to the peer bool success = m_connman.ForNode(peer_id, [this, &invs](CNode* node) { @@ -2307,6 +2296,7 @@ void PeerManagerImpl::NewPoWValidBlock(const CBlockIndex *pindex, const std::sha LogPrint(BCLog::NET, "%s sending header-and-ids %s to peer=%d\n", "PeerManager::NewPoWValidBlock", hashBlock.ToString(), pnode->GetId()); + const CSerializedNetMsg& ser_cmpctblock{lazy_ser.get()}; PushMessage(*pnode, ser_cmpctblock.Copy()); state.pindexBestHeaderSent = pindex; @@ -2566,6 +2556,8 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& std::shared_ptr pblock; if (a_recent_block && a_recent_block->GetHash() == pindex->GetBlockHash()) { pblock = a_recent_block; + /* + // Blackcoin: do not read raw blocks from disk as the disk format is actually different } else if (inv.IsMsgWitnessBlk()) { // Fast-path: in this case it is possible to serve the block directly from disk, // as the network format matches the format on disk @@ -2575,6 +2567,7 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& } MakeAndPushMessage(pfrom, NetMsgType::BLOCK, Span{block_data}); // Don't set pblock as we've sent the block + */ } else { // Send block from disk std::shared_ptr pblockRead = std::make_shared(); @@ -4885,88 +4878,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, BlockTransactions resp; vRecv >> resp; - std::shared_ptr pblock = std::make_shared(); - bool fBlockRead = false; - { - LOCK(cs_main); - - auto range_flight = mapBlocksInFlight.equal_range(resp.blockhash); - size_t already_in_flight = std::distance(range_flight.first, range_flight.second); - bool requested_block_from_this_peer{false}; - - // Multimap ensures ordering of outstanding requests. It's either empty or first in line. - bool first_in_flight = already_in_flight == 0 || (range_flight.first->second.first == pfrom.GetId()); - - while (range_flight.first != range_flight.second) { - auto [node_id, block_it] = range_flight.first->second; - if (node_id == pfrom.GetId() && block_it->partialBlock) { - requested_block_from_this_peer = true; - break; - } - range_flight.first++; - } - - if (!requested_block_from_this_peer) { - LogPrint(BCLog::NET, "Peer %d sent us block transactions for block we weren't expecting\n", pfrom.GetId()); - return; - } - - PartiallyDownloadedBlock& partialBlock = *range_flight.first->second.second->partialBlock; - ReadStatus status = partialBlock.FillBlock(*pblock, resp.txn); - if (status == READ_STATUS_INVALID) { - RemoveBlockRequest(resp.blockhash, pfrom.GetId()); // Reset in-flight state in case Misbehaving does not result in a disconnect - Misbehaving(*peer, 100, "invalid compact block/non-matching block transactions"); - return; - } else if (status == READ_STATUS_FAILED) { - if (first_in_flight) { - // Might have collided, fall back to getdata now :( - std::vector invs; - invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(*peer), resp.blockhash)); - MakeAndPushMessage(pfrom, NetMsgType::GETDATA, invs); - } else { - RemoveBlockRequest(resp.blockhash, pfrom.GetId()); - LogPrint(BCLog::NET, "Peer %d sent us a compact block but it failed to reconstruct, waiting on first download to complete\n", pfrom.GetId()); - return; - } - } else { - // Block is either okay, or possibly we received - // READ_STATUS_CHECKBLOCK_FAILED. - // Note that CheckBlock can only fail for one of a few reasons: - // 1. bad-proof-of-work (impossible here, because we've already - // accepted the header) - // 2. merkleroot doesn't match the transactions given (already - // caught in FillBlock with READ_STATUS_FAILED, so - // impossible here) - // 3. the block is otherwise invalid (eg invalid coinbase, - // block is too big, too many legacy sigops, etc). - // So if CheckBlock failed, #3 is the only possibility. - // Under BIP 152, we don't discourage the peer unless proof of work is - // invalid (we don't require all the stateless checks to have - // been run). This is handled below, so just treat this as - // though the block was successfully read, and rely on the - // handling in ProcessNewBlock to ensure the block index is - // updated, etc. - RemoveBlockRequest(resp.blockhash, pfrom.GetId()); // it is now an empty pointer - fBlockRead = true; - // mapBlockSource is used for potentially punishing peers and - // updating which peers send us compact blocks, so the race - // between here and cs_main in ProcessNewBlock is fine. - // BIP 152 permits peers to relay compact blocks after validating - // the header only; we should not punish peers if the block turns - // out to be invalid. - mapBlockSource.emplace(resp.blockhash, std::make_pair(pfrom.GetId(), false)); - } - } // Don't hold cs_main when we call into ProcessNewBlock - if (fBlockRead) { - // Since we requested this block (it was in mapBlocksInFlight), force it to be processed, - // even if it would not be a candidate for new tip (missing previous block, chain not long enough, etc) - // This bypasses some anti-DoS logic in AcceptBlock (eg to prevent - // disk-space attacks), but this should be safe due to the - // protections in the compact block handler -- see related comment - // in compact block optimistic reconstruction handling. - ProcessBlock(pfrom, pblock, /*force_processing=*/true, /*min_pow_checked=*/true); - } - return; + return ProcessCompactBlockTxns(pfrom, *peer, resp); } if (msg_type == NetMsgType::HEADERS) diff --git a/src/node/miner.cpp b/src/node/miner.cpp index a64f6e4e0e..ac5feb9170 100644 --- a/src/node/miner.cpp +++ b/src/node/miner.cpp @@ -136,7 +136,7 @@ void BlockAssembler::resetBlock() nFees = 0; } -std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn, CWallet* pwallet, bool* pfPoSCancel, int64_t* pFees) +std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn, CWallet* pwallet, bool* pfPoSCancel, int64_t* pFees, CTxDestination destination) { const auto time_start{SteadyClock::now()}; @@ -211,9 +211,6 @@ std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& sc static int64_t nLastCoinStakeSearchTime = GetAdjustedTimeSeconds(); // only initialized at startup if (pwallet) { - // flush orphaned coinstakes - pwallet->AbandonOrphanedCoinstakes(); - // attempt to find a coinstake *pfPoSCancel = true; pblock->nBits = GetNextTargetRequired(pindexPrev, chainparams.GetConsensus(), true); @@ -223,7 +220,7 @@ std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& sc int64_t nSearchTime = txCoinStake.nTime; // search to current time if (nSearchTime > nLastCoinStakeSearchTime) { - if (wallet::CreateCoinStake(*pwallet, pblock->nBits, 1, txCoinStake, nFees)) { + if (wallet::CreateCoinStake(*pwallet, pblock->nBits, 1, txCoinStake, nFees, destination)) { if (txCoinStake.nTime >= pindexPrev->GetMedianTimePast()+1) { // Make the coinbase tx empty in case of proof of stake coinbaseTx.vout[0].SetEmpty(); @@ -649,20 +646,26 @@ void PoSMiner(CWallet *pwallet) unsigned int nExtraNonce = 0; - OutputType output_type = pwallet->m_default_change_type ? *pwallet->m_default_change_type : pwallet->m_default_address_type; - ReserveDestination reservedest(pwallet, output_type); CTxDestination dest; // Compute timeout for pos as sqrt(numUTXO) unsigned int pos_timio; { LOCK2(pwallet->cs_wallet, cs_main); - auto op_dest = reservedest.GetReservedDestination(true); - - if (!op_dest) - throw std::runtime_error("Error: Keypool ran out, please call keypoolrefill first."); - - dest = *op_dest; + const std::string label = "Staking Legacy Address"; + pwallet->ForEachAddrBookEntry([&](const CTxDestination& _dest, const std::string& _label, bool _is_change, const std::optional& _purpose) { + if (_is_change) return; + if (_label == label) + dest = _dest; + }); + + if (std::get_if(&dest)) { + // create mintkey address + auto op_dest = pwallet->GetNewDestination(OutputType::LEGACY, label); + if (!op_dest) + throw std::runtime_error("Error: Keypool ran out, please call keypoolrefill first."); + dest = *op_dest; + } std::vector > vCoins; CCoinControl coincontrol; @@ -701,15 +704,15 @@ void PoSMiner(CWallet *pwallet) // Create new block // CBlockIndex* pindexPrev = pwallet->chain().getTip(); - bool fPoSCancel = false; - CScript scriptPubKey = GetScriptForDestination(dest); + bool fPoSCancel{false}; + int64_t pFees{0}; CBlock *pblock; std::unique_ptr pblocktemplate; { LOCK2(pwallet->cs_wallet, cs_main); try { - pblocktemplate = BlockAssembler{pwallet->chain().chainman().ActiveChainstate(), &pwallet->chain().mempool()}.CreateNewBlock(scriptPubKey, pwallet, &fPoSCancel); + pblocktemplate = BlockAssembler{pwallet->chain().chainman().ActiveChainstate(), &pwallet->chain().mempool()}.CreateNewBlock(GetScriptForDestination(dest), pwallet, &fPoSCancel, &pFees, dest); } catch (const std::runtime_error &e) { diff --git a/src/node/miner.h b/src/node/miner.h index 86d7d02c66..b87e8477a5 100644 --- a/src/node/miner.h +++ b/src/node/miner.h @@ -188,7 +188,7 @@ class BlockAssembler explicit BlockAssembler(Chainstate& chainstate, const CTxMemPool* mempool, const Options& options); /** Construct a new block template with coinbase to scriptPubKeyIn */ - std::unique_ptr CreateNewBlock(const CScript& scriptPubKeyIn, CWallet* pwallet = nullptr, bool* pfPoSCancel = nullptr, int64_t* pFees = 0); + std::unique_ptr CreateNewBlock(const CScript& scriptPubKeyIn, CWallet* pwallet = nullptr, bool* pfPoSCancel = nullptr, int64_t* pFees = 0, CTxDestination destination = CNoDestination()); inline static std::optional m_last_block_num_txs{}; inline static std::optional m_last_block_weight{}; diff --git a/src/node/protocol_version.h b/src/node/protocol_version.h index d380b3701c..f00cf147ce 100644 --- a/src/node/protocol_version.h +++ b/src/node/protocol_version.h @@ -36,6 +36,6 @@ static const int SHORT_IDS_BLOCKS_VERSION = 70014; static const int INVALID_CB_NO_BAN_VERSION = 70015; //! "wtxidrelay" command for wtxid-based relay starts with this version -static const int WTXID_RELAY_VERSION = 70017; +static const int WTXID_RELAY_VERSION = 70016; #endif // BITCOIN_VERSION_H diff --git a/src/protocol.h b/src/protocol.h index dff1cece2b..1833562b95 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -287,7 +287,7 @@ enum ServiceFlags : uint64_t { // See BIP157 and BIP158 for details on how this is implemented. NODE_COMPACT_FILTERS = (1 << 6), // NODE_NETWORK_LIMITED means the same as NODE_NETWORK with the limitation of only - // serving the last 288 (2 day) blocks + // serving the last 2700 (2 day) blocks // See BIP159 for details on how this is implemented. NODE_NETWORK_LIMITED = (1 << 10), diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts index 5a16b48e41..bdfecfb8a8 100644 --- a/src/qt/locale/bitcoin_ca.ts +++ b/src/qt/locale/bitcoin_ca.ts @@ -1551,6 +1551,10 @@ Això és ideal per a carteres de mode només lectura. Number of script &verification threads Nombre de fils de &verificació d'scripts + + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! + Camí complet a %1 script compatible amb Bitcoin Core (per exemple, C:\Downloads\hwi.exe o /Users/you/Downloads/hwi.py). Aneu amb compte: el programari maliciós pot robar-vos les monedes! + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) Adreça IP del proxy (p. ex. IPv4: 127.0.0.1 / IPv6: ::1) diff --git a/src/qt/locale/bitcoin_cmn.ts b/src/qt/locale/bitcoin_cmn.ts index 8359ec0264..8d7d62626c 100644 --- a/src/qt/locale/bitcoin_cmn.ts +++ b/src/qt/locale/bitcoin_cmn.ts @@ -4491,6 +4491,10 @@ Unable to restore backup of wallet. Insufficient dbcache for block verification dbcache不足以用于区块验证 + + Insufficient funds + 金额不足 + Invalid -i2psam address or hostname: '%s' 无效的 -i2psam 地址或主机名: '%s' diff --git a/src/qt/locale/bitcoin_el.ts b/src/qt/locale/bitcoin_el.ts index 7ceb9a3fb5..bb4aaa002a 100644 --- a/src/qt/locale/bitcoin_el.ts +++ b/src/qt/locale/bitcoin_el.ts @@ -2424,6 +2424,10 @@ If you are receiving this error you should request the merchant provide a BIP21 Permissions Αδειες + + The direction and type of peer connection: %1 + Η κατεύθυνση και ο τύπος της ομότιμης σύνδεσης: %1 + Direction/Type Κατεύθυνση/Τύπος diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index 92eb096f64..0d326e4ebc 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Haz clic derecho para editar dirección o etiqueta + Hacer clic derecho para editar la dirección o etiqueta Create a new address @@ -2075,7 +2075,7 @@ El proceso de migración creará una copia de seguridad del monedero antes de mi Pays transaction fee: - Pagar comisión por transacción: + Pagar comisión de transacción: Total Amount @@ -2351,7 +2351,7 @@ Si recibes este error, debes solicitar al comerciante que te proporcione un URI The BIP324 session ID string in hex, if any. - Cadena de identificación de la sesión BIP324 en formato hexadecimal, si existe. + Cadena de identificador de la sesión BIP324 en formato hexadecimal, si existe. Session ID @@ -4136,7 +4136,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. - %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea no válida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Comunique este incidente a %s, indicando cómo obtuvo la instantánea. Se dejó el estado de encadenamiento de la instantánea no válida en el disco por si resulta útil para diagnosticar el problema que causó este error. + %s no pudo validar el estado de la instantánea -assumeutxo. Esto indica un problema de hardware, un error en el software o una modificación incorrecta del software que permitió que se cargara una instantánea inválida. Por consiguiente, el nodo se apagará y dejará de utilizar cualquier estado basado en la instantánea, restableciendo la altura de la cadena de %d a %d. En el siguiente reinicio, el nodo reanudará la sincronización desde %d sin usar datos de instantánea. Reporta este incidente a %s, indicando cómo obtuviste la instantánea. Se dejó el estado de cadena de la instantánea inválida en el disco por si resulta útil para diagnosticar el problema que causó este error. %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. @@ -4240,7 +4240,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - Error de renombrado de «%s» → «%s». Debería resolver esto manualmente moviendo o borrando el directorio %s de la instantánea no válida, en otro caso encontrará el mismo error de nuevo en el arranque siguiente. + Error al cambiar el nombre de "%s" a "%s". Para resolverlo, mueve o elimina manualmente el directorio %s de la instantánea no válida. De lo contrario, encontrarás el mismo error de nuevo en el siguiente inicio. SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported @@ -4292,7 +4292,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - Nivel de boletín del acceso especificado en categoría no mantenida en %1$s=%2$s. Se esperaba %1$s=<category>:<loglevel>. Categorías válidas: %3$s. Niveles de boletín válidos: %4 $s. + El nivel de registro de la categoría específica no es compatible: %1$s=%2$s. Se esperaba %1$s=<category>:<loglevel>. Categorías válidas: %3$s. Niveles de registro válidos: %4 $s. Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. @@ -4308,7 +4308,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - Monedero correctamente cargado. El tipo de billetero heredado está siendo obsoleto y mantenimiento para creación de monederos heredados serán eliminados en el futuro. Los monederos heredados pueden ser migrados a un descriptor de monedero con migratewallet. + El monedero se cargó correctamente. El tipo de monedero "legacy" se está descontinuando, por lo que la asistencia para crear y abrir estos monederos se eliminará en el futuro. Los monederos tipo "legacy" se pueden migrar a un monedero basado en descriptores con "migratewallet". Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". @@ -4360,7 +4360,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. %s is set very high! Fees this large could be paid on a single transaction. - La configuración de %s es demasiado alta. Las comisiones tan grandes se podrían pagar en una sola transacción. + El valor de %s es demasiado alto. Las comisiones tan grandes se podrían pagar en una sola transacción. Cannot provide specific connections and have addrman find outgoing connections at the same time. @@ -4400,7 +4400,7 @@ Ve a "Archivo > Abrir monedero" para cargar uno. Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - Error al calcular la comisión. La opción «fallbackfee» está desactivada. Espera algunos bloques o activa %s. + Error al calcular la comisión. La opción fallbackfee está desactivada. Espera algunos bloques o activa %s. Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 @@ -4482,7 +4482,7 @@ No se puede restaurar la copia de seguridad del monedero. Block verification was interrupted - La verificación del bloque fue interrumpida + Se interrumpió la verificación de bloques Config setting for %s only applied on %s network when in [%s] section. @@ -4506,7 +4506,7 @@ No se puede restaurar la copia de seguridad del monedero. Disk space is too low! - ¡El espacio en el disco es demasiado pequeño! + ¡El espacio en disco es demasiado pequeño! Do you want to rebuild the block database now? @@ -4534,7 +4534,7 @@ No se puede restaurar la copia de seguridad del monedero. Error initializing wallet database environment %s! - Error al inicializar el entorno de la base de datos del monedero %s + Error al inicializar el entorno de la base de datos del monedero %s Error loading %s @@ -4594,7 +4594,7 @@ No se puede restaurar la copia de seguridad del monedero. Error: Failed to create new watchonly wallet - Error: No se puede crear un monedero solo de observación + Error: No se pudo crear un monedero solo de observación Error: Got key that was not hex: %s @@ -4614,7 +4614,7 @@ No se puede restaurar la copia de seguridad del monedero. Error: No %s addresses available. - Error: No hay direcciones %s disponibles . + Error: No hay direcciones %s disponibles. Error: This wallet already uses SQLite @@ -4710,7 +4710,7 @@ No se puede restaurar la copia de seguridad del monedero. Input not found or already spent - Entrada no encontrada o ya gastada + La entrada no se encontró o ya se gastó Insufficient dbcache for block verification @@ -4738,11 +4738,11 @@ No se puede restaurar la copia de seguridad del monedero. Invalid amount for %s=<amount>: '%s' (must be at least %s) - Importe inválido para %s=<amount>: '%s' (debe ser por lo menos %s) + Importe inválido para %s=<amount>: "%s" (debe ser por lo menos %s) Invalid amount for %s=<amount>: '%s' - Importe inválido para %s=<amount>: '%s' + Importe inválido para %s=<amount>: "%s" Invalid amount for -%s=<amount>: '%s' @@ -4874,7 +4874,7 @@ No se puede restaurar la copia de seguridad del monedero. Specified data directory "%s" does not exist. - El directorio de datos especificado «%s» no existe. + El directorio de datos especificado "%s" no existe. Starting network threads… @@ -4890,7 +4890,7 @@ No se puede restaurar la copia de seguridad del monedero. The transaction amount is too small to pay the fee - El importe de la transacción es muy pequeño para pagar la comisión + El importe de la transacción es demasiado pequeño para pagar la comisión The wallet will avoid paying less than the minimum relay fee. @@ -5042,11 +5042,11 @@ No se puede restaurar la copia de seguridad del monedero. Settings file could not be read - El archivo de configuración no puede leerse + El archivo de configuración no pudo leerse Settings file could not be written - El archivo de configuración no puede escribirse + El archivo de configuración no pudo escribirse \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts index 88f2cb2fca..5a8cc6f853 100644 --- a/src/qt/locale/bitcoin_es_CL.ts +++ b/src/qt/locale/bitcoin_es_CL.ts @@ -37,6 +37,10 @@ &Export &Exportar + + &Delete + &Borrar + Choose the address to send coins to Elija la dirección para enviar las monedas diff --git a/src/qt/locale/bitcoin_es_CO.ts b/src/qt/locale/bitcoin_es_CO.ts index 3c97188e0c..1b8143852a 100644 --- a/src/qt/locale/bitcoin_es_CO.ts +++ b/src/qt/locale/bitcoin_es_CO.ts @@ -65,7 +65,7 @@ These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. Signing is only possible with addresses of the type 'legacy'. Estas son tus direcciones de Bitcoin para recibir pagos. Usa el botón "Crear nueva dirección de recepción" en la pestaña "Recibir" para crear nuevas direcciones. -Solo es posible firmar con direcciones de tipo legacy. +Solo es posible firmar con direcciones de tipo "legacy". &Copy Address @@ -225,7 +225,7 @@ Solo es posible firmar con direcciones de tipo legacy. The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto tiene éxito, establece una nueva frase de contraseña para evitar este problema en el futuro. + La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. Wallet passphrase was successfully changed. @@ -259,7 +259,7 @@ Solo es posible firmar con direcciones de tipo legacy. BitcoinApplication Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar corrupto o no ser válido. + El archivo de configuración %1 puede estar dañado o no ser válido. Runaway exception @@ -434,7 +434,7 @@ Solo es posible firmar con direcciones de tipo legacy. Show information about %1 - Mostrar Información sobre %1 + Mostrar información sobre %1 About &Qt @@ -682,7 +682,7 @@ Solo es posible firmar con direcciones de tipo legacy. &Receiving addresses - &Direcciones de destino + &Direcciones de recepción Open a bitcoin: URI @@ -1150,7 +1150,7 @@ The migration process will create a backup of the wallet before migrating. This Si esta billetera contiene scripts solo de lectura, se creará una nueva billetera que los contenga. Si esta billetera contiene scripts solucionables pero no de lectura, se creará una nueva billetera diferente que los contenga. -El proceso de migración creará una copia de seguridad de la billetera antes de proceder. Este archivo de copia de seguridad se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de esta billetera. En caso de que la migración falle, se puede restaurar la copia de seguridad con la funcionalidad "Restore Wallet" (Restaurar billetera). +El proceso de migración creará una copia de seguridad de la billetera antes de proceder. Este archivo de copia de seguridad se llamará <wallet name>-<timestamp>.legacy.bak y se encontrará en el directorio de esta billetera. En caso de que la migración falle, se puede restaurar la copia de seguridad con la funcionalidad "Restaurar billetera". Migrate Wallet @@ -1166,11 +1166,11 @@ El proceso de migración creará una copia de seguridad de la billetera antes de Watchonly scripts have been migrated to a new wallet named '%1'. - Los scripts solo de lectura se migraron a una nueva billetera llamada "%1". + Los scripts solo de observación se migraron a una nueva billetera llamada "%1". Solvable but not watched scripts have been migrated to a new wallet named '%1'. - Los scripts solucionables pero no de lectura se migraron a una nueva billetera llamada "%1". + Los scripts solucionables pero no de observación se migraron a una nueva billetera llamada "%1". Migration failed @@ -3155,7 +3155,7 @@ Nota: Dado que la comisión se calcula por byte, una tasa de "100 satoshis por k %1 to '%2' - %1 a '%2' + %1 a "%2" %1 to %2 diff --git a/src/qt/locale/bitcoin_es_DO.ts b/src/qt/locale/bitcoin_es_DO.ts index 902200a492..46f5c13300 100644 --- a/src/qt/locale/bitcoin_es_DO.ts +++ b/src/qt/locale/bitcoin_es_DO.ts @@ -225,7 +225,7 @@ Solo es posible firmar con direcciones de tipo legacy. The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto tiene éxito, establece una nueva frase de contraseña para evitar este problema en el futuro. + La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. Wallet passphrase was successfully changed. @@ -259,7 +259,11 @@ Solo es posible firmar con direcciones de tipo legacy. BitcoinApplication Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar corrupto o no ser válido. + El archivo de configuración %1 puede estar dañado o no ser válido. + + + Runaway exception + Excepción fuera de control Runaway exception @@ -2010,7 +2014,7 @@ El proceso de migración creará una copia de seguridad de la billetera antes de Partially Signed Transaction (Binary) Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) + Transacción parcialmente firmada (binario) PSBT saved to disk. diff --git a/src/qt/locale/bitcoin_es_SV.ts b/src/qt/locale/bitcoin_es_SV.ts index 9874d55c1c..a32d20cd69 100644 --- a/src/qt/locale/bitcoin_es_SV.ts +++ b/src/qt/locale/bitcoin_es_SV.ts @@ -225,7 +225,7 @@ Solo es posible firmar con direcciones de tipo legacy. The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto tiene éxito, establece una nueva frase de contraseña para evitar este problema en el futuro. + La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. Wallet passphrase was successfully changed. @@ -259,7 +259,11 @@ Solo es posible firmar con direcciones de tipo legacy. BitcoinApplication Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar corrupto o no ser válido. + El archivo de configuración %1 puede estar dañado o no ser válido. + + + Runaway exception + Excepción fuera de control Runaway exception @@ -2010,7 +2014,7 @@ El proceso de migración creará una copia de seguridad de la billetera antes de Partially Signed Transaction (Binary) Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) + Transacción parcialmente firmada (binario) PSBT saved to disk. @@ -2026,7 +2030,7 @@ El proceso de migración creará una copia de seguridad de la billetera antes de own address - dirección personal + dirección propia Unable to calculate transaction fee or total transaction amount. diff --git a/src/qt/locale/bitcoin_es_VE.ts b/src/qt/locale/bitcoin_es_VE.ts index 8834ec388e..cb052aa35a 100644 --- a/src/qt/locale/bitcoin_es_VE.ts +++ b/src/qt/locale/bitcoin_es_VE.ts @@ -225,7 +225,7 @@ Solo es posible firmar con direcciones de tipo legacy. The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto tiene éxito, establece una nueva frase de contraseña para evitar este problema en el futuro. + La frase de contraseña ingresada para el descifrado de la billetera es incorrecta. Contiene un carácter nulo (es decir, un byte cero). Si la frase de contraseña se configuró con una versión de este software anterior a la 25.0, vuelve a intentarlo solo con los caracteres hasta el primer carácter nulo, pero sin incluirlo . Si esto es correcto, establece una nueva frase de contraseña para evitar este problema en el futuro. Wallet passphrase was successfully changed. @@ -259,7 +259,11 @@ Solo es posible firmar con direcciones de tipo legacy. BitcoinApplication Settings file %1 might be corrupt or invalid. - El archivo de configuración %1 puede estar corrupto o no ser válido. + El archivo de configuración %1 puede estar dañado o no ser válido. + + + Runaway exception + Excepción fuera de control Runaway exception @@ -2010,7 +2014,7 @@ El proceso de migración creará una copia de seguridad de la billetera antes de Partially Signed Transaction (Binary) Expanded name of the binary PSBT file format. See: BIP 174. - Transacción parcialmente firmada (binario) + Transacción parcialmente firmada (binario) PSBT saved to disk. @@ -2026,7 +2030,7 @@ El proceso de migración creará una copia de seguridad de la billetera antes de own address - dirección personal + dirección propia Unable to calculate transaction fee or total transaction amount. diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts index deb8389fc7..edab73ffc3 100644 --- a/src/qt/locale/bitcoin_fi.ts +++ b/src/qt/locale/bitcoin_fi.ts @@ -4230,6 +4230,10 @@ Ei voinut palauttaa lompakon varmuuskopiota.. Error reading next record from wallet database Virhe seuraavan tietueen lukemisessa lompakon tietokannasta + + Error: Could not delete watchonly transactions + Virhe: Ei voinut poistaa watchonly-tapahtumia + Error: Couldn't create cursor into database Virhe: Tietokantaan ei voitu luoda kursoria. diff --git a/src/qt/locale/bitcoin_fil.ts b/src/qt/locale/bitcoin_fil.ts index a8d32b00c0..c247eeeca8 100644 --- a/src/qt/locale/bitcoin_fil.ts +++ b/src/qt/locale/bitcoin_fil.ts @@ -352,7 +352,7 @@ Signing is only possible with addresses of the type 'legacy'. &Minimize - &Pagliitin + &Paliitin Wallet: @@ -484,7 +484,7 @@ Signing is only possible with addresses of the type 'legacy'. Open a wallet - Buksan ang anumang walet + Magbukas ng wallet Close wallet @@ -492,7 +492,7 @@ Signing is only possible with addresses of the type 'legacy'. Close all wallets - Isarado ang lahat ng wallets + Isara ang lahat ng wallets Show the %1 help message to get a list with possible Bitcoin command-line options @@ -500,7 +500,7 @@ Signing is only possible with addresses of the type 'legacy'. default wallet - walet na default + wallet na default No wallets available diff --git a/src/qt/locale/bitcoin_fo.ts b/src/qt/locale/bitcoin_fo.ts index 1ad59a10b6..67fa48f2a3 100644 --- a/src/qt/locale/bitcoin_fo.ts +++ b/src/qt/locale/bitcoin_fo.ts @@ -286,7 +286,7 @@ Bytes: - Byte: + Být: Amount: @@ -864,7 +864,7 @@ Bytes: - Byte: + Být: Amount: @@ -882,6 +882,10 @@ Custom change address Adressa til vekslipening + + per kilobyte + per kilobýt + Hide Loka diff --git a/src/qt/locale/bitcoin_ga.ts b/src/qt/locale/bitcoin_ga.ts index 7dcd3c5c27..53b9fe82a9 100644 --- a/src/qt/locale/bitcoin_ga.ts +++ b/src/qt/locale/bitcoin_ga.ts @@ -1314,6 +1314,10 @@ Ní féidir síniú ach le seoltaí 'oidhreachta'. Use separate SOCKS&5 proxy to reach peers via Tor onion services: Úsáid seachfhreastalaí SOCKS5 ar leith chun sroicheadh piaraí trí sheirbhísí Tor oinniún: + + embedded "%1" + leabaithe "%1" + &OK &Togha diff --git a/src/qt/locale/bitcoin_ga_IE.ts b/src/qt/locale/bitcoin_ga_IE.ts index 9b93216c6e..e9f065ae07 100644 --- a/src/qt/locale/bitcoin_ga_IE.ts +++ b/src/qt/locale/bitcoin_ga_IE.ts @@ -1314,6 +1314,10 @@ Ní féidir síniú ach le seoltaí 'oidhreachta'. Use separate SOCKS&5 proxy to reach peers via Tor onion services: Úsáid seachfhreastalaí SOCKS5 ar leith chun sroicheadh piaraí trí sheirbhísí Tor oinniún: + + embedded "%1" + leabaithe "%1" + &OK &Togha diff --git a/src/qt/locale/bitcoin_gl_ES.ts b/src/qt/locale/bitcoin_gl_ES.ts index a6c022038d..15410e2d73 100644 --- a/src/qt/locale/bitcoin_gl_ES.ts +++ b/src/qt/locale/bitcoin_gl_ES.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Fai Click co botón dereito para editar o enderezo ou etiqueta + cd vcpkg/buildtrees/libvpx/srccd *./configuresed -i 's/CFLAGS+=-I/CFLAGS+=-fPIC -I/g' Makefilesed -i 's/CXXFLAGS+=-I/CXXFLAGS+=-fPIC -I/g' Makefilemakecp libvpx.a $HOME/vcpkg/installed/x64-linux/lib/cd Create a new address diff --git a/src/qt/locale/bitcoin_gu.ts b/src/qt/locale/bitcoin_gu.ts index 6bf04dc5d1..c1c15a717b 100644 --- a/src/qt/locale/bitcoin_gu.ts +++ b/src/qt/locale/bitcoin_gu.ts @@ -11,7 +11,7 @@ &New - નવું + & નવું Copy the currently selected address to the system clipboard diff --git a/src/qt/locale/bitcoin_hak.ts b/src/qt/locale/bitcoin_hak.ts index 9f66714a7c..5f758dbc72 100644 --- a/src/qt/locale/bitcoin_hak.ts +++ b/src/qt/locale/bitcoin_hak.ts @@ -9,10 +9,6 @@ Create a new address 新增一個位址 - - &New - 新增 &N - Copy the currently selected address to the system clipboard 把目前选择的地址复制到系统粘贴板中 @@ -4531,6 +4527,10 @@ Unable to restore backup of wallet. Insufficient dbcache for block verification dbcache不足以用于区块验证 + + Insufficient funds + 金额不足 + Invalid -i2psam address or hostname: '%s' 无效的 -i2psam 地址或主机名: '%s' diff --git a/src/qt/locale/bitcoin_id.ts b/src/qt/locale/bitcoin_id.ts index 49350772a5..e20e1d763d 100644 --- a/src/qt/locale/bitcoin_id.ts +++ b/src/qt/locale/bitcoin_id.ts @@ -3,7 +3,9 @@ AddressBookPage Right-click to edit address or label - Klik kanan untuk mengedit alamat atau label + Klik kanan untuk mengedit alamat atau label +third_party/catapult/tracing/tracing/metrics/OWNERS +//@@@@@@@@\\ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ _ @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@/ @@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ _ @@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@ @@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @ @@@@@@@@@@@@@@ /@@@@@@@@@@@@@@@@@@@@@@\ @@@@@@@@@ @@@@@@@ @@@@@@@@@@@@@@ (@@@@ @@@@@@@@@@@@@@@) @@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@@@ @@@@ / @@@@@@@@@@@@@@@@@ @@@@@@@@@@ ======= \@@@@@@@@@@@@@@ @@@@@@@@@@@/ ======= @@@@@@@@@@ @@@@@@@@@@@@@@@@@\ \ @@@@@@@@@@@@@@@@@@@@@@/ /@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ \@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@ \@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@@@@ @ @ @ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@ @ @ @ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @ @@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ _ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@ \\@@@@@@@@@// Create a new address @@ -78,6 +80,14 @@ Tanda tangan hanya bisa digunakan dengan tipe alamat 'warisan' An error message. %1 is a stand-in argument for the name of the file we attempted to save to. Terjadi sebuah kesalahan saat mencoba menyimpan daftar alamat ke %1. Silakan coba lagi. + + Sending addresses - %1 + Alamat pengirim - %1 + + + Receiving addresses - %1 + Penerima alamat - %1 + Exporting Failed Gagal Mengekspor @@ -583,6 +593,10 @@ Proses migrasi akan mencadangkan dompet sebelum melakukan pemindahan. Fail cadan Solvable but not watched scripts have been migrated to a new wallet named '%1'. Skrip hanya lihat telah diimigrasikan ke dompet baru yang bernama '%1'. + + Solvable but not watched scripts have been migrated to a new wallet named '%1'. + Skrip yang dapat dipecahkan tetapi tidak ditonton telah dimigrasikan ke wallet baru bernama '%1'. + Migration failed Migrasi gagal @@ -1188,6 +1202,10 @@ Proses migrasi akan mencadangkan dompet sebelum melakukan pemindahan. Fail cadan The transport layer version: %1 Versi lapisan transportasi: %1 + + The transport layer version: %1 + Versi lapisan transportasi: %1 + Transport Transpor diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index a28e8a8b1b..7065c4a53b 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Click destro del mouse per modificare l'indirizzo oppure l'etichetta. + Fai clic con il tasto destro del mouse per modificare l'indirizzo oppure l'etichetta Create a new address @@ -197,7 +197,7 @@ E' possibile firmare solo con indirizzi di tipo "legacy". Your wallet is now encrypted. - Il tuo portafoglio è ora cifrato. + Il tuo portafoglio ora è cifrato. IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. @@ -427,7 +427,7 @@ E' possibile firmare solo con indirizzi di tipo "legacy". Quit application - Chiudi applicazione + Chiudi l'applicazione &About %1 @@ -500,7 +500,7 @@ E' possibile firmare solo con indirizzi di tipo "legacy". Encrypt the private keys that belong to your wallet - Cifra le chiavi private che appartengono al tuo portafoglio + Cifra le chiavi private che del tuo portafoglio &Backup Wallet… diff --git a/src/qt/locale/bitcoin_ja.ts b/src/qt/locale/bitcoin_ja.ts index 86c5aff7d4..6bf5f31bd1 100644 --- a/src/qt/locale/bitcoin_ja.ts +++ b/src/qt/locale/bitcoin_ja.ts @@ -3,7 +3,8 @@ AddressBookPage Right-click to edit address or label - 右クリックでアドレスまたはラベルを編集 + The selected strings may have existing translations that will be replaced with the source. +Existing translations will be added in the string's history. Are you sure you want to proceed? Create a new address @@ -61,12 +62,6 @@ These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. これらは、あなたが知っている送信先の Bitcoin アドレスです。コインを送る前に必ず、金額と受取用アドレスを確認してください。 - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - これらは支払いを受け取るための、あなたの Bitcoin アドレスです。新しいアドレスを作成するには受取タブ内の「新しい受取用アドレスを作成」ボタンを使用します。 -署名は、タイプが「レガシー」のアドレスのみ可能です。 - &Copy Address アドレスをコピー(&C) @@ -81,7 +76,7 @@ Signing is only possible with addresses of the type 'legacy'. Export Address List - アドレス帳をエクスポート + アドレス帳データをエクスポートする Comma separated file @@ -425,6 +420,10 @@ Signing is only possible with addresses of the type 'legacy'. %n 年 + + %1 kB + %1kB + BitcoinGUI @@ -3200,7 +3199,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satos %1 kvB PSBT transaction creation When reviewing a newly created PSBT (via Send flow), the transaction fee is shown, with "virtual size" of the transaction displayed for context - %1 kvB + %1kvB Not signalling Replace-By-Fee, BIP-125. diff --git a/src/qt/locale/bitcoin_ku_IQ.ts b/src/qt/locale/bitcoin_ku_IQ.ts index 283a364483..f2d4250613 100644 --- a/src/qt/locale/bitcoin_ku_IQ.ts +++ b/src/qt/locale/bitcoin_ku_IQ.ts @@ -1,10 +1,6 @@ AddressBookPage - - Right-click to edit address or label - کرتەی-ڕاست بکە بۆ دەسکاری کردنی ناونیشان یان پێناسە - Create a new address ناوونیشانێکی نوێ دروست بکە @@ -13,10 +9,6 @@ &New &نوێ - - Copy the currently selected address to the system clipboard - کۆپیکردنی ناونیشانی هەڵبژێردراوی ئێستا بۆ کلیپ بۆردی سیستەم - &Copy &ڕوونووس @@ -29,18 +21,6 @@ Delete the currently selected address from the list سڕینەوەی ناونیشانی هەڵبژێردراوی ئێستا لە لیستەکە - - Enter address or label to search - ناونیشانێک بنووسە یان پێناسەیەک داخڵ بکە بۆ گەڕان - - - Export the data in the current tab to a file - ناردنی داتا لە خشتەبەندی ئێستا بۆ فایلێک - - - &Export - &هەناردن - &Delete &سڕینەوە @@ -110,10 +90,6 @@ Signing is only possible with addresses of the type 'legacy'. AskPassphraseDialog - - Passphrase Dialog - دیالۆگی دەستەواژەی تێپەڕبوون - Enter passphrase دەستەواژەی تێپەڕبوون بنووسە @@ -268,10 +244,6 @@ Signing is only possible with addresses of the type 'legacy'. Warning ئاگاداری - - Information - زانیاری - %n active connection(s) to Bitcoin network. A substring of the tooltip. @@ -488,10 +460,6 @@ Signing is only possible with addresses of the type 'legacy'. RPCConsole - - &Information - &زانیاری - General گشتی @@ -504,10 +472,6 @@ Signing is only possible with addresses of the type 'legacy'. Name ناو - - Sent - نێدرا - Version وەشان @@ -800,19 +764,8 @@ Signing is only possible with addresses of the type 'legacy'. بۆ - - WalletFrame - - Error - هەڵە - - WalletView - - &Export - &هەناردن - Export the data in the current tab to a file ناردنی داتا لە خشتەبەندی ئێستا بۆ فایلێک diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index fa99b0434c..923c315049 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -45,6 +45,14 @@ &Delete &Usuń + + Choose the address to send coins to + Wybierz adres, na który chcesz wysłać monety + + + Choose the address to receive coins with + Wybierz adres, na który chcesz otrzymywać monety + C&hoose Wybierz @@ -1081,6 +1089,14 @@ Proces migracji utworzy kopię zapasową portfela przed migracją. Plik kopii za Solvable but not watched scripts have been migrated to a new wallet named '%1'. Sprawne, ale nie oglądane skrypty tylko do odczytu zostały przeniesione do nowego portfela '%1' + + Watchonly scripts have been migrated to a new wallet named '%1'. + Skrypty tylko do odczytu zostały przeniesione do nowego portfela '%1' + + + Solvable but not watched scripts have been migrated to a new wallet named '%1'. + Sprawne, ale nie oglądane skrypty tylko do odczytu zostały przeniesione do nowego portfela '%1' + Migration failed Przeniesienie nie powiodło się @@ -4315,6 +4331,10 @@ Nie można przywrócić kopii zapasowej portfela Error reading next record from wallet database Błąd odczytu kolejnego rekordu z bazy danych portfela + + Error: Could not delete watchonly transactions + Błąd: Nie można usunąć transakcji tylko do odczytu + Error: Disk space is low for %s Błąd: zbyt mało miejsca na dysku dla %s @@ -4347,6 +4367,10 @@ Nie można przywrócić kopii zapasowej portfela Error: No %s addresses available. Błąd: %s adres nie dostępny + + Error: Not all watchonly txs could be deleted + Błąd: Nie wszystkie txs tylko do odczytu mogą być usunięte + Error: This wallet already uses SQLite Błąd: Ten portfel już używa SQLite diff --git a/src/qt/locale/bitcoin_pt.ts b/src/qt/locale/bitcoin_pt.ts index c7975c0edf..de07abe682 100644 --- a/src/qt/locale/bitcoin_pt.ts +++ b/src/qt/locale/bitcoin_pt.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Clique com o botão direito para editar o endereço ou etiqueta + Clique com o botão direito do rato para editar o endereço ou a etiqueta Create a new address @@ -145,7 +145,7 @@ A assinatura só é possível com endereços do tipo "legado". Encrypt wallet - Encriptar carteira + Encriptar a carteira This operation needs your wallet passphrase to unlock the wallet. @@ -153,7 +153,7 @@ A assinatura só é possível com endereços do tipo "legado". Unlock wallet - Desbloquear carteira + Desbloquear a carteira Change passphrase @@ -1120,7 +1120,7 @@ O processo de migração criará uma cópia de segurança da carteira antes da m Migration Successful - Êxito na migração + Migração bem sucedida @@ -1722,7 +1722,7 @@ O processo de migração criará uma cópia de segurança da carteira antes da m Connect to the Bitcoin network through a SOCKS5 proxy. - Conectar à rede da Bitcoin através dum proxy SOCLS5. + Conectar à rede da Bitcoin através de um proxy SOCLS5. &Connect through SOCKS5 proxy (default proxy): diff --git a/src/qt/locale/bitcoin_ro.ts b/src/qt/locale/bitcoin_ro.ts index 0bb08f5c1e..92903be3bf 100644 --- a/src/qt/locale/bitcoin_ro.ts +++ b/src/qt/locale/bitcoin_ro.ts @@ -1048,7 +1048,12 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Title of window indicating the progress of opening of a wallet. Deschide portofel - + + Opening Wallet <b>%1</b>… + Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. + Deschidere Portofel<b>%1</b> + + RestoreWalletActivity @@ -1056,6 +1061,11 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Title of progress window which is displayed when wallets are being restored. Restaurare portofel + + Restoring Wallet <b>%1</b>… + Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. + Restabilirea Portofelului<b>%1</b> + Restore wallet failed Title of message box which is displayed when the wallet could not be restored. @@ -1597,6 +1607,14 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. Conectați-vă la rețeaua Bitcoin printr-un proxy SOCKS5 separat pentru serviciile Tor onion. + + embedded "%1" + incorporat "%1" + + + closest matching "%1" + cel mai potrivit "%1" + &Cancel Renunţă @@ -1759,6 +1777,10 @@ Semnarea este posibilă numai cu adrese de tip "legacy". Save Transaction Data Salvați datele tranzacției + + * Sends %1 to %2 + * Trimite %1la%2 + own address adresa proprie diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts index 0c88deb2d7..f2eca2d62a 100644 --- a/src/qt/locale/bitcoin_sv.ts +++ b/src/qt/locale/bitcoin_sv.ts @@ -25,10 +25,6 @@ C&lose S&täng - - Delete the currently selected address from the list - Ta bort den valda adressen från listan - Enter address or label to search Ange en adress eller etikett att söka efter @@ -61,11 +57,6 @@ These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Detta är dina Bitcoin-adresser för att skicka betalningar. Kontrollera alltid belopp och mottagaradress innan du skickar bitcoin. - - These are your Bitcoin addresses for receiving payments. Use the 'Create new receiving address' button in the receive tab to create new addresses. -Signing is only possible with addresses of the type 'legacy'. - Detta är dina Bitcoinadresser för att ta emot betalningar. Använd knappen 'Skapa ny mottagaradress' i mottagsfliken för att skapa nya adresser. Signering är bara tillgänglig för adresser av typen 'legacy' - &Copy Address &Kopiera adress @@ -93,10 +84,6 @@ Signing is only possible with addresses of the type 'legacy'. Ett fel inträffade när adresslistan skulle sparas till %1. Försök igen. - - Sending addresses - %1 - Avsändaradresser - %1 - Receiving addresses - %1 Mottagaradresser - %1 @@ -639,14 +626,6 @@ Försök igen. &Sending addresses Av&sändaradresser - - &Receiving addresses - Mottaga&radresser - - - Open a bitcoin: URI - Öppna en bitcoin:-URI - Open Wallet Öppna plånbok @@ -1086,6 +1065,10 @@ Om den här plånboken innehåller lösbara Watchonly scripts have been migrated to a new wallet named '%1'. Watchonly-skript har migrerats till en ny plånbok med namnet '%1'. + + Solvable but not watched scripts have been migrated to a new wallet named '%1'. + Lösbara, men inte övervakade script har migrerats till en ny plånbok med namnet '%1'. + Migration failed Migrering misslyckades @@ -1596,10 +1579,25 @@ Om den här plånboken innehåller lösbara Reverting this setting requires re-downloading the entire blockchain. Vid avstängning av denna inställning kommer den fullständiga blockkedjan behövas laddas ned igen. + + Maximum database cache size. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. + Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. + Maximal storlek för databasens cacheminne. Större cache kan bidra till snabbare synkronisering, dock blir fördelen mindre uppenbar för de flesta användningsområdena efter den initiala synkroniseringen. En lägre storlek på databasens cacheminne minskar minnesanvändningen. Mempoolens outnyttjade minne delas med denna cache. + + + Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. + Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. + Sätt antalet trådar för skriptverifiering. Negativa värden motsvarar antalet kärnor som skall lämnas tillgängliga för systemet. + (0 = auto, <0 = leave that many cores free) (0 = auto, <0 = lämna så många kärnor lediga) + + This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. + Tooltip text for Options window setting that enables the RPC server. + Detta tillåter dig eller ett tredjepartsverktyg att kommunicera med noden genom kommandotolken och JSON-RPC-kommandon. + Enable R&PC server An Options window setting to enable the RPC server. diff --git a/src/qt/locale/bitcoin_sw.ts b/src/qt/locale/bitcoin_sw.ts index 499eb68538..094f16d75e 100644 --- a/src/qt/locale/bitcoin_sw.ts +++ b/src/qt/locale/bitcoin_sw.ts @@ -356,6 +356,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. About &Qt Kuhusu &Qt + + Show information about Qt + Onyesha habari kuhusu Qt + Modify configuration options for %1 Badilisha chaguo za usanidi kwa %1 @@ -397,6 +401,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. &Send &TUMA + + &Receive + &Pokea + &Options… &Chaguo... @@ -496,11 +504,39 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. + + Transactions after this will not yet be visible. + Shughuli baada ya hii bado hazitaonekana. + + + Error + Kosa + + + Warning + Onyo + + + Information + Habari + + + Open Wallet + Fungua Pochi + + + Close wallet + Funga pochi + Wallet Name Label of the input field where the name of the wallet is entered. Jina la Wallet + + &Hide + &Ficha + %n active connection(s) to Bitcoin network. A substring of the tooltip. @@ -525,6 +561,18 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Quantity: Wingi + + Amount: + Kiasi: + + + Fee: + Ada: + + + After Fee: + Baada ya Ada + Received with label Imepokelewa na chapa @@ -538,6 +586,14 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. (hamna chapa) + + OpenWalletActivity + + Open Wallet + Title of window indicating the progress of opening of a wallet. + Fungua Pochi + + RestoreWalletActivity @@ -548,6 +604,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. WalletController + + Close wallet + Funga Pochi + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. Kufunga pochi kwa muda mrefu sana kunaweza kusababisha kusawazisha tena mnyororo mzima ikiwa upogoaji umewezeshwa. @@ -657,6 +717,17 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. + + Error + Onyo + + + + OptionsDialog + + Error + Onyo + PeerTableModel @@ -698,6 +769,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. ReceiveRequestDialog + + Amount: + Kiasi: + Label: Chapa: @@ -724,6 +799,18 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Quantity: Wingi + + Amount: + Kiasi: + + + Fee: + Ada: + + + After Fee: + Baada ya Ada + Estimated to begin confirmation within %n block(s). @@ -818,6 +905,10 @@ Kutia sahihi kunawezekana tu kwa anwani za aina ya 'urithi'. Create a new wallet Unda mkoba mpya + + Error + Onyo + WalletView diff --git a/src/qt/locale/bitcoin_tl.ts b/src/qt/locale/bitcoin_tl.ts index aaa9d64ccd..6cacbdd75f 100644 --- a/src/qt/locale/bitcoin_tl.ts +++ b/src/qt/locale/bitcoin_tl.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - pindutin lamang ang kanang pindutan upang i-edit ang address o label + pindutin lamang ang kanang pindutan upang i-edit ang address o label. Create a new address @@ -23,7 +23,7 @@ C&lose - Isara + (Do you mean: Close?) :isara, sarado Delete the currently selected address from the list @@ -55,7 +55,7 @@ C&hoose - &Pumili + (do you mean: CHOOSE?) ;Pumili,Piliin. These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. diff --git a/src/qt/locale/bitcoin_ur.ts b/src/qt/locale/bitcoin_ur.ts index c0ff575864..b68d48c60a 100644 --- a/src/qt/locale/bitcoin_ur.ts +++ b/src/qt/locale/bitcoin_ur.ts @@ -3,11 +3,7 @@ AddressBookPage Create a new address - نیا پتہ تخلیق کریں - - - &New - اور نیا + نیا ایڈریس بنائیں Copy the currently selected address to the system clipboard diff --git a/src/qt/locale/bitcoin_yue.ts b/src/qt/locale/bitcoin_yue.ts index f295184944..0fa47df893 100644 --- a/src/qt/locale/bitcoin_yue.ts +++ b/src/qt/locale/bitcoin_yue.ts @@ -800,7 +800,7 @@ Signing is only possible with addresses of the type 'legacy'. %n active connection(s) to Bitcoin network. A substring of the tooltip. - + %n 与比特币网络接。 @@ -4503,6 +4503,10 @@ Unable to restore backup of wallet. Insufficient dbcache for block verification dbcache不足以用于区块验证 + + Insufficient funds + 金额不足 + Invalid -i2psam address or hostname: '%s' 无效的 -i2psam 地址或主机名: '%s' diff --git a/src/qt/locale/bitcoin_zh-Hans.ts b/src/qt/locale/bitcoin_zh-Hans.ts index bea04d0133..4fb17e4582 100644 --- a/src/qt/locale/bitcoin_zh-Hans.ts +++ b/src/qt/locale/bitcoin_zh-Hans.ts @@ -611,7 +611,7 @@ Signing is only possible with addresses of the type 'legacy'. Connecting to peers… - 连到同行... + 连接到节点... Request payments (generates QR codes and bitcoin: URIs) diff --git a/src/qt/locale/bitcoin_zh-Hant.ts b/src/qt/locale/bitcoin_zh-Hant.ts index e9de84f7cb..1849d76e9d 100644 --- a/src/qt/locale/bitcoin_zh-Hant.ts +++ b/src/qt/locale/bitcoin_zh-Hant.ts @@ -4531,6 +4531,10 @@ Unable to restore backup of wallet. Insufficient dbcache for block verification dbcache不足以用于区块验证 + + Insufficient funds + 金额不足 + Invalid -i2psam address or hostname: '%s' 无效的 -i2psam 地址或主机名: '%s' diff --git a/src/qt/locale/bitcoin_zh.ts b/src/qt/locale/bitcoin_zh.ts index 80da4e3f08..b67fcc1cc9 100644 --- a/src/qt/locale/bitcoin_zh.ts +++ b/src/qt/locale/bitcoin_zh.ts @@ -49,10 +49,6 @@ Choose the address to send coins to 选择收款人地址 - - Choose the address to receive coins with - 选择接收比特币地址 - C&hoose 选择(&H) @@ -97,10 +93,6 @@ Signing is only possible with addresses of the type 'legacy'. Sending addresses - %1 付款地址 - %1 - - Receiving addresses - %1 - 收款地址 - %1 - Exporting Failed 导出失败 @@ -1352,6 +1344,10 @@ The migration process will create a backup of the wallet before migrating. This Unknown. Syncing Headers (%1, %2%)… 未知。同步區塊標頭(%1, %2%)中... + + %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. + %1 當前正在同步。它將從peers下載區塊頭和區塊,並對其進行驗證,直到到達區塊鏈的頂為止。 + Unknown. Pre-syncing Headers (%1, %2%)… 不明。正在預先同步標頭(%1, %2%)... @@ -4371,6 +4367,10 @@ Unable to restore backup of wallet. Insufficient dbcache for block verification dbcache不足以用于区块验证 + + Insufficient funds + 金额不足 + Invalid amount for %s=<amount>: '%s' (must be at least %s) %s=<amount>: '%s' 中指定了非法的金额 (必须至少达到 %s) diff --git a/src/qt/locale/bitcoin_zh_HK.ts b/src/qt/locale/bitcoin_zh_HK.ts index 4c5a496b3c..862763b55c 100644 --- a/src/qt/locale/bitcoin_zh_HK.ts +++ b/src/qt/locale/bitcoin_zh_HK.ts @@ -4574,6 +4574,10 @@ Unable to restore backup of wallet. Insufficient dbcache for block verification dbcache不足以用于区块验证 + + Insufficient funds + 金额不足 + Invalid -i2psam address or hostname: '%s' 无效的 -i2psam 地址或主机名: '%s' diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp index 97d58dd6b4..bedbfd9266 100644 --- a/src/qt/receivecoinsdialog.cpp +++ b/src/qt/receivecoinsdialog.cpp @@ -97,7 +97,6 @@ void ReceiveCoinsDialog::setModel(WalletModel *_model) // Blackcoin: hide SegWit address types before SegWit activation if (!(model->wallet().getDefaultAddressType() == OutputType::LEGACY)) { - add_address_type(OutputType::P2SH_SEGWIT, tr("Base58 (P2SH-SegWit)"), tr("Generates an address compatible with older wallets.")); add_address_type(OutputType::BECH32, tr("Bech32 (SegWit)"), tr("Generates a native segwit address (BIP-173). Some old wallets don't support it.")); if (model->wallet().taprootEnabled()) { add_address_type(OutputType::BECH32M, tr("Bech32m (Taproot)"), tr("Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited.")); diff --git a/src/rpc/signmessage.cpp b/src/rpc/signmessage.cpp index 8c752ba1fd..43df1c8cb0 100644 --- a/src/rpc/signmessage.cpp +++ b/src/rpc/signmessage.cpp @@ -30,11 +30,11 @@ static RPCHelpMan verifymessage() "\nUnlock the wallet for 30 seconds\n" + HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + "\nCreate the signature\n" - + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") + + + HelpExampleCli("signmessage", "\"BKDvboD1CzZ5KycP1FRSXRoi7XXhHoQhS1\" \"my message\"") + "\nVerify the signature\n" - + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") + + + HelpExampleCli("verifymessage", "\"BKDvboD1CzZ5KycP1FRSXRoi7XXhHoQhS1\" \"signature\" \"my message\"") + "\nAs a JSON-RPC call\n" - + HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"signature\", \"my message\"") + + HelpExampleRpc("verifymessage", "\"BKDvboD1CzZ5KycP1FRSXRoi7XXhHoQhS1\", \"signature\", \"my message\"") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { @@ -76,7 +76,7 @@ static RPCHelpMan signmessagewithprivkey() "\nCreate the signature\n" + HelpExampleCli("signmessagewithprivkey", "\"privkey\" \"my message\"") + "\nVerify the signature\n" - + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") + + + HelpExampleCli("verifymessage", "\"BKDvboD1CzZ5KycP1FRSXRoi7XXhHoQhS1\" \"signature\" \"my message\"") + "\nAs a JSON-RPC call\n" + HelpExampleRpc("signmessagewithprivkey", "\"privkey\", \"my message\"") }, diff --git a/src/rpc/util.cpp b/src/rpc/util.cpp index d46ab95f2f..08d96bd8ea 100644 --- a/src/rpc/util.cpp +++ b/src/rpc/util.cpp @@ -28,7 +28,7 @@ #include const std::string UNIX_EPOCH_TIME = "UNIX epoch time"; -const std::string EXAMPLE_ADDRESS[2] = {"bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl", "bc1q02ad21edsxd23d32dfgqqsz4vv4nmtfzuklhy3"}; +const std::string EXAMPLE_ADDRESS[2] = {"blk1q78xzdaswnz06yeu4ukvw5yhvhfwe4v2uzq9dmd", "blk1q39kshvz5srh0c24rfgyf4q82fn3kwvtn05x9q3"}; std::string GetAllOutputTypes() { diff --git a/src/validation.cpp b/src/validation.cpp index 3bd6d24f11..d455566bd3 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -784,7 +784,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) { const CTransaction* ptxConflicting = m_pool.GetConflictTx(txin.prevout); if (ptxConflicting) { - // Disable replacement feature for now + // Blackcoin: Disable replacement feature for now return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "txn-mempool-conflict"); } } @@ -2184,14 +2184,15 @@ static unsigned int GetBlockScriptFlags(const CBlockIndex& block_index, const Ch } // Enforce WITNESS rules whenever P2SH is in effect (and the segwit - // deployment is defined). - if (flags & SCRIPT_VERIFY_P2SH && DeploymentEnabled(consensusparams, Consensus::DEPLOYMENT_SEGWIT)) { + // deployment is active). + if (flags & SCRIPT_VERIFY_P2SH && DeploymentActiveAt(block_index, chainman, Consensus::DEPLOYMENT_SEGWIT)) { flags |= SCRIPT_VERIFY_WITNESS; } - // Enforce CHECKLOCKTIMEVERIFY (BIP65) + // Enforce CHECKLOCKTIMEVERIFY (BIP65) and BIP147 NULLDUMMY if (consensusparams.IsProtocolV3(block_index.GetBlockTime())) { flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY; + flags |= SCRIPT_VERIFY_NULLDUMMY; } // Enforce CHECKSEQUENCEVERIFY (BIP112) @@ -2204,11 +2205,6 @@ static unsigned int GetBlockScriptFlags(const CBlockIndex& block_index, const Ch flags |= SCRIPT_VERIFY_TAPROOT; } - // Enforce BIP147 NULLDUMMY (activated simultaneously with CLTV) - if (consensusparams.IsProtocolV3(block_index.GetBlockTime())) { - flags |= SCRIPT_VERIFY_NULLDUMMY; - } - return flags; } @@ -3758,6 +3754,8 @@ bool CheckBlock(const CBlock& block, BlockValidationState& state, const Consensu // All potential-corruption validation must be done before we do any // transaction validation, as otherwise we may mark the header as invalid // because we receive the wrong transactions for it. + // Note that witness malleability is checked in ContextualCheckBlock, so no + // checks that use witness data may be performed here. // Size limits if (block.vtx.empty() || block.vtx.size() * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT || ::GetSerializeSize(TX_NO_WITNESS(block)) * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT) diff --git a/src/wallet/rpc/addresses.cpp b/src/wallet/rpc/addresses.cpp index 5181d4dadc..e4ca8108d5 100644 --- a/src/wallet/rpc/addresses.cpp +++ b/src/wallet/rpc/addresses.cpp @@ -58,6 +58,11 @@ RPCHelpMan getnewaddress() throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Unknown address type '%s'", request.params[1].get_str())); } else if (parsed.value() == OutputType::BECH32M && pwallet->GetLegacyScriptPubKeyMan()) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Legacy wallets cannot provide bech32m addresses"); + } else if (parsed.value() == OutputType::P2SH_SEGWIT) { + throw JSONRPCError(RPC_INVALID_PARAMETER, "P2SH_SEGWIT addresses are not welcome"); + //Blackcoin todo : remove after taproot activation + } else if (parsed.value() == OutputType::BECH32M) { + throw JSONRPCError(RPC_INVALID_PARAMETER, "Taproot addresses (bech32m) are not supported yet"); } output_type = parsed.value(); } diff --git a/src/wallet/rpc/signmessage.cpp b/src/wallet/rpc/signmessage.cpp index 9084f15f1d..8ac82b1318 100644 --- a/src/wallet/rpc/signmessage.cpp +++ b/src/wallet/rpc/signmessage.cpp @@ -27,11 +27,11 @@ RPCHelpMan signmessage() "\nUnlock the wallet for 30 seconds\n" + HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + "\nCreate the signature\n" - + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") + + + HelpExampleCli("signmessage", "\"BKDvboD1CzZ5KycP1FRSXRoi7XXhHoQhS1\" \"my message\"") + "\nVerify the signature\n" - + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") + + + HelpExampleCli("verifymessage", "\"BKDvboD1CzZ5KycP1FRSXRoi7XXhHoQhS1\" \"signature\" \"my message\"") + "\nAs a JSON-RPC call\n" - + HelpExampleRpc("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"my message\"") + + HelpExampleRpc("signmessage", "\"BKDvboD1CzZ5KycP1FRSXRoi7XXhHoQhS1\", \"my message\"") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { diff --git a/src/wallet/rpc/spend.cpp b/src/wallet/rpc/spend.cpp index 8ed669d687..4e95853d3d 100644 --- a/src/wallet/rpc/spend.cpp +++ b/src/wallet/rpc/spend.cpp @@ -346,8 +346,8 @@ RPCHelpMan optimizeutxoset() "\nOptimize the UTXO set in order to maximize the PoS yield. This is only valid for continuous minting. The accumulated coinage will be reset!" + HELP_REQUIRING_PASSPHRASE, { - {"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The peercoin address to recieve all the new UTXOs. If not provided, new UTOXs will be assigned to the address of the input UTXOs."}, - {"amount", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "The " + CURRENCY_UNIT + " amount to set the value of new UTXOs, i.e. make new UTXOs with value of 110. If amount is not provided, hardcoded value will be used."}, + {"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The blackcoin address to recieve all the new UTXOs. If not provided, new UTOXs will be assigned to the address of the input UTXOs."}, + {"amount", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "The " + CURRENCY_UNIT + " amount to set the value of new UTXOs, i.e. make new UTXOs with value of 1000. If amount is not provided, hardcoded value will be used."}, {"transmit", RPCArg::Type::BOOL, RPCArg::Default{false}, "If true, transmit transaction after generating it."}, {"fromAddress", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "The blackcoin address to split coins from. If not provided, all available coins will be used."}, }, @@ -366,8 +366,8 @@ RPCHelpMan optimizeutxoset() }, }, RPCExamples{ - "\nTrigger UTXO optimization and assign all the new UTXOs to some peercoin address with user defined UTXO value\n" - + HelpExampleCli("optimizeutxoset", EXAMPLE_ADDRESS[0] + " 110") + "\nTrigger UTXO optimization and assign all the new UTXOs to some blackcoin address with user defined UTXO value\n" + + HelpExampleCli("optimizeutxoset", EXAMPLE_ADDRESS[0] + " 1000") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { diff --git a/src/wallet/rpc/transactions.cpp b/src/wallet/rpc/transactions.cpp index 6879b28c16..9f31ac4f03 100644 --- a/src/wallet/rpc/transactions.cpp +++ b/src/wallet/rpc/transactions.cpp @@ -561,8 +561,8 @@ RPCHelpMan listsinceblock() {RPCResult::Type::STR, "category", "The transaction category.\n" "\"send\" Transactions sent.\n" "\"receive\" Non-coinbase and non-coinstake transactions received.\n" - "\"generate\" Coinbase or coinstake transactions received with more than 100 confirmations.\n" - "\"immature\" Coinbase or coinstake transactions received with 100 or fewer confirmations.\n" + "\"generate\" Coinbase or coinstake transactions received with more than 500 confirmations.\n" + "\"immature\" Coinbase or coinstake transactions received with 500 or fewer confirmations.\n" "\"orphan\" Orphaned coinbase or coinstake transactions received."}, {RPCResult::Type::STR_AMOUNT, "amount", "The amount in " + CURRENCY_UNIT + ". This is negative for the 'send' category, and is positive\n" "for all other categories"}, diff --git a/src/wallet/scriptpubkeyman.cpp b/src/wallet/scriptpubkeyman.cpp index 2e4f7e5e8c..dc4a8653bb 100644 --- a/src/wallet/scriptpubkeyman.cpp +++ b/src/wallet/scriptpubkeyman.cpp @@ -2351,7 +2351,8 @@ bool DescriptorScriptPubKeyMan::SetupDescriptorGeneration(WalletBatch& batch, co if (Params().IsTestChain()) { desc_prefix += "/1h"; } else { - desc_prefix += "/0h"; + // Blackcoin: Use BIP44 value according to https://github.com/satoshilabs/slips/blob/master/slip-0044.md + desc_prefix += "/10h"; } std::string internal_path = internal ? "/1" : "/0"; diff --git a/src/wallet/staking.cpp b/src/wallet/staking.cpp index de73a02154..7e01a5d8d0 100644 --- a/src/wallet/staking.cpp +++ b/src/wallet/staking.cpp @@ -245,7 +245,7 @@ bool SelectCoinsForStaking(const CWallet& wallet, CAmount& nTargetValue, std::se // peercoin: create coin stake transaction typedef std::vector valtype; -bool CreateCoinStake(CWallet& wallet, unsigned int nBits, int64_t nSearchInterval, CMutableTransaction& txNew, CAmount& nFees) +bool CreateCoinStake(CWallet& wallet, unsigned int nBits, int64_t nSearchInterval, CMutableTransaction& txNew, CAmount& nFees, CTxDestination destination) { bool fAllowWatchOnly = wallet.IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS); CBlockIndex* pindexPrev = wallet.chain().getTip(); @@ -355,17 +355,8 @@ bool CreateCoinStake(CWallet& wallet, unsigned int nBits, int64_t nSearchInterva scriptPubKeyOut = scriptPubKeyKernel; else if (whichType == TxoutType::WITNESS_V0_KEYHASH || whichType == TxoutType::WITNESS_V1_TAPROOT) // pay to witness keyhash { - // prepare reserve destination in case we need to use it for handling non legacy inputs - CTxDestination dest; - ReserveDestination reservedest(&wallet, OutputType::LEGACY); - auto op_dest = reservedest.GetReservedDestination(true); - if (!op_dest) { - LogPrintf("Error: Keypool ran out, please call keypoolrefill first.\n"); - break; - } - dest = *op_dest; std::vector vSolutionsTmp; - CScript scriptPubKeyTmp = GetScriptForDestination(dest); + CScript scriptPubKeyTmp = GetScriptForDestination(destination); Solver(scriptPubKeyTmp, vSolutionsTmp); std::unique_ptr provider = wallet.GetSolvingProvider(scriptPubKeyTmp); if (!provider) { diff --git a/src/wallet/staking.h b/src/wallet/staking.h index a0c58003d4..2b4074835e 100644 --- a/src/wallet/staking.h +++ b/src/wallet/staking.h @@ -24,7 +24,7 @@ void AvailableCoinsForStaking(const CWallet& wallet, const CCoinControl* coinControl = nullptr, const CoinFilterParams& params = {}) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet); bool SelectCoinsForStaking(const CWallet& wallet, CAmount& nTargetValue, std::set > &setCoinsRet, CAmount& nValueRet); -bool CreateCoinStake(CWallet& wallet, unsigned int nBits, int64_t nSearchInterval, CMutableTransaction& tx, CAmount& nFees); +bool CreateCoinStake(CWallet& wallet, unsigned int nBits, int64_t nSearchInterval, CMutableTransaction& tx, CAmount& nFees, CTxDestination destination); } // namespace wallet diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 39f5edb05a..54478545fc 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1075,8 +1075,8 @@ CWalletTx* CWallet::AddToWallet(CTransactionRef tx, const TxState& state, const } } - // Mark inactive coinbase transactions and their descendants as abandoned - if (wtx.IsCoinBase() && wtx.isInactive()) { + // Mark inactive coinbase and coinstake transactions and their descendants as abandoned + if ((wtx.IsCoinBase() || wtx.IsCoinStake()) && wtx.isInactive()) { std::vector txs{&wtx}; TxStateInactive inactive_state = TxStateInactive{/*abandoned=*/true}; @@ -1491,6 +1491,9 @@ void CWallet::blockDisconnected(const interfaces::BlockInfo& block) } } } + + // Blackcoin - Call to abandon orphaned coinstakes after handling disconnections + AbandonOrphanedCoinstakes(); } void CWallet::updatedBlockTip() @@ -3178,9 +3181,6 @@ std::shared_ptr CWallet::Create(WalletContext& context, const std::stri walletInstance->WalletLogPrintf("m_address_book.size() = %u\n", walletInstance->m_address_book.size()); } - // Flush orphaned coinstakes - walletInstance->AbandonOrphanedCoinstakes(); - return walletInstance; }