@wormhole-foundation/wormhole-solidity-sdk 1.0.1
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/LICENSE +13 -0
- package/README.md +78 -0
- package/contracts/Executor/Integration.sol +180 -0
- package/contracts/Executor/RelayInstruction.sol +108 -0
- package/contracts/Executor/Request.sol +43 -0
- package/contracts/RawDispatcher.sol +29 -0
- package/contracts/Utils.sol +27 -0
- package/contracts/WormholeRelayer/AdditionalMessages.sol +37 -0
- package/contracts/WormholeRelayer/Keys.sol +198 -0
- package/contracts/WormholeRelayer/Receiver.sol +44 -0
- package/contracts/WormholeRelayer/Sender.sol +264 -0
- package/contracts/WormholeRelayer.sol +7 -0
- package/contracts/constants/CctpDomainMapping.sol +72 -0
- package/contracts/constants/CctpDomains.sol +21 -0
- package/contracts/constants/Chains.sol +66 -0
- package/contracts/constants/Common.sol +17 -0
- package/contracts/constants/ConsistencyLevel.sol +9 -0
- package/contracts/interfaces/ICoreBridge.sol +80 -0
- package/contracts/interfaces/ICustomConsistencyLevel.sol +12 -0
- package/contracts/interfaces/IDeliveryProvider.sol +84 -0
- package/contracts/interfaces/IExecutor.sol +32 -0
- package/contracts/interfaces/ITokenBridge.sol +81 -0
- package/contracts/interfaces/IWormholeRelayer.sol +658 -0
- package/contracts/interfaces/cctp/IMessageTransmitter.sol +76 -0
- package/contracts/interfaces/cctp/ITokenMessenger.sol +72 -0
- package/contracts/interfaces/cctp/ITokenMinter.sol +40 -0
- package/contracts/interfaces/cctp/shared/IOwnable2Step.sol +18 -0
- package/contracts/interfaces/cctp/shared/IPausable.sol +20 -0
- package/contracts/interfaces/token/IERC20.sol +16 -0
- package/contracts/interfaces/token/IERC20Metadata.sol +11 -0
- package/contracts/interfaces/token/IERC20Permit.sol +19 -0
- package/contracts/interfaces/token/IWETH.sol +12 -0
- package/contracts/libraries/BytesParsing.sol +2848 -0
- package/contracts/libraries/CctpMessages.sol +755 -0
- package/contracts/libraries/CoreBridge.sol +365 -0
- package/contracts/libraries/CustomConsistency.sol +60 -0
- package/contracts/libraries/Percentage.sol +99 -0
- package/contracts/libraries/PermitParsing.sol +580 -0
- package/contracts/libraries/QueryResponse.sol +741 -0
- package/contracts/libraries/ReplayProtection.sol +106 -0
- package/contracts/libraries/SafeERC20.sol +67 -0
- package/contracts/libraries/TokenBridgeMessages.sol +742 -0
- package/contracts/libraries/TypedUnits.sol +304 -0
- package/contracts/libraries/UncheckedIndexing.sol +99 -0
- package/contracts/libraries/VaaLib.sol +1385 -0
- package/contracts/proxy/Eip1967Admin.sol +20 -0
- package/contracts/proxy/Eip1967Implementation.sol +15 -0
- package/contracts/proxy/Proxy.sol +43 -0
- package/contracts/proxy/ProxyBase.sol +80 -0
- package/contracts/utils/DecimalNormalization.sol +18 -0
- package/contracts/utils/EagerOps.sol +18 -0
- package/contracts/utils/Keccak.sol +39 -0
- package/contracts/utils/Revert.sol +11 -0
- package/contracts/utils/Transfer.sol +23 -0
- package/contracts/utils/UniversalAddress.sol +17 -0
- package/package.json +23 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2022, Circle Internet Financial Limited.
|
|
3
|
+
//
|
|
4
|
+
// stripped, flattened version of:
|
|
5
|
+
// https://github.com/circlefin/evm-cctp-contracts/blob/master/src/MessageTransmitter.sol
|
|
6
|
+
|
|
7
|
+
pragma solidity ^0.8.0;
|
|
8
|
+
|
|
9
|
+
import {IOwnable2Step} from "./shared/IOwnable2Step.sol";
|
|
10
|
+
import {IPausable} from "./shared/IPausable.sol";
|
|
11
|
+
|
|
12
|
+
interface IAttestable {
|
|
13
|
+
event AttesterEnabled(address indexed attester);
|
|
14
|
+
event AttesterDisabled(address indexed attester);
|
|
15
|
+
|
|
16
|
+
event SignatureThresholdUpdated(uint256 oldSignatureThreshold, uint256 newSignatureThreshold);
|
|
17
|
+
event AttesterManagerUpdated(
|
|
18
|
+
address indexed previousAttesterManager,
|
|
19
|
+
address indexed newAttesterManager
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
function attesterManager() external view returns (address);
|
|
23
|
+
function isEnabledAttester(address attester) external view returns (bool);
|
|
24
|
+
function getNumEnabledAttesters() external view returns (uint256);
|
|
25
|
+
function getEnabledAttester(uint256 index) external view returns (address);
|
|
26
|
+
|
|
27
|
+
function updateAttesterManager(address newAttesterManager) external;
|
|
28
|
+
function setSignatureThreshold(uint256 newSignatureThreshold) external;
|
|
29
|
+
function enableAttester(address attester) external;
|
|
30
|
+
function disableAttester(address attester) external;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface IMessageTransmitter is IAttestable, IPausable, IOwnable2Step {
|
|
34
|
+
event MessageSent(bytes message);
|
|
35
|
+
|
|
36
|
+
event MessageReceived(
|
|
37
|
+
address indexed caller,
|
|
38
|
+
uint32 sourceDomain,
|
|
39
|
+
uint64 indexed nonce,
|
|
40
|
+
bytes32 sender,
|
|
41
|
+
bytes messageBody
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
function localDomain() external view returns (uint32);
|
|
45
|
+
function version() external view returns (uint32);
|
|
46
|
+
function maxMessageBodySize() external view returns (uint256);
|
|
47
|
+
function nextAvailableNonce() external view returns (uint64);
|
|
48
|
+
function usedNonces(bytes32 nonce) external view returns (bool);
|
|
49
|
+
|
|
50
|
+
function sendMessage(
|
|
51
|
+
uint32 destinationDomain,
|
|
52
|
+
bytes32 recipient,
|
|
53
|
+
bytes calldata messageBody
|
|
54
|
+
) external returns (uint64);
|
|
55
|
+
|
|
56
|
+
function sendMessageWithCaller(
|
|
57
|
+
uint32 destinationDomain,
|
|
58
|
+
bytes32 recipient,
|
|
59
|
+
bytes32 destinationCaller,
|
|
60
|
+
bytes calldata messageBody
|
|
61
|
+
) external returns (uint64);
|
|
62
|
+
|
|
63
|
+
function replaceMessage(
|
|
64
|
+
bytes calldata originalMessage,
|
|
65
|
+
bytes calldata originalAttestation,
|
|
66
|
+
bytes calldata newMessageBody,
|
|
67
|
+
bytes32 newDestinationCaller
|
|
68
|
+
) external;
|
|
69
|
+
|
|
70
|
+
function receiveMessage(
|
|
71
|
+
bytes calldata message,
|
|
72
|
+
bytes calldata attestation
|
|
73
|
+
) external returns (bool success);
|
|
74
|
+
|
|
75
|
+
function setMaxMessageBodySize(uint256 newMaxMessageBodySize) external;
|
|
76
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2022, Circle Internet Financial Limited.
|
|
3
|
+
//
|
|
4
|
+
// stripped version of:
|
|
5
|
+
// https://github.com/circlefin/evm-cctp-contracts/blob/master/src/MessageTransmitter.sol
|
|
6
|
+
|
|
7
|
+
pragma solidity ^0.8.0;
|
|
8
|
+
|
|
9
|
+
import {IOwnable2Step} from "./shared/IOwnable2Step.sol";
|
|
10
|
+
|
|
11
|
+
import {IMessageTransmitter} from "./IMessageTransmitter.sol";
|
|
12
|
+
import {ITokenMinter} from "./ITokenMinter.sol";
|
|
13
|
+
|
|
14
|
+
interface ITokenMessenger is IOwnable2Step {
|
|
15
|
+
event DepositForBurn(
|
|
16
|
+
uint64 indexed nonce,
|
|
17
|
+
address indexed burnToken,
|
|
18
|
+
uint256 amount,
|
|
19
|
+
address indexed depositor,
|
|
20
|
+
bytes32 mintRecipient,
|
|
21
|
+
uint32 destinationDomain,
|
|
22
|
+
bytes32 destinationTokenMessenger,
|
|
23
|
+
bytes32 destinationCaller
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
event MintAndWithdraw(address indexed mintRecipient, uint256 amount, address indexed mintToken);
|
|
27
|
+
|
|
28
|
+
event RemoteTokenMessengerAdded(uint32 domain, bytes32 tokenMessenger);
|
|
29
|
+
event RemoteTokenMessengerRemoved(uint32 domain, bytes32 tokenMessenger);
|
|
30
|
+
|
|
31
|
+
event LocalMinterAdded(address localMinter);
|
|
32
|
+
event LocalMinterRemoved(address localMinter);
|
|
33
|
+
|
|
34
|
+
function messageBodyVersion() external view returns (uint32);
|
|
35
|
+
function localMessageTransmitter() external view returns (IMessageTransmitter);
|
|
36
|
+
function localMinter() external view returns (ITokenMinter);
|
|
37
|
+
function remoteTokenMessengers(uint32 domain) external view returns (bytes32);
|
|
38
|
+
|
|
39
|
+
function depositForBurn(
|
|
40
|
+
uint256 amount,
|
|
41
|
+
uint32 destinationDomain,
|
|
42
|
+
bytes32 mintRecipient,
|
|
43
|
+
address burnToken
|
|
44
|
+
) external returns (uint64 nonce);
|
|
45
|
+
|
|
46
|
+
function depositForBurnWithCaller(
|
|
47
|
+
uint256 amount,
|
|
48
|
+
uint32 destinationDomain,
|
|
49
|
+
bytes32 mintRecipient,
|
|
50
|
+
address burnToken,
|
|
51
|
+
bytes32 destinationCaller
|
|
52
|
+
) external returns (uint64 nonce);
|
|
53
|
+
|
|
54
|
+
function replaceDepositForBurn(
|
|
55
|
+
bytes calldata originalMessage,
|
|
56
|
+
bytes calldata originalAttestation,
|
|
57
|
+
bytes32 newDestinationCaller,
|
|
58
|
+
bytes32 newMintRecipient
|
|
59
|
+
) external;
|
|
60
|
+
|
|
61
|
+
function handleReceiveMessage(
|
|
62
|
+
uint32 remoteDomain,
|
|
63
|
+
bytes32 sender,
|
|
64
|
+
bytes calldata messageBody
|
|
65
|
+
) external returns (bool);
|
|
66
|
+
|
|
67
|
+
function addRemoteTokenMessenger(uint32 domain, bytes32 tokenMessenger) external;
|
|
68
|
+
function removeRemoteTokenMessenger(uint32 domain) external;
|
|
69
|
+
|
|
70
|
+
function addLocalMinter(address newLocalMinter) external;
|
|
71
|
+
function removeLocalMinter() external;
|
|
72
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2022, Circle Internet Financial Limited.
|
|
3
|
+
//stripped version of:
|
|
4
|
+
//https://github.com/circlefin/evm-cctp-contracts/blob/master/src/interfaces/ITokenMinter.sol
|
|
5
|
+
|
|
6
|
+
pragma solidity ^0.8.0;
|
|
7
|
+
|
|
8
|
+
import {IOwnable2Step} from "./shared/IOwnable2Step.sol";
|
|
9
|
+
import {IPausable} from "./shared/IPausable.sol";
|
|
10
|
+
|
|
11
|
+
interface ITokenController {
|
|
12
|
+
event TokenPairLinked(address localToken, uint32 remoteDomain, bytes32 remoteToken);
|
|
13
|
+
event TokenPairUnlinked(address localToken, uint32 remoteDomain, bytes32 remoteToken);
|
|
14
|
+
|
|
15
|
+
event SetBurnLimitPerMessage(address indexed token, uint256 burnLimitPerMessage);
|
|
16
|
+
event SetTokenController(address tokenController);
|
|
17
|
+
|
|
18
|
+
function burnLimitsPerMessage(address token) external view returns (uint256);
|
|
19
|
+
function remoteTokensToLocalTokens(bytes32 sourceIdHash) external view returns (address);
|
|
20
|
+
function tokenController() external view returns (address);
|
|
21
|
+
|
|
22
|
+
function linkTokenPair(address localToken, uint32 remoteDomain, bytes32 remoteToken) external;
|
|
23
|
+
function unlinkTokenPair(address localToken, uint32 remoteDomain, bytes32 remoteToken) external;
|
|
24
|
+
function setMaxBurnAmountPerMessage(address localToken, uint256 burnLimitPerMessage) external;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface ITokenMinter is ITokenController, IPausable, IOwnable2Step {
|
|
28
|
+
event LocalTokenMessengerAdded(address localTokenMessenger);
|
|
29
|
+
event LocalTokenMessengerRemoved(address localTokenMessenger);
|
|
30
|
+
|
|
31
|
+
function localTokenMessenger() external view returns (address);
|
|
32
|
+
function getLocalToken(uint32 remoteDomain, bytes32 remoteToken) external view returns (address);
|
|
33
|
+
|
|
34
|
+
function mint(uint32 sourceDomain, bytes32 burnToken, address to, uint256 amount) external;
|
|
35
|
+
function burn(address burnToken, uint256 burnAmount) external;
|
|
36
|
+
|
|
37
|
+
function addLocalTokenMessenger(address newLocalTokenMessenger) external;
|
|
38
|
+
function removeLocalTokenMessenger() external;
|
|
39
|
+
function setTokenController(address newTokenController) external;
|
|
40
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2022, Circle Internet Financial Limited.
|
|
3
|
+
//
|
|
4
|
+
// stripped, flattened version of:
|
|
5
|
+
// https://github.com/circlefin/evm-cctp-contracts/blob/master/src/roles/Ownable2Step.sol
|
|
6
|
+
|
|
7
|
+
pragma solidity ^0.8.0;
|
|
8
|
+
|
|
9
|
+
interface IOwnable2Step {
|
|
10
|
+
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
|
|
11
|
+
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
|
|
12
|
+
|
|
13
|
+
function transferOwnership(address newOwner) external;
|
|
14
|
+
function acceptOwnership() external;
|
|
15
|
+
|
|
16
|
+
function owner() external view returns (address);
|
|
17
|
+
function pendingOwner() external view returns (address);
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2022, Circle Internet Financial Limited.
|
|
3
|
+
//
|
|
4
|
+
// stripped version of:
|
|
5
|
+
// https://github.com/circlefin/evm-cctp-contracts/blob/master/src/roles/Pausable.sol
|
|
6
|
+
|
|
7
|
+
pragma solidity ^0.8.0;
|
|
8
|
+
|
|
9
|
+
interface IPausable {
|
|
10
|
+
event Pause();
|
|
11
|
+
event Unpause();
|
|
12
|
+
event PauserChanged(address indexed newAddress);
|
|
13
|
+
|
|
14
|
+
function paused() external view returns (bool);
|
|
15
|
+
function pauser() external view returns (address);
|
|
16
|
+
|
|
17
|
+
function pause() external;
|
|
18
|
+
function unpause() external;
|
|
19
|
+
function updatePauser(address newPauser) external;
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
//https://eips.ethereum.org/EIPS/eip-20
|
|
5
|
+
interface IERC20 {
|
|
6
|
+
event Transfer(address indexed from, address indexed to, uint256 value);
|
|
7
|
+
event Approval(address indexed owner, address indexed spender, uint256 value);
|
|
8
|
+
|
|
9
|
+
function totalSupply() external view returns (uint256);
|
|
10
|
+
function balanceOf(address account) external view returns (uint256);
|
|
11
|
+
function allowance(address owner, address spender) external view returns (uint256);
|
|
12
|
+
|
|
13
|
+
function transfer(address to, uint256 amount) external returns (bool);
|
|
14
|
+
function approve(address spender, uint256 amount) external returns (bool);
|
|
15
|
+
function transferFrom(address from, address to, uint256 amount) external returns (bool);
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
import "./IERC20.sol";
|
|
5
|
+
|
|
6
|
+
//https://eips.ethereum.org/EIPS/eip-20
|
|
7
|
+
interface IERC20Metadata is IERC20 {
|
|
8
|
+
function name() external view returns (string memory);
|
|
9
|
+
function symbol() external view returns (string memory);
|
|
10
|
+
function decimals() external view returns (uint8);
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
import "./IERC20.sol";
|
|
5
|
+
|
|
6
|
+
//https://eips.ethereum.org/EIPS/eip-2612
|
|
7
|
+
interface IERC20Permit is IERC20 {
|
|
8
|
+
function permit(
|
|
9
|
+
address owner,
|
|
10
|
+
address spender,
|
|
11
|
+
uint value,
|
|
12
|
+
uint deadline,
|
|
13
|
+
uint8 v,
|
|
14
|
+
bytes32 r,
|
|
15
|
+
bytes32 s
|
|
16
|
+
) external;
|
|
17
|
+
function nonces(address owner) external view returns (uint);
|
|
18
|
+
function DOMAIN_SEPARATOR() external view returns (bytes32);
|
|
19
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
import "./IERC20.sol";
|
|
5
|
+
|
|
6
|
+
interface IWETH is IERC20 {
|
|
7
|
+
event Deposit(address indexed dst, uint amount);
|
|
8
|
+
event Withdrawal(address indexed src, uint amount);
|
|
9
|
+
|
|
10
|
+
function deposit() external payable;
|
|
11
|
+
function withdraw(uint256 amount) external;
|
|
12
|
+
}
|