Skip to content

Releases: HathorNetwork/hathor-core

v0.67.1

29 Oct 16:53
v0.67.1
d256757

Choose a tag to compare

This release introduces nano-contracts to the mainnet, through a feature activation that could activate as early as Nov 18th. The API for writing nano-contract blueprints has changed significantly and thus this release was made not compatible with testnet-hotel, and now a new testnet (testnet-india) was released where nano-contracts are already available.

Features

  • feat(block-template): shuffle possible tx-parents to avoid bias #1439
  • feat(cli): add hidden CLI option to show nc-exec fail traces #1444
  • feat(consensus): Add new verifications for mempool only #1379
  • feat(dynamic-transaction-model): create fee tokens in nano #1350
  • feat(dynamic-transaction-model): fee header #1412
  • feat(dynamic-transaction-model): fee verification using fee header and nc #1415
  • feat(dynamic-transaction-model): nc actions fees #1406
  • feat(fees): add fee header support #1414
  • feat(nano): Add a mempool verification to check allowed actions #1440
  • feat(nano): add support for proxy view calls #1472
  • feat(nano): implement new get_current_code_blueprint_id syscall #1471
  • feat(nano): improve syscalls and accessor APIs #1451
  • feat(nano): include header-id when generating a sighash #1478
  • feat(nano): key-mangling continuation #1417
  • feat(nano): remove create_token syscall alias #1404
  • feat(nano): remove support for using blueprint in OCB code #1397
  • feat(nano): restrict usage of float and complex numbers #1396
  • feat(serialization): add Exponential-Continuation Varint implementation #1405
  • feat(verification): Forbid transactions in the mempool that spend from voided outputs that are confirmed #1443
  • feat(verification): Limit the number of conflicts in mempool #1436
  • feat: add custom check to prevent is with enums #1450
  • feat: fee payment update tokens indexes #1456

Fixes

  • fix(nano): API was not processing initialize method correctly #1433
  • fix(nano): avoid exception when generating json #1421
  • fix(nano): Fix NCCreationResource to get contract information from the global state #1425
  • fix(nano): allow create token and withdraw on same tx #1454
  • fix(nano): fix calls to get_balance on other contracts #1452
  • fix(nano): improve error handling #1468
  • fix(wallet): publish events for affected inputs #1435
  • fix: add missing mempool cleanup rules #1464
  • fix: add missing validation on token_history API #1461
  • fix: update tx parents generation #1448

Chores

  • chore(nano): remove deprecated ctx.timestamp #1413
  • chore(nano): set up feature activation for Nanocontracts #1465
  • chore: add reorg log #1253
  • chore: create new testnet-india for nano launch #1453
  • chore: update nano activation settings #1477
  • refactor(consensus): Replace context.reorg_common_block by context.reorg_info #1442
  • refactor(fees): simplify fee abstractions #1469
  • refactor(nano): move all imports to hathor #1401
  • refactor(nano): simplify index records #1460
  • refactor: improve tests reliability #1458
  • tests(nano): add missing tests for new accessors #1457
  • tests: add new tx parents tests and fix flakies #1455

v0.66.1

21 Oct 15:48
v0.66.1
73e2fea

Choose a tag to compare

This release has several improvements on the implementation and behavior of the nanocontracts engine. It is also the last release to support the testnet-hotel and testnet-golf. The next release will only support mainnet and a new testnet-india.

Features

  • feat(cli): command to dump nc-storage #1420
  • feat(consensus): Add new verifications for mempool only #1379
  • feat(core): fee token creation #1255
  • feat(nano): Add salt to tokens created by contracts #1398
  • feat(nano): add str utils for Address class #1391
  • feat(nano): change internal storage hashing to sha256 #1378
  • feat(nano): implement contract accessor #1382
  • feat(nano): implement feature activation handling #1410
  • feat(nano): implement sha3 and verify_ecdsa functions #1403
  • feat(nano): reduce NC_EVENT max size to 1KiB #1394
  • feat(nano): remove Context.timestamp and move BlockData to Context #1381
  • feat(nano): support key mangling for nested container fields #1312
  • feat(nano): use decorator to export a Blueprint #1395
  • feat(nano): use more custom classes with faux protection #1388
  • feat(p2p): add commands to query the nano state of a peer #1411

Fixes

  • fix(nano): API was not processing initialize method correctly #1433
  • fix(nano): Fix NCCreationResource to get contract information from the global state #1425
  • fix(nano): Method.from_callable could leak StopIteration #1376
  • fix(nano): clean up mempool after reorg #1409
  • fix(nano): compatibility with testnet-hotel #1422
  • fix(nano): initialization of block root ids #1418
  • fix(nano): parse error for melt tokens #1423
  • fix(nano): protect disabled builtin functions and fix oct #1363
  • fix(nano): temporary alias to keep compatibility with testnet-hotel #1402
  • fix: fullnode could stall and run out of memory #1462
  • fix: token version verification #1426

Chores

  • chore(nano): avoid storage incompatibility when nano is not enabled #1428
  • chore(nano): migration to prevent use of incompatible storage #1380
  • chore: Fix typo in StrNCType #1375
  • refactor(indexes): improve mempool tips index #1399
  • tests(nano): increase coverage #1377
  • tests(nano): test actions order #1354

v0.65.1

29 Aug 16:03
v0.65.1
72500e4

Choose a tag to compare

This release fixes the /version API, where the value of nano_contracts_enabled was the settings value and not the actual boolean state of the network. This fix affects whether wallets/explorer will turn on nanocontract related UI.

Fixes

  • fix(nano): fix nano_contracts_enabled on /version api #1387

v0.65.0

25 Aug 15:48
v0.65.0
0f35894

Choose a tag to compare

This is our largest release so far. The majority of changes are related to the inclusion of nanocontracts code that was previously being developed in a separate repository. This release marks the merging of nanocontracts to the main repository, and now it has been activated on the testnet (which is now the testnet-hotel, forked from testnet-golf, which is still supported in this release but will be removed).

Features

  • feat(dag-builder): improve DAGBuilder #1225
  • feat(events): change empty decoded from None to empty dict #1250
  • feat(nano): Add reentrancy protection by default #1335
  • feat(nano): add check-blueprint CLI #1315
  • feat(nano): add indexes and more [part 7] #1284
  • feat(nano): add parsed script to tx output data #1338
  • feat(nano): add recent changes [part 17] #1301
  • feat(nano): block usage of more builtins #1344
  • feat(nano): change ctx.address to ctx.caller_id and add support in NC types #1359
  • feat(nano): enable nano contracts on testnet-hotel #1323
  • feat(nano): extend OCB restrictions #1347
  • feat(nano): generalize faux-immutability #1349
  • feat(nano): implement consensus [part 13] #1290
  • feat(nano): implement fields module [part 5] #1280
  • feat(nano): implement fundamental nano structures [part 2] #1277
  • feat(nano): implement headers support [part 9] #1286
  • feat(nano): implement more fundamental structures [part 6] #1281
  • feat(nano): implement nc_types module [part 3] #1278
  • feat(nano): implement new metadata [part 10] #1287
  • feat(nano): implement resources and events [part 12] #1289
  • feat(nano): implement runner [part 11] #1288
  • feat(nano): implement serialization module [part 1] #1276
  • feat(nano): implement storage module [part 4] #1279
  • feat(nano): miscellaneous changes [part 8] #1285
  • feat(nano): validate types across contracts #1334
  • feat(p2p): Add misbehavior score for unsolicited vertices #1296
  • feat(vertex_handler): Improve new vertex log #1224
  • feat: add --temp-data CLI option #1228
  • feat: add config for testnet-hotel #1322
  • feat: add nano header to event queue events #1314
  • feat: add skip verification setting #1353

Fixes

  • fix(cli): quick-test subcommand regression after VertexHandler refactor #1298
  • fix(cli): regression on run_node --help #1220
  • fix(events): nano scenarios on simulator #1325
  • fix(events): nano scenarios on simulator when using Docker #1326
  • fix(metrics): websocket metrics was not being updated #1221
  • fix(nano): Stop sharing NanoRNG object between contracts #1333
  • fix(nano): allow fallback-related types on OCBs #1339
  • fix(nano): allow import CallerId on OCBs #1364
  • fix(nano): authority handling on indexes with contracts #1337
  • fix(nano): fix NC context on tx API #1368
  • fix(nano): incorrect lower bound in _SizedIntNCType #1317
  • fix(nano): non-idempotent indexes handling #1313
  • fix(nano): state API regression after ctx.address refactor #1367
  • fix(nano): use Uint32 for Timestamp instead of Int32 #1316
  • fix: bug in disable history streaming #1329
  • fix: regression when changing the default testnet #1357
  • fix: update python-rocksdb #1244

Chores

  • chore(gitignore): ignore coverage, keys.json, and .idea files #1257
  • chore(nano): config for nano-testnet-bravo #1306
  • chore(nano): remove deprecated get_balance #1327
  • chore: Adjust '/nano_contract/state' and '/get_block_template' rate limits #1310
  • chore: Improve HathorSettings imports #1223
  • chore: accept -alpha.N and -beta.N pre-release tags #1307
  • chore: add localnet config #1246
  • chore: add make fix-rocksdb command #1254
  • chore: add new allowed OCB address #1308
  • chore: bump version to v0.64.0 #1303
  • chore: bump version to v0.65.0 #1365
  • chore: increase activation window for new feature #1370
  • chore: make testnet-hotel the default testnet #1356
  • chore: override nginx config for Nano-Testnet Bravo #1332
  • chore: prepare feature-activations for release #1351
  • chore: prepare for rc.3 #1360
  • chore: remove Python 3.10 support #1282
  • chore: update hathorlib to v0.10.0 #1283
  • chore: update hathorlib to v0.11.0 #1300
  • chore: update hathorlib to v0.8.1 #1263
  • chore: update hathorlib to v0.9.0 #1273
  • chore: update hathorlib to v0.9.1 #1274
  • chore: update poetry lock file so python-rocksdb is v0.9.3 #1251
  • chore: update python-hathorlib to 0.8.0 #1261
  • refactor(consensus): Split on_new_vertex() and remove fails_silently #1295
  • refactor(nano): improve custom imports #1348
  • refactor(nano): post merge refactors [part 1] #1304
  • refactor(nano): post merge refactors [part 2] #1305
  • refactor(verification): move commong args to VerificationParams #1345
  • refactor: cleanup full verification #1218
  • refactor: remove memory storage and indexes #1219
  • test(nano): Add a test for reentrancy attack #1324
  • test(nano): add tests (batch 1) [part 15] #1292
  • test(nano): add tests (batch 2) [part 16] #1293
  • tests(nano): add basic structures and resources tests [part 14] #1291
  • tests(nano): add missing tests for rng immutability #1343
  • tests(nano): add register_blueprint_file test method #1318
  • tests(nano): fix flaky test #1328
  • tests(nano): fix usage of raises with match #1341
  • tests(nano): test custom import #1346
  • tests: dynamically search for deep mutable properties #1340

v0.63.1

04 Feb 23:22
v0.63.1
872e647

Choose a tag to compare

This release has an important performance fix (#1203) that affects wallet loading time. We've had reports of wallets that took 30 minutes taking less than 10 seconds after this fix. In addition it includes smaller improvements along with the removal of sync-v1, which was already deprecated and unsupported for a while.

Features

  • feat(p2p): remove sync-v1 code and disable tests #1197

Fixes

  • fix(dag_builder): Fix generating two or more vertices with the same hash #1207
  • fix(ws): Fix JSON decode error on invalid commands #1202
  • fix(ws): Slow empty address verification on address subscription #1203

Chores

  • chore: bump version to v0.63.1 #1209
  • refactor(misc): minor maintenance changes #1206
  • tests: re-enable tests #1208

v0.63.0

17 Jan 01:07
v0.63.0
0daf6bd

Choose a tag to compare

This release brings improvements to how some metadata is stored internally, which will require nodes to sync from scratch or start from an updated snapshot. In addition there are smaller fixes and optimizations.

The compatible snapshot can be found here: https://hathor-public-files.s3.amazonaws.com/temp/data-20250110154948-5150454.tar.gz and also the following url will always contain the latest snapshot that is guaranteed to work on the latest release: https://hathor-public-files.s3.amazonaws.com/temp/mainnet-data-latest

Features

  • feat(cli): early protection for invalid prometheus prefix #1107
  • feat(consensus): Change meta.score and meta.accumulated_weight to int type #572
  • feat(consensus): Use DAG of funds to set first_block #852
  • feat(dag-builder): Add a tool to generate vertices from a DAG description #1181
  • feat(event-queue): add tx data to VERTEX_REMOVED #1106
  • feat(feature-activation): implement closest_block metadata and Feature Activation for Transactions #933
  • feat(mergedmining): support dummy mining on coordinator #966
  • feat(metadata): create basic static metadata structures [part 1/12] #1013
  • feat(p2p): Change sync-v2 main loop interval to one second #1184
  • feat(p2p): support IPv6 #1144
  • feat(ws): Add flow control to the tx history streamer #1126
  • feat: add sync-v2 benchmark to CI #1083
  • feat: enable cache by default #1125
  • feat: improve load-from-logs CLI command #1132

Fixes

  • fix(api): status regression after p2p refactor #1134
  • fix(benchmark): fix CI on master #1117
  • fix(benchmark): fix CI on master #1121
  • fix(benchmark): fix benchmark CI after bencher update #1157
  • fix(cli): subcommand quick_test not stopping after #1115 #1147
  • fix(ws): Add a graceful close mechanism to handle late messages and prevent errors #1129
  • fix(ws): Fix tx history streamer wrong logging when pauseProducing() is called multiple times #1135
  • fix: acc weight regression #1193
  • fix: event handling of txs with custom scripts #1140
  • fix: fix timestamps on gen-genesis CLI #1094
  • fix: healthcheck content-type #1110
  • fix: removed txs from test wallet #1139

Chores

  • chore(benchmark): improve benchmark CI #1112
  • chore(ci): update default Python version used on docker images #1010
  • chore(docker): include python suffix tags on rc images #1194
  • chore(events): remove event queue from unsafe mode #1190
  • chore(feature-activation): config NOP feature to test FA for transactions #1177
  • chore(feature-activation): delay NOP feature #1187
  • chore(feature_activation): update start_height before release #1198
  • chore(p2p): decrease p2p.max_enabled_sync's default value: 16 -> 8 #1199
  • chore: bump version to v0.63.0 #1141
  • chore: collect garbage collector metrics #1137
  • chore: flake.nix creating a devshell with all fullnode dependencies needed to run the fullnode #1098
  • chore: improve p2p protocol error logging #1179
  • chore: remove all migrations #1149
  • chore: remove all unused features #1150
  • chore: remove the limited support there was for Windows #1169
  • chore: update dependencies #998
  • chore: update mainnet and testnet checkpoints and include helper script #1189
  • chore: upgrade actions to a version that use node20 (LTS) #1123
  • ci: use macos-13 on Github Actions as macos-12 will be dropped #1185
  • refactor(benchmark): change benchmark CI to download data from logs in AWS #1133
  • refactor(metadata): move metadata attributes to static metadata [part 2/12] #1014
  • refactor(metadata): pre-refactors for migrating feature states to static metadata [part 3/12] #1016
  • refactor(metadata): pre-refactors for migrating feature states to static metadata [part 4/12] #1017
  • refactor(p2p): add PublicPeer and PrivatePeer to simplify Peer #1115
  • refactor(p2p): move received peers storage to protocol #1191
  • refactor(p2p): refactor peer address handling [part 1/10] #1173
  • refactor(p2p): rename peer_id.PeerId to peer.Peer #1113
  • refactor(p2p): simplify factory [part 1/5] #1151
  • refactor(p2p): use PeerId type instead of str #1114
  • refactor(settings): change wallets and reward lock to use injected settings #1148
  • refactor(static-metadata): undo migration of feature_states to static metadata #1146
  • refactor(vertex-handler): remove p2p_manager dependency [part 1/8] #1154
  • refactor: move can_validate_full method [part 2/8] #1153
  • refactor[websocket]: improve websocket factory start #1145

v0.62.0

12 Aug 18:18
v0.62.0
aec93bc

Choose a tag to compare

The highlights of this release are an improved wallet loading API (2~5x faster) and tools for nodes to run a "side-dag". Other than that, this release makes on step in deprecating sync-v1 by making it harder to enable by accident, along with some fixes and internal improvements.

Features

  • feat(event-queue): add new VERTEX_REMOVED event #1093
  • feat(side-dag): add ability to update signers list #1075
  • feat(side-dag): add signers validation on peer hello #1078
  • feat(side-dag): implement PoaBlockProducer #1061
  • feat(side-dag): implement Proof-of-Authority #1060
  • feat(side-dag): implement gen_keys CLI command #1041
  • feat(side-dag): implement side_dag CLI command #1039
  • feat(side-dag): implement signer round-robin #1074
  • feat(side-dag): update APIs #1071
  • feat(wallet): Add a vertex history streamer to the wallet websocket API #1082

Fixes

  • fix(cli): regression of --help after side-dag cli #1073
  • fix(indexes): efficient rocksdb mempool-tips initialization #938
  • fix(logging): make different version logging less obtrusive #1087
  • fix(p2p): regression after entrypoint refactor #1088
  • fix(p2p): status regression after entrypoint refactor #1089
  • fix(performance): using RocksDBMempoolTipsIndex made the sync too slow #1100
  • fix(reward-lock): save removed txs in the consensus context #1092
  • fix(side-dag): remove init timeout #1070
  • fix: add peers api #1052
  • fix: improve stratum logs #1049
  • fix: profiler reactor initialization #1058

Chores

  • chore(cli): mark sync-v1 and bridge as unsafe #1090
  • chore(docker): drop support for PyPy #1062
  • chore: bump version to v0.62.0 #1095
  • docs(security): update link to bug bounty program #1065
  • refactor(api): prevent duplicate tx earlier #1006
  • refactor(p2p): split hathor.p2p.peer_discovery into separate modules #1055
  • refactor(p2p): use Entrypoint type instead of str #1086
  • refactor(settings): more settings injection refactors #1085
  • refactor(side-dag): general improvements #1080
  • refactor(side-dag): refactor node processes management #1079
  • refactor(storage): change storages to use injected settings #1081
  • refactor: miscellaneous small improvements #1069
  • tests(event-queue): add test for invalid tx in mempool #1091
  • tests(side-dag): implement missing side-dag related tests #1064

v0.61.0

04 Jun 15:56
v0.61.0
b955005

Choose a tag to compare

This is a small release that mostly introduces a change to the block-at-height API to include the transactions (hashes or full metadata) that were confirmed by that block.

Features

  • feat(api): Add include_transactions parameter to the BlockAtHeightResource #1046

Fixes

  • fix(log): correctly handle errors when logging events #1040

Chores

  • chore: bump version to v0.61.0 #1047
  • chore: clean up feature activation logs #1035

v0.60.1

31 May 12:19
v0.60.1
b06dd2d

Choose a tag to compare

This release fixes a known issue in v0.60.0, an update is highly recommended.

Fixes

  • fix(resources): regression in address history endpoint #1042
  • fix(events): fix initialization on existing event storage #1038

Other changes

  • docs(README): update and organize readme and supplementary documentation of the repository #944
  • feat(cli): Add --log-vertex-bytes for debugging #1033
  • feat(cli): Add load_from_logs cli command to load blocks and transactions as they are found in a log dump #1034
  • feat: add --quit-after-n-blocks CLI argument #1031

v0.60.0

16 May 16:41
v0.60.0
76955d7

Choose a tag to compare

This release introduces key updates to the p2p sync, merge-mined blocks, and overall security. We've decided to disable sync-v1 by default, as support for sync-v2 is now widespread and enabling sync-v1 can lead to high CPU usage. However, sync-v1 can still be manually enabled to ensure compatibility with legacy systems.

Additionally, we've implemented an anticipated update to extend the maximum merkle path length for merge-mined blocks on the mainnet. This is a significant improvement for miners dealing with blocks that contain many transactions. Moreover, this release brings important security enhancements, further stabilizing our network and protecting against vulnerabilities.

Known issues

  • address-history API returns incomplete results which causes wallets to not see all transactions of some of its addresses (this has been fixed by #1042 and is available in the release v0.60.1)

Features

  • feat(cli): add argument to make sync-v1 unavailable #982
  • feat(feature-activation): add feature settings validation #894
  • feat(feature-activation): automatically enable support in MUST_SIGNAL #963
  • feat(feature-activation): implement bit signaling sysctl #962
  • feat(merged-mining): configure new max merkle path length on mainnet #1032
  • feat(p2p): add ability to update peer_id.json with SIGUSR1 #981
  • feat(unrecoverable-error): implement halting of full node execution #809
  • feat: add first_block to the to_json_extended method of base transaction class #1003

Fixes

  • fix(events): add missing signal_bits to event schema #985
  • fix(indexes): Fix wrong order in MemoryTxGroupIndex #977
  • fix(util): division by zero when logging progress in some cases #980
  • fix: catch update_reward_lock_metadata exceptions #1029
  • fix: improve unnecessary alerts #965
  • fix: missing PeerId.source_file #1007
  • fix: sorting execution manager callbacks #1004

Chores

  • chore(cli): default to sync-v1 disabled #1011
  • chore: bump version to v0.60.0 #984
  • chore: fix codecov coverage upload #1005
  • chore: remove unnecessary asserts #968
  • docs: fix OpenAPI url of cpu profiler endpoint #979
  • refactor(daa): externalize block dependencies #895
  • refactor(indexes): Optimize RocksDBAddressIndex to handle pagination in O(log n) #978
  • refactor(mypy): add stricter rules to more test modules [part III/VI] #972
  • refactor(mypy): add stricter rules to p2p tests [part IV/VI] #973
  • refactor(mypy): add stricter rules to some test modules [part II/VI] #971
  • refactor(mypy): add stricter rules to specific modules [part I/VI] #969
  • refactor(mypy): add stricter rules to unittest and utils [part V/VI] #974
  • refactor(mypy): unify hathor and test modules strictness [part VI/VI] #975
  • refactor(verification): reorganize min_height verification #1008
  • refactor(vertex-handler): modularize methods [part 2/2] #988
  • refactor: create VertexHandler [part 1/2] #987
  • refactor: create non-null hash property #967
  • refactor: remove SimpleMemoryStorage and refactor DAA #1026
  • refactor: remove deprecated resource method from address history API #994
  • tests(verification): add missing assertions #983