Skip to content

Conversation

@mrice32
Copy link
Contributor

@mrice32 mrice32 commented Oct 9, 2024

Note: this should remain unmerged, as it will be audited separately from the rest of the codebase. The diff will be larger once this revert PR is merged: #638.

Original PR is here: #583.

This PR is identical to #583, except that it adds this deterministic feature to the 7683 implementation.

@mrice32 mrice32 requested review from bmzig, nicholaspai and pxrl October 9, 2024 06:40
Signed-off-by: Matt Rice <[email protected]>
Signed-off-by: Matt Rice <[email protected]>
@nicholaspai nicholaspai added the do not merge do not merge label Oct 9, 2024
pxrl and others added 11 commits October 9, 2024 23:58
The new relative exclusivity check has not been propagated to
fillV3RelayWithUpdatedDeposit(). Identified via test case failures in
the relayer.

Signed-off-by: Paul <[email protected]>
…, an offset, or a timestamp

There should be a way for the deposit transaction to remove chain re-org risk affecting the block.timestamp by allowing the caller to set a fixed `exclusivityDeadline` value. This supports the existing behavior where the `exclusivityDeadline` is always emitted as its passed in.

The new behavior is that if the `exclusivityParameter`, which replaces the `exclusivityDeadlineOffset` parameter, is 0 or greater than 1 year in seconds, then the `exclusivityDeadline` is equal to this parameter. Otherwise, its interpreted by `_depositV3()` as an offset. The offset would be useful in cases where the origin chain will not re-org, for example.
@nicholaspai
Copy link
Member

I've merged in #649 into this branch

@nicholaspai nicholaspai changed the base branch from master to pxrl/exclusivity October 22, 2024 19:00
@nicholaspai nicholaspai changed the base branch from pxrl/exclusivity to master October 22, 2024 19:02
Base automatically changed from npai/exclusivity-switch to master November 20, 2024 17:04
destinationChainId,
exclusiveRelayer,
// Increment count of deposits so that deposit ID for this spoke pool is unique.
// @dev Implicitly casts from uint32 to uint256 by padding the left-most bytes with zeros. Guarantees
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this comment seems misplaced.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? It's supposed to say that the numberOfDeposits counter, which is uint32, will get implicitly casted to a uint256 deposit Id. I can update the comment but I think it's in the right place. Maybe you don't think this comment is useful at all?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// Increment count of deposits so that deposit ID for this spoke pool is unique.
// @dev Implicitly casts from uint32 to uint256 by padding the left-most bytes with zeros. Guarantees
// that the 24 most significant bytes are 0.
numberOfDeposits++,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also this is sneaky and should have a comment. the value of number of deposits is incremented then passed into the _depositV3 function, which means it's only incremented IF called by the normal depositV3.

this also makes this variable name bad as a result. numberOfDeposits, as the name implies, tracks the total number of deposits that has happened. now, however, as unsafeDepositV3 can create a deposit without changing numberOfDeposits, the total "number of deposits" the contract has had and the numberOfDeposits variable no longer match. therefore the variable literally does not do what it's name describes. it's more an internal counter, used in some situations but its certantly not the number of deposits (as any call to unsafeDepositV3 will cause the total number to be larger than numberOfDeposits.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call. Will need to verify this function isn't called by too many offchain bots though so I don't want to change the name yet

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see d3de7e1 for updated comments

Co-authored-by: Chris Maree <[email protected]>
@nicholaspai nicholaspai changed the base branch from master to svm-dev November 25, 2024 14:37
bytes32 depositor,
uint256 depositNonce
) public pure returns (uint256) {
return uint256(keccak256(abi.encodePacked(msgSender, depositor, depositNonce)));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is ok to keep msgSender type address since its only used to create unique hashes on evm chains. For solana, I guess you could use bytes32 instead, but we don't really care if a depositID on a solana chain collides with an EVM chain, because the chain ID's would be different. Right? @chrismaree @md0x

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think this is Ok.

@nicholaspai nicholaspai removed the do not merge do not merge label Nov 25, 2024
bytes calldata message
) public payable override nonReentrant unpausedDeposits {
// Increment deposit nonce variable `numberOfDeposits` so that deposit ID for this deposit on this
// spoke pool is unique. This variable `numberOfDeposits` should ideally be re-named to
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a bit of repetition with the comments above

// This variable name `numberOfDeposits` should ideally be re-named to

Should we keep them only in one place?

Copy link
Contributor

@md0x md0x left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@mrice32 mrice32 merged commit 9905481 into svm-dev Nov 25, 2024
9 checks passed
@mrice32 mrice32 deleted the mrice32/deterministic-new branch November 25, 2024 17:46
bmzig added a commit that referenced this pull request Feb 6, 2025
* feat(chain-adapters): add solana adapter (#641)

* feat(chain-adapters): add solana adapter

Signed-off-by: Reinis Martinsons <[email protected]>

* fix: comments

Signed-off-by: Reinis Martinsons <[email protected]>

* test: solana adapter

Signed-off-by: Reinis Martinsons <[email protected]>

* Update contracts/chain-adapters/Solana_Adapter.sol

Co-authored-by: Chris Maree <[email protected]>

* fix: do not hash bytes32 svm address

Signed-off-by: Reinis Martinsons <[email protected]>

---------

Signed-off-by: Reinis Martinsons <[email protected]>
Co-authored-by: Chris Maree <[email protected]>

* feat: address to bytes32 contract changes (#650)

* feat: add address to bytes32 contract changes

Signed-off-by: Pablo Maldonado <[email protected]>

* refactor: remove todos

Signed-off-by: Pablo Maldonado <[email protected]>

* refactor: imports

Signed-off-by: Pablo Maldonado <[email protected]>

* Update contracts/SpokePool.sol

Co-authored-by: Reinis Martinsons <[email protected]>

* feat: bytes 32 comparisons

Signed-off-by: Pablo Maldonado <[email protected]>

* refactor: format code

Signed-off-by: Pablo Maldonado <[email protected]>

* fix: tests

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: bytes 32 check

Signed-off-by: Pablo Maldonado <[email protected]>

* fix: ts

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: reuse lib in cctp adapter

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: _preExecuteLeafHook

Signed-off-by: Pablo Maldonado <[email protected]>

* refactor: comments

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: _verifyUpdateV3DepositMessage

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: backward compatibility

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: backwards compatibility tests

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: change comparison casting address bytes32

Signed-off-by: Pablo Maldonado <[email protected]>

* fix: test

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: merkle tree leaf to bytes32

Signed-off-by: Pablo Maldonado <[email protected]>

* test: leaf type update fixes

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: remove helper

Signed-off-by: Pablo Maldonado <[email protected]>

---------

Signed-off-by: Pablo Maldonado <[email protected]>
Co-authored-by: Reinis Martinsons <[email protected]>

* feat: Add relayer repayment address (#653)

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

---------

Signed-off-by: chrismaree <[email protected]>

* fix: clean up cast utilities (#676)

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

---------

Signed-off-by: chrismaree <[email protected]>

* feat: update spokepool relayer refund to handle blocked transfers (#675)

Co-authored-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* fix(evm): merkle tree tests bytes32

Signed-off-by: Pablo Maldonado <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* feat(svm): svm-dev fixes from review (#727)

* refactor(svm): reuse bytes32 to address lib in svm adapter

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: custom errors

Signed-off-by: Pablo Maldonado <[email protected]>

* feat: fix test

Signed-off-by: Pablo Maldonado <[email protected]>

---------

Signed-off-by: Pablo Maldonado <[email protected]>

* test: fix forge tests

Signed-off-by: Pablo Maldonado <[email protected]>

* proposal: ensure that EVM errors are always consistant on underflows (#720)

* feat: revert bytes32 conversion for internal functions (#755)

* Discard changes to contracts/Ovm_SpokePool.sol

* fix: stack too deep (#766)

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* Revert "feat: update depositor to bytes32" (#764)

This reverts commit 85f0001.

* Discard changes to contracts/PolygonZkEVM_SpokePool.sol

* Discard changes to contracts/Polygon_SpokePool.sol

* fix: make event case consistant between evm & svm (#760)

* feat(SpokePool): Remove depositExclusive (#642)

This function was used to express exclusivity as a period but its no longer useful since depositV3 now allows caller to express exclusivityPeriod instead of exclusivityDeadline

* feat: Introduce opt-in deterministic relay data hashes (again) (#639)

* Revert "feat(SpokePool): Introduce opt-in deterministic relay data hashes (#583)"

This reverts commit 9d21d1b.

* Reapply "feat(SpokePool): Introduce opt-in deterministic relay data hashes (#583)"

This reverts commit d363bf0.

* add deposit nonces to 7683

Signed-off-by: Matt Rice <[email protected]>

* fix

Signed-off-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: Matt Rice <[email protected]>

* feat(SpokePool): Introduce opt-in deterministic relay data hashes (#583)

* fix(SpokePool): Apply exclusivity consistently

The new relative exclusivity check has not been propagated to
fillV3RelayWithUpdatedDeposit(). Identified via test case failures in
the relayer.

Signed-off-by: Paul <[email protected]>

* Also check on slow fill requests

* Update contracts/SpokePool.sol

* lint

* Update

* Add pure

* Fix

* Add tests

* improve(SpokePool): _depositV3 interprets `exclusivityParameter` as 0, an offset, or a timestamp

There should be a way for the deposit transaction to remove chain re-org risk affecting the block.timestamp by allowing the caller to set a fixed `exclusivityDeadline` value. This supports the existing behavior where the `exclusivityDeadline` is always emitted as its passed in.

The new behavior is that if the `exclusivityParameter`, which replaces the `exclusivityDeadlineOffset` parameter, is 0 or greater than 1 year in seconds, then the `exclusivityDeadline` is equal to this parameter. Otherwise, its interpreted by `_depositV3()` as an offset. The offset would be useful in cases where the origin chain will not re-org, for example.

* Update SpokePool.sol

* Update SpokePool.Relay.ts

* Update SpokePool.SlowRelay.ts

* Update contracts/SpokePool.sol

Co-authored-by: Paul <[email protected]>

* Update SpokePool.sol

* Update contracts/SpokePool.sol

* rebase

* Update SpokePool.sol

* Revert "Merge branch 'npai/exclusivity-switch' into mrice32/deterministic-new"

This reverts commit 2432944, reversing
changes made to 6fe3534.

* Revert "Merge branch 'npai/exclusivity-switch' into mrice32/deterministic-new"

This reverts commit 2432944, reversing
changes made to 6fe3534.

* revert

* Update SpokePool.sol

* Fix

* Update SpokePool.sol

Co-authored-by: Chris Maree <[email protected]>

* WIP

* WIP

* wip

* Update SpokePool.Relay.ts

* Fix

* Update SpokePool.sol

* Update SpokePool.sol

---------

Signed-off-by: Matt Rice <[email protected]>
Signed-off-by: Paul <[email protected]>
Co-authored-by: nicholaspai <[email protected]>
Co-authored-by: nicholaspai <[email protected]>
Co-authored-by: Paul <[email protected]>
Co-authored-by: Chris Maree <[email protected]>

* docs: fix comment duplication (#775)

Signed-off-by: Pablo Maldonado <[email protected]>

* fix: emit hashed message in evm fill events (#772)

* fix: emit hashed message in evm fill events

Signed-off-by: Reinis Martinsons <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* fix: linting

Signed-off-by: Reinis Martinsons <[email protected]>

---------

Signed-off-by: Reinis Martinsons <[email protected]>
Signed-off-by: chrismaree <[email protected]>
Co-authored-by: chrismaree <[email protected]>

* fix: linting

Signed-off-by: Reinis Martinsons <[email protected]>

* feat: improve _getV3RelayHash method (#779)

* WIP

Signed-off-by: chrismaree <[email protected]>

* WIP

Signed-off-by: chrismaree <[email protected]>

* fix: Address Storage layout issue in CI (#836)

* add new storage layout

Signed-off-by: Chris Maree <[email protected]>

* Discard changes to storage-layouts/PolygonZkEVM_SpokePool.json

* Discard changes to storage-layouts/Redstone_SpokePool.json

* Discard changes to storage-layouts/Scroll_SpokePool.json

* Discard changes to storage-layouts/Zora_SpokePool.json

* Discard changes to storage-layouts/WorldChain_SpokePool.json

* add new storage layout

Signed-off-by: Chris Maree <[email protected]>

---------

Signed-off-by: Chris Maree <[email protected]>

* fix(evm): C01 - Address incorrect use of relayerRefund over msg.sender in claimRelayerRefund function (#826)

Signed-off-by: Chris Maree <[email protected]>

* fix(evm): L01 - Update function from public to external (#827)

Signed-off-by: Chris Maree <[email protected]>

* fix(evm): L03 - Address incorrect Right Shift in AddressConverters Lib (#828)

Signed-off-by: Chris Maree <[email protected]>

* fix(evm): L04 - Remove repeated function (#829)

Signed-off-by: Chris Maree <[email protected]>

* fix(evm): N01 - Add missing docstring for repaymentAddress (#830)

Signed-off-by: Chris Maree <[email protected]>

* fix(evm): N02 - Address typographical Errors in spoke pool (#831)

* WIP

Signed-off-by: Chris Maree <[email protected]>

* Update contracts/SpokePool.sol

---------

Signed-off-by: Chris Maree <[email protected]>
Co-authored-by: Matt Rice <[email protected]>

* feat: update function and event naming for backwards compatibility (#805)

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* refined overfloaded function structure

Signed-off-by: Chris Maree <[email protected]>

* Discard changes to test/evm/hardhat/chain-specific-spokepools/Polygon_SpokePool.ts

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: Matt Rice <[email protected]>

* update event names

Signed-off-by: Matt Rice <[email protected]>

* fix tests

Signed-off-by: Matt Rice <[email protected]>

* update function

Signed-off-by: Matt Rice <[email protected]>

* update naming

Signed-off-by: Matt Rice <[email protected]>

* drop unintended svm changes

Signed-off-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* WIP

Signed-off-by: Chris Maree <[email protected]>

* feat: extend current add-legacy-fill-method-svm-dev (#864)

* WIP

Signed-off-by: Chris Maree <[email protected]>

---------

Signed-off-by: Chris Maree <[email protected]>
Signed-off-by: Chris Maree <[email protected]>
Signed-off-by: Matt Rice <[email protected]>
Co-authored-by: Chris Maree <[email protected]>
Co-authored-by: Matt Rice <[email protected]>

* fix: update legacy FilledV3Relay event to match old event signature (#873)

* fix: update legacy event to match old event signature

Signed-off-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: Matt Rice <[email protected]>

* WIP

Signed-off-by: Matt Rice <[email protected]>

---------

Signed-off-by: Matt Rice <[email protected]>

* fix: use entire message when calculating relay hash for evm chains (#867)

* fix: hash entire message when calculating relay hash for evm chains

Signed-off-by: bennett <[email protected]>

* make getV3RelayHash public

Signed-off-by: bennett <[email protected]>

* update fixture with relay hash change

Signed-off-by: bennett <[email protected]>

---------

Signed-off-by: bennett <[email protected]>

* feat(SpokePool): Permit historical fillDeadline on deposit (#870)

* feat(SpokePool): Permit historical fillDeadline on deposit

This removes a sharp edge for pre-fill deposits, where the deposit comes
after the fill. Permitting a historical fillDeadline gives more
flexibility to the relayer around when they submit the deposit on the
origin chain.

* fix test

* restore test

* Bump approvals

* fix: add check to ensure depositor is a valid EVM address (#874)

Signed-off-by: Matt Rice <[email protected]>

* fix(evm): L02 _destinationSettler Can Return Zero Address (#834)

* fix: L02 _destinationSettler Can Return Zero Address

* updated implementation to be in internal function

Signed-off-by: Chris Maree <[email protected]>

---------

Signed-off-by: Chris Maree <[email protected]>
Co-authored-by: Chris Maree <[email protected]>
Co-authored-by: nicholaspai <[email protected]>

* improve: Verify relay hashes are the same pre and post upgrade (#878)

* fix: hash entire message when calculating relay hash for evm chains

Signed-off-by: bennett <[email protected]>

* make getV3RelayHash public

Signed-off-by: bennett <[email protected]>

* update fixture with relay hash change

Signed-off-by: bennett <[email protected]>

* improve: Verify relay hashes are the same pre and post upgrade

Adds a simple unit test to check that the same data hash is constructed

* fix

* Update test/evm/hardhat/MerkleLib.Proofs.ts

* Update test/evm/hardhat/SpokePool.Relay.ts

* Update SpokePool.Relay.ts

---------

Signed-off-by: bennett <[email protected]>
Co-authored-by: bennett <[email protected]>

* Fix merge conflict that removed exclusivity parameter

* Fix SwapAndBridge merge conflict

* reorder stack variables

Signed-off-by: bennett <[email protected]>

* export test functions

Signed-off-by: bennett <[email protected]>

* bump package

Signed-off-by: bennett <[email protected]>

* fix: simpler solution to stack too deep

---------

Signed-off-by: Reinis Martinsons <[email protected]>
Signed-off-by: Pablo Maldonado <[email protected]>
Signed-off-by: chrismaree <[email protected]>
Signed-off-by: Matt Rice <[email protected]>
Signed-off-by: Paul <[email protected]>
Signed-off-by: Chris Maree <[email protected]>
Signed-off-by: Chris Maree <[email protected]>
Signed-off-by: bennett <[email protected]>
Co-authored-by: Reinis Martinsons <[email protected]>
Co-authored-by: Pablo Maldonado <[email protected]>
Co-authored-by: Matt Rice <[email protected]>
Co-authored-by: nicholaspai <[email protected]>
Co-authored-by: nicholaspai <[email protected]>
Co-authored-by: Paul <[email protected]>
Co-authored-by: Reinis Martinsons <[email protected]>
Co-authored-by: Chris Maree <[email protected]>
Co-authored-by: bmzig <[email protected]>
Co-authored-by: bennett <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants