@across-protocol/contracts 5.0.11 → 5.0.12-beta.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/contracts/external/interfaces/CCTPInterfaces.sol +18 -0
- package/contracts/interfaces/SponsoredCCTPInterface.sol +11 -0
- package/contracts/libraries/SponsoredCCTPQuoteLib.sol +22 -0
- package/contracts/periphery/mintburn/ArbitraryEVMFlowExecutor.sol +38 -15
- package/contracts/periphery/mintburn/sponsored-cctp/SponsoredCCTPDstPeriphery.sol +41 -12
- package/contracts/test/MockCCTP.sol +10 -0
- package/dist/broadcast/deployed-addresses.json +50 -0
- package/dist/evm/artifacts/Arbitrum_Adapter.sol/Arbitrum_Adapter.json +1 -1
- package/dist/evm/artifacts/Arbitrum_CustomGasToken_Adapter.sol/Arbitrum_CustomGasToken_Adapter.json +1 -1
- package/dist/evm/artifacts/Arbitrum_RescueAdapter.sol/Arbitrum_RescueAdapter.json +1 -1
- package/dist/evm/artifacts/Arbitrum_SendTokensAdapter.sol/Arbitrum_SendTokensAdapter.json +1 -1
- package/dist/evm/artifacts/Arbitrum_SpokePool.sol/Arbitrum_SpokePool.json +1 -1
- package/dist/evm/artifacts/Arbitrum_WithdrawalHelper.sol/Arbitrum_WithdrawalHelper.json +1 -1
- package/dist/evm/artifacts/Base_Adapter.sol/Base_Adapter.json +1 -1
- package/dist/evm/artifacts/Blast_Adapter.sol/Blast_Adapter.json +1 -1
- package/dist/evm/artifacts/Blast_SpokePool.sol/Blast_SpokePool.json +1 -1
- package/dist/evm/artifacts/Boba_SpokePool.sol/Boba_SpokePool.json +1 -1
- package/dist/evm/artifacts/CCTPInterfaces.sol/ITokenMessengerV2.json +1 -1
- package/dist/evm/artifacts/CCTPInterfaces.sol/ITokenMinter.json +1 -1
- package/dist/evm/artifacts/Cher_SpokePool.sol/Cher_SpokePool.json +1 -1
- package/dist/evm/artifacts/CircleCCTPAdapter.sol/CircleDomainIds.json +1 -1
- package/dist/evm/artifacts/CounterfactualDepositCCTP.sol/CounterfactualDepositCCTP.json +1 -1
- package/dist/evm/artifacts/DoctorWho_Adapter.sol/DoctorWho_Adapter.json +1 -1
- package/dist/evm/artifacts/DstOFTHandler.sol/DstOFTHandler.json +1 -1
- package/dist/evm/artifacts/Ink_SpokePool.sol/Ink_SpokePool.json +1 -1
- package/dist/evm/artifacts/Lens_SpokePool.sol/Lens_SpokePool.json +1 -1
- package/dist/evm/artifacts/Linea_Adapter.sol/Linea_Adapter.json +1 -1
- package/dist/evm/artifacts/Linea_SpokePool.sol/Linea_SpokePool.json +1 -1
- package/dist/evm/artifacts/Lisk_Adapter.sol/Lisk_Adapter.json +1 -1
- package/dist/evm/artifacts/Lisk_SpokePool.sol/Lisk_SpokePool.json +1 -1
- package/dist/evm/artifacts/MockBedrockStandardBridge.sol/MockBedrockCrossDomainMessenger.json +1 -1
- package/dist/evm/artifacts/MockBedrockStandardBridge.sol/MockBedrockL1StandardBridge.json +1 -1
- package/dist/evm/artifacts/MockBedrockStandardBridge.sol/MockBedrockL2StandardBridge.json +1 -1
- package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMessageTransmitter.json +1 -1
- package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMessenger.json +1 -1
- package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMessengerV2.json +1 -1
- package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMinter.json +1 -1
- package/dist/evm/artifacts/MockOptimism_SpokePool.sol/MockOptimism_SpokePool.json +1 -1
- package/dist/evm/artifacts/Mode_Adapter.sol/Mode_Adapter.json +1 -1
- package/dist/evm/artifacts/OP_Adapter.sol/OP_Adapter.json +1 -1
- package/dist/evm/artifacts/OP_SpokePool.sol/OP_SpokePool.json +1 -1
- package/dist/evm/artifacts/Optimism_Adapter.sol/Optimism_Adapter.json +1 -1
- package/dist/evm/artifacts/Optimism_SpokePool.sol/Optimism_SpokePool.json +1 -1
- package/dist/evm/artifacts/Ovm_SpokePool.sol/Ovm_SpokePool.json +1 -1
- package/dist/evm/artifacts/Ovm_WithdrawalHelper.sol/Ovm_WithdrawalHelper.json +1 -1
- package/dist/evm/artifacts/Polygon_Adapter.sol/Polygon_Adapter.json +1 -1
- package/dist/evm/artifacts/Polygon_SpokePool.sol/Polygon_SpokePool.json +1 -1
- package/dist/evm/artifacts/Solana_Adapter.sol/Solana_Adapter.json +1 -1
- package/dist/evm/artifacts/SponsoredCCTPDstPeriphery.sol/SponsoredCCTPDstPeriphery.json +1 -1
- package/dist/evm/artifacts/SponsoredCCTPInterface.sol/SponsoredCCTPInterface.json +1 -1
- package/dist/evm/artifacts/SponsoredCCTPSrcPeriphery.sol/SponsoredCCTPSrcPeriphery.json +1 -1
- package/dist/evm/artifacts/SponsoredOFTSrcPeriphery.sol/SponsoredOFTSrcPeriphery.json +1 -1
- package/dist/evm/artifacts/Tron_SpokePool.sol/Tron_SpokePool.json +1 -1
- package/dist/evm/artifacts/Universal_Adapter.sol/Universal_Adapter.json +1 -1
- package/dist/evm/artifacts/Universal_SpokePool.sol/Universal_SpokePool.json +1 -1
- package/dist/evm/artifacts/WorldChain_SpokePool.sol/WorldChain_SpokePool.json +1 -1
- package/dist/evm/artifacts/ZkStack_Adapter.sol/ZkStack_Adapter.json +1 -1
- package/dist/evm/artifacts/ZkStack_CustomGasToken_Adapter.sol/ZkStack_CustomGasToken_Adapter.json +1 -1
- package/dist/evm/artifacts/ZkSync_SpokePool.sol/ZkSync_SpokePool.json +1 -1
- package/dist/evm/artifacts/Zora_Adapter.sol/Zora_Adapter.json +1 -1
- package/dist/evm/artifacts/eraVM_EIP7702.sol/SimpleContract.json +1 -1
- package/dist/evm/artifacts/eraVM_EIP7702.sol/SpokePoolEIP7702Test.json +1 -1
- package/dist/evm/artifacts/eraVM_EIP7702.sol/TestableMockSpokePool.json +1 -1
- package/dist/src/svm/assets/idl/svm_spoke.json +9 -4
- package/dist/src/svm/assets/svm_spoke.d.ts +9 -4
- package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.d.ts +3 -1
- package/dist/src/svm/clients/SvmSpoke/errors/svmSpoke.js +4 -1
- package/dist/src/types/svm.d.ts +44 -0
- package/dist/target/types/svm_spoke.d.ts +9 -4
- package/package.json +1 -1
|
@@ -58,6 +58,14 @@ interface ITokenMessenger {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
interface ITokenMessengerV2 {
|
|
61
|
+
/**
|
|
62
|
+
* @notice Minter responsible for minting and burning tokens on the local domain.
|
|
63
|
+
* Used on destination to prove that a received message would mint via the expected
|
|
64
|
+
* TokenMinter, and to resolve the local token that corresponds to a remote burnToken.
|
|
65
|
+
* https://github.com/circlefin/evm-cctp-contracts/blob/63ab1f0ac06ce0793c0bbfbb8d09816bc211386d/src/v2/TokenMessengerV2.sol
|
|
66
|
+
*/
|
|
67
|
+
function localMinter() external view returns (ITokenMinter minter);
|
|
68
|
+
|
|
61
69
|
// Source: https://github.com/circlefin/evm-cctp-contracts/blob/63ab1f0ac06ce0793c0bbfbb8d09816bc211386d/src/v2/TokenMessengerV2.sol#L138C1-L166C15
|
|
62
70
|
/**
|
|
63
71
|
* @notice Deposits and burns tokens from sender to be minted on destination domain.
|
|
@@ -139,6 +147,16 @@ interface ITokenMinter {
|
|
|
139
147
|
* @return burnLimit maximum burn amount per message for token
|
|
140
148
|
*/
|
|
141
149
|
function burnLimitsPerMessage(address token) external view returns (uint256);
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @notice Returns the local token that is associated with the given remote burnToken on `remoteDomain`.
|
|
153
|
+
* Returns address(0) when no link has been configured.
|
|
154
|
+
* https://github.com/circlefin/evm-cctp-contracts/blob/63ab1f0ac06ce0793c0bbfbb8d09816bc211386d/src/TokenMinter.sol#L155
|
|
155
|
+
* @param remoteDomain CCTP source domain
|
|
156
|
+
* @param remoteToken burnToken (as bytes32) on the remote domain
|
|
157
|
+
* @return localToken the locally-minted token, or address(0) if the pair is not linked
|
|
158
|
+
*/
|
|
159
|
+
function getLocalToken(uint32 remoteDomain, bytes32 remoteToken) external view returns (address localToken);
|
|
142
160
|
}
|
|
143
161
|
|
|
144
162
|
/**
|
|
@@ -24,6 +24,17 @@ interface SponsoredCCTPInterface is SponsoredExecutionModeInterface {
|
|
|
24
24
|
// Error thrown when the CCTP message transmitter receive message fails.
|
|
25
25
|
error CCTPMessageTransmitterFailed();
|
|
26
26
|
|
|
27
|
+
// Error thrown when the amount actually minted into this contract by the CCTP call does not match
|
|
28
|
+
// the `amount - feeExecuted` encoded in the message.
|
|
29
|
+
error InvalidMintedAmount();
|
|
30
|
+
|
|
31
|
+
// Error thrown when the CCTP message's top-level `recipient` is not the configured TokenMessenger.
|
|
32
|
+
error InvalidRecipient();
|
|
33
|
+
|
|
34
|
+
// Error thrown when the TokenMinter does not link the message's remote burnToken to this periphery's
|
|
35
|
+
// `baseToken` on the local domain.
|
|
36
|
+
error InvalidMintedToken();
|
|
37
|
+
|
|
27
38
|
// Error thrown when direct flow destination handler is not a contract.
|
|
28
39
|
error InvalidDirectHandler();
|
|
29
40
|
|
|
@@ -89,6 +89,28 @@ library SponsoredCCTPQuoteLib {
|
|
|
89
89
|
);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
/**
|
|
93
|
+
* @notice Reads the top-level CCTP message `recipient` (i.e. the contract MessageTransmitter delivers to,
|
|
94
|
+
* typically the TokenMessenger that performs the mint). Assumes `message` has passed length validation.
|
|
95
|
+
*/
|
|
96
|
+
function extractRecipient(bytes memory message) internal pure returns (bytes32) {
|
|
97
|
+
return message.toBytes32(RECIPIENT_INDEX);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @notice Reads the CCTP source domain from the message header. Assumes `message` has passed length validation.
|
|
102
|
+
*/
|
|
103
|
+
function extractSourceDomain(bytes memory message) internal pure returns (uint32) {
|
|
104
|
+
return message.toUint32(SOURCE_DOMAIN_INDEX);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @notice Reads the burnToken (as bytes32) from the burn message body. Assumes `message` has passed length validation.
|
|
109
|
+
*/
|
|
110
|
+
function extractBurnToken(bytes memory message) internal pure returns (bytes32) {
|
|
111
|
+
return message.toBytes32(MESSAGE_BODY_INDEX + BURN_TOKEN_INDEX);
|
|
112
|
+
}
|
|
113
|
+
|
|
92
114
|
/**
|
|
93
115
|
* @notice Validates the message that is received from CCTP. If this checks fails, then the quote on source chain was invalid
|
|
94
116
|
* and we are unable to retrieve user's address to send the funds to. In that case the funds will stay in this contract.
|
|
@@ -60,9 +60,17 @@ abstract contract ArbitraryEVMFlowExecutor {
|
|
|
60
60
|
// Decode the compressed action data
|
|
61
61
|
CompressedCall[] memory compressedCalls = abi.decode(params.actionData, (CompressedCall[]));
|
|
62
62
|
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
// Sweep any pre-existing dust on MulticallHandler so it cannot pollute our balance snapshots
|
|
64
|
+
_drainMulticallHandlerDust(params.initialToken);
|
|
65
|
+
if (params.commonParams.finalToken != params.initialToken) {
|
|
66
|
+
_drainMulticallHandlerDust(params.commonParams.finalToken);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
bool differentTokens = params.initialToken != params.commonParams.finalToken;
|
|
70
|
+
|
|
71
|
+
// Read "starting balance initial token"(sBI) and "starting balance final token"(sBF)
|
|
72
|
+
uint256 sBI = IERC20(params.initialToken).balanceOf(address(this));
|
|
73
|
+
uint256 sBF = differentTokens ? IERC20(params.commonParams.finalToken).balanceOf(address(this)) : sBI;
|
|
66
74
|
|
|
67
75
|
// Transfer tokens to MulticallHandler
|
|
68
76
|
IERC20(params.initialToken).safeTransfer(multicallHandler, params.commonParams.amountInEVM);
|
|
@@ -82,19 +90,21 @@ abstract contract ArbitraryEVMFlowExecutor {
|
|
|
82
90
|
instructions
|
|
83
91
|
);
|
|
84
92
|
|
|
85
|
-
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
uint256
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
// Default to initial-token accounting; overwrite below if finalToken was actually produced.
|
|
94
|
+
// Ending balance initial token
|
|
95
|
+
uint256 eBI = IERC20(params.initialToken).balanceOf(address(this));
|
|
96
|
+
uint256 finalAmount = params.commonParams.amountInEVM + eBI - sBI;
|
|
97
|
+
if (differentTokens) {
|
|
98
|
+
// Ending balance final token
|
|
99
|
+
uint256 eBF = IERC20(params.commonParams.finalToken).balanceOf(address(this));
|
|
100
|
+
|
|
101
|
+
// Any positive finalToken delta is treated as successful execution when initialToken != finalToken. If any
|
|
102
|
+
// (or all) of the initialToken amount is unspent during the execution, it lands back into this contract and
|
|
103
|
+
// can be withdrawn by the admin
|
|
104
|
+
if (eBF > sBF) {
|
|
105
|
+
finalAmount = eBF - sBF;
|
|
95
106
|
} else {
|
|
96
|
-
|
|
97
|
-
finalAmount = 0;
|
|
107
|
+
params.commonParams.finalToken = params.initialToken;
|
|
98
108
|
}
|
|
99
109
|
}
|
|
100
110
|
|
|
@@ -155,6 +165,19 @@ abstract contract ArbitraryEVMFlowExecutor {
|
|
|
155
165
|
return abi.encode(instructions);
|
|
156
166
|
}
|
|
157
167
|
|
|
168
|
+
/// @notice Drains any pre-existing balance of token from MulticallHandler
|
|
169
|
+
function _drainMulticallHandlerDust(address token) internal {
|
|
170
|
+
if (IERC20(token).balanceOf(multicallHandler) == 0) return;
|
|
171
|
+
|
|
172
|
+
// Empty instructions with `fallbackRecipient` set. Causes MulticallHandler to call `_drainRemainingTokens`, which
|
|
173
|
+
// does a safeTransfer of `token` to `fallbackRecipient`, this contract, essentially removing dust
|
|
174
|
+
bytes memory instructions = abi.encode(
|
|
175
|
+
MulticallHandler.Instructions({ calls: new MulticallHandler.Call[](0), fallbackRecipient: address(this) })
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
MulticallHandler(payable(multicallHandler)).handleV3AcrossMessage(token, 0, address(this), instructions);
|
|
179
|
+
}
|
|
180
|
+
|
|
158
181
|
/// @notice Calculates proportional fees to sponsor in finalToken, given the fees to sponsor in initial token and initial amount
|
|
159
182
|
function _calcExtraFeesFinal(
|
|
160
183
|
uint256 amount,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
pragma solidity ^0.8.0;
|
|
3
3
|
|
|
4
4
|
import { BaseModuleHandler } from "../BaseModuleHandler.sol";
|
|
5
|
-
import { IMessageTransmitterV2 } from "../../../external/interfaces/CCTPInterfaces.sol";
|
|
5
|
+
import { IMessageTransmitterV2, ITokenMessengerV2 } from "../../../external/interfaces/CCTPInterfaces.sol";
|
|
6
6
|
import { SponsoredCCTPQuoteLib } from "../../../libraries/SponsoredCCTPQuoteLib.sol";
|
|
7
7
|
import { SponsoredCCTPInterface } from "../../../interfaces/SponsoredCCTPInterface.sol";
|
|
8
8
|
import { Bytes32ToAddress } from "../../../libraries/AddressConverters.sol";
|
|
@@ -27,6 +27,10 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
27
27
|
/// @notice The CCTP message transmitter contract.
|
|
28
28
|
IMessageTransmitterV2 public immutable cctpMessageTransmitter;
|
|
29
29
|
|
|
30
|
+
/// @notice The CCTP token messenger contract that is the expected top-level recipient of MessageTransmitter
|
|
31
|
+
/// deliveries and owns the TokenMinter used to resolve burnToken -> local token for non-direct-deposit flows.
|
|
32
|
+
ITokenMessengerV2 public immutable cctpTokenMessenger;
|
|
33
|
+
|
|
30
34
|
/// @notice Base token associated with this handler. The one we receive from the CCTP bridge
|
|
31
35
|
address public immutable baseToken;
|
|
32
36
|
|
|
@@ -52,6 +56,8 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
52
56
|
/**
|
|
53
57
|
* @notice Constructor for the SponsoredCCTPDstPeriphery contract.
|
|
54
58
|
* @param _cctpMessageTransmitter The address of the CCTP message transmitter contract.
|
|
59
|
+
* @param _cctpTokenMessenger The address of the CCTP token messenger contract. Used to pin that a received
|
|
60
|
+
* message actually routed through the real mint flow and that the remote burnToken links to `baseToken`.
|
|
55
61
|
* @param _signer The address of the signer that was used to sign the quotes.
|
|
56
62
|
* @param _donationBox The address of the donation box contract. This is used to store funds that are used for sponsored flows.
|
|
57
63
|
* @param _baseToken The address of the base token which would be the USDC on HyperEVM.
|
|
@@ -59,6 +65,7 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
59
65
|
*/
|
|
60
66
|
constructor(
|
|
61
67
|
address _cctpMessageTransmitter,
|
|
68
|
+
address _cctpTokenMessenger,
|
|
62
69
|
address _signer,
|
|
63
70
|
address _donationBox,
|
|
64
71
|
address _baseToken,
|
|
@@ -67,6 +74,7 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
67
74
|
baseToken = _baseToken;
|
|
68
75
|
|
|
69
76
|
cctpMessageTransmitter = IMessageTransmitterV2(_cctpMessageTransmitter);
|
|
77
|
+
cctpTokenMessenger = ITokenMessengerV2(_cctpTokenMessenger);
|
|
70
78
|
|
|
71
79
|
MainStorage storage $ = _getMainStorage();
|
|
72
80
|
$.signer = _signer;
|
|
@@ -127,10 +135,15 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
127
135
|
bytes memory message,
|
|
128
136
|
bytes memory attestation
|
|
129
137
|
) external nonReentrant onlyRole(PERMISSIONED_BOT_ROLE) {
|
|
138
|
+
uint256 baseBalBefore = IERC20Metadata(baseToken).balanceOf(address(this));
|
|
130
139
|
bool success = cctpMessageTransmitter.receiveMessage(message, attestation);
|
|
131
140
|
if (!success) {
|
|
132
141
|
return;
|
|
133
142
|
}
|
|
143
|
+
// Forward only what the CCTP call actually credited to this contract, so a message that mints nothing
|
|
144
|
+
// (wrong recipient, unlinked burnToken, etc.) cannot drain this contract's prior `baseToken` balance.
|
|
145
|
+
uint256 baseBalAfter = IERC20Metadata(baseToken).balanceOf(address(this));
|
|
146
|
+
uint256 mintedAmount = baseBalAfter - baseBalBefore;
|
|
134
147
|
|
|
135
148
|
// Use try-catch to handle potential abi.decode reverts gracefully
|
|
136
149
|
try this.validateMessage(message) returns (bool isValid) {
|
|
@@ -141,19 +154,14 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
141
154
|
// Malformed message that causes abi.decode to revert then early return
|
|
142
155
|
return;
|
|
143
156
|
}
|
|
144
|
-
(SponsoredCCTPInterface.SponsoredCCTPQuote memory quote,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
_getMainStorage().usedNonces[quote.nonce] = true;
|
|
157
|
+
(SponsoredCCTPInterface.SponsoredCCTPQuote memory quote, ) = SponsoredCCTPQuoteLib.getSponsoredCCTPQuoteData(
|
|
158
|
+
message
|
|
159
|
+
);
|
|
148
160
|
|
|
149
|
-
|
|
161
|
+
address finalRecipient = quote.finalRecipient.toAddress();
|
|
162
|
+
IERC20Metadata(baseToken).safeTransfer(finalRecipient, mintedAmount);
|
|
150
163
|
|
|
151
|
-
emit EmergencyReceiveMessage(
|
|
152
|
-
quote.nonce,
|
|
153
|
-
quote.finalRecipient.toAddress(),
|
|
154
|
-
baseToken,
|
|
155
|
-
quote.amount - feeExecuted
|
|
156
|
-
);
|
|
164
|
+
emit EmergencyReceiveMessage(quote.nonce, finalRecipient, baseToken, mintedAmount);
|
|
157
165
|
}
|
|
158
166
|
|
|
159
167
|
/**
|
|
@@ -168,6 +176,20 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
168
176
|
bytes memory attestation,
|
|
169
177
|
bytes memory signature
|
|
170
178
|
) external nonReentrant authorizeFundedFlow {
|
|
179
|
+
// Check that the CCTP message was actually routed through our TokenMessenger (which owns the mint flow),
|
|
180
|
+
// and that its TokenMinter links the remote burnToken to our `baseToken` on this domain.
|
|
181
|
+
if (SponsoredCCTPQuoteLib.extractRecipient(message).toAddressUnchecked() != address(cctpTokenMessenger)) {
|
|
182
|
+
revert InvalidRecipient();
|
|
183
|
+
}
|
|
184
|
+
address localToken = cctpTokenMessenger.localMinter().getLocalToken(
|
|
185
|
+
SponsoredCCTPQuoteLib.extractSourceDomain(message),
|
|
186
|
+
SponsoredCCTPQuoteLib.extractBurnToken(message)
|
|
187
|
+
);
|
|
188
|
+
if (localToken != baseToken) {
|
|
189
|
+
revert InvalidMintedToken();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
uint256 baseBalBefore = IERC20Metadata(baseToken).balanceOf(address(this));
|
|
171
193
|
bool success = cctpMessageTransmitter.receiveMessage(message, attestation);
|
|
172
194
|
if (!success) {
|
|
173
195
|
revert CCTPMessageTransmitterFailed();
|
|
@@ -188,6 +210,13 @@ contract SponsoredCCTPDstPeriphery is BaseModuleHandler, SponsoredCCTPInterface,
|
|
|
188
210
|
(SponsoredCCTPInterface.SponsoredCCTPQuote memory quote, uint256 feeExecuted) = SponsoredCCTPQuoteLib
|
|
189
211
|
.getSponsoredCCTPQuoteData(message);
|
|
190
212
|
|
|
213
|
+
// Confirm the CCTP call actually minted `baseToken` to this contract.
|
|
214
|
+
uint256 baseBalAfter = IERC20Metadata(baseToken).balanceOf(address(this));
|
|
215
|
+
uint256 amountAfterFees = quote.amount - feeExecuted;
|
|
216
|
+
if (baseBalAfter - baseBalBefore != amountAfterFees) {
|
|
217
|
+
revert InvalidMintedAmount();
|
|
218
|
+
}
|
|
219
|
+
|
|
191
220
|
// Validate the quote and the signature. Revert on invalid to prevent griefing attacks
|
|
192
221
|
// where an attacker provides correct message/attestation but invalid signature.
|
|
193
222
|
_validateQuoteOrRevert(quote, signature);
|
|
@@ -6,14 +6,24 @@ import { IMessageTransmitter } from "../external/interfaces/CCTPInterfaces.sol";
|
|
|
6
6
|
|
|
7
7
|
contract MockCCTPMinter is ITokenMinter {
|
|
8
8
|
uint256 private _burnLimit = type(uint256).max;
|
|
9
|
+
// remoteDomain => remoteToken => localToken
|
|
10
|
+
mapping(uint32 => mapping(bytes32 => address)) private _localTokens;
|
|
9
11
|
|
|
10
12
|
function setBurnLimit(uint256 limit) external {
|
|
11
13
|
_burnLimit = limit;
|
|
12
14
|
}
|
|
13
15
|
|
|
16
|
+
function setLocalToken(uint32 remoteDomain, bytes32 remoteToken, address localToken) external {
|
|
17
|
+
_localTokens[remoteDomain][remoteToken] = localToken;
|
|
18
|
+
}
|
|
19
|
+
|
|
14
20
|
function burnLimitsPerMessage(address) external view returns (uint256) {
|
|
15
21
|
return _burnLimit;
|
|
16
22
|
}
|
|
23
|
+
|
|
24
|
+
function getLocalToken(uint32 remoteDomain, bytes32 remoteToken) external view returns (address) {
|
|
25
|
+
return _localTokens[remoteDomain][remoteToken];
|
|
26
|
+
}
|
|
17
27
|
}
|
|
18
28
|
|
|
19
29
|
contract MockCCTPMessenger is ITokenMessenger {
|
|
@@ -215,6 +215,11 @@
|
|
|
215
215
|
"block_number": 24021499,
|
|
216
216
|
"transaction_hash": "0x70b3edf99db66aac34338c3686cd708ddfc2b503c2f707f51ced67dc50e5022f"
|
|
217
217
|
},
|
|
218
|
+
"Safe": {
|
|
219
|
+
"address": "0x4c45F70B1d9a7A6D1984daccAd74D0E973B73F01",
|
|
220
|
+
"block_number": 25138380,
|
|
221
|
+
"transaction_hash": "0x135450e78b12f576b5d294d2fe26000eb1bb0bbf9ba755f5e8cd41d9587ac0f9"
|
|
222
|
+
},
|
|
218
223
|
"PermissionedMulticallHandler_CCTP_USDC": {
|
|
219
224
|
"address": "0xDd52f8134f85f3979fbA24387Ce0CEC05937259E",
|
|
220
225
|
"block_number": 25050834,
|
|
@@ -309,6 +314,11 @@
|
|
|
309
314
|
"block_number": 149490330,
|
|
310
315
|
"transaction_hash": "0x2afec8f5db3cebfdbf2da22673ea7f277deb91b9e9c2f403ee2260ef6dac17c9"
|
|
311
316
|
},
|
|
317
|
+
"Safe": {
|
|
318
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
319
|
+
"block_number": 151852638,
|
|
320
|
+
"transaction_hash": "0xc56c8cff88f814d4fc41149007b3b867cd8672ba7541d4153bd7e5dfbbacfb44"
|
|
321
|
+
},
|
|
312
322
|
"SponsoredCCTPSrcPeriphery": {
|
|
313
323
|
"address": "0x4d11A23E4408eF08Ae1216B3917560e0001CD000",
|
|
314
324
|
"block_number": 147713295,
|
|
@@ -432,6 +442,11 @@
|
|
|
432
442
|
"block_number": 43829804,
|
|
433
443
|
"transaction_hash": "0x61efce46d1a42f37fd7e1bf27a909be972f036c629816f52147ed9826542442d"
|
|
434
444
|
},
|
|
445
|
+
"Safe": {
|
|
446
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
447
|
+
"block_number": 48555753,
|
|
448
|
+
"transaction_hash": "0x52e78f777ab18c2b0211ee814a5b9c317b348f88c7af157b0e12df7535e4f8bd"
|
|
449
|
+
},
|
|
435
450
|
"SponsoredCCTPSrcPeriphery": {
|
|
436
451
|
"address": "0xce9Cf0C8f8121b573f6212344F53BC7746846e71",
|
|
437
452
|
"block_number": 40277181,
|
|
@@ -523,6 +538,11 @@
|
|
|
523
538
|
"block_number": 84729684,
|
|
524
539
|
"transaction_hash": "0xdcc74125b85cb1a7e34e6bfe318cc565b7f5423e1fe1b187dcd331fd80565a83"
|
|
525
540
|
},
|
|
541
|
+
"Safe": {
|
|
542
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
543
|
+
"block_number": 87180073,
|
|
544
|
+
"transaction_hash": "0xecd589bda3e78dcba4ad5bcb838e49889248ee07c09b3d2296259a62dcdd06f2"
|
|
545
|
+
},
|
|
526
546
|
"SponsoredCCTPSrcPeriphery": {
|
|
527
547
|
"address": "0x6005CD9f10c0Dc654445f138350b2FA7370BE42d",
|
|
528
548
|
"block_number": 82952908,
|
|
@@ -775,6 +795,11 @@
|
|
|
775
795
|
"block_number": 27739768,
|
|
776
796
|
"transaction_hash": "0xe71e03f4c4aa54ffc14935f87a672503d3da92a24d7ac519b2eeba031553312f"
|
|
777
797
|
},
|
|
798
|
+
"Safe": {
|
|
799
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
800
|
+
"block_number": 29984927,
|
|
801
|
+
"transaction_hash": "0xfca2ae3fcca621ae80560c43b4bc7172b03a4e13aaa9aaf54472909c396e29f8"
|
|
802
|
+
},
|
|
778
803
|
"SponsoredCCTPSrcPeriphery": {
|
|
779
804
|
"address": "0x2C7a3cCd1a8F4f96174c42E0638AAb3BDA6Bc923",
|
|
780
805
|
"block_number": 25845007,
|
|
@@ -1162,6 +1187,11 @@
|
|
|
1162
1187
|
"block_number": 12012601,
|
|
1163
1188
|
"transaction_hash": "0x24e5a21ee467e4b39435f8bfc5591237aab4ac8dac096777502411837511de70"
|
|
1164
1189
|
},
|
|
1190
|
+
"Safe": {
|
|
1191
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
1192
|
+
"block_number": 16508591,
|
|
1193
|
+
"transaction_hash": "0xd096a074d15cb298194d1cb8b0122be31e408f701311d1acf00bac3d9eb3df94"
|
|
1194
|
+
},
|
|
1165
1195
|
"SponsoredOFTSrcPeriphery": {
|
|
1166
1196
|
"address": "0x02D65fb01d3d88127dF19838902ba42c6239c0Fd",
|
|
1167
1197
|
"block_number": 8234177,
|
|
@@ -1227,6 +1257,11 @@
|
|
|
1227
1257
|
"block_number": 43894633,
|
|
1228
1258
|
"transaction_hash": "0x28b429aae286cfb5f09ce924514384b64203a62def3fbb61296a93e1bb3636eb"
|
|
1229
1259
|
},
|
|
1260
|
+
"Safe": {
|
|
1261
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
1262
|
+
"block_number": 46258138,
|
|
1263
|
+
"transaction_hash": "0x3267da18ba0bb69bad4f9dac7b1932ed00e16aa87b5a7f31cccefddafad248ec"
|
|
1264
|
+
},
|
|
1230
1265
|
"PermissionedMulticallHandler_CCTP_USDC": {
|
|
1231
1266
|
"address": "0xB6CAAfD8Ecf18385fFc7c020327E111a1D40A2D4",
|
|
1232
1267
|
"block_number": 44959757,
|
|
@@ -1408,6 +1443,11 @@
|
|
|
1408
1443
|
"block_number": 446049597,
|
|
1409
1444
|
"transaction_hash": "0xd229b1a48cf5a207b9c1b670299d311d83fd98d6b768e6c4a67bbeef36097dc4"
|
|
1410
1445
|
},
|
|
1446
|
+
"Safe": {
|
|
1447
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
1448
|
+
"block_number": 464907406,
|
|
1449
|
+
"transaction_hash": "0x8cde1166841d14e5ccc2d87ca76d6bc0dd96c2c06255156c0a59b073563b2eee"
|
|
1450
|
+
},
|
|
1411
1451
|
"SponsoredCCTPSrcPeriphery": {
|
|
1412
1452
|
"address": "0xc9c54d789ebc18169d942E781C75bb4e3D19a27b",
|
|
1413
1453
|
"block_number": 431818720,
|
|
@@ -1480,6 +1520,11 @@
|
|
|
1480
1520
|
"block_number": 41151282,
|
|
1481
1521
|
"transaction_hash": "0x4e6ab9a1f45ae5c19dde939a00c5dede6032cb3d823a3ae61317eaf1212dafa5"
|
|
1482
1522
|
},
|
|
1523
|
+
"Safe": {
|
|
1524
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
1525
|
+
"block_number": 45807415,
|
|
1526
|
+
"transaction_hash": "0xf1e9919bbbc4cabaad6e7357a122ef3f8e91aba170a88db804a6b506bfecb236"
|
|
1527
|
+
},
|
|
1483
1528
|
"SponsoredCCTPSrcPeriphery": {
|
|
1484
1529
|
"address": "0x1771c470d41b8c39338450C380bf2C080a2CEdD8",
|
|
1485
1530
|
"block_number": 37528460,
|
|
@@ -1542,6 +1587,11 @@
|
|
|
1542
1587
|
"block_number": 29966623,
|
|
1543
1588
|
"transaction_hash": "0x94122db56e1f18ba93b4765902953f0a344de07c5a7ce148224646def30bc3cd"
|
|
1544
1589
|
},
|
|
1590
|
+
"Safe": {
|
|
1591
|
+
"address": "0xd396CcB6770EAB84045c9Bce2939c478639E2A7F",
|
|
1592
|
+
"block_number": 30719985,
|
|
1593
|
+
"transaction_hash": "0x3b35745fa6f0cf7f9d3edac1904f6afe1ee3e9b1e31048ff781eb0c0fa0e20d5"
|
|
1594
|
+
},
|
|
1545
1595
|
"SponsoredCCTPSrcPeriphery": {
|
|
1546
1596
|
"address": "0xe3E88958d181AB43bf3902f8F00AF57cf5D44E8c",
|
|
1547
1597
|
"block_number": 28853879,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[{"type":"constructor","inputs":[{"name":"_l1ArbitrumInbox","type":"address","internalType":"contract ArbitrumInboxLike"},{"name":"_l1ERC20GatewayRouter","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"},{"name":"_l2RefundL2Address","type":"address","internalType":"address"},{"name":"_l1Usdc","type":"address","internalType":"contract IERC20"},{"name":"_cctpTokenMessenger","type":"address","internalType":"contract ITokenMessenger"},{"name":"_adapterStore","type":"address","internalType":"address"},{"name":"_oftDstEid","type":"uint32","internalType":"uint32"},{"name":"_oftFeeCap","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"EMPTY_MSG_BYTES","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"L1_DAI","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"L1_ERC20_GATEWAY_ROUTER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"}],"stateMutability":"view"},{"type":"function","name":"L1_INBOX","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumInboxLike"}],"stateMutability":"view"},{"type":"function","name":"L2_CALL_VALUE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_GAS_PRICE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_MAX_SUBMISSION_COST","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_REFUND_L2_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"OFT_ADAPTER_STORE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract AdapterStore"}],"stateMutability":"view"},{"type":"function","name":"OFT_DST_EID","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"OFT_FEE_CAP","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"RELAY_MESSAGE_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"RELAY_TOKENS_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"cctpTokenMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITokenMessenger"}],"stateMutability":"view"},{"type":"function","name":"cctpV2","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getL1CallValue","inputs":[{"name":"l2GasLimit","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"recipientCircleDomainId","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"relayMessage","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"relayTokens","inputs":[{"name":"l1Token","type":"address","internalType":"address"},{"name":"l2Token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"usdcToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"event","name":"MessageRelayed","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"TokensRelayed","inputs":[{"name":"l1Token","type":"address","indexed":false,"internalType":"address"},{"name":"l2Token","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"OftFeeCapExceeded","inputs":[]},{"type":"error","name":"OftIncorrectAmountReceivedLD","inputs":[]},{"type":"error","name":"OftIncorrectAmountSentLD","inputs":[]},{"type":"error","name":"OftInsufficientBalanceForFee","inputs":[]},{"type":"error","name":"OftLzFeeNotZero","inputs":[]}],"bytecode":"0x6101c0806040523461027657610100816117c68038038091610021828561027a565b8339810103126102765780516001600160a01b0381168103610276576020820151906001600160a01b03821682036102765761005f6040840161029d565b60608401519093906001600160a01b03811681036102765760808201516001600160a01b038116908181036102765761009a60a0850161029d565b9360c08101519263ffffffff84168403610276575f9260e0849301519560a05260c0526003608052604051602081019063011a412160e61b8252600481526100e360248261027a565b51915afa3d1561026f573d6001600160401b03811161025b5760405190610114601f8201601f19166020018361027a565b81523d5f602083013e5b8161024f575b81610219575b5060e05261012052610100526001600160a01b031661014052610180526101a0526101605260405161151490816102b2823960805181818161059d0152818161085701526108ff015260a05181818161072a0152818161100a01526110c2015260c0518181816104e101526106f7015260e05181818161051c01526107b90152610100518181816105d80152610b2201526101205181818161055d015261067d01526101405181818161046301526106bc0152610160518181816101b80152818161037c0152610f7a01526101805181818161021b015261030b01526101a0518181816104200152610e130152f35b905060208151910151906020811061023e575b506001600160a01b031615155f61012a565b5f199060200360031b1b165f61022c565b80516020149150610124565b634e487b7160e01b5f52604160045260245ffd5b606061011e565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761025b57604052565b51906001600160a01b03821682036102765756fe6080806040526004361015610012575f80fd5b5f3560e01c90816306dd5248146110e65750806311eac855146110a35780631fc1ba761461106f57806328f2716e1461105257806352c8c75c146105fb57806361a04d30146105c15780636e400983146105815780636fd5c10e14610541578063775c0d03146105055780639748cf7c146104c2578063a2531669146104a1578063a567bbf014610487578063a6ec815e14610444578063b077d39914610401578063b4c0d7ab146103bd578063c735281e146103a0578063cc7a32901461035d578063e5216af71461032f578063e585cc47146102ec5763e6eb8ade146100f8575f80fd5b60403660031901126102d55761010c611103565b60243567ffffffffffffffff81116102d557366023820112156102d557806004013561013781611173565b916101456040519384611151565b81835236602483830101116102d557815f926024602093018386013783010152610171621e84806111b3565b8047106102d55760206001600160a01b039360405194859163679b6ded60e01b835216928360048301525f6024830152662386f26fc1000060448301526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168060648401526084830152621e848060a483015264012a05f20060c483015261010060e4830152818061020f61010482018861118f565b03916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102e15761028c575b7f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac49250610287604051928392835260406020840152604083019061118f565b0390a1005b6020833d6020116102d9575b816102a560209383611151565b810103126102d5577f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac49250610248565b5f80fd5b3d9150610298565b6040513d5f823e3d90fd5b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d5576020604051736b175474e89094c44da98b954eedeac495271d0f8152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d5576020604051621e84808152f35b346102d5575f3660031901126102d55760405160206103dc8183611151565b5f8252601f19810136828401376103fd60405192828493845283019061118f565b0390f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040515f8152f35b346102d5575f3660031901126102d5576020604051662386f26fc100008152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346102d5575f3660031901126102d557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b60803660031901126102d55761060f611103565b6024356001600160a01b0381168091036102d557604435606435916001600160a01b0383168093036102d5576040516323df66fb60e21b81527f4f46545f4d455353454e4745520000000000000000000000000000000000000060048201526001600160a01b0363ffffffff7f0000000000000000000000000000000000000000000000000000000000000000169586602484015216948560448301526020826064816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9182156102e1575f92611031575b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169182151580610fff575b15610a045750507f00000000000000000000000000000000000000000000000000000000000000009061075584828461126b565b6040516332dd704760e21b815291602083600481855afa9283156102e1575f936109bd575b509060206001600160a01b03809316936024604051809581936352b7631960e11b8352886004840152165afa9182156102e1575f92610989575b5090917f0000000000000000000000000000000000000000000000000000000000000000919085805b610826575050505050917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b93916080935b604051938452602084015260408301526060820152a1005b8481111561098357845b84156108e557833b156102d557604051634701287760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201525f60848201525f60a48201526107d060c48201525f8160e48183895af180156102e1576108d5575b505b81039081116108c157806107dd565b634e487b7160e01b5f52601160045260245ffd5b5f6108df91611151565b8a6108b0565b6040516337e9a82760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201526020816084815f895af180156102e15761094b575b506108b2565b6020813d821161097b575b8161096360209383611151565b810103126102d5576109749061146f565b508a610945565b3d9150610956565b80610830565b9091506020813d6020116109b5575b816109a560209383611151565b810103126102d5575190876107b4565b3d9150610998565b9092506020813d6020116109fc575b816109d960209383611151565b810103126102d55751906001600160a01b03821682036102d5579091602061077a565b3d91506109cc565b9395929492939091506001600160a01b03168015610de757606060c0604051610a2c81611119565b5f81525f60208201525f60408201525f838201528260808201528260a082015201525f6020604051610a5d81611135565b8281520152602060405191610a728284611151565b5f8352601f198201803684860137604051610a8d8482611151565b5f815281368583013760405191610aa48584611151565b5f8352368584013760405195610ab987611119565b8652868487015260408601948a86528a6060880152608087015260a086015260c085015260405192633b6f743b60e01b84526040600485015260408480610b0360448201896113ff565b5f60248301520381855afa9384156102e1575f94610dac575b508351917f00000000000000000000000000000000000000000000000000000000000000008311610d9d57478311610d8e57838501918251610d7f575160405163095ea7b360e01b8682019081526001600160a01b038416602483015260448083018490528252919760c095610be7939092905f9081908e90610ba0606486611151565b828551925af1610bae611484565b81610d4f575b5080610d45575b15610d01575b5060405163c7c7f5b360e01b8152608060048201529788958694859360848501906113ff565b9151602484015251604483015230606483015203925af19182156102e1575f92610c63575b508101518203610c54575103610c46577fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9360809361080e565b623c548b60ea1b5f5260045ffd5b631bfc3cb560e11b5f5260045ffd5b90915060c03d60c011610cfa575b610c7b8183611151565b810181810360c081126102d5576080136102d55760405191606083019083821067ffffffffffffffff831117610ce657610cdf9360809260405281518152610cc486830161146f565b868201526040610cd6858285016113d7565b910152016113d7565b9087610c0c565b634e487b7160e01b5f52604160045260245ffd5b503d610c71565b610d3f90610d398d6040519063095ea7b360e01b8c8301528860248301525f604483015260448252610d34606483611151565b611346565b8c611346565b8d610bc1565b508b3b1515610bbb565b8051801592508a908315610d67575b5050508f610bb4565b610d77935082018101910161132e565b8f8981610d5e565b630e282ec960e21b5f5260045ffd5b63a6226f8560e01b5f5260045ffd5b631754d7a960e01b5f5260045ffd5b90935060403d604011610de0575b610dc48183611151565b81016040828203126102d557610dd9916113d7565b9289610b1c565b503d610dba565b5050610df5620493e06111b3565b938447106102d557604051635ed004ff60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa80156102e15783610e5f915f948591610fd0575b508761126b565b60405190662386f26fc10000602083015260408083015282606083015260608252610e8b608083611151565b736b175474e89094c44da98b954eedeac495271d0f86148314610f5357610ef69160405198898094819363d2ce7d6560e01b83528a6004840152896024840152886044840152620493e0606484015264012a05f200608484015260c060a484015260c483019061118f565b03925af19384156102e1577fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b95608095610f31575b5061080e565b610f4c903d805f833e610f448183611151565b810190611208565b5086610f2b565b610ef691604051988980948193634fb1a07b60e01b83528a60048401526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024840152896044840152886064840152620493e0608484015264012a05f20060a484015260e060c484015260e483019061118f565b610ff2915060203d602011610ff8575b610fea8183611151565b8101906111e9565b8a610e58565b503d610fe0565b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168714610721565b61104b91925060203d602011610ff857610fea8183611151565b90866106ec565b346102d5575f3660031901126102d5576020604051620493e08152f35b346102d55760203660031901126102d55760043563ffffffff811681036102d55761109b6020916111b3565b604051908152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d5578064012a05f20060209252f35b600435906001600160a01b03821682036102d557565b60e0810190811067ffffffffffffffff821117610ce657604052565b6040810190811067ffffffffffffffff821117610ce657604052565b90601f8019910116810190811067ffffffffffffffff821117610ce657604052565b67ffffffffffffffff8111610ce657601f01601f191660200190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b63ffffffff168064012a05f200029064012a05f2008204036108c157662386f26fc100000180662386f26fc10000116108c15790565b908160209103126102d557516001600160a01b03811681036102d55790565b6020818303126102d55780519067ffffffffffffffff82116102d5570181601f820112156102d55780519061123c82611173565b9261124a6040519485611151565b828452602083830101116102d557815f9260208093018386015e8301015290565b91909160405191636eb1769f60e11b83523060048401526001600160a01b03841660248401526020836044816001600160a01b0386165afa9283156102e1575f936112fa575b5082018092116108c15760405163095ea7b360e01b60208201526001600160a01b039390931660248401526044808401929092529082526112f89190610d34606483611151565b565b9092506020813d602011611326575b8161131660209383611151565b810103126102d55751915f6112b1565b3d9150611309565b908160209103126102d5575180151581036102d55790565b906001600160a01b036113a792165f8060405193611365604086611151565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af16113a1611484565b916114b3565b80519081159182156113bd575b5050156102d557565b6113d0925060208091830101910161132e565b5f806113b4565b91908260409103126102d5576040516113ef81611135565b6020808294805184520151910152565b61146c9163ffffffff825116815260208201516020820152604082015160408201526060820151606082015260c061145b611449608085015160e0608086015260e085019061118f565b60a085015184820360a086015261118f565b9201519060c081840391015261118f565b90565b519067ffffffffffffffff821682036102d557565b3d156114ae573d9061149582611173565b916114a36040519384611151565b82523d5f602084013e565b606090565b919250156114cf578151156114c6575090565b3b156102d55790565b5080519081156102d557602001fdfea264697066735822122025f87a97e9672ddeb93d500743cd907d7d6d2ab1a2989ede955ecfb97425a01e64736f6c634300081e0033"}
|
|
1
|
+
{"abi":[{"type":"constructor","inputs":[{"name":"_l1ArbitrumInbox","type":"address","internalType":"contract ArbitrumInboxLike"},{"name":"_l1ERC20GatewayRouter","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"},{"name":"_l2RefundL2Address","type":"address","internalType":"address"},{"name":"_l1Usdc","type":"address","internalType":"contract IERC20"},{"name":"_cctpTokenMessenger","type":"address","internalType":"contract ITokenMessenger"},{"name":"_adapterStore","type":"address","internalType":"address"},{"name":"_oftDstEid","type":"uint32","internalType":"uint32"},{"name":"_oftFeeCap","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"EMPTY_MSG_BYTES","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"L1_DAI","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"L1_ERC20_GATEWAY_ROUTER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"}],"stateMutability":"view"},{"type":"function","name":"L1_INBOX","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumInboxLike"}],"stateMutability":"view"},{"type":"function","name":"L2_CALL_VALUE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_GAS_PRICE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_MAX_SUBMISSION_COST","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_REFUND_L2_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"OFT_ADAPTER_STORE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract AdapterStore"}],"stateMutability":"view"},{"type":"function","name":"OFT_DST_EID","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"OFT_FEE_CAP","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"RELAY_MESSAGE_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"RELAY_TOKENS_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"cctpTokenMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITokenMessenger"}],"stateMutability":"view"},{"type":"function","name":"cctpV2","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getL1CallValue","inputs":[{"name":"l2GasLimit","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"recipientCircleDomainId","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"relayMessage","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"relayTokens","inputs":[{"name":"l1Token","type":"address","internalType":"address"},{"name":"l2Token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"usdcToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"event","name":"MessageRelayed","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"TokensRelayed","inputs":[{"name":"l1Token","type":"address","indexed":false,"internalType":"address"},{"name":"l2Token","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"OftFeeCapExceeded","inputs":[]},{"type":"error","name":"OftIncorrectAmountReceivedLD","inputs":[]},{"type":"error","name":"OftIncorrectAmountSentLD","inputs":[]},{"type":"error","name":"OftInsufficientBalanceForFee","inputs":[]},{"type":"error","name":"OftLzFeeNotZero","inputs":[]}],"bytecode":"0x6101c0806040523461027657610100816117c68038038091610021828561027a565b8339810103126102765780516001600160a01b0381168103610276576020820151906001600160a01b03821682036102765761005f6040840161029d565b60608401519093906001600160a01b03811681036102765760808201516001600160a01b038116908181036102765761009a60a0850161029d565b9360c08101519263ffffffff84168403610276575f9260e0849301519560a05260c0526003608052604051602081019063011a412160e61b8252600481526100e360248261027a565b51915afa3d1561026f573d6001600160401b03811161025b5760405190610114601f8201601f19166020018361027a565b81523d5f602083013e5b8161024f575b81610219575b5060e05261012052610100526001600160a01b031661014052610180526101a0526101605260405161151490816102b2823960805181818161059d0152818161085701526108ff015260a05181818161072a0152818161100a01526110c2015260c0518181816104e101526106f7015260e05181818161051c01526107b90152610100518181816105d80152610b2201526101205181818161055d015261067d01526101405181818161046301526106bc0152610160518181816101b80152818161037c0152610f7a01526101805181818161021b015261030b01526101a0518181816104200152610e130152f35b905060208151910151906020811061023e575b506001600160a01b031615155f61012a565b5f199060200360031b1b165f61022c565b80516020149150610124565b634e487b7160e01b5f52604160045260245ffd5b606061011e565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761025b57604052565b51906001600160a01b03821682036102765756fe6080806040526004361015610012575f80fd5b5f3560e01c90816306dd5248146110e65750806311eac855146110a35780631fc1ba761461106f57806328f2716e1461105257806352c8c75c146105fb57806361a04d30146105c15780636e400983146105815780636fd5c10e14610541578063775c0d03146105055780639748cf7c146104c2578063a2531669146104a1578063a567bbf014610487578063a6ec815e14610444578063b077d39914610401578063b4c0d7ab146103bd578063c735281e146103a0578063cc7a32901461035d578063e5216af71461032f578063e585cc47146102ec5763e6eb8ade146100f8575f80fd5b60403660031901126102d55761010c611103565b60243567ffffffffffffffff81116102d557366023820112156102d557806004013561013781611173565b916101456040519384611151565b81835236602483830101116102d557815f926024602093018386013783010152610171621e84806111b3565b8047106102d55760206001600160a01b039360405194859163679b6ded60e01b835216928360048301525f6024830152662386f26fc1000060448301526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168060648401526084830152621e848060a483015264012a05f20060c483015261010060e4830152818061020f61010482018861118f565b03916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102e15761028c575b7f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac49250610287604051928392835260406020840152604083019061118f565b0390a1005b6020833d6020116102d9575b816102a560209383611151565b810103126102d5577f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac49250610248565b5f80fd5b3d9150610298565b6040513d5f823e3d90fd5b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d5576020604051736b175474e89094c44da98b954eedeac495271d0f8152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d5576020604051621e84808152f35b346102d5575f3660031901126102d55760405160206103dc8183611151565b5f8252601f19810136828401376103fd60405192828493845283019061118f565b0390f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040515f8152f35b346102d5575f3660031901126102d5576020604051662386f26fc100008152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346102d5575f3660031901126102d557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b60803660031901126102d55761060f611103565b6024356001600160a01b0381168091036102d557604435606435916001600160a01b0383168093036102d5576040516323df66fb60e21b81527f4f46545f4d455353454e4745520000000000000000000000000000000000000060048201526001600160a01b0363ffffffff7f0000000000000000000000000000000000000000000000000000000000000000169586602484015216948560448301526020826064816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9182156102e1575f92611031575b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169182151580610fff575b15610a045750507f00000000000000000000000000000000000000000000000000000000000000009061075584828461126b565b6040516332dd704760e21b815291602083600481855afa9283156102e1575f936109bd575b509060206001600160a01b03809316936024604051809581936352b7631960e11b8352886004840152165afa9182156102e1575f92610989575b5090917f0000000000000000000000000000000000000000000000000000000000000000919085805b610826575050505050917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b93916080935b604051938452602084015260408301526060820152a1005b8481111561098357845b84156108e557833b156102d557604051634701287760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201525f60848201525f60a48201526107d060c48201525f8160e48183895af180156102e1576108d5575b505b81039081116108c157806107dd565b634e487b7160e01b5f52601160045260245ffd5b5f6108df91611151565b8a6108b0565b6040516337e9a82760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201526020816084815f895af180156102e15761094b575b506108b2565b6020813d821161097b575b8161096360209383611151565b810103126102d5576109749061146f565b508a610945565b3d9150610956565b80610830565b9091506020813d6020116109b5575b816109a560209383611151565b810103126102d5575190876107b4565b3d9150610998565b9092506020813d6020116109fc575b816109d960209383611151565b810103126102d55751906001600160a01b03821682036102d5579091602061077a565b3d91506109cc565b9395929492939091506001600160a01b03168015610de757606060c0604051610a2c81611119565b5f81525f60208201525f60408201525f838201528260808201528260a082015201525f6020604051610a5d81611135565b8281520152602060405191610a728284611151565b5f8352601f198201803684860137604051610a8d8482611151565b5f815281368583013760405191610aa48584611151565b5f8352368584013760405195610ab987611119565b8652868487015260408601948a86528a6060880152608087015260a086015260c085015260405192633b6f743b60e01b84526040600485015260408480610b0360448201896113ff565b5f60248301520381855afa9384156102e1575f94610dac575b508351917f00000000000000000000000000000000000000000000000000000000000000008311610d9d57478311610d8e57838501918251610d7f575160405163095ea7b360e01b8682019081526001600160a01b038416602483015260448083018490528252919760c095610be7939092905f9081908e90610ba0606486611151565b828551925af1610bae611484565b81610d4f575b5080610d45575b15610d01575b5060405163c7c7f5b360e01b8152608060048201529788958694859360848501906113ff565b9151602484015251604483015230606483015203925af19182156102e1575f92610c63575b508101518203610c54575103610c46577fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9360809361080e565b623c548b60ea1b5f5260045ffd5b631bfc3cb560e11b5f5260045ffd5b90915060c03d60c011610cfa575b610c7b8183611151565b810181810360c081126102d5576080136102d55760405191606083019083821067ffffffffffffffff831117610ce657610cdf9360809260405281518152610cc486830161146f565b868201526040610cd6858285016113d7565b910152016113d7565b9087610c0c565b634e487b7160e01b5f52604160045260245ffd5b503d610c71565b610d3f90610d398d6040519063095ea7b360e01b8c8301528860248301525f604483015260448252610d34606483611151565b611346565b8c611346565b8d610bc1565b508b3b1515610bbb565b8051801592508a908315610d67575b5050508f610bb4565b610d77935082018101910161132e565b8f8981610d5e565b630e282ec960e21b5f5260045ffd5b63a6226f8560e01b5f5260045ffd5b631754d7a960e01b5f5260045ffd5b90935060403d604011610de0575b610dc48183611151565b81016040828203126102d557610dd9916113d7565b9289610b1c565b503d610dba565b5050610df5620493e06111b3565b938447106102d557604051635ed004ff60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa80156102e15783610e5f915f948591610fd0575b508761126b565b60405190662386f26fc10000602083015260408083015282606083015260608252610e8b608083611151565b736b175474e89094c44da98b954eedeac495271d0f86148314610f5357610ef69160405198898094819363d2ce7d6560e01b83528a6004840152896024840152886044840152620493e0606484015264012a05f200608484015260c060a484015260c483019061118f565b03925af19384156102e1577fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b95608095610f31575b5061080e565b610f4c903d805f833e610f448183611151565b810190611208565b5086610f2b565b610ef691604051988980948193634fb1a07b60e01b83528a60048401526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024840152896044840152886064840152620493e0608484015264012a05f20060a484015260e060c484015260e483019061118f565b610ff2915060203d602011610ff8575b610fea8183611151565b8101906111e9565b8a610e58565b503d610fe0565b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168714610721565b61104b91925060203d602011610ff857610fea8183611151565b90866106ec565b346102d5575f3660031901126102d5576020604051620493e08152f35b346102d55760203660031901126102d55760043563ffffffff811681036102d55761109b6020916111b3565b604051908152f35b346102d5575f3660031901126102d55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102d5575f3660031901126102d5578064012a05f20060209252f35b600435906001600160a01b03821682036102d557565b60e0810190811067ffffffffffffffff821117610ce657604052565b6040810190811067ffffffffffffffff821117610ce657604052565b90601f8019910116810190811067ffffffffffffffff821117610ce657604052565b67ffffffffffffffff8111610ce657601f01601f191660200190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b63ffffffff168064012a05f200029064012a05f2008204036108c157662386f26fc100000180662386f26fc10000116108c15790565b908160209103126102d557516001600160a01b03811681036102d55790565b6020818303126102d55780519067ffffffffffffffff82116102d5570181601f820112156102d55780519061123c82611173565b9261124a6040519485611151565b828452602083830101116102d557815f9260208093018386015e8301015290565b91909160405191636eb1769f60e11b83523060048401526001600160a01b03841660248401526020836044816001600160a01b0386165afa9283156102e1575f936112fa575b5082018092116108c15760405163095ea7b360e01b60208201526001600160a01b039390931660248401526044808401929092529082526112f89190610d34606483611151565b565b9092506020813d602011611326575b8161131660209383611151565b810103126102d55751915f6112b1565b3d9150611309565b908160209103126102d5575180151581036102d55790565b906001600160a01b036113a792165f8060405193611365604086611151565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af16113a1611484565b916114b3565b80519081159182156113bd575b5050156102d557565b6113d0925060208091830101910161132e565b5f806113b4565b91908260409103126102d5576040516113ef81611135565b6020808294805184520151910152565b61146c9163ffffffff825116815260208201516020820152604082015160408201526060820151606082015260c061145b611449608085015160e0608086015260e085019061118f565b60a085015184820360a086015261118f565b9201519060c081840391015261118f565b90565b519067ffffffffffffffff821682036102d557565b3d156114ae573d9061149582611173565b916114a36040519384611151565b82523d5f602084013e565b606090565b919250156114cf578151156114c6575090565b3b156102d55790565b5080519081156102d557602001fdfea2646970667358221220e37bea599accb821317740ceac874c973cf6a0d8575e181ba5d2c03fcbb0903e64736f6c634300081e0033"}
|
package/dist/evm/artifacts/Arbitrum_CustomGasToken_Adapter.sol/Arbitrum_CustomGasToken_Adapter.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[{"type":"constructor","inputs":[{"name":"_l1ArbitrumInbox","type":"address","internalType":"contract ArbitrumCustomGasTokenInbox"},{"name":"_l1ERC20GatewayRouter","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"},{"name":"_l2RefundL2Address","type":"address","internalType":"address"},{"name":"_l1Usdc","type":"address","internalType":"contract IERC20"},{"name":"_cctpTokenMessenger","type":"address","internalType":"contract ITokenMessenger"},{"name":"_cctpDomainId","type":"uint32","internalType":"uint32"},{"name":"_nativeTokenDecimals","type":"uint8","internalType":"uint8"},{"name":"_customGasTokenFunder","type":"address","internalType":"contract FunderInterface"},{"name":"_l2MaxSubmissionCost","type":"uint256","internalType":"uint256"},{"name":"_l2GasPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"CUSTOM_GAS_TOKEN","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"CUSTOM_GAS_TOKEN_FUNDER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract FunderInterface"}],"stateMutability":"view"},{"type":"function","name":"L1_ERC20_GATEWAY_ROUTER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"}],"stateMutability":"view"},{"type":"function","name":"L1_INBOX","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumCustomGasTokenInbox"}],"stateMutability":"view"},{"type":"function","name":"L2_CALL_VALUE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_GAS_PRICE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_MAX_SUBMISSION_COST","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_REFUND_L2_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"NATIVE_TOKEN_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"RELAY_MESSAGE_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"RELAY_TOKENS_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"cctpTokenMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITokenMessenger"}],"stateMutability":"view"},{"type":"function","name":"cctpV2","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getL1CallValue","inputs":[{"name":"l2GasLimit","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recipientCircleDomainId","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"relayMessage","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"relayTokens","inputs":[{"name":"l1Token","type":"address","internalType":"address"},{"name":"l2Token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"usdcToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"event","name":"MessageRelayed","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"TokensRelayed","inputs":[{"name":"l1Token","type":"address","indexed":false,"internalType":"address"},{"name":"l2Token","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"InsufficientCustomGasToken","inputs":[]},{"type":"error","name":"InvalidCustomGasToken","inputs":[]},{"type":"error","name":"InvalidNativeTokenDecimals","inputs":[]}],"bytecode":"0x610200806040523461037857610140816118a080380380916100218285610430565b8339810103126103785780516001600160a01b0381168082036103785760208301516001600160a01b03811681036103785761005f60408501610453565b6060850151909490916001600160a01b0383168303610378576080820151946001600160a01b038616948587036103785760a08401519763ffffffff891689036103785760c08501519860ff8a1698898b036103785760e0870151986001600160a01b038a168a03610378575f9283926101206101008b01519a01519a60a05260c052608052604051602081019063011a412160e61b825260048152610106602482610430565b51915afa933d15610423573d936001600160401b03851161040f576004956020956040519061013e88601f19601f8401160183610430565b81523d5f8883013e5b81610404575b816103d2575b5060e052610180526101a052610160526040516373c6754960e11b815292839182905afa908115610384575f9161038f575b50604051631c2eb17b60e31b815290602090829060049082906001600160a01b03165afa908115610384575f91610346575b506001600160a01b03166101c0819052156103375761010052610120526101e052156103285761014052604051611438908161046882396080518181816105440152818161075b0152610803015260a05181818161062501528181610d630152610e98015260c0518181816104c801526105f5015260e05181818161050301526106b40152610100518181816101d20152818161048601528181610a2301528181610b5c01528181610e4801526110c901526101205181818161023601528181610a8701528181610c0001528181610e2201528181610ed10152611091015261014051818181610dac015281816110040152611379015261016051818181610200015281816103d101528181610a510152610bc40152610180518181816101670152818161038e01526109d001526101a051818181610431015261091e01526101c05181818161018e0152818161058701528181610981015261113e01526101e05181818161034b01526110f70152f35b630206612160e41b5f5260045ffd5b63a44d432f60e01b5f5260045ffd5b90506020813d60201161037c575b8161036160209383610430565b810103126103785761037290610453565b5f6101b7565b5f80fd5b3d9150610354565b6040513d5f823e3d90fd5b90506020813d6020116103ca575b816103aa60209383610430565b8101031261037857516001600160a01b0381168103610378576020610185565b3d915061039d565b80519087015191508681106103f4575b506001600160a01b031615155f610153565b5f1990870360031b1b165f6103e2565b80518714915061014d565b634e487b7160e01b5f52604160045260245ffd5b6020936004956060610147565b601f909101601f19168101906001600160401b0382119082101761040f57604052565b51906001600160a01b03821682036103785756fe6080806040526004361015610012575f80fd5b5f3560e01c90816306dd524814610ebc5750806311eac85514610e795780631fc1ba7614610ded57806328f2716e14610dd05780632e4f1aca14610d9357806352c8c75c146105ab57806358f76b65146105685780636e40098314610528578063775c0d03146104ec5780639748cf7c146104a9578063a25316691461046f578063a567bbf014610455578063b077d39914610412578063c735281e146103f5578063cc7a3290146103b2578063e585cc471461036f578063e58921a21461032c5763e6eb8ade146100e2575f80fd5b6040366003190112610315576100f6610ef4565b6024359067ffffffffffffffff821161031557366023830112156103155781600401359061012382610f40565b916101316040519384610f0a565b8083523660248286010111610315576020815f9260246001600160a01b0397018387013784010152602061016361108b565b91847f0000000000000000000000000000000000000000000000000000000000000000166101b284827f0000000000000000000000000000000000000000000000000000000000000000611217565b604051958692632a4f421360e11b845216938460048401525f60248401527f000000000000000000000000000000000000000000000000000000000000000060448401526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168060648501526084840152621e848060a48401527f000000000000000000000000000000000000000000000000000000000000000060c484015260e4830152610120610104830152815f81610279610124820189610f7c565b03925af18015610321576102cc575b7f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac492506102c76040519283928352604060208401526040830190610f7c565b0390a1005b6020833d602011610319575b816102e560209383610f0a565b81010312610315577f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac49250610288565b5f80fd5b3d91506102d8565b6040513d5f823e3d90fd5b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f366003190112610315576020604051621e84808152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040515f8152f35b34610315575f3660031901126103155760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b34610315575f36600319011261031557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b6080366003190112610315576105bf610ef4565b6024356001600160a01b03811680910361031557604435606435916001600160a01b038316809303610315576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001680151580610d58575b1561090f577f000000000000000000000000000000000000000000000000000000000000000090610650848284611217565b6040516332dd704760e21b815291602083600481855afa928315610321575f936108c8575b509060206001600160a01b03809316936024604051809581936352b7631960e11b8352886004840152165afa918215610321575f92610894575b5090917f0000000000000000000000000000000000000000000000000000000000000000919085805b61072a575050505050917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b93916080935b6001600160a01b0360405194168452602084015260408301526060820152a1005b8481111561088e57845b84156107e957833b1561031557604051634701287760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201525f60848201525f60a48201526107d060c48201525f8160e48183895af18015610321576107d9575b505b81039081116107c557806106d8565b634e487b7160e01b5f52601160045260245ffd5b5f6107e391610f0a565b8a6107b4565b6040516337e9a82760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201526020816084815f895af180156103215761084f575b506107b6565b6020813d8211610886575b8161086760209383610f0a565b81010312610315575167ffffffffffffffff811603610315578a610849565b3d915061085a565b80610734565b9091506020813d6020116108c0575b816108b060209383610f0a565b81010312610315575190876106af565b3d91506108a3565b9092506020813d602011610907575b816108e460209383610f0a565b810103126103155751906001600160a01b03821682036103155790916020610675565b3d91506108d7565b50916001600160a01b039391937f0000000000000000000000000000000000000000000000000000000000000000169360405194635ed004ff60e11b86526001600160a01b03841690816004880152602087602481845afa968715610321575f97610d14575b5061097e61108b565b917f0000000000000000000000000000000000000000000000000000000000000000976001600160a01b03891682145f14610b35575050506109c260209183610f6f565b6109f7816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168099611217565b610164610a0384611377565b5f604051998a948593632a4f421360e11b855289600486015260248501527f000000000000000000000000000000000000000000000000000000000000000060448501526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168060648601526084850152621e848060a48501527f000000000000000000000000000000000000000000000000000000000000000060c485015260e4840152610120610104840152600261012484015261060f60f31b6101448401525af1938415610321577fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b95608095610b06575b50610709565b610b279060203d602011610b2e575b610b1f8183610f0a565b810190610fa0565b5086610b00565b503d610b15565b90610b5684838798999a9b610b51610c35995f99989787611217565b611217565b604051927f0000000000000000000000000000000000000000000000000000000000000000602085015260606040850152846080850152606084015260808352610ba160a084610f0a565b83604051809681958294634fb1a07b60e01b845260048401526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248401528a6044840152896064840152620493e060848401527f000000000000000000000000000000000000000000000000000000000000000060a484015260e060c484015260e4830190610f7c565b03925af1801561032157610c71575b5090608092917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b94610709565b9291903d805f863e610c838186610f0a565b8401936020818603126103155780519067ffffffffffffffff821161031557019484601f8701121561031557855194610cbb86610f40565b90610cc96040519283610f0a565b86825260208789010111610315576020865f92608098837fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9b018483015e0101529450909192610c44565b9096506020813d602011610d50575b81610d3060209383610f0a565b8101031261031557516001600160a01b0381168103610315579587610975565b3d9150610d23565b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166001600160a01b0386161461061e565b34610315575f36600319011261031557602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f366003190112610315576020604051620493e08152f35b346103155760203660031901126103155760043563ffffffff8116810361031557610e71610e6c610e4663ffffffff602094167f0000000000000000000000000000000000000000000000000000000000000000610f5c565b7f0000000000000000000000000000000000000000000000000000000000000000610f6f565b611002565b604051908152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f366003190112610315576020907f00000000000000000000000000000000000000000000000000000000000000008152f35b600435906001600160a01b038216820361031557565b90601f8019910116810190811067ffffffffffffffff821117610f2c57604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111610f2c57601f01601f191660200190565b818102929181159184041417156107c557565b919082018092116107c557565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90816020910312610315575190565b60ff6011199116019060ff82116107c557565b60ff166012039060ff82116107c557565b60ff16604d81116107c557600a0a90565b8115610fee570490565b634e487b7160e01b5f52601260045260245ffd5b7f000000000000000000000000000000000000000000000000000000000000000060ff81166012810361103457505090565b601211156110755761104861104d91610fc2565b610fd3565b6110578183610fe4565b918115610fee57061561107257600181018091116107c55790565b90565b9061108561104861107293610faf565b90610f5c565b621e84807f00000000000000000000000000000000000000000000000000000000000000008181029181830414901517156107c557610e6c6110ed917f0000000000000000000000000000000000000000000000000000000000000000610f6f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610315576040519063f3fef3a360e01b82525f915f81604481836001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016968760048401528960248401525af1801561032157611201575b506020602491604051928380926370a0823160e01b82523060048301525afa9081156111f65790839183916111c1575b50106111b2575090565b637953e88160e11b8152600490fd5b9150506020813d6020116111ee575b816111dd60209383610f0a565b81010312610315578290515f6111a8565b3d91506111d0565b6040513d84823e3d90fd5b61120e9192505f90610f0a565b5f906020611178565b6001600160a01b03166001600160a01b0360405192636eb1769f60e11b84523060048501521691826024820152602081604481855afa908115610321575f91611345575b505f61126b611304958293610f6f565b9360405194602086019163095ea7b360e01b83526024870152604486015260448552611298606486610f0a565b604051946112a7604087610f0a565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d1561133d573d916112e883610f40565b926112f66040519485610f0a565b83523d5f602085013e6113d7565b805190811591821561131a575b50501561031557565b819250906020918101031261031557602001518015158103610315575f80611311565b6060916113d7565b90506020813d60201161136f575b8161136060209383610f0a565b8101031261031557515f61125b565b3d9150611353565b7f00000000000000000000000000000000000000000000000000000000000000009060ff8216601281036113ab5750905090565b601211156113c25761108561104861107293610fc2565b6113d161104861107293610faf565b90610fe4565b919250156113f3578151156113ea575090565b3b156103155790565b50805190811561031557602001fdfea26469706673582212201c8cc3756af34302cb784e3c447a707c753b02bf56965f667bfc0d1d280ea54364736f6c634300081e0033"}
|
|
1
|
+
{"abi":[{"type":"constructor","inputs":[{"name":"_l1ArbitrumInbox","type":"address","internalType":"contract ArbitrumCustomGasTokenInbox"},{"name":"_l1ERC20GatewayRouter","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"},{"name":"_l2RefundL2Address","type":"address","internalType":"address"},{"name":"_l1Usdc","type":"address","internalType":"contract IERC20"},{"name":"_cctpTokenMessenger","type":"address","internalType":"contract ITokenMessenger"},{"name":"_cctpDomainId","type":"uint32","internalType":"uint32"},{"name":"_nativeTokenDecimals","type":"uint8","internalType":"uint8"},{"name":"_customGasTokenFunder","type":"address","internalType":"contract FunderInterface"},{"name":"_l2MaxSubmissionCost","type":"uint256","internalType":"uint256"},{"name":"_l2GasPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"CUSTOM_GAS_TOKEN","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"CUSTOM_GAS_TOKEN_FUNDER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract FunderInterface"}],"stateMutability":"view"},{"type":"function","name":"L1_ERC20_GATEWAY_ROUTER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumL1ERC20GatewayLike"}],"stateMutability":"view"},{"type":"function","name":"L1_INBOX","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ArbitrumCustomGasTokenInbox"}],"stateMutability":"view"},{"type":"function","name":"L2_CALL_VALUE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_GAS_PRICE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_MAX_SUBMISSION_COST","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_REFUND_L2_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"NATIVE_TOKEN_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"RELAY_MESSAGE_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"RELAY_TOKENS_L2_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"cctpTokenMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITokenMessenger"}],"stateMutability":"view"},{"type":"function","name":"cctpV2","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getL1CallValue","inputs":[{"name":"l2GasLimit","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recipientCircleDomainId","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"relayMessage","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"relayTokens","inputs":[{"name":"l1Token","type":"address","internalType":"address"},{"name":"l2Token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"usdcToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"event","name":"MessageRelayed","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"TokensRelayed","inputs":[{"name":"l1Token","type":"address","indexed":false,"internalType":"address"},{"name":"l2Token","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"to","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"InsufficientCustomGasToken","inputs":[]},{"type":"error","name":"InvalidCustomGasToken","inputs":[]},{"type":"error","name":"InvalidNativeTokenDecimals","inputs":[]}],"bytecode":"0x610200806040523461037857610140816118a080380380916100218285610430565b8339810103126103785780516001600160a01b0381168082036103785760208301516001600160a01b03811681036103785761005f60408501610453565b6060850151909490916001600160a01b0383168303610378576080820151946001600160a01b038616948587036103785760a08401519763ffffffff891689036103785760c08501519860ff8a1698898b036103785760e0870151986001600160a01b038a168a03610378575f9283926101206101008b01519a01519a60a05260c052608052604051602081019063011a412160e61b825260048152610106602482610430565b51915afa933d15610423573d936001600160401b03851161040f576004956020956040519061013e88601f19601f8401160183610430565b81523d5f8883013e5b81610404575b816103d2575b5060e052610180526101a052610160526040516373c6754960e11b815292839182905afa908115610384575f9161038f575b50604051631c2eb17b60e31b815290602090829060049082906001600160a01b03165afa908115610384575f91610346575b506001600160a01b03166101c0819052156103375761010052610120526101e052156103285761014052604051611438908161046882396080518181816105440152818161075b0152610803015260a05181818161062501528181610d630152610e98015260c0518181816104c801526105f5015260e05181818161050301526106b40152610100518181816101d20152818161048601528181610a2301528181610b5c01528181610e4801526110c901526101205181818161023601528181610a8701528181610c0001528181610e2201528181610ed10152611091015261014051818181610dac015281816110040152611379015261016051818181610200015281816103d101528181610a510152610bc40152610180518181816101670152818161038e01526109d001526101a051818181610431015261091e01526101c05181818161018e0152818161058701528181610981015261113e01526101e05181818161034b01526110f70152f35b630206612160e41b5f5260045ffd5b63a44d432f60e01b5f5260045ffd5b90506020813d60201161037c575b8161036160209383610430565b810103126103785761037290610453565b5f6101b7565b5f80fd5b3d9150610354565b6040513d5f823e3d90fd5b90506020813d6020116103ca575b816103aa60209383610430565b8101031261037857516001600160a01b0381168103610378576020610185565b3d915061039d565b80519087015191508681106103f4575b506001600160a01b031615155f610153565b5f1990870360031b1b165f6103e2565b80518714915061014d565b634e487b7160e01b5f52604160045260245ffd5b6020936004956060610147565b601f909101601f19168101906001600160401b0382119082101761040f57604052565b51906001600160a01b03821682036103785756fe6080806040526004361015610012575f80fd5b5f3560e01c90816306dd524814610ebc5750806311eac85514610e795780631fc1ba7614610ded57806328f2716e14610dd05780632e4f1aca14610d9357806352c8c75c146105ab57806358f76b65146105685780636e40098314610528578063775c0d03146104ec5780639748cf7c146104a9578063a25316691461046f578063a567bbf014610455578063b077d39914610412578063c735281e146103f5578063cc7a3290146103b2578063e585cc471461036f578063e58921a21461032c5763e6eb8ade146100e2575f80fd5b6040366003190112610315576100f6610ef4565b6024359067ffffffffffffffff821161031557366023830112156103155781600401359061012382610f40565b916101316040519384610f0a565b8083523660248286010111610315576020815f9260246001600160a01b0397018387013784010152602061016361108b565b91847f0000000000000000000000000000000000000000000000000000000000000000166101b284827f0000000000000000000000000000000000000000000000000000000000000000611217565b604051958692632a4f421360e11b845216938460048401525f60248401527f000000000000000000000000000000000000000000000000000000000000000060448401526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168060648501526084840152621e848060a48401527f000000000000000000000000000000000000000000000000000000000000000060c484015260e4830152610120610104830152815f81610279610124820189610f7c565b03925af18015610321576102cc575b7f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac492506102c76040519283928352604060208401526040830190610f7c565b0390a1005b6020833d602011610319575b816102e560209383610f0a565b81010312610315577f9e6c52944e331ba6270e7fe4cea2a4086bae8f7a27e1cdba07f416806f5d0ac49250610288565b5f80fd5b3d91506102d8565b6040513d5f823e3d90fd5b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f366003190112610315576020604051621e84808152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040515f8152f35b34610315575f3660031901126103155760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b34610315575f36600319011261031557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b6080366003190112610315576105bf610ef4565b6024356001600160a01b03811680910361031557604435606435916001600160a01b038316809303610315576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001680151580610d58575b1561090f577f000000000000000000000000000000000000000000000000000000000000000090610650848284611217565b6040516332dd704760e21b815291602083600481855afa928315610321575f936108c8575b509060206001600160a01b03809316936024604051809581936352b7631960e11b8352886004840152165afa918215610321575f92610894575b5090917f0000000000000000000000000000000000000000000000000000000000000000919085805b61072a575050505050917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b93916080935b6001600160a01b0360405194168452602084015260408301526060820152a1005b8481111561088e57845b84156107e957833b1561031557604051634701287760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201525f60848201525f60a48201526107d060c48201525f8160e48183895af18015610321576107d9575b505b81039081116107c557806106d8565b634e487b7160e01b5f52601160045260245ffd5b5f6107e391610f0a565b8a6107b4565b6040516337e9a82760e11b815281600482015263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201528960448201528360648201526020816084815f895af180156103215761084f575b506107b6565b6020813d8211610886575b8161086760209383610f0a565b81010312610315575167ffffffffffffffff811603610315578a610849565b3d915061085a565b80610734565b9091506020813d6020116108c0575b816108b060209383610f0a565b81010312610315575190876106af565b3d91506108a3565b9092506020813d602011610907575b816108e460209383610f0a565b810103126103155751906001600160a01b03821682036103155790916020610675565b3d91506108d7565b50916001600160a01b039391937f0000000000000000000000000000000000000000000000000000000000000000169360405194635ed004ff60e11b86526001600160a01b03841690816004880152602087602481845afa968715610321575f97610d14575b5061097e61108b565b917f0000000000000000000000000000000000000000000000000000000000000000976001600160a01b03891682145f14610b35575050506109c260209183610f6f565b6109f7816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168099611217565b610164610a0384611377565b5f604051998a948593632a4f421360e11b855289600486015260248501527f000000000000000000000000000000000000000000000000000000000000000060448501526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168060648601526084850152621e848060a48501527f000000000000000000000000000000000000000000000000000000000000000060c485015260e4840152610120610104840152600261012484015261060f60f31b6101448401525af1938415610321577fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b95608095610b06575b50610709565b610b279060203d602011610b2e575b610b1f8183610f0a565b810190610fa0565b5086610b00565b503d610b15565b90610b5684838798999a9b610b51610c35995f99989787611217565b611217565b604051927f0000000000000000000000000000000000000000000000000000000000000000602085015260606040850152846080850152606084015260808352610ba160a084610f0a565b83604051809681958294634fb1a07b60e01b845260048401526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248401528a6044840152896064840152620493e060848401527f000000000000000000000000000000000000000000000000000000000000000060a484015260e060c484015260e4830190610f7c565b03925af1801561032157610c71575b5090608092917fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b94610709565b9291903d805f863e610c838186610f0a565b8401936020818603126103155780519067ffffffffffffffff821161031557019484601f8701121561031557855194610cbb86610f40565b90610cc96040519283610f0a565b86825260208789010111610315576020865f92608098837fd7e09655439c3932e55857df3220186e5a7f0980825f20691c2b35d941dee75b9b018483015e0101529450909192610c44565b9096506020813d602011610d50575b81610d3060209383610f0a565b8101031261031557516001600160a01b0381168103610315579587610975565b3d9150610d23565b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166001600160a01b0386161461061e565b34610315575f36600319011261031557602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f366003190112610315576020604051620493e08152f35b346103155760203660031901126103155760043563ffffffff8116810361031557610e71610e6c610e4663ffffffff602094167f0000000000000000000000000000000000000000000000000000000000000000610f5c565b7f0000000000000000000000000000000000000000000000000000000000000000610f6f565b611002565b604051908152f35b34610315575f3660031901126103155760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315575f366003190112610315576020907f00000000000000000000000000000000000000000000000000000000000000008152f35b600435906001600160a01b038216820361031557565b90601f8019910116810190811067ffffffffffffffff821117610f2c57604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111610f2c57601f01601f191660200190565b818102929181159184041417156107c557565b919082018092116107c557565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90816020910312610315575190565b60ff6011199116019060ff82116107c557565b60ff166012039060ff82116107c557565b60ff16604d81116107c557600a0a90565b8115610fee570490565b634e487b7160e01b5f52601260045260245ffd5b7f000000000000000000000000000000000000000000000000000000000000000060ff81166012810361103457505090565b601211156110755761104861104d91610fc2565b610fd3565b6110578183610fe4565b918115610fee57061561107257600181018091116107c55790565b90565b9061108561104861107293610faf565b90610f5c565b621e84807f00000000000000000000000000000000000000000000000000000000000000008181029181830414901517156107c557610e6c6110ed917f0000000000000000000000000000000000000000000000000000000000000000610f6f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610315576040519063f3fef3a360e01b82525f915f81604481836001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016968760048401528960248401525af1801561032157611201575b506020602491604051928380926370a0823160e01b82523060048301525afa9081156111f65790839183916111c1575b50106111b2575090565b637953e88160e11b8152600490fd5b9150506020813d6020116111ee575b816111dd60209383610f0a565b81010312610315578290515f6111a8565b3d91506111d0565b6040513d84823e3d90fd5b61120e9192505f90610f0a565b5f906020611178565b6001600160a01b03166001600160a01b0360405192636eb1769f60e11b84523060048501521691826024820152602081604481855afa908115610321575f91611345575b505f61126b611304958293610f6f565b9360405194602086019163095ea7b360e01b83526024870152604486015260448552611298606486610f0a565b604051946112a7604087610f0a565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d1561133d573d916112e883610f40565b926112f66040519485610f0a565b83523d5f602085013e6113d7565b805190811591821561131a575b50501561031557565b819250906020918101031261031557602001518015158103610315575f80611311565b6060916113d7565b90506020813d60201161136f575b8161136060209383610f0a565b8101031261031557515f61125b565b3d9150611353565b7f00000000000000000000000000000000000000000000000000000000000000009060ff8216601281036113ab5750905090565b601211156113c25761108561104861107293610fc2565b6113d161104861107293610faf565b90610fe4565b919250156113f3578151156113ea575090565b3b156103155790565b50805190811561031557602001fdfea2646970667358221220e67d11bca98c29ddf64696706c037d99cdd3e2f12945a357c725e03fbcef24e764736f6c634300081e0033"}
|