@dashevo/dash-spv 5.1.0 → 5.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.ultra.cache.json CHANGED
@@ -1 +1 @@
1
- {"files":{".gitignore":"095d365a56f423d4fab2345c95c137e7c6ea45c0",".mocharc.yml":"f6d924f143da5bc22530e55dcec6922aff69d8e1","LICENSE":"95bf3c7cb642fb61c1bbbb319fd3c83e47a5af96","README.md":"3659fd1bfb44b5e6916679ae586ccbff18683e59","config/config.js":"267c3536b5fe54c88080a56241c34d7393a54ac2","eslint.config.mjs":"cdf50e57d0d206e17f37b855643f55f73717fcd2","index.js":"4413accedb71ffb73ea7ce4ad45a2035c2ce92ca","lib/blockstore.js":"1ed82a8c1cfb4bc3aa96f0669a27c94d2e76b164","lib/consensus.js":"28c3963e8d70d824ed8d6af8fef9062e35f6273b","lib/errors/SPVError.js":"08b7af972c146bcdf29ffaa06eb90ca2c5660914","lib/merkleproofs.js":"1bba2c774e52e3cdfd4b99973c11229e6cf2cf6d","lib/spvchain.js":"314adc7f2e810bcceb5f30f4c90b6e566cf7650a","lib/test/bootstrap.js":"e2b2b2b17a9bf0ebff7721d8cb1e5cb75efb0f0f","lib/utils.js":"4ca99de11dd84867be29f1bab1ef09000fa8b5df","lib/x11.js":"d85e555bad579a8b3e2e92447331933ce9b0c4b1","package.json":"90303fd035808cfdd0ae6484adee03c85493a6ac","test/data/headers.js":"eb9cae85ee11027338fbf1f69e373d22388286d6","test/data/merkleproofs.js":"49ea4c29fb1f0cf6378ed7ee46b0a1db3bb555c1","test/data/rawHeaders.js":"03fed6ca2f8c2d1b63cfa13743431a2d551c7ad9","test/index.js":"1a15df18c1354fcea8015947ed43ac89ab1e7c25","test/spvchain.js":"f6441870e91b7faf2e6b23d034f40d007a697652"},"deps":{}}
1
+ {"files":{".gitignore":"095d365a56f423d4fab2345c95c137e7c6ea45c0",".mocharc.yml":"f6d924f143da5bc22530e55dcec6922aff69d8e1","LICENSE":"95bf3c7cb642fb61c1bbbb319fd3c83e47a5af96","README.md":"3659fd1bfb44b5e6916679ae586ccbff18683e59","config/config.js":"267c3536b5fe54c88080a56241c34d7393a54ac2","eslint.config.mjs":"cdf50e57d0d206e17f37b855643f55f73717fcd2","index.js":"4413accedb71ffb73ea7ce4ad45a2035c2ce92ca","lib/blockstore.js":"1ed82a8c1cfb4bc3aa96f0669a27c94d2e76b164","lib/consensus.js":"8e9bbb54c55ae3cf3d4caceca6f299635d1904bf","lib/errors/SPVError.js":"08b7af972c146bcdf29ffaa06eb90ca2c5660914","lib/merkleproofs.js":"1bba2c774e52e3cdfd4b99973c11229e6cf2cf6d","lib/spvchain.js":"314adc7f2e810bcceb5f30f4c90b6e566cf7650a","lib/test/bootstrap.js":"e2b2b2b17a9bf0ebff7721d8cb1e5cb75efb0f0f","lib/utils.js":"4ca99de11dd84867be29f1bab1ef09000fa8b5df","lib/x11.js":"d85e555bad579a8b3e2e92447331933ce9b0c4b1","package.json":"54923ac7f6d0868e6f5450fe391966530edd4a67","test/data/headers.js":"eb9cae85ee11027338fbf1f69e373d22388286d6","test/data/merkleproofs.js":"49ea4c29fb1f0cf6378ed7ee46b0a1db3bb555c1","test/data/rawHeaders.js":"03fed6ca2f8c2d1b63cfa13743431a2d551c7ad9","test/index.js":"00e843c3cd1f055dc3b9004a28e3a77dbb58db1a","test/spvchain.js":"f6441870e91b7faf2e6b23d034f40d007a697652"},"deps":{}}
package/lib/consensus.js CHANGED
@@ -65,6 +65,12 @@ function isValidBlockHeader(newHeader, previousHeaders, network = 'mainnet') {
65
65
  return false;
66
66
  }
67
67
 
68
+ // Dash Core disables difficulty retargeting on regtest.
69
+ if (network === 'regtest' && normalizedPreviousHeaders.length > 0) {
70
+ const previousHeader = normalizedPreviousHeaders[normalizedPreviousHeaders.length - 1];
71
+ return normalizedHeader.bits === previousHeader.bits;
72
+ }
73
+
68
74
  // A trusted checkpoint may contain fewer than a full DGW window. Proof of
69
75
  // work, the network pow limit, and timestamp rules still apply immediately;
70
76
  // exact difficulty validation begins as soon as the required history exists.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dashevo/dash-spv",
3
- "version": "5.1.0",
3
+ "version": "5.2.0-beta.1",
4
4
  "description": "Repository containing SPV functions used by @dashevo",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/test/index.js CHANGED
@@ -159,6 +159,27 @@ describe('Block header consensus validation', () => {
159
159
  consensus.isValidBlockHeader(nextHeader, wrongHistory, 'mainnet')
160
160
  .should.equal(false);
161
161
  });
162
+
163
+ it('should accept fast-mined regtest headers when Core retargeting is disabled', () => {
164
+ const previousHeaders = [new Blockchain('regtest').genesis];
165
+
166
+ while (previousHeaders.length < 24) {
167
+ previousHeaders.push(utils.createBlock(previousHeaders.at(-1), 0x207fffff));
168
+ }
169
+
170
+ const nextHeader = utils.createBlock(previousHeaders.at(-1), 0x207fffff);
171
+
172
+ consensus.isValidBlockHeader(nextHeader, previousHeaders, 'regtest')
173
+ .should.equal(true);
174
+ });
175
+
176
+ it('should reject a changed regtest target before the DGW history window', () => {
177
+ const { genesis } = new Blockchain('regtest');
178
+ const changedTargetHeader = utils.createBlock(genesis, 0x2070ffff);
179
+
180
+ consensus.isValidBlockHeader(changedTargetHeader, [genesis], 'regtest')
181
+ .should.equal(false);
182
+ });
162
183
  });
163
184
 
164
185
  describe('SPV-DASH (addHeaders) add many headers for testnet', () => {