Skip to content

Commit b73fb73

Browse files
authored
Merge pull request #690 from movementlabsxyz/musitdev/e2e_mvt_eth_happy_path
Bridge Mvt -> Eth transfer e2e Test
2 parents 0fe8c12 + d0620d1 commit b73fb73

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2560
-3038
lines changed

Cargo.lock

+785-475
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+34-34
Original file line numberDiff line numberDiff line change
@@ -122,40 +122,40 @@ serde_yaml = "0.9.34"
122122
## Aptos dependencies
123123
### We use a forked version so that we can override dependency versions. This is required
124124
### to be avoid dependency conflicts with other Sovereign Labs crates.
125-
aptos-api = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
126-
aptos-api-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
127-
aptos-bitvec = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
128-
aptos-block-executor = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
129-
aptos-cached-packages = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
130-
aptos-config = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
131-
aptos-consensus-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
132-
aptos-crypto = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490", features = [
125+
aptos-api = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
126+
aptos-api-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
127+
aptos-bitvec = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
128+
aptos-block-executor = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
129+
aptos-cached-packages = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
130+
aptos-config = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
131+
aptos-consensus-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
132+
aptos-crypto = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41", features = [
133133
"cloneable-private-keys",
134134
] }
135-
aptos-db = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
136-
aptos-executor = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
137-
aptos-executor-test-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
138-
aptos-executor-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
139-
aptos-faucet-core = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
140-
aptos-framework = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
141-
aptos-language-e2e-tests = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
142-
aptos-mempool = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
143-
aptos-proptest-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
144-
aptos-sdk = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
145-
aptos-state-view = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
146-
aptos-storage-interface = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
147-
aptos-temppath = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
148-
aptos-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
149-
aptos-vm = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
150-
aptos-vm-genesis = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
151-
aptos-vm-logging = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
152-
aptos-vm-validator = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
153-
aptos-logger = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
154-
aptos-vm-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
155-
aptos-indexer = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
156-
aptos-indexer-grpc-fullnode = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
157-
aptos-indexer-grpc-table-info = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
158-
aptos-protos = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "2be8941bd1c7d0d77dc741f43782898dfb099490" }
135+
aptos-db = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
136+
aptos-executor = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
137+
aptos-executor-test-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
138+
aptos-executor-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
139+
aptos-faucet-core = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
140+
aptos-framework = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
141+
aptos-language-e2e-tests = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
142+
aptos-mempool = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
143+
aptos-proptest-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
144+
aptos-sdk = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
145+
aptos-state-view = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
146+
aptos-storage-interface = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
147+
aptos-temppath = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
148+
aptos-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
149+
aptos-vm = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
150+
aptos-vm-genesis = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
151+
aptos-vm-logging = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
152+
aptos-vm-validator = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
153+
aptos-logger = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
154+
aptos-vm-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
155+
aptos-indexer = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
156+
aptos-indexer-grpc-fullnode = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
157+
aptos-indexer-grpc-table-info = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
158+
aptos-protos = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" }
159159

160160
# Indexer
161161
processor = { git = "https://github.com/movementlabsxyz/aptos-indexer-processors", rev = "7658338eb9224abd9698c1e02dbc6ca526c268ce" }
@@ -189,8 +189,8 @@ secp256k1 = { version = "0.27", default-features = false, features = [
189189
] }
190190

191191
## Celestia Dependencies
192-
celestia-rpc = { version = "0.7.0" }
193-
celestia-types = { version = "0.7.0" }
192+
celestia-rpc = { git = "https://github.com/movementlabsxyz/lumina", rev = "2d16e6733949f6bf70849eb60c14114e6d8ea63e" } #{ version = "0.7.0" }
193+
celestia-types = { git = "https://github.com/movementlabsxyz/lumina", rev = "2d16e6733949f6bf70849eb60c14114e6d8ea63e" } #{ version = "0.7.0" }
194194

195195
alloy = { git = "https://github.com/alloy-rs/alloy.git", package = "alloy", rev = "83343b172585fe4e040fb104b4d1421f58cbf9a2", features = [
196196
"node-bindings",

protocol-units/bridge/config/src/common/eth.rs

-14
Original file line numberDiff line numberDiff line change
@@ -153,20 +153,6 @@ pub fn default_signer_private_key() -> String {
153153
env::var("ETH_SIGNER_PRIVATE_KEY").unwrap_or(random_wallet_string)
154154
}
155155

156-
// impl EthConfig {
157-
// pub fn build_for_test() -> Self {
158-
// Config {
159-
// rpc_url: "http://localhost:8545".parse().unwrap(),
160-
// ws_url: "ws://localhost:8545".parse().unwrap(),
161-
// signer_private_key: PrivateKeySigner::random(),
162-
// initiator_contract: "0x1234567890abcdef1234567890abcdef12345678".to_string(),
163-
// counterparty_contract: "0x1234567890abcdef1234567890abcdef12345678".to_string(),
164-
// weth_contract: "0x1234567890abcdef1234567890abcdef12345678".to_string(),
165-
// gas_limit: 10_000_000_000,
166-
// }
167-
// }
168-
// }
169-
170156
impl EthConfig {
171157
pub fn eth_rpc_connection_url(&self) -> String {
172158
format!(

protocol-units/bridge/contracts/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ docs/
1212

1313
# Dotenv file
1414
.env
15+
lib/forge-std/

protocol-units/bridge/contracts/src/AtomicBridgeCounterpartyMOVE.sol

+1-5
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,8 @@ contract AtomicBridgeCounterpartyMOVE is IAtomicBridgeCounterpartyMOVE, OwnableU
5151
bytes32 hashLock,
5252
address recipient,
5353
uint256 amount
54-
) external onlyOwner returns (bool) {
54+
) external onlyOwner {
5555
if (amount == 0) revert ZeroAmount();
56-
if (atomicBridgeInitiatorMOVE.poolBalance() < amount) revert InsufficientMOVEBalance();
5756

5857
// The time lock is now based on the configurable duration
5958
uint256 timeLock = block.timestamp + counterpartyTimeLockDuration;
@@ -68,7 +67,6 @@ contract AtomicBridgeCounterpartyMOVE is IAtomicBridgeCounterpartyMOVE, OwnableU
6867
});
6968

7069
emit BridgeTransferLocked(bridgeTransferId, recipient, amount, hashLock, counterpartyTimeLockDuration);
71-
return true;
7270
}
7371

7472
function completeBridgeTransfer(bytes32 bridgeTransferId, bytes32 preImage) external {
@@ -80,8 +78,6 @@ contract AtomicBridgeCounterpartyMOVE is IAtomicBridgeCounterpartyMOVE, OwnableU
8078

8179
details.state = MessageState.COMPLETED;
8280

83-
atomicBridgeInitiatorMOVE.withdrawMOVE(details.recipient, details.amount);
84-
8581
emit BridgeTransferCompleted(bridgeTransferId, preImage);
8682
}
8783

protocol-units/bridge/contracts/src/AtomicBridgeInitiatorMOVE.sol

+15-15
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ contract AtomicBridgeInitiatorMOVE is IAtomicBridgeInitiatorMOVE, OwnableUpgrade
4242
uint256 _timeLockDuration,
4343
uint256 _initialPoolBalance
4444
) public initializer {
45-
if (_moveToken == address(0)) {
46-
revert ZeroAddress();
47-
}
45+
require(_moveToken != address(0) && owner != address(0), "ZeroAddress");
4846
moveToken = ERC20Upgradeable(_moveToken);
4947
__Ownable_init(owner);
5048

@@ -56,7 +54,7 @@ contract AtomicBridgeInitiatorMOVE is IAtomicBridgeInitiatorMOVE, OwnableUpgrade
5654
}
5755

5856
function setCounterpartyAddress(address _counterpartyAddress) external onlyOwner {
59-
if (_counterpartyAddress == address(0)) revert ZeroAddress();
57+
require(_counterpartyAddress != address(0), "ZeroAddress");
6058
counterpartyAddress = _counterpartyAddress;
6159
}
6260

@@ -65,6 +63,8 @@ contract AtomicBridgeInitiatorMOVE is IAtomicBridgeInitiatorMOVE, OwnableUpgrade
6563
returns (bytes32 bridgeTransferId)
6664
{
6765
address originator = msg.sender;
66+
67+
require(moveAmount > 0, "ZeroAmount");
6868

6969
// Ensure there is a valid amount
7070
if (moveAmount == 0) {
@@ -97,23 +97,24 @@ contract AtomicBridgeInitiatorMOVE is IAtomicBridgeInitiatorMOVE, OwnableUpgrade
9797

9898
function completeBridgeTransfer(bytes32 bridgeTransferId, bytes32 preImage) external onlyOwner {
9999
BridgeTransfer storage bridgeTransfer = bridgeTransfers[bridgeTransferId];
100-
if (bridgeTransfer.state != MessageState.INITIALIZED) revert BridgeTransferHasBeenCompleted();
101-
if (keccak256(abi.encodePacked(preImage)) != bridgeTransfer.hashLock) revert InvalidSecret();
102-
if (block.timestamp > bridgeTransfer.timeLock) revert TimelockExpired();
100+
101+
require(bridgeTransfer.state == MessageState.INITIALIZED, "BridgeTransferHasBeenCompleted");
102+
require(keccak256(abi.encodePacked(preImage)) == bridgeTransfer.hashLock, "InvalidSecret");
103+
require(block.timestamp <= bridgeTransfer.timeLock, "TimelockExpired");
104+
103105
bridgeTransfer.state = MessageState.COMPLETED;
104106

105107
emit BridgeTransferCompleted(bridgeTransferId, preImage);
106108
}
107109

108-
function refundBridgeTransfer(bytes32 bridgeTransferId) external onlyOwner {
110+
function refundBridgeTransfer(bytes32 bridgeTransferId) external {
109111
BridgeTransfer storage bridgeTransfer = bridgeTransfers[bridgeTransferId];
110-
if (bridgeTransfer.state != MessageState.INITIALIZED) revert BridgeTransferStateNotInitialized();
111-
if (block.timestamp < bridgeTransfer.timeLock) revert TimeLockNotExpired();
112+
require(bridgeTransfer.state == MessageState.INITIALIZED, "BridgeTransferStateNotInitialized");
113+
require(block.timestamp >= bridgeTransfer.timeLock, "TimeLockNotExpired");
114+
112115
bridgeTransfer.state = MessageState.REFUNDED;
113-
114-
// Decrease pool balance and transfer MOVE tokens back to the originator
115-
poolBalance -= bridgeTransfer.amount;
116-
if (!moveToken.transfer(bridgeTransfer.originator, bridgeTransfer.amount)) revert MOVETransferFailed();
116+
117+
if (!moveToken.transfer(bridgeTransfer.originator, bridgeTransfer.amount)) revert("MOVETransferFailed");
117118

118119
emit BridgeTransferRefunded(bridgeTransferId);
119120
}
@@ -125,4 +126,3 @@ contract AtomicBridgeInitiatorMOVE is IAtomicBridgeInitiatorMOVE, OwnableUpgrade
125126
if (!moveToken.transfer(recipient, amount)) revert MOVETransferFailed();
126127
}
127128
}
128-

protocol-units/bridge/contracts/src/IAtomicBridgeCounterpartyMOVE.sol

+1-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ interface IAtomicBridgeCounterpartyMOVE {
3232
* @param hashLock The hash of the secret (HASH) that will unlock the funds
3333
* @param recipient The address to which to transfer the funds
3434
* @param amount The amount of WETH to lock
35-
* @return bool indicating successful lock
3635
*
3736
*/
3837
function lockBridgeTransfer(
@@ -41,7 +40,7 @@ interface IAtomicBridgeCounterpartyMOVE {
4140
bytes32 hashLock,
4241
address recipient,
4342
uint256 amount
44-
) external returns (bool);
43+
) external;
4544

4645
/**
4746
* @dev Completes the bridge transfer and withdraws WETH to the recipient

protocol-units/bridge/contracts/test/AtomicBridgeCounterpartyMOVE.t.sol

+1-2
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ contract AtomicBridgeCounterpartyMOVETest is Test {
107107
vm.stopPrank();
108108

109109
vm.startPrank(deployer); // Only the owner (deployer) can call lockBridgeTransfer
110-
bool result = atomicBridgeCounterpartyMOVE.lockBridgeTransfer(
110+
atomicBridgeCounterpartyMOVE.lockBridgeTransfer(
111111
initiator,
112112
bridgeTransferId,
113113
hashLock,
@@ -125,7 +125,6 @@ contract AtomicBridgeCounterpartyMOVETest is Test {
125125
AtomicBridgeCounterpartyMOVE.MessageState pendingState
126126
) = atomicBridgeCounterpartyMOVE.bridgeTransfers(bridgeTransferId);
127127

128-
assert(result);
129128
assertEq(pendingInitiator, initiator);
130129
assertEq(pendingRecipient, recipient);
131130
assertEq(pendingAmount, amount);

protocol-units/bridge/contracts/test/AtomicBridgeInitiatorMOVE.t.sol

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {AtomicBridgeInitiatorMOVE, IAtomicBridgeInitiatorMOVE, OwnableUpgradeabl
77
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
88
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
99
import {MockMOVEToken} from "../src/MockMOVEToken.sol";
10-
import {console} from "forge-std/console.sol";
1110

1211
contract AtomicBridgeInitiatorMOVETest is Test {
1312
AtomicBridgeInitiatorMOVE public atomicBridgeInitiatorImplementation;

0 commit comments

Comments
 (0)