From e9956d5d8f4039271db954b305d0d3a9883bbf0d Mon Sep 17 00:00:00 2001 From: portuu3 Date: Fri, 13 Mar 2026 19:23:50 +0100 Subject: [PATCH 1/3] bump changeset version --- .changeset/cozy-poets-go.md | 6 ------ .changeset/crisp-buckets-agree.md | 5 ----- .changeset/nine-seas-dream.md | 11 ---------- .changeset/shaggy-months-post.md | 5 ----- packages/core/CHANGELOG.md | 11 ++++++++++ packages/core/package.json | 2 +- .../python/human-protocol-sdk/CHANGELOG.md | 16 ++++++++++++++ .../human_protocol_sdk/gql/cancel.py | 4 +--- .../human_protocol_sdk/gql/escrow.py | 4 +--- .../human_protocol_sdk/gql/reward.py | 4 +--- .../human_protocol_sdk/gql/transaction.py | 4 +--- .../human_protocol_sdk/gql/worker.py | 4 +--- .../python/human-protocol-sdk/package.json | 2 +- .../human-protocol-sdk/CHANGELOG.md | 21 +++++++++++++++++++ .../human-protocol-sdk/package.json | 2 +- 15 files changed, 56 insertions(+), 45 deletions(-) delete mode 100644 .changeset/cozy-poets-go.md delete mode 100644 .changeset/crisp-buckets-agree.md delete mode 100644 .changeset/nine-seas-dream.md delete mode 100644 .changeset/shaggy-months-post.md create mode 100644 packages/core/CHANGELOG.md diff --git a/.changeset/cozy-poets-go.md b/.changeset/cozy-poets-go.md deleted file mode 100644 index 7728c99e1f..0000000000 --- a/.changeset/cozy-poets-go.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@human-protocol/sdk": major -"@human-protocol/python-sdk": major ---- - -Updated KV Store utils in sdk to return empty string in case no value in subgraph instead of throwing and error diff --git a/.changeset/crisp-buckets-agree.md b/.changeset/crisp-buckets-agree.md deleted file mode 100644 index 3915fea605..0000000000 --- a/.changeset/crisp-buckets-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@human-protocol/sdk": minor ---- - -Added typed subgraph errors (SubgraphRequestError, SubgraphBadIndexerError) and wrapped subgraph request failures with these classes diff --git a/.changeset/nine-seas-dream.md b/.changeset/nine-seas-dream.md deleted file mode 100644 index a6c0ea17cd..0000000000 --- a/.changeset/nine-seas-dream.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"@human-protocol/core": major -"@human-protocol/sdk": major -"@human-protocol/python-sdk": major ---- - -Updated escrow contracts and SDKs to fetch oracle fees from `KVStore` instead of passing fee values during escrow setup. `Escrow.setup(...)` and factory setup flows no longer accept fee arguments, escrow deployments now require a `KVStore` address, and fee validation is enforced on-chain from `KVStore` values, including per-oracle and total fee limits. Added upgrade-safe `EscrowFactory` support for storing and updating the `KVStore` address. - -Updated TypeScript and Python SDK escrow setup APIs to match the new contract signatures by removing fee arguments from `setup(...)` and create-and-setup helpers. Existing config fee fields remain optional for backward compatibility but are ignored by setup calls. - -Updated SDKs to use a dedicated HMT stats subgraph endpoint for HMT statistics methods and removed `totalAmountPaid` and `averageAmountPerWorker` from `IDailyPayment`. diff --git a/.changeset/shaggy-months-post.md b/.changeset/shaggy-months-post.md deleted file mode 100644 index 183d64c44e..0000000000 --- a/.changeset/shaggy-months-post.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@human-protocol/sdk": patch ---- - -Split combined domain files into module folders with explicit files per responsibility. diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md new file mode 100644 index 0000000000..951f1a805f --- /dev/null +++ b/packages/core/CHANGELOG.md @@ -0,0 +1,11 @@ +# @human-protocol/core + +## 6.0.0 + +### Major Changes + +- a7ab394: Updated escrow contracts and SDKs to fetch oracle fees from `KVStore` instead of passing fee values during escrow setup. `Escrow.setup(...)` and factory setup flows no longer accept fee arguments, escrow deployments now require a `KVStore` address, and fee validation is enforced on-chain from `KVStore` values, including per-oracle and total fee limits. Added upgrade-safe `EscrowFactory` support for storing and updating the `KVStore` address. + + Updated TypeScript and Python SDK escrow setup APIs to match the new contract signatures by removing fee arguments from `setup(...)` and create-and-setup helpers. Existing config fee fields remain optional for backward compatibility but are ignored by setup calls. + + Updated SDKs to use a dedicated HMT stats subgraph endpoint for HMT statistics methods and removed `totalAmountPaid` and `averageAmountPerWorker` from `IDailyPayment`. diff --git a/packages/core/package.json b/packages/core/package.json index 908f7cdc6a..31d24f0f95 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@human-protocol/core", "description": "Human Protocol Core Smart Contracts", - "version": "5.0.1", + "version": "6.0.0", "files": [ "contracts/**/*.sol", "abis/**/*.json", diff --git a/packages/sdk/python/human-protocol-sdk/CHANGELOG.md b/packages/sdk/python/human-protocol-sdk/CHANGELOG.md index 00b16bfdbf..95ef3c397b 100644 --- a/packages/sdk/python/human-protocol-sdk/CHANGELOG.md +++ b/packages/sdk/python/human-protocol-sdk/CHANGELOG.md @@ -1,5 +1,21 @@ # @human-protocol/python-sdk +## 7.0.0 + +### Major Changes + +- a7ab394: Updated KV Store utils in sdk to return empty string in case no value in subgraph instead of throwing and error +- a7ab394: Updated escrow contracts and SDKs to fetch oracle fees from `KVStore` instead of passing fee values during escrow setup. `Escrow.setup(...)` and factory setup flows no longer accept fee arguments, escrow deployments now require a `KVStore` address, and fee validation is enforced on-chain from `KVStore` values, including per-oracle and total fee limits. Added upgrade-safe `EscrowFactory` support for storing and updating the `KVStore` address. + + Updated TypeScript and Python SDK escrow setup APIs to match the new contract signatures by removing fee arguments from `setup(...)` and create-and-setup helpers. Existing config fee fields remain optional for backward compatibility but are ignored by setup calls. + + Updated SDKs to use a dedicated HMT stats subgraph endpoint for HMT statistics methods and removed `totalAmountPaid` and `averageAmountPerWorker` from `IDailyPayment`. + +### Patch Changes + +- Updated dependencies [a7ab394] + - @human-protocol/core@6.0.0 + ## 6.1.0 ### Minor Changes diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/cancel.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/cancel.py index 6d5ddf36db..223b88aafb 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/cancel.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/cancel.py @@ -70,6 +70,4 @@ def get_cancellation_refund_by_escrow_query(): }} }} {cancellation_refund_fragment} -""".format( - cancellation_refund_fragment=cancellation_refund_fragment - ) +""".format(cancellation_refund_fragment=cancellation_refund_fragment) diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/escrow.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/escrow.py index 38a0ca8919..5d1b01f6e6 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/escrow.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/escrow.py @@ -97,9 +97,7 @@ def get_escrow_query(): }} }} {escrow_fragment} -""".format( - escrow_fragment=escrow_fragment - ) +""".format(escrow_fragment=escrow_fragment) def get_status_query( diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/reward.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/reward.py index 3f43bbff9e..09c06278ae 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/reward.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/reward.py @@ -14,6 +14,4 @@ }} }} {reward_added_event_fragment} -""".format( - reward_added_event_fragment=reward_added_event_fragment -) +""".format(reward_added_event_fragment=reward_added_event_fragment) diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/transaction.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/transaction.py index ef637424b2..f17cc61876 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/transaction.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/transaction.py @@ -103,6 +103,4 @@ def get_transaction_query() -> str: }} }} {transaction_fragment} -""".format( - transaction_fragment=transaction_fragment - ) +""".format(transaction_fragment=transaction_fragment) diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/worker.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/worker.py index 9788272612..ee21af1ef7 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/worker.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/gql/worker.py @@ -18,9 +18,7 @@ def get_worker_query() -> str: }} }} {worker_fragment} -""".format( - worker_fragment=worker_fragment - ) +""".format(worker_fragment=worker_fragment) def get_workers_query(filter: WorkerFilter) -> str: diff --git a/packages/sdk/python/human-protocol-sdk/package.json b/packages/sdk/python/human-protocol-sdk/package.json index 3bf7565226..0bccb37465 100644 --- a/packages/sdk/python/human-protocol-sdk/package.json +++ b/packages/sdk/python/human-protocol-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@human-protocol/python-sdk", - "version": "6.1.0", + "version": "7.0.0", "private": true, "description": "Stub package to integrate the Python SDK with Changesets (dev-only).", "license": "MIT", diff --git a/packages/sdk/typescript/human-protocol-sdk/CHANGELOG.md b/packages/sdk/typescript/human-protocol-sdk/CHANGELOG.md index cfdab05143..7dfae9ee93 100644 --- a/packages/sdk/typescript/human-protocol-sdk/CHANGELOG.md +++ b/packages/sdk/typescript/human-protocol-sdk/CHANGELOG.md @@ -1,5 +1,26 @@ # @human-protocol/sdk +## 7.0.0 + +### Major Changes + +- a7ab394: Updated KV Store utils in sdk to return empty string in case no value in subgraph instead of throwing and error +- a7ab394: Updated escrow contracts and SDKs to fetch oracle fees from `KVStore` instead of passing fee values during escrow setup. `Escrow.setup(...)` and factory setup flows no longer accept fee arguments, escrow deployments now require a `KVStore` address, and fee validation is enforced on-chain from `KVStore` values, including per-oracle and total fee limits. Added upgrade-safe `EscrowFactory` support for storing and updating the `KVStore` address. + + Updated TypeScript and Python SDK escrow setup APIs to match the new contract signatures by removing fee arguments from `setup(...)` and create-and-setup helpers. Existing config fee fields remain optional for backward compatibility but are ignored by setup calls. + + Updated SDKs to use a dedicated HMT stats subgraph endpoint for HMT statistics methods and removed `totalAmountPaid` and `averageAmountPerWorker` from `IDailyPayment`. + +### Minor Changes + +- a31cfc8: Added typed subgraph errors (SubgraphRequestError, SubgraphBadIndexerError) and wrapped subgraph request failures with these classes + +### Patch Changes + +- c50fc7e: Split combined domain files into module folders with explicit files per responsibility. +- Updated dependencies [a7ab394] + - @human-protocol/core@6.0.0 + ## 6.1.0 ### Minor Changes diff --git a/packages/sdk/typescript/human-protocol-sdk/package.json b/packages/sdk/typescript/human-protocol-sdk/package.json index e77a006717..f1c4573780 100644 --- a/packages/sdk/typescript/human-protocol-sdk/package.json +++ b/packages/sdk/typescript/human-protocol-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@human-protocol/sdk", "description": "Human Protocol SDK", - "version": "6.1.0", + "version": "7.0.0", "files": [ "src", "dist" From f9d47697f9d2682a3bdaf5dc80eb51b391cfdde3 Mon Sep 17 00:00:00 2001 From: portuu3 Date: Tue, 17 Mar 2026 14:05:04 +0100 Subject: [PATCH 2/3] upgrade contracts --- packages/core/.openzeppelin/bsc.json | 165 ++++++++++++++++++++++ packages/core/.openzeppelin/mainnet.json | 165 ++++++++++++++++++++++ packages/core/.openzeppelin/polygon.json | 165 ++++++++++++++++++++++ packages/core/scripts/rpc-workarounds.ts | 52 +++++++ packages/core/scripts/upgrade-governor.ts | 3 + packages/core/scripts/upgrade-proxies.ts | 13 +- 6 files changed, 560 insertions(+), 3 deletions(-) create mode 100644 packages/core/scripts/rpc-workarounds.ts diff --git a/packages/core/.openzeppelin/bsc.json b/packages/core/.openzeppelin/bsc.json index 7666d5d45a..76b3501fe6 100644 --- a/packages/core/.openzeppelin/bsc.json +++ b/packages/core/.openzeppelin/bsc.json @@ -1729,6 +1729,171 @@ }, "namespaces": {} } + }, + "0f95cf567f8918b75255368d276f9d1d3ff01313866d4084b4a734938d09a6e6": { + "address": "0x8C39c41Bd6257B2Fa3aF58511825D5eAD4921279", + "txHash": "0x6c92b19d5bb9196d090c29b37da44e31539e54321141642418575c2265e567dc", + "layout": { + "solcVersion": "0.8.23", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "counter", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:17" + }, + { + "label": "escrowCounters", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_uint256)", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:18" + }, + { + "label": "lastEscrow", + "offset": 0, + "slot": "203", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:19" + }, + { + "label": "staking", + "offset": 0, + "slot": "204", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:20" + }, + { + "label": "minimumStake", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:21" + }, + { + "label": "admin", + "offset": 0, + "slot": "206", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:22" + }, + { + "label": "kvstore", + "offset": 0, + "slot": "207", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:23" + }, + { + "label": "__gap", + "offset": 0, + "slot": "208", + "type": "t_array(t_uint256)43_storage", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:195" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)43_storage": { + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/packages/core/.openzeppelin/mainnet.json b/packages/core/.openzeppelin/mainnet.json index ee64d50eff..8a709b1a34 100644 --- a/packages/core/.openzeppelin/mainnet.json +++ b/packages/core/.openzeppelin/mainnet.json @@ -1729,6 +1729,171 @@ }, "namespaces": {} } + }, + "0f95cf567f8918b75255368d276f9d1d3ff01313866d4084b4a734938d09a6e6": { + "address": "0x182f882690c2B35Eb5885849Bb4331888857CF78", + "txHash": "0xd7100a2f0e6097eee27507ce2d4b1bee3ecf18cdda6b86326d7a2aea42f6a0d7", + "layout": { + "solcVersion": "0.8.23", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "counter", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:17" + }, + { + "label": "escrowCounters", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_uint256)", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:18" + }, + { + "label": "lastEscrow", + "offset": 0, + "slot": "203", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:19" + }, + { + "label": "staking", + "offset": 0, + "slot": "204", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:20" + }, + { + "label": "minimumStake", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:21" + }, + { + "label": "admin", + "offset": 0, + "slot": "206", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:22" + }, + { + "label": "kvstore", + "offset": 0, + "slot": "207", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:23" + }, + { + "label": "__gap", + "offset": 0, + "slot": "208", + "type": "t_array(t_uint256)43_storage", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:195" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)43_storage": { + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/packages/core/.openzeppelin/polygon.json b/packages/core/.openzeppelin/polygon.json index ecfb3f007c..417ed44cbc 100644 --- a/packages/core/.openzeppelin/polygon.json +++ b/packages/core/.openzeppelin/polygon.json @@ -1725,6 +1725,171 @@ }, "namespaces": {} } + }, + "0f95cf567f8918b75255368d276f9d1d3ff01313866d4084b4a734938d09a6e6": { + "address": "0x6839ef9b4872Ee7F1B01AAbbc046872D481A480F", + "txHash": "0x5a0eb7f4d9b09a438f482f77957f27da1c47fb248fa8aafd771d8ab4545edda9", + "layout": { + "solcVersion": "0.8.23", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "counter", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:17" + }, + { + "label": "escrowCounters", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_uint256)", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:18" + }, + { + "label": "lastEscrow", + "offset": 0, + "slot": "203", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:19" + }, + { + "label": "staking", + "offset": 0, + "slot": "204", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:20" + }, + { + "label": "minimumStake", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:21" + }, + { + "label": "admin", + "offset": 0, + "slot": "206", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:22" + }, + { + "label": "kvstore", + "offset": 0, + "slot": "207", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:23" + }, + { + "label": "__gap", + "offset": 0, + "slot": "208", + "type": "t_array(t_uint256)43_storage", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:195" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)43_storage": { + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/packages/core/scripts/rpc-workarounds.ts b/packages/core/scripts/rpc-workarounds.ts new file mode 100644 index 0000000000..eb6c464a3d --- /dev/null +++ b/packages/core/scripts/rpc-workarounds.ts @@ -0,0 +1,52 @@ +import { ethers } from 'hardhat'; + +const PATCH_FLAG = Symbol.for('human-protocol.rpc-empty-address-normalized'); + +type JsonRpcSend = (method: string, params?: unknown[]) => Promise; + +function normalizeEmptyAddressFields(payload: T): T { + if (!payload || typeof payload !== 'object') { + return payload; + } + + const normalized = payload as Record; + + if (normalized.to === '') { + normalized.to = null; + } + + if (normalized.contractAddress === '') { + normalized.contractAddress = null; + } + + return payload; +} + +export function applyRpcAddressWorkaround(): void { + const provider = ethers.provider as typeof ethers.provider & { + _hardhatProvider?: { send?: JsonRpcSend; [PATCH_FLAG]?: boolean }; + }; + + const hardhatProvider = provider._hardhatProvider; + + if (!hardhatProvider?.send || hardhatProvider[PATCH_FLAG]) { + return; + } + + const originalSend = hardhatProvider.send.bind(hardhatProvider); + + hardhatProvider.send = async (method: string, params?: unknown[]) => { + const response = await originalSend(method, params); + + if ( + method === 'eth_getTransactionByHash' || + method === 'eth_getTransactionReceipt' + ) { + return normalizeEmptyAddressFields(response); + } + + return response; + }; + + hardhatProvider[PATCH_FLAG] = true; +} diff --git a/packages/core/scripts/upgrade-governor.ts b/packages/core/scripts/upgrade-governor.ts index 82ae82b7d0..32008d0dd7 100644 --- a/packages/core/scripts/upgrade-governor.ts +++ b/packages/core/scripts/upgrade-governor.ts @@ -1,8 +1,11 @@ /* eslint-disable no-console */ import 'dotenv/config'; import { ethers, upgrades } from 'hardhat'; +import { applyRpcAddressWorkaround } from './rpc-workarounds'; async function main() { + applyRpcAddressWorkaround(); + const governorProxy = process.env.GOVERNOR_ADDRESS; const fqName = process.env.GOVERNOR_FQN || diff --git a/packages/core/scripts/upgrade-proxies.ts b/packages/core/scripts/upgrade-proxies.ts index 8e83dacdd6..e494d9a6f5 100644 --- a/packages/core/scripts/upgrade-proxies.ts +++ b/packages/core/scripts/upgrade-proxies.ts @@ -1,8 +1,11 @@ /* eslint-disable no-console */ import { ethers, upgrades } from 'hardhat'; import type { EscrowFactory } from '../typechain-types'; +import { applyRpcAddressWorkaround } from './rpc-workarounds'; async function main() { + applyRpcAddressWorkaround(); + const escrowFactoryAddress = process.env.ESCROW_FACTORY_ADDRESS; const kvStoreAddress = process.env.KVSTORE_ADDRESS; @@ -21,9 +24,13 @@ async function main() { EscrowFactory ); const contract = await escrowFactoryContract.waitForDeployment(); - const hash = contract.deploymentTransaction()?.hash; - if (hash) { - await ethers.provider.getTransactionReceipt(hash); + const upgradeTx = contract.deploymentTransaction(); + if (upgradeTx) { + console.log( + 'Waiting for upgrade transaction confirmation...', + upgradeTx.hash + ); + await upgradeTx.wait(); } const escrowFactory = (await ethers.getContractAt( From 4feefefcaf73ebdb839358cffbf298d6dc31d625 Mon Sep 17 00:00:00 2001 From: portuu3 Date: Tue, 17 Mar 2026 14:22:50 +0100 Subject: [PATCH 3/3] fix script --- packages/core/scripts/rpc-workarounds.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/scripts/rpc-workarounds.ts b/packages/core/scripts/rpc-workarounds.ts index eb6c464a3d..6f8b0b2c47 100644 --- a/packages/core/scripts/rpc-workarounds.ts +++ b/packages/core/scripts/rpc-workarounds.ts @@ -23,7 +23,7 @@ function normalizeEmptyAddressFields(payload: T): T { } export function applyRpcAddressWorkaround(): void { - const provider = ethers.provider as typeof ethers.provider & { + const provider = ethers.provider as unknown as { _hardhatProvider?: { send?: JsonRpcSend; [PATCH_FLAG]?: boolean }; };