@hyperlane-xyz/core 3.13.0 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/contracts/test/ERC20Test.sol +43 -7
  2. package/contracts/token/README.md +2 -2
  3. package/contracts/token/extensions/HypXERC20Lockbox.sol +24 -3
  4. package/dist/buildArtifact.js +1 -1
  5. package/dist/buildArtifact.json +1 -1
  6. package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.d.ts +220 -0
  7. package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.d.ts.map +1 -0
  8. package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.js +2 -0
  9. package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.js.map +1 -0
  10. package/dist/contracts/test/ERC20Test.sol/XERC20Test.d.ts +18 -50
  11. package/dist/contracts/test/ERC20Test.sol/XERC20Test.d.ts.map +1 -1
  12. package/dist/contracts/test/ERC20Test.sol/index.d.ts +1 -0
  13. package/dist/contracts/test/ERC20Test.sol/index.d.ts.map +1 -1
  14. package/dist/contracts/token/extensions/HypXERC20Lockbox.d.ts +42 -11
  15. package/dist/contracts/token/extensions/HypXERC20Lockbox.d.ts.map +1 -1
  16. package/dist/factories/contracts/test/ERC20Test.sol/ERC20Test__factory.d.ts +1 -1
  17. package/dist/factories/contracts/test/ERC20Test.sol/ERC20Test__factory.js +1 -1
  18. package/dist/factories/contracts/test/ERC20Test.sol/FiatTokenTest__factory.d.ts +1 -1
  19. package/dist/factories/contracts/test/ERC20Test.sol/FiatTokenTest__factory.js +1 -1
  20. package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.d.ts +119 -0
  21. package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.d.ts.map +1 -0
  22. package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.js +166 -0
  23. package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.js.map +1 -0
  24. package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.d.ts +6 -6
  25. package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.d.ts.map +1 -1
  26. package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.js +6 -6
  27. package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.js.map +1 -1
  28. package/dist/factories/contracts/test/ERC20Test.sol/index.d.ts +1 -0
  29. package/dist/factories/contracts/test/ERC20Test.sol/index.d.ts.map +1 -1
  30. package/dist/factories/contracts/test/ERC20Test.sol/index.js +1 -0
  31. package/dist/factories/contracts/test/ERC20Test.sol/index.js.map +1 -1
  32. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.d.ts +8 -2
  33. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.d.ts.map +1 -1
  34. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.js +9 -2
  35. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.js.map +1 -1
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -0
  39. package/dist/index.js.map +1 -1
  40. package/package.json +2 -2
@@ -3,6 +3,7 @@ pragma solidity >=0.8.0;
3
3
 
4
4
  import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
5
 
6
+ import "../token/interfaces/IXERC20Lockbox.sol";
6
7
  import "../token/interfaces/IXERC20.sol";
7
8
  import "../token/interfaces/IFiatToken.sol";
8
9
 
@@ -66,15 +67,50 @@ contract XERC20Test is ERC20Test, IXERC20 {
66
67
  _burn(account, amount);
67
68
  }
68
69
 
69
- function setLimits(
70
- address _bridge,
71
- uint256 _mintingLimit,
72
- uint256 _burningLimit
73
- ) external {
74
- require(false);
70
+ function setLimits(address, uint256, uint256) external pure {
71
+ assert(false);
75
72
  }
76
73
 
77
- function owner() external returns (address) {
74
+ function owner() external pure returns (address) {
78
75
  return address(0x0);
79
76
  }
80
77
  }
78
+
79
+ contract XERC20LockboxTest is IXERC20Lockbox {
80
+ IXERC20 public immutable XERC20;
81
+ IERC20 public immutable ERC20;
82
+
83
+ constructor(
84
+ string memory name,
85
+ string memory symbol,
86
+ uint256 totalSupply,
87
+ uint8 __decimals
88
+ ) {
89
+ ERC20Test erc20 = new ERC20Test(name, symbol, totalSupply, __decimals);
90
+ erc20.transfer(msg.sender, totalSupply);
91
+ ERC20 = erc20;
92
+ XERC20 = new XERC20Test(name, symbol, 0, __decimals);
93
+ }
94
+
95
+ function depositTo(address _user, uint256 _amount) public {
96
+ ERC20.transferFrom(msg.sender, address(this), _amount);
97
+ XERC20.mint(_user, _amount);
98
+ }
99
+
100
+ function deposit(uint256 _amount) external {
101
+ depositTo(msg.sender, _amount);
102
+ }
103
+
104
+ function depositNativeTo(address) external payable {
105
+ assert(false);
106
+ }
107
+
108
+ function withdrawTo(address _user, uint256 _amount) public {
109
+ XERC20.burn(msg.sender, _amount);
110
+ ERC20Test(address(ERC20)).mintTo(_user, _amount);
111
+ }
112
+
113
+ function withdraw(uint256 _amount) external {
114
+ withdrawTo(msg.sender, _amount);
115
+ }
116
+ }
@@ -6,7 +6,7 @@ For instructions on deploying Warp Routes, see [the deployment documentation](ht
6
6
 
7
7
  ## Warp Route Architecture
8
8
 
9
- A Warp Route is a collection of [`TokenRouter`](./contracts/libs/TokenRouter.sol) contracts deployed across a set of Hyperlane chains. These contracts leverage the `Router` pattern to implement access control and routing logic for remote token transfers. These contracts send and receive [`Messages`](./contracts/libs/Message.sol) which encode payloads containing a transfer `amount` and `recipient` address.
9
+ A Warp Route is a collection of [`TokenRouter`](./libs/TokenRouter.sol) contracts deployed across a set of Hyperlane chains. These contracts leverage the `Router` pattern to implement access control and routing logic for remote token transfers. These contracts send and receive [`Messages`](./libs/TokenMessage.sol) which encode payloads containing a transfer `amount` and `recipient` address.
10
10
 
11
11
  ```mermaid
12
12
  %%{ init: {
@@ -39,7 +39,7 @@ graph LR
39
39
  Mailbox_G[(Mailbox)]
40
40
  end
41
41
 
42
- HYP_E -. "router" .- HYP_P -. "router" .- HYP_G
42
+ HYP_E -. "TokenMessage" .- HYP_P -. "TokenMessage" .- HYP_G
43
43
 
44
44
  ```
45
45
 
@@ -17,18 +17,39 @@ contract HypXERC20Lockbox is HypERC20Collateral {
17
17
  ) HypERC20Collateral(address(IXERC20Lockbox(_lockbox).ERC20()), _mailbox) {
18
18
  lockbox = IXERC20Lockbox(_lockbox);
19
19
  xERC20 = lockbox.XERC20();
20
+ approveLockbox();
21
+ }
20
22
 
21
- // grant infinite approvals to lockbox
23
+ /**
24
+ * @notice Approve the lockbox to spend the wrapped token and xERC20
25
+ * @dev This function is idempotent and need not be access controlled
26
+ */
27
+ function approveLockbox() public {
22
28
  require(
23
- IERC20(wrappedToken).approve(_lockbox, MAX_INT),
29
+ IERC20(wrappedToken).approve(address(lockbox), MAX_INT),
24
30
  "erc20 lockbox approve failed"
25
31
  );
26
32
  require(
27
- xERC20.approve(_lockbox, MAX_INT),
33
+ xERC20.approve(address(lockbox), MAX_INT),
28
34
  "xerc20 lockbox approve failed"
29
35
  );
30
36
  }
31
37
 
38
+ /**
39
+ * @notice Initialize the contract
40
+ * @param _hook The address of the hook contract
41
+ * @param _ism The address of the interchain security module
42
+ * @param _owner The address of the owner
43
+ */
44
+ function initialize(
45
+ address _hook,
46
+ address _ism,
47
+ address _owner
48
+ ) public override initializer {
49
+ approveLockbox();
50
+ _MailboxClient_initialize(_hook, _ism, _owner);
51
+ }
52
+
32
53
  function _transferFromSender(
33
54
  uint256 _amount
34
55
  ) internal override returns (bytes memory) {