@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.
- package/contracts/test/ERC20Test.sol +43 -7
- package/contracts/token/README.md +2 -2
- package/contracts/token/extensions/HypXERC20Lockbox.sol +24 -3
- package/dist/buildArtifact.js +1 -1
- package/dist/buildArtifact.json +1 -1
- package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.d.ts +220 -0
- package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.d.ts.map +1 -0
- package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.js +2 -0
- package/dist/contracts/test/ERC20Test.sol/XERC20LockboxTest.js.map +1 -0
- package/dist/contracts/test/ERC20Test.sol/XERC20Test.d.ts +18 -50
- package/dist/contracts/test/ERC20Test.sol/XERC20Test.d.ts.map +1 -1
- package/dist/contracts/test/ERC20Test.sol/index.d.ts +1 -0
- package/dist/contracts/test/ERC20Test.sol/index.d.ts.map +1 -1
- package/dist/contracts/token/extensions/HypXERC20Lockbox.d.ts +42 -11
- package/dist/contracts/token/extensions/HypXERC20Lockbox.d.ts.map +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/ERC20Test__factory.d.ts +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/ERC20Test__factory.js +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/FiatTokenTest__factory.d.ts +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/FiatTokenTest__factory.js +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.d.ts +119 -0
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.d.ts.map +1 -0
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.js +166 -0
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20LockboxTest__factory.js.map +1 -0
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.d.ts +6 -6
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.d.ts.map +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.js +6 -6
- package/dist/factories/contracts/test/ERC20Test.sol/XERC20Test__factory.js.map +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/index.d.ts +1 -0
- package/dist/factories/contracts/test/ERC20Test.sol/index.d.ts.map +1 -1
- package/dist/factories/contracts/test/ERC20Test.sol/index.js +1 -0
- package/dist/factories/contracts/test/ERC20Test.sol/index.js.map +1 -1
- package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.d.ts +8 -2
- package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.d.ts.map +1 -1
- package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.js +9 -2
- package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- 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
|
-
|
|
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`](./
|
|
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 -. "
|
|
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
|
-
|
|
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(
|
|
29
|
+
IERC20(wrappedToken).approve(address(lockbox), MAX_INT),
|
|
24
30
|
"erc20 lockbox approve failed"
|
|
25
31
|
);
|
|
26
32
|
require(
|
|
27
|
-
xERC20.approve(
|
|
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) {
|