From 051d9f6c82b5efc73166f88b8ddf082d2adc7b9d Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Thu, 14 Dec 2023 16:54:44 -0500 Subject: [PATCH 01/16] Change message ID type to bytes32 --- .../ERC20Bridge/ERC20Bridge.sol | 6 +- .../ERC20Bridge/IERC20Bridge.sol | 4 +- .../ExampleCrossChainMessenger.sol | 2 +- .../NativeTokenBridge/ERC20TokenSource.sol | 2 +- .../INativeTokenDestination.sol | 4 +- .../NativeTokenBridge/ITokenSource.sol | 8 +- .../NativeTokenDestination.sol | 18 +-- .../NativeTokenBridge/NativeTokenSource.sol | 2 +- .../VerifiedBlockHash/BlockHashPublisher.sol | 2 +- .../src/Teleporter/ITeleporterMessenger.sol | 34 ++--- .../src/Teleporter/TeleporterMessenger.sol | 104 ++++++++++---- .../Teleporter/tests/AddFeeAmountTests.t.sol | 14 +- .../Teleporter/tests/GetFeeInfoTests.t.sol | 8 +- .../tests/GetMessageHashTests.t.sol | 6 +- .../tests/GetNextMessageIdTests.t.sol | 136 +++++++++--------- .../GetOutstandingReceiptsToSendTests.t.sol | 36 ++--- .../tests/GetRelayerRewardAddressTests.t.sol | 2 +- .../HandleInitialMessageExecutionTests.t.sol | 8 +- .../Teleporter/tests/MarkReceiptTests.t.sol | 61 ++++---- .../tests/MessageReceivedTests.t.sol | 6 +- .../Teleporter/tests/ReceiptsQueueTests.t.sol | 8 +- .../tests/ReceiveCrossChainMessageTests.t.sol | 17 +-- .../tests/RedeemRelayerRewardsTests.t.sol | 11 +- .../tests/RetryMessageExecutionTests.t.sol | 4 +- .../RetrySendCrossChainMessageTests.t.sol | 6 +- .../tests/SendCrossChainMessageTests.t.sol | 12 +- .../tests/SendSpecifiedReceiptsTests.t.sol | 68 ++++----- .../tests/TeleporterMessengerTest.t.sol | 22 +-- 28 files changed, 339 insertions(+), 272 deletions(-) diff --git a/contracts/src/CrossChainApplications/ERC20Bridge/ERC20Bridge.sol b/contracts/src/CrossChainApplications/ERC20Bridge/ERC20Bridge.sol index 461a2dd50..d371bd9a0 100644 --- a/contracts/src/CrossChainApplications/ERC20Bridge/ERC20Bridge.sol +++ b/contracts/src/CrossChainApplications/ERC20Bridge/ERC20Bridge.sol @@ -221,7 +221,7 @@ contract ERC20Bridge is ); // Send Teleporter message. - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( TeleporterMessageInput({ destinationBlockchainID: destinationBlockchainID, destinationAddress: destinationBridgeAddress, @@ -589,7 +589,7 @@ contract ERC20Bridge is bridgeAmount ); - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( TeleporterMessageInput({ destinationBlockchainID: destinationBlockchainID, destinationAddress: destinationBridgeAddress, @@ -683,7 +683,7 @@ contract ERC20Bridge is feeAmount: wrappedTransferInfo.secondaryFeeAmount }); - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( TeleporterMessageInput({ destinationBlockchainID: nativeBlockchainID, destinationAddress: nativeBridgeAddress, diff --git a/contracts/src/CrossChainApplications/ERC20Bridge/IERC20Bridge.sol b/contracts/src/CrossChainApplications/ERC20Bridge/IERC20Bridge.sol index 7489f6b13..4bece2a2d 100644 --- a/contracts/src/CrossChainApplications/ERC20Bridge/IERC20Bridge.sol +++ b/contracts/src/CrossChainApplications/ERC20Bridge/IERC20Bridge.sol @@ -26,7 +26,7 @@ interface IERC20Bridge { event BridgeTokens( address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount @@ -39,7 +39,7 @@ interface IERC20Bridge { bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, - uint256 teleporterMessageID + bytes32 teleporterMessageID ); /** diff --git a/contracts/src/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger.sol b/contracts/src/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger.sol index 9968b76f5..39efd4829 100644 --- a/contracts/src/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger.sol +++ b/contracts/src/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger.sol @@ -65,7 +65,7 @@ contract ExampleCrossChainMessenger is uint256 feeAmount, uint256 requiredGasLimit, string calldata message - ) external nonReentrant returns (uint256) { + ) external nonReentrant returns (bytes32) { ITeleporterMessenger teleporterMessenger = _getTeleporterMessenger(); // For non-zero fee amounts, first transfer the fee to this contract, and then // allow the Teleporter contract to spend it. diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/ERC20TokenSource.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/ERC20TokenSource.sol index 0b07a7283..8f481ecc0 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/ERC20TokenSource.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/ERC20TokenSource.sol @@ -163,7 +163,7 @@ contract ERC20TokenSource is uint256 transferAmount = adjustedAmount - feeAmount; - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( TeleporterMessageInput({ destinationBlockchainID: destinationBlockchainID, destinationAddress: nativeTokenDestinationAddress, diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol index 285711acb..703e68b95 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol @@ -18,7 +18,7 @@ interface INativeTokenDestination { event TransferToSource( address indexed sender, address indexed recipient, - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, uint256 amount ); @@ -36,7 +36,7 @@ interface INativeTokenDestination { * @dev Emitted when reporting total burned tx fees to source chain. */ event ReportTotalBurnedTxFees( - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, uint256 burnAddressBalance ); diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/ITokenSource.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/ITokenSource.sol index 9ba712f12..e46bb1130 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/ITokenSource.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/ITokenSource.sol @@ -6,7 +6,7 @@ pragma solidity 0.8.18; /** - * @dev Interface for common functionality needed for different `TokenSource` contracts such as + * @dev Interface for common functionality needed for different `TokenSource` contracts such as * `NativeTokenSource` and `ERC20TokenSource`. */ interface ITokenSource { @@ -17,14 +17,14 @@ interface ITokenSource { Unlock, Burn } - + /** * @dev Emitted when native tokens are locked in the source contract to be transferred to the destination chain. */ event TransferToDestination( address indexed sender, address indexed recipient, - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, uint256 amount ); @@ -37,4 +37,4 @@ interface ITokenSource { * @dev Emitted when tokens are burned on this chain. */ event BurnTokens(uint256 amount); -} \ No newline at end of file +} diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol index 3d8648619..5d76e6246 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol @@ -25,14 +25,16 @@ contract NativeTokenDestination is INativeTokenDestination, ReentrancyGuard { - // The address where the burned transaction fees are credited. - // Defined as BLACKHOLE_ADDRESS at + // The address where the burned transaction fees are credited. + // Defined as BLACKHOLE_ADDRESS at // https://github.com/ava-labs/subnet-evm/blob/e23ab058d039ff9c8469c89b139d21d52c4bd283/constants/constants.go - address public constant BURNED_TX_FEES_ADDRESS = 0x0100000000000000000000000000000000000000; - // Designated Blackhole Address for this contract. Tokens are sent here to be "burned" before - // sending an unlock message to the source chain. Different from the burned tx fee address so + address public constant BURNED_TX_FEES_ADDRESS = + 0x0100000000000000000000000000000000000000; + // Designated Blackhole Address for this contract. Tokens are sent here to be "burned" before + // sending an unlock message to the source chain. Different from the burned tx fee address so // they can be tracked separately. - address public constant BURN_FOR_TRANSFER_ADDRESS = 0x0100000000000000000000000000000000000001; + address public constant BURN_FOR_TRANSFER_ADDRESS = + 0x0100000000000000000000000000000000000001; INativeMinter private immutable _nativeMinter = INativeMinter(0x0200000000000000000000000000000000000001); @@ -194,7 +196,7 @@ contract NativeTokenDestination is // Burn native token by sending to BURN_FOR_TRANSFER_ADDRESS Address.sendValue(payable(BURN_FOR_TRANSFER_ADDRESS), msg.value); - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( TeleporterMessageInput({ destinationBlockchainID: sourceBlockchainID, destinationAddress: nativeTokenSourceAddress, @@ -224,7 +226,7 @@ contract NativeTokenDestination is address[] calldata allowedRelayerAddresses ) external { uint256 totalBurnedTxFees = address(BURNED_TX_FEES_ADDRESS).balance; - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( TeleporterMessageInput({ destinationBlockchainID: sourceBlockchainID, destinationAddress: nativeTokenSourceAddress, diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenSource.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenSource.sol index 75a238518..1dde04164 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenSource.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenSource.sol @@ -147,7 +147,7 @@ contract NativeTokenSource is ); } - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( TeleporterMessageInput({ destinationBlockchainID: destinationBlockchainID, destinationAddress: nativeTokenDestinationAddress, diff --git a/contracts/src/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher.sol b/contracts/src/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher.sol index 93550a5fd..0406412e3 100644 --- a/contracts/src/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher.sol +++ b/contracts/src/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher.sol @@ -42,7 +42,7 @@ contract BlockHashPublisher { function publishLatestBlockHash( bytes32 destinationBlockchainID, address destinationAddress - ) external returns (uint256) { + ) external returns (bytes32) { // Get the latest block info. Note it must the previous block // because the current block hash is not available during execution. uint256 blockHeight = block.number - 1; diff --git a/contracts/src/Teleporter/ITeleporterMessenger.sol b/contracts/src/Teleporter/ITeleporterMessenger.sol index 3bc8d0750..8d975d40c 100644 --- a/contracts/src/Teleporter/ITeleporterMessenger.sol +++ b/contracts/src/Teleporter/ITeleporterMessenger.sol @@ -8,7 +8,7 @@ pragma solidity 0.8.18; // A message receipt identifies the message ID that was delivered // and the address that can redeem the reward for that message. struct TeleporterMessageReceipt { - uint256 receivedMessageID; + bytes32 receivedMessageID; address relayerRewardAddress; } @@ -28,7 +28,7 @@ struct TeleporterMessageInput { // Represents a message sent or received by an implementation of {ITeleporterMessenger}. struct TeleporterMessage { - uint256 messageID; + bytes32 messageID; address senderAddress; bytes32 destinationBlockchainID; address destinationAddress; @@ -57,7 +57,7 @@ interface ITeleporterMessenger { */ event SendCrossChainMessage( bytes32 indexed destinationBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, TeleporterMessage message, TeleporterFeeInfo feeInfo ); @@ -68,7 +68,7 @@ interface ITeleporterMessenger { */ event AddFeeAmount( bytes32 indexed destinationBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, TeleporterFeeInfo updatedFeeInfo ); @@ -78,7 +78,7 @@ interface ITeleporterMessenger { */ event MessageExecutionFailed( bytes32 indexed originBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, TeleporterMessage message ); @@ -91,7 +91,7 @@ interface ITeleporterMessenger { */ event MessageExecuted( bytes32 indexed originBlockchainID, - uint256 indexed messageID + bytes32 indexed messageID ); /** @@ -99,7 +99,7 @@ interface ITeleporterMessenger { */ event ReceiveCrossChainMessage( bytes32 indexed originBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, TeleporterMessage message @@ -120,7 +120,7 @@ interface ITeleporterMessenger { */ function sendCrossChainMessage( TeleporterMessageInput calldata messageInput - ) external returns (uint256); + ) external returns (bytes32); /** * @dev Called by transactions to retry the sending of a cross-chain message. @@ -146,7 +146,7 @@ interface ITeleporterMessenger { */ function addFeeAmount( bytes32 destinationBlockchainID, - uint256 messageID, + bytes32 messageID, address feeTokenAddress, uint256 additionalFeeAmount ) external; @@ -186,10 +186,10 @@ interface ITeleporterMessenger { */ function sendSpecifiedReceipts( bytes32 originBlockchainID, - uint256[] calldata messageIDs, + bytes32[] calldata messageIDs, TeleporterFeeInfo calldata feeInfo, address[] calldata allowedRelayerAddresses - ) external returns (uint256); + ) external returns (bytes32); /** * @dev Sends any fee amount rewards for the given fee asset out to the caller. @@ -202,7 +202,7 @@ interface ITeleporterMessenger { */ function getMessageHash( bytes32 destinationBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (bytes32); /** @@ -211,7 +211,7 @@ interface ITeleporterMessenger { */ function messageReceived( bytes32 originBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (bool); /** @@ -221,7 +221,7 @@ interface ITeleporterMessenger { */ function getRelayerRewardAddress( bytes32 originBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (address); /** @@ -239,14 +239,16 @@ interface ITeleporterMessenger { */ function getFeeInfo( bytes32 destinationBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (address, uint256); /** * @dev Gets the next message ID to be used for a given chain ID. * @return The next message ID to be used to send a message to the given chain ID. */ - function getNextMessageID(bytes32 destinationBlockchainID) external view returns (uint256); + function getNextMessageID( + bytes32 destinationBlockchainID + ) external view returns (bytes32); /** * @dev Gets the number of receipts that are waiting to be sent to the given origin chain ID. diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index b6abe185d..e161349e0 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -40,11 +40,12 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // The blockchain ID of the chain the contract is deployed on. Initialized lazily on the first call of `receiveCrossChainMessage` bytes32 public blockchainID; - // Tracks the latest message ID used for a given destination chain. - // Key is the destination blockchain ID, and the value is the last message ID used for that chain. - // Note that the first message ID used for each chain will be 1 (not 0). - mapping(bytes32 destinationBlockchainID => uint256 messageID) - public latestMessageIDs; + // Tracks the latest raw message ID used for a given destination chain. + // Key is the destination blockchain ID, and the value is the last raw message ID used for + // that chain. Raw message IDs are monotonically incremented integers. The first raw message + // ID used for each chain will be 1 (not 0). + mapping(bytes32 destinationBlockchainID => uint256 rawMessageID) + public latestRawMessageIDs; // Tracks the outstanding receipts to send back to a given chain in subsequent messages sent to that chain. // Key is the blockchain ID of the other chain, and the value is a queue of pending receipts for messages @@ -56,21 +57,21 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // with a receipt. The messages are tracked per chain and keyed by message ID. // The first key is the blockchain ID of the destination chain, the second key is the message ID, and the value is the info // for the uniquely identified message. - mapping(bytes32 destinationBlockchainID => mapping(uint256 messageID => SentMessageInfo messageInfo)) + mapping(bytes32 destinationBlockchainID => mapping(bytes32 messageID => SentMessageInfo messageInfo)) public sentMessageInfo; // Tracks the hash of messages that have been received but whose execution has never succeeded. // Enables retrying of failed messages with higher gas limits. Message execution is guaranteed to // succeed at most once. The first key is the blockchain ID of the sending chain, the second key is the message ID, and // the value is the hash of the uniquely identified message whose execution failed. - mapping(bytes32 sourceBlockchainID => mapping(uint256 messageID => bytes32 messageHash)) + mapping(bytes32 sourceBlockchainID => mapping(bytes32 messageID => bytes32 messageHash)) public receivedFailedMessageHashes; // Tracks the relayer reward address for each message delivered from a given chain. // Note that these values are also used to determine if a given message has been delivered or not. // The first key is the blockchain ID, the second key is the message ID, and the value is the reward address // provided by the deliverer of the uniquely identified message. - mapping(bytes32 sourceBlockchainID => mapping(uint256 messageID => address relayerRewardAddress)) + mapping(bytes32 sourceBlockchainID => mapping(bytes32 messageID => address relayerRewardAddress)) internal _relayerRewardAddresses; // Tracks the reward amounts for a given asset able to be redeemed by a given relayer. @@ -89,7 +90,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function sendCrossChainMessage( TeleporterMessageInput calldata messageInput - ) external senderNonReentrant returns (uint256) { + ) external senderNonReentrant returns (bytes32) { // Get the outstanding receipts for messages that have been previously received // from the destination chain but not yet acknowledged, and attach the receipts // to the Teleporter message to be sent. @@ -157,7 +158,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function addFeeAmount( bytes32 destinationBlockchainID, - uint256 messageID, + bytes32 messageID, address feeTokenAddress, uint256 additionalFeeAmount ) external senderNonReentrant { @@ -421,17 +422,17 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function sendSpecifiedReceipts( bytes32 originBlockchainID, - uint256[] calldata messageIDs, + bytes32[] calldata messageIDs, TeleporterFeeInfo calldata feeInfo, address[] calldata allowedRelayerAddresses - ) external senderNonReentrant returns (uint256) { + ) external senderNonReentrant returns (bytes32) { // Iterate through the specified message IDs and create teleporter receipts to send back. TeleporterMessageReceipt[] memory receiptsToSend = new TeleporterMessageReceipt[]( messageIDs.length ); for (uint256 i; i < messageIDs.length; ++i) { - uint256 receivedMessageID = messageIDs[i]; + bytes32 receivedMessageID = messageIDs[i]; // Get the relayer reward address for the message. address relayerRewardAddress = _relayerRewardAddresses[ originBlockchainID @@ -489,7 +490,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function getMessageHash( bytes32 destinationBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (bytes32) { return sentMessageInfo[destinationBlockchainID][messageID].messageHash; } @@ -499,7 +500,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function messageReceived( bytes32 originBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (bool) { return _messageReceived(originBlockchainID, messageID); } @@ -509,7 +510,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function getRelayerRewardAddress( bytes32 originBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (address) { return _relayerRewardAddresses[originBlockchainID][messageID]; } @@ -529,7 +530,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function getFeeInfo( bytes32 destinationBlockchainID, - uint256 messageID + bytes32 messageID ) external view returns (address, uint256) { TeleporterFeeInfo memory feeInfo = sentMessageInfo[ destinationBlockchainID @@ -542,8 +543,19 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function getNextMessageID( bytes32 destinationBlockchainID - ) external view returns (uint256) { - return _getNextMessageID(destinationBlockchainID); + ) external view returns (bytes32) { + bytes32 blockchainID_ = blockchainID; + require( + blockchainID_ != bytes32(0), + "TeleporterMessenger: blockchainID not set" + ); + uint256 rawMessageID = _getNextRawMessageID(destinationBlockchainID); + return + _calculateMessageID( + blockchainID_, + destinationBlockchainID, + rawMessageID + ); } /** @@ -571,7 +583,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function _messageReceived( bytes32 originBlockchainID, - uint256 messageID + bytes32 messageID ) internal view returns (bool) { return _relayerRewardAddresses[originBlockchainID][messageID] != @@ -609,11 +621,27 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { function _sendTeleporterMessage( TeleporterMessageInput memory messageInput, TeleporterMessageReceipt[] memory receipts - ) private returns (uint256) { + ) private returns (bytes32) { + // If the blockchain ID has yet to be initialized, do so now. + bytes32 blockchainID_ = blockchainID; + if (blockchainID_ == bytes32(0)) { + blockchainID_ = WARP_MESSENGER.getBlockchainID(); + blockchainID = blockchainID_; + } + require( + blockchainID_ != bytes32(0), + "TeleporterMessenger: blockchainID not set" + ); + // Get the message ID to use for this message. - uint256 messageID = _getNextMessageID( + uint256 rawMessageID = _getNextRawMessageID( messageInput.destinationBlockchainID ); + bytes32 messageID = _calculateMessageID( + blockchainID_, + messageInput.destinationBlockchainID, + rawMessageID + ); // Construct and serialize the message. TeleporterMessage memory teleporterMessage = TeleporterMessage({ @@ -629,7 +657,9 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { bytes memory teleporterMessageBytes = abi.encode(teleporterMessage); // Set the message ID value as being used. - latestMessageIDs[messageInput.destinationBlockchainID] = messageID; + latestRawMessageIDs[ + messageInput.destinationBlockchainID + ] = rawMessageID; // If the fee amount is non-zero, transfer the asset into control of this TeleporterMessenger contract instance. // The fee is allowed to be 0 because it's possible for someone to run their own relayer and deliver their own messages, @@ -683,7 +713,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function _markReceipt( bytes32 destinationBlockchainID, - uint256 messageID, + bytes32 messageID, address relayerRewardAddress ) private { // Get the information about the sent message to be marked as received. @@ -819,11 +849,29 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { } /** - * @dev Returns the next message ID to be used to send a message to the given `originBlockchainID`. + * @dev Calculates the message ID given this contract's address and required input parameters. */ - function _getNextMessageID( - bytes32 originBlockchainID + function _calculateMessageID( + bytes32 originBlockchainID, + bytes32 destinationBlockchainID, + uint256 rawMessageID + ) private view returns (bytes32) { + bytes memory rawBytes = abi.encode( + address(this), + originBlockchainID, + destinationBlockchainID, + rawMessageID + ); + + return sha256(rawBytes); + } + + /** + * @dev Returns the next raw message ID to be used to send a message to the given `destinationBlockchainID`. + */ + function _getNextRawMessageID( + bytes32 destinationBlockchainID ) private view returns (uint256) { - return latestMessageIDs[originBlockchainID] + 1; + return latestRawMessageIDs[destinationBlockchainID] + 1; } } diff --git a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol index 6186d65c6..1945aa37a 100644 --- a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol +++ b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol @@ -18,7 +18,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testSuccess() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, originalFeeAmount ); @@ -63,7 +63,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testInvalidMessage() public { // Add to the fee amount of a message that doesn't exist. Expect revert. uint256 additionalFeeAmount = 131313; - uint256 fakeMessageID = 13; + bytes32 fakeMessageID = bytes32(uint256(13)); vm.expectRevert(_formatTeleporterErrorMessage("message not found")); teleporterMessenger.addFeeAmount( DEFAULT_DESTINATION_CHAIN_ID, @@ -76,7 +76,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testMessageAlreadyDelivered() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, originalFeeAmount ); @@ -111,7 +111,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testInvalidAmount() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, originalFeeAmount ); @@ -132,7 +132,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testMismatchFeeAsset() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, originalFeeAmount ); @@ -154,7 +154,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testInvalidFeeAsset() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, originalFeeAmount ); @@ -176,7 +176,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testInsufficientBalance() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, originalFeeAmount ); diff --git a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol index 8ff6e0e5d..0d52c77df 100644 --- a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol +++ b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol @@ -18,7 +18,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { function testSuccess() public { // First submit a message with a fee uint256 feeAmount = 1687435413; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, feeAmount ); @@ -36,7 +36,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { uint256 feeAmount = 1687435413; uint256 tokenTransferFee = 35413; _mockFeeAsset.setFeeOnTransferSender(address(this), tokenTransferFee); - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, feeAmount ); @@ -52,7 +52,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { function testAfterReceipt() public { // First submit a message with a small fee uint256 feeAmount = 10; - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, feeAmount ); @@ -80,7 +80,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { } function testInvalidMessage() public { - uint256 fakeMessageID = 4646; + bytes32 fakeMessageID = bytes32(uint256(4646)); // Get the fee info to make sure it is zero since the message doesn't exist. (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger diff --git a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol index a7f4cc44b..95e7c2a2a 100644 --- a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol +++ b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol @@ -17,7 +17,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testSuccess() public { // Submit a message - uint256 messageID = _sendTestMessageWithNoFee( + bytes32 messageID = _sendTestMessageWithNoFee( DEFAULT_DESTINATION_CHAIN_ID ); TeleporterMessage memory expectedMessage = TeleporterMessage({ @@ -45,7 +45,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { assertEq( teleporterMessenger.getMessageHash( DEFAULT_DESTINATION_CHAIN_ID, - 42 + bytes32(uint256(42)) ), bytes32(0) ); @@ -53,7 +53,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testMessageAlreadyReceived() public { // Submit a message - uint256 messageID = _sendTestMessageWithNoFee( + bytes32 messageID = _sendTestMessageWithNoFee( DEFAULT_DESTINATION_CHAIN_ID ); diff --git a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol index 0241276c9..88773e6b9 100644 --- a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol +++ b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol @@ -5,82 +5,82 @@ pragma solidity 0.8.18; -import {TeleporterMessengerTest, TeleporterMessageInput, TeleporterFeeInfo, IWarpMessenger} from "./TeleporterMessengerTest.t.sol"; +// import {TeleporterMessengerTest, TeleporterMessageInput, TeleporterFeeInfo, IWarpMessenger} from "./TeleporterMessengerTest.t.sol"; -contract GetNextMessageIDTest is TeleporterMessengerTest { - // The state of the contract gets reset before each - // test is run, with the `setUp()` function being called - // each time after deployment. - function setUp() public virtual override { - TeleporterMessengerTest.setUp(); - } +// contract GetNextMessageIDTest is TeleporterMessengerTest { +// // The state of the contract gets reset before each +// // test is run, with the `setUp()` function being called +// // each time after deployment. +// function setUp() public virtual override { +// TeleporterMessengerTest.setUp(); +// } - function testFirstMessageID() public { - bytes32 blockchainID = bytes32( - hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" - ); +// function testFirstMessageID() public { +// bytes32 blockchainID = bytes32( +// hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" +// ); - assertEq(teleporterMessenger.getNextMessageID(blockchainID), 1); - } +// assertEq(teleporterMessenger.getNextMessageID(blockchainID), 1); +// } - function testSecondMessageID() public { - bytes32 blockchainID = bytes32( - hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" - ); +// function testSecondMessageID() public { +// bytes32 blockchainID = bytes32( +// hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" +// ); - vm.mockCall( - WARP_PRECOMPILE_ADDRESS, - abi.encode(IWarpMessenger.sendWarpMessage.selector), - abi.encode(bytes32(0)) - ); - TeleporterMessageInput memory messageInput = TeleporterMessageInput({ - destinationBlockchainID: blockchainID, - destinationAddress: address(0), - feeInfo: TeleporterFeeInfo({ - feeTokenAddress: address(0), - amount: uint256(0) - }), - requiredGasLimit: 1e6, - allowedRelayerAddresses: new address[](0), - message: new bytes(0) - }); +// vm.mockCall( +// WARP_PRECOMPILE_ADDRESS, +// abi.encode(IWarpMessenger.sendWarpMessage.selector), +// abi.encode(bytes32(0)) +// ); +// TeleporterMessageInput memory messageInput = TeleporterMessageInput({ +// destinationBlockchainID: blockchainID, +// destinationAddress: address(0), +// feeInfo: TeleporterFeeInfo({ +// feeTokenAddress: address(0), +// amount: uint256(0) +// }), +// requiredGasLimit: 1e6, +// allowedRelayerAddresses: new address[](0), +// message: new bytes(0) +// }); - uint256 first = teleporterMessenger.sendCrossChainMessage(messageInput); - uint256 second = teleporterMessenger.getNextMessageID(blockchainID); +// uint256 first = teleporterMessenger.sendCrossChainMessage(messageInput); +// uint256 second = teleporterMessenger.getNextMessageID(blockchainID); - assertEq(first, 1); - assertEq(second, 2); - } +// assertEq(first, 1); +// assertEq(second, 2); +// } - function testOtherDestinationSubnetID() public { - bytes32 blockchainID = bytes32( - hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" - ); - bytes32 otherBlockchainID = bytes32( - hex"00000000556677889900aabbccddeeff11223344556677889900aabbccddeeff" - ); +// function testOtherDestinationSubnetID() public { +// bytes32 blockchainID = bytes32( +// hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" +// ); +// bytes32 otherBlockchainID = bytes32( +// hex"00000000556677889900aabbccddeeff11223344556677889900aabbccddeeff" +// ); - vm.mockCall( - WARP_PRECOMPILE_ADDRESS, - abi.encode(IWarpMessenger.sendWarpMessage.selector), - abi.encode(bytes32(0)) - ); - TeleporterMessageInput memory messageInput = TeleporterMessageInput({ - destinationBlockchainID: blockchainID, - destinationAddress: address(0), - feeInfo: TeleporterFeeInfo({ - feeTokenAddress: address(0), - amount: uint256(0) - }), - requiredGasLimit: 1e6, - allowedRelayerAddresses: new address[](0), - message: new bytes(0) - }); +// vm.mockCall( +// WARP_PRECOMPILE_ADDRESS, +// abi.encode(IWarpMessenger.sendWarpMessage.selector), +// abi.encode(bytes32(0)) +// ); +// TeleporterMessageInput memory messageInput = TeleporterMessageInput({ +// destinationBlockchainID: blockchainID, +// destinationAddress: address(0), +// feeInfo: TeleporterFeeInfo({ +// feeTokenAddress: address(0), +// amount: uint256(0) +// }), +// requiredGasLimit: 1e6, +// allowedRelayerAddresses: new address[](0), +// message: new bytes(0) +// }); - uint256 first = teleporterMessenger.sendCrossChainMessage(messageInput); - uint256 other = teleporterMessenger.getNextMessageID(otherBlockchainID); +// uint256 first = teleporterMessenger.sendCrossChainMessage(messageInput); +// uint256 other = teleporterMessenger.getNextMessageID(otherBlockchainID); - assertEq(first, 1); - assertEq(other, 1); - } -} +// assertEq(first, 1); +// assertEq(other, 1); +// } +// } diff --git a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol index 1f2cbbff5..d3ca31dac 100644 --- a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol +++ b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol @@ -27,15 +27,15 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { memory expectedReceipts = new TeleporterMessageReceipt[](3); expectedReceipts[0] = TeleporterMessageReceipt( - 13, + bytes32(uint256(13)), 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 ); expectedReceipts[1] = TeleporterMessageReceipt( - 42, + bytes32(uint256(42)), 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 ); expectedReceipts[2] = TeleporterMessageReceipt( - 94, + bytes32(uint256(94)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); @@ -55,7 +55,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Now that we have "received" 3 mock messages, when we send a message back to the // other chain, we should expect to see the 3 receipts included in the message metadata. TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), hex"deadbeef" ); expectedMessage.receipts = expectedReceipts; @@ -95,12 +95,12 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { ); // Submit the message. - assertEq(teleporterMessenger.sendCrossChainMessage(messageInput), 1); + teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it does not contain any more receipts. TeleporterMessage memory nextExpectedMessage = _createMockTeleporterMessage( - 2, + bytes32(uint256(2)), hex"deadbeef" ); nextExpectedMessage.destinationBlockchainID = blockchainID; @@ -120,7 +120,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { ); // Submit the new message. - assertEq(teleporterMessenger.sendCrossChainMessage(messageInput), 2); + teleporterMessenger.sendCrossChainMessage(messageInput); } // Test that when there are more than the maximum limit of receipts to include in a message (5), @@ -132,34 +132,34 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { TeleporterMessageReceipt[] memory expectedReceiptsBatch1 = new TeleporterMessageReceipt[](5); // the limit of receipts per message is 5. expectedReceiptsBatch1[0] = TeleporterMessageReceipt( - 13, + bytes32(uint256(13)), 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 ); expectedReceiptsBatch1[1] = TeleporterMessageReceipt( - 42, + bytes32(uint256(42)), 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 ); expectedReceiptsBatch1[2] = TeleporterMessageReceipt( - 94, + bytes32(uint256(94)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch1[3] = TeleporterMessageReceipt( - 3, + bytes32(uint256(3)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch1[4] = TeleporterMessageReceipt( - 53, + bytes32(uint256(53)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); TeleporterMessageReceipt[] memory expectedReceiptsBatch2 = new TeleporterMessageReceipt[](2); // the limit of receipts per message is 5. expectedReceiptsBatch2[0] = TeleporterMessageReceipt( - 75, + bytes32(uint256(75)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch2[1] = TeleporterMessageReceipt( - 80, + bytes32(uint256(80)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); @@ -188,7 +188,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // other chain, we should expect to see the 5 receipts included in the message metadata because // that is the max receipt batch size limit. TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), hex"deadbeef" ); expectedMessage.receipts = expectedReceiptsBatch1; @@ -228,12 +228,12 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { ); // Submit the message. - assertEq(teleporterMessenger.sendCrossChainMessage(messageInput), 1); + teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it contains the remaining 2 receipts to be sent. TeleporterMessage memory nextExpectedMessage = _createMockTeleporterMessage( - 2, + bytes32(uint256(2)), hex"deadbeef" ); nextExpectedMessage.receipts = expectedReceiptsBatch2; @@ -254,6 +254,6 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { ); // Submit the new message. - assertEq(teleporterMessenger.sendCrossChainMessage(messageInput), 2); + teleporterMessenger.sendCrossChainMessage(messageInput); } } diff --git a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol index ce04fec6a..1b96905af 100644 --- a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol +++ b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol @@ -17,7 +17,7 @@ contract GetRelayerRewardAddressTest is TeleporterMessengerTest { function testSuccess() public { // Before receiving the message, it returns the 0 address. - uint256 mockMessageID = 8; + bytes32 mockMessageID = bytes32(uint256(8)); assertEq( teleporterMessenger.getRelayerRewardAddress( DEFAULT_DESTINATION_CHAIN_ID, diff --git a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol index 766cffe66..17a63b3ac 100644 --- a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol @@ -104,7 +104,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: 42, + messageID: bytes32(uint256(42)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(destinationContract), @@ -166,7 +166,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: 42, + messageID: bytes32(uint256(42)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(destinationContract), @@ -202,7 +202,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: 42, + messageID: bytes32(uint256(42)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(destinationContract), @@ -268,7 +268,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: 42, + messageID: bytes32(uint256(42)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(destinationContract), diff --git a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol index ba3f4a2d5..1d72e2e67 100644 --- a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol +++ b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol @@ -40,13 +40,11 @@ contract MarkReceiptTest is TeleporterMessengerTest { ) ]; + bytes32[3] memory messageIDs; for (uint256 i = 0; i < feeRewardInfos.length; i++) { - assertEq( - _sendTestMessageWithFee( - DEFAULT_ORIGIN_CHAIN_ID, - feeRewardInfos[i].feeAmount - ), - i + 1 + messageIDs[i] = _sendTestMessageWithFee( + DEFAULT_ORIGIN_CHAIN_ID, + feeRewardInfos[i].feeAmount ); } @@ -57,13 +55,13 @@ contract MarkReceiptTest is TeleporterMessengerTest { ); for (uint256 i = 0; i < receipts.length; i++) { receipts[i] = TeleporterMessageReceipt({ - receivedMessageID: i + 1, + receivedMessageID: messageIDs[i], relayerRewardAddress: feeRewardInfos[i].relayerRewardAddress }); } TeleporterMessage memory messageToReceive = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), new bytes(0) ); messageToReceive.receipts = receipts; @@ -96,12 +94,15 @@ contract MarkReceiptTest is TeleporterMessengerTest { assertEq( teleporterMessenger.getRelayerRewardAddress( DEFAULT_ORIGIN_CHAIN_ID, - 1 + bytes32(uint256(1)) ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_CHAIN_ID, 1) + teleporterMessenger.messageReceived( + DEFAULT_ORIGIN_CHAIN_ID, + bytes32(uint256(1)) + ) ); // Check that the message hashes for the message receipts we received have been cleared. @@ -109,7 +110,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { assertEq( teleporterMessenger.getMessageHash( DEFAULT_ORIGIN_CHAIN_ID, - i + 1 + messageIDs[i] ), bytes32(0) ); @@ -118,18 +119,18 @@ contract MarkReceiptTest is TeleporterMessengerTest { function testReceiptForNoFeeMessage() public { // Submit a a mock message with no fee. - assertEq(_sendTestMessageWithNoFee(DEFAULT_ORIGIN_CHAIN_ID), 1); + bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_ORIGIN_CHAIN_ID); // Mock receiving a message with the a receipts of the mock message sent above. TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](1); receipts[0] = TeleporterMessageReceipt({ - receivedMessageID: 1, + receivedMessageID: messageID, relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS }); TeleporterMessage memory messageToReceive = _createMockTeleporterMessage( - 1, + messageID, new bytes(0) ); messageToReceive.receipts = receipts; @@ -151,12 +152,15 @@ contract MarkReceiptTest is TeleporterMessengerTest { assertEq( teleporterMessenger.getRelayerRewardAddress( DEFAULT_ORIGIN_CHAIN_ID, - 1 + messageID ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_CHAIN_ID, 1) + teleporterMessenger.messageReceived( + DEFAULT_ORIGIN_CHAIN_ID, + messageID + ) ); } @@ -166,26 +170,23 @@ contract MarkReceiptTest is TeleporterMessengerTest { 1111111111111111, 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 ); - assertEq( - _sendTestMessageWithFee( - DEFAULT_ORIGIN_CHAIN_ID, - feeRewardInfo.feeAmount - ), - 1 + bytes32 receivedMessageID = _sendTestMessageWithFee( + DEFAULT_ORIGIN_CHAIN_ID, + feeRewardInfo.feeAmount ); // Mock receiving a message with the 2 receipts for the same mock message above. TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](2); TeleporterMessageReceipt memory receipt = TeleporterMessageReceipt({ - receivedMessageID: 1, + receivedMessageID: receivedMessageID, relayerRewardAddress: feeRewardInfo.relayerRewardAddress }); receipts[0] = receipt; receipts[1] = receipt; TeleporterMessage memory messageToReceive = _createMockTeleporterMessage( - 1, + receivedMessageID, new bytes(0) ); messageToReceive.receipts = receipts; @@ -216,17 +217,23 @@ contract MarkReceiptTest is TeleporterMessengerTest { assertEq( teleporterMessenger.getRelayerRewardAddress( DEFAULT_ORIGIN_CHAIN_ID, - 1 + receivedMessageID ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_CHAIN_ID, 1) + teleporterMessenger.messageReceived( + DEFAULT_ORIGIN_CHAIN_ID, + receivedMessageID + ) ); // Check that the message hashes for the message receipts we received have been cleared. assertEq( - teleporterMessenger.getMessageHash(DEFAULT_ORIGIN_CHAIN_ID, 1), + teleporterMessenger.getMessageHash( + DEFAULT_ORIGIN_CHAIN_ID, + receivedMessageID + ), bytes32(0) ); } diff --git a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol index 97e57ee71..c90ba0aec 100644 --- a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol +++ b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol @@ -20,7 +20,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234; _receiveTestMessage( DEFAULT_DESTINATION_CHAIN_ID, - 1, + bytes32(uint256(1)), relayerRewardAddress, new TeleporterMessageReceipt[](0) ); @@ -28,7 +28,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { assertEq( teleporterMessenger.messageReceived( DEFAULT_DESTINATION_CHAIN_ID, - 1 + bytes32(uint256(1)) ), true ); @@ -38,7 +38,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { assertEq( teleporterMessenger.messageReceived( DEFAULT_DESTINATION_CHAIN_ID, - 1 + bytes32(uint256(1)) ), false ); diff --git a/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol b/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol index 4f4657b3c..5e2d3ed6f 100644 --- a/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol +++ b/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol @@ -19,17 +19,17 @@ contract ReceiptQueueTest is Test { // Add 3 elements to the queue. TeleporterMessageReceipt private _receipt1 = TeleporterMessageReceipt({ - receivedMessageID: 543, + receivedMessageID: bytes32(uint256(543)), relayerRewardAddress: 0x10eB43ef5982628728E3E4bb9F78834f67Fbb40b }); TeleporterMessageReceipt private _receipt2 = TeleporterMessageReceipt({ - receivedMessageID: 684384, + receivedMessageID: bytes32(uint256(684384)), relayerRewardAddress: 0x10eB43ef5982628728E3E4bb9F78834f67Fbb40b }); TeleporterMessageReceipt private _receipt3 = TeleporterMessageReceipt({ - receivedMessageID: 654351, + receivedMessageID: bytes32(uint256(654351)), relayerRewardAddress: 0xcC8E718045817AebA89592C72Ae1C9917f5D0894 }); @@ -86,7 +86,7 @@ contract ReceiptQueueTest is Test { // Check that you can't dequeue from empty queue. vm.expectRevert(_formatReceiptQueueErrorMessage("empty queue")); TeleporterMessageReceipt memory result = _queue.dequeue(); - assertEq(result.receivedMessageID, 0); + assertEq(result.receivedMessageID, bytes32(0)); assertEq(result.relayerRewardAddress, address(0)); } diff --git a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol index 5906a953b..6e0bea2c6 100644 --- a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol @@ -30,7 +30,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Construct the test message to be received. TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: 1, + messageID: bytes32(uint256(1)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -76,11 +76,11 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Check receipt queue contents TeleporterMessageReceipt memory receipt = teleporterMessenger .getReceiptAtIndex(DEFAULT_ORIGIN_CHAIN_ID, 0); - assertEq(receipt.receivedMessageID, 1); + assertEq(receipt.receivedMessageID, bytes32(uint256(1))); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); // Receive at a different index - messageToReceive.messageID = 2; + messageToReceive.messageID = bytes32(uint256(2)); warpMessage = _createDefaultWarpMessage( DEFAULT_ORIGIN_CHAIN_ID, abi.encode(messageToReceive) @@ -112,7 +112,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { DEFAULT_ORIGIN_CHAIN_ID, 1 ); - assertEq(receipt.receivedMessageID, 2); + assertEq(receipt.receivedMessageID, bytes32(uint256(2))); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); } @@ -155,7 +155,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Construct the test message to be received. TeleporterMessage memory messageToReceive = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), new bytes(0) ); @@ -182,13 +182,14 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Construct the test message to be received. TeleporterMessage memory messageToReceive = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), new bytes(0) ); bytes32 invalidDestinationBlockchainID = bytes32( hex"deadbeefcafebabedeadbeefcafebabedeadbeefcafebabedeadbeefcafebabe" ); - messageToReceive.destinationBlockchainID = invalidDestinationBlockchainID; + messageToReceive + .destinationBlockchainID = invalidDestinationBlockchainID; WarpMessage memory warpMessage = _createDefaultWarpMessage( DEFAULT_ORIGIN_CHAIN_ID, @@ -236,7 +237,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Construct the test message to be received. TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: 42, + messageID: bytes32(uint256(42)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, diff --git a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol index bdad22d92..99f61ea6b 100644 --- a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol +++ b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol @@ -107,7 +107,7 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { // receiving back a message with receipt of that message such that the relayer // is able to redeem the reward. function _setUpRelayerRewards(FeeRewardInfo memory feeRewardInfo) private { - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_ORIGIN_CHAIN_ID, feeRewardInfo.feeAmount ); @@ -120,7 +120,7 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { }); TeleporterMessage memory messageToReceive = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), new bytes(0) ); @@ -160,12 +160,15 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { assertEq( teleporterMessenger.getRelayerRewardAddress( DEFAULT_ORIGIN_CHAIN_ID, - 1 + bytes32(uint256(1)) ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_CHAIN_ID, 1) + teleporterMessenger.messageReceived( + DEFAULT_ORIGIN_CHAIN_ID, + bytes32(uint256(1)) + ) ); } } diff --git a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol index 1361a8346..872ca1048 100644 --- a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol @@ -114,7 +114,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { function testMessageHashNotFound() public { // Retrying a message that never was delivered should always fail. TeleporterMessage memory fakeMessage = TeleporterMessage({ - messageID: 12345, + messageID: bytes32(uint256(12345)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(destinationContract), @@ -213,7 +213,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { action = FlakyMessageReceiverAction.ReceiveMessage; } TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: 42, + messageID: bytes32(uint256(42)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(destinationContract), diff --git a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol index 73dd98f95..cd2a10efd 100644 --- a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol @@ -17,7 +17,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testSuccess() public { // Send a message - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, 654456 ); @@ -41,7 +41,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testMessageNotFound() public { TeleporterMessage memory fakeMessage = TeleporterMessage({ - messageID: 354, + messageID: bytes32(uint256(345)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -59,7 +59,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testInvalidMessageHash() public { // Send a message, then try to alter it's contents. - uint256 messageID = _sendTestMessageWithFee( + bytes32 messageID = _sendTestMessageWithFee( DEFAULT_DESTINATION_CHAIN_ID, 654456 ); diff --git a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol index 9ab50cd34..811fd95ec 100644 --- a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol @@ -18,7 +18,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testSendMessageNoFee() public { // Arrange TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), hex"deadbeef" ); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); @@ -57,12 +57,12 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { ); // Act - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( messageInput ); // Assert - assertEq(messageID, 1); + assertEq(messageID, bytes32(uint256(1))); // Check receipt queue uint256 queueSize = teleporterMessenger.getReceiptQueueSize( @@ -75,7 +75,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { // Arrange // Construct the message to submit. TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - 1, + bytes32(uint256(1)), hex"deadbeef" ); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo( @@ -130,12 +130,12 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { ); // Act - uint256 messageID = teleporterMessenger.sendCrossChainMessage( + bytes32 messageID = teleporterMessenger.sendCrossChainMessage( messageInput ); // Assert - assertEq(messageID, 1); + assertEq(messageID, bytes32(uint256(1))); } function testFeeAssetDoesNotExist() public { diff --git a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol index 0dd092d08..b0d01b2d7 100644 --- a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol +++ b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol @@ -28,19 +28,19 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { for (uint256 i = 0; i < relayerRewardAddresses.length; i++) { _receiveTestMessage( DEFAULT_DESTINATION_CHAIN_ID, - i + 1, + bytes32(uint256(i + 1)), relayerRewardAddresses[i], new TeleporterMessageReceipt[](0) ); expectedReceipts[i] = TeleporterMessageReceipt({ - receivedMessageID: i + 1, + receivedMessageID: bytes32(uint256(i + 1)), relayerRewardAddress: relayerRewardAddresses[i] }); } // Mock sending a message back to that chain, which should include the 3 receipts. TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: 1, + messageID: bytes32(uint256(1)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -53,18 +53,17 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); emit SendCrossChainMessage( DEFAULT_DESTINATION_CHAIN_ID, - 1, + bytes32(uint256(1)), expectedMessage, feeInfo ); - uint256 outboundMessageID = _sendTestMessageWithNoFee( + bytes32 outboundMessageID = _sendTestMessageWithNoFee( DEFAULT_DESTINATION_CHAIN_ID ); - assertEq(outboundMessageID, 1); assertEq( teleporterMessenger.getRelayerRewardAddress( DEFAULT_DESTINATION_CHAIN_ID, - 1 + bytes32(uint256(1)) ), relayerRewardAddresses[0] ); @@ -72,16 +71,16 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { TeleporterMessageReceipt[] memory newExpectedReceipts = new TeleporterMessageReceipt[](2); newExpectedReceipts[0] = TeleporterMessageReceipt({ - receivedMessageID: 3, + receivedMessageID: bytes32(uint256(3)), relayerRewardAddress: relayerRewardAddresses[2] }); newExpectedReceipts[1] = TeleporterMessageReceipt({ - receivedMessageID: 1, + receivedMessageID: bytes32(uint256(1)), relayerRewardAddress: relayerRewardAddresses[0] }); TeleporterMessage memory newExpectedMessage = TeleporterMessage({ - messageID: 2, + messageID: bytes32(uint256(2)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(0), @@ -92,14 +91,14 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { }); // Retry sending two of the receipts with {sendSpecifiedReceipts}. - uint256[] memory receiptIDs = new uint256[](2); - receiptIDs[0] = 3; - receiptIDs[1] = 1; + bytes32[] memory receiptIDs = new bytes32[](2); + receiptIDs[0] = bytes32(uint256(3)); + receiptIDs[1] = bytes32(uint256(1)); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( DEFAULT_DESTINATION_CHAIN_ID, - 2, + bytes32(uint256(2)), newExpectedMessage, feeInfo ); @@ -109,14 +108,14 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { receiptIDs ); - assertEq(outboundMessageID, 2); + assertEq(outboundMessageID, bytes32(uint256(2))); } function testDuplicateAllowed() public { // Mock receiving a message from another chain _receiveTestMessage( DEFAULT_DESTINATION_CHAIN_ID, - 1, + bytes32(uint256(1)), DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) ); @@ -124,7 +123,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Mock sending a message to that chain, which should include the 2 copies of the same receipt. TeleporterMessageReceipt memory expectedReceipt = TeleporterMessageReceipt({ - receivedMessageID: 1, + receivedMessageID: bytes32(uint256(1)), relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS }); TeleporterMessageReceipt[] @@ -132,7 +131,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { expectedReceipts[0] = expectedReceipt; expectedReceipts[1] = expectedReceipt; TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: 1, + messageID: bytes32(uint256(1)), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, destinationAddress: address(0), @@ -142,37 +141,37 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { message: new bytes(0) }); - uint256[] memory messageIDs = new uint256[](2); - messageIDs[0] = 1; - messageIDs[1] = 1; + bytes32[] memory messageIDs = new bytes32[](2); + messageIDs[0] = bytes32(uint256(1)); + messageIDs[1] = bytes32(uint256(1)); // Test sendSpecifiedReceipts when there are duplicate message IDs in the input. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( DEFAULT_DESTINATION_CHAIN_ID, - 1, + bytes32(uint256(1)), expectedMessage, TeleporterFeeInfo(address(0), 0) ); - uint256 outboundMessageID = _sendSpecifiedReceiptsWithNoFee( + bytes32 outboundMessageID = _sendSpecifiedReceiptsWithNoFee( DEFAULT_DESTINATION_CHAIN_ID, messageIDs ); - assertEq(outboundMessageID, 1); + assertEq(outboundMessageID, bytes32(uint256(1))); } function testMissingMessage() public { // Mock receiving a message from another chain _receiveTestMessage( DEFAULT_DESTINATION_CHAIN_ID, - 1, + bytes32(uint256(1)), DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) ); - uint256[] memory missingIDs = new uint256[](1); - missingIDs[0] = 21; + bytes32[] memory missingIDs = new bytes32[](1); + missingIDs[0] = bytes32(uint256(21)); // Try to send a receipt for an unreceived message from that chain - should fail. vm.expectRevert(_formatTeleporterErrorMessage("receipt not found")); @@ -184,10 +183,10 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { function _sendSpecifiedReceiptsWithFee( bytes32 blockchainID, - uint256[] memory messageIDs, + bytes32[] memory messageIDs, address feeAddress, uint256 feeAmount - ) private returns (uint256) { + ) private returns (bytes32) { vm.mockCall( WARP_PRECOMPILE_ADDRESS, abi.encode(IWarpMessenger.sendWarpMessage.selector), @@ -231,9 +230,14 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { function _sendSpecifiedReceiptsWithNoFee( bytes32 blockchainID, - uint256[] memory messageIDs - ) private returns (uint256) { + bytes32[] memory messageIDs + ) private returns (bytes32) { return - _sendSpecifiedReceiptsWithFee(blockchainID, messageIDs, address(0), 0); + _sendSpecifiedReceiptsWithFee( + blockchainID, + messageIDs, + address(0), + 0 + ); } } diff --git a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol index 10c748f29..bfd031579 100644 --- a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol +++ b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol @@ -36,20 +36,20 @@ contract TeleporterMessengerTest is Test { event SendCrossChainMessage( bytes32 indexed destinationBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, TeleporterMessage message, TeleporterFeeInfo feeInfo ); event AddFeeAmount( bytes32 indexed destinationBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, TeleporterFeeInfo updatedFeeInfo ); event ReceiveCrossChainMessage( bytes32 indexed originBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, TeleporterMessage message @@ -57,18 +57,18 @@ contract TeleporterMessengerTest is Test { event MessageExecutionFailed( bytes32 indexed originBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, TeleporterMessage message ); event MessageExecuted( bytes32 indexed originBlockchainID, - uint256 indexed messageID + bytes32 indexed messageID ); event FailedFeePayment( bytes32 indexed destinationBlockchainID, - uint256 indexed messageID, + bytes32 indexed messageID, address indexed feeAsset, uint256 feeAmount, address relayerRewardAddress @@ -117,7 +117,7 @@ contract TeleporterMessengerTest is Test { function _sendTestMessageWithFee( bytes32 blockchainID, uint256 feeAmount - ) internal returns (uint256) { + ) internal returns (bytes32) { vm.mockCall( WARP_PRECOMPILE_ADDRESS, abi.encode(IWarpMessenger.sendWarpMessage.selector), @@ -158,7 +158,7 @@ contract TeleporterMessengerTest is Test { function _sendTestMessageWithNoFee( bytes32 blockchainID - ) internal returns (uint256) { + ) internal returns (bytes32) { return _sendTestMessageWithFee(blockchainID, 0); } @@ -179,7 +179,7 @@ contract TeleporterMessengerTest is Test { function _receiveTestMessage( bytes32 originBlockchainID, - uint256 messageID, + bytes32 messageID, address relayerRewardAddress, TeleporterMessageReceipt[] memory receipts ) internal { @@ -225,7 +225,7 @@ contract TeleporterMessengerTest is Test { // address will be the DEFAULT_DESTINATION_ADDRESS. TeleporterMessage memory messageToReceive = _createMockTeleporterMessage( - 13, + bytes32(uint256(9)), messageData ); WarpMessage memory warpMessage = _createDefaultWarpMessage( @@ -271,7 +271,7 @@ contract TeleporterMessengerTest is Test { // because receipts are only valid if they refer to messages previously send // to the origin chain. function _createMockTeleporterMessage( - uint256 messageID, + bytes32 messageID, bytes memory message ) internal view returns (TeleporterMessage memory) { return From 6d76d611cac82c7c41dd3b368a5162c83224aa86 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Thu, 14 Dec 2023 16:58:07 -0500 Subject: [PATCH 02/16] Update ABI Bindings --- .../ERC20Bridge/ERC20Bridge/ERC20Bridge.go | 36 +- .../ExampleCrossChainMessenger.go | 10 +- .../ERC20TokenSource/ERC20TokenSource.go | 22 +- .../NativeTokenDestination.go | 40 +-- .../NativeTokenSource/NativeTokenSource.go | 22 +- .../BlockHashPublisher/BlockHashPublisher.go | 10 +- .../BlockHashReceiver/BlockHashReceiver.go | 2 +- .../TeleporterMessenger.go | 318 +++++++++--------- .../TeleporterRegistry/TeleporterRegistry.go | 2 +- 9 files changed, 231 insertions(+), 231 deletions(-) diff --git a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go index 417861656..bc9492c1c 100644 --- a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go +++ b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go @@ -31,8 +31,8 @@ var ( // ERC20BridgeMetaData contains all meta data concerning the ERC20Bridge contract. var ERC20BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"teleporterMessageID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"name\":\"CreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintBridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"teleporterMessageID\",\"type\":\"uint256\"}],\"name\":\"SubmitCreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CREATE_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"primaryFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFeeAmount\",\"type\":\"uint256\"}],\"name\":\"bridgeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"nativeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"nativeSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"nativeDecimals\",\"type\":\"uint8\"}],\"name\":\"encodeCreateBridgeTokenData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeMintBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeTransferBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenAddress\",\"type\":\"address\"}],\"name\":\"nativeToWrappedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractERC20\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"messageFeeAmount\",\"type\":\"uint256\"}],\"name\":\"submitCreateBridgeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"submittedBridgeTokenCreations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"tokenCreationSubmitted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeToken\",\"type\":\"address\"}],\"name\":\"wrappedTokenContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"bridgeTokenExists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b506040516200440738038062004407833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614159620002ae600039600081816101f801528181610a42015281816119c1015261228c01526000818161017401528181610d0201528181610f2f015261113201526141596000f3fe60806040523480156200001157600080fd5b5060043610620001695760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da11462000394578063c60da61214620003c8578063c63d220714620003df578063c868efaa14620003f6578063d2cc7a70146200040d578063f2fde38b146200041657600080fd5b80637a465fd914620002c35780638343f66114620002ce5780638c56fcf014620003165780638da5cb5b146200032d57806397314297146200033f5780639bd9abc0146200036e57600080fd5b80635f217bcc116200012c5780635f217bcc146200024057806365435568146200024b5780636b47cd9a14620002885780636c7e40d11462000293578063715018a614620002aa5780637497185614620002b457600080fd5b80631a7f5bec146200016e5780632b0d8f1814620001b3578063367e958414620001cc5780634950d2d014620001f25780635eb995141462000229575b600080fd5b620001967f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001ca620001c436600462002512565b6200042d565b005b620001e3620001dd36600462002613565b6200057a565b604051620001aa9190620026fb565b6200021a7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001aa565b620001ca6200023a36600462002710565b620005d9565b6200021a621e848081565b620001966200025c3660046200272a565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200021a620493e081565b620001ca620002a436600462002771565b620005f1565b620001ca62000942565b620001966005600160991b0181565b6200021a62030d4081565b62000305620002df3660046200272a565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001aa565b620001e362000327366004620027d3565b6200095a565b6003546001600160a01b031662000196565b620003056200035036600462002512565b6001600160a01b031660009081526001602052604090205460ff1690565b620003056200037f36600462002512565b60066020526000908152604090205460ff1681565b6200021a620003a53660046200272a565b600560209081526000938452604080852082529284528284209052825290205481565b620001e3620003d936600462002819565b620009b6565b620001ca620003f036600462002885565b62000a36565b620001ca62000407366004620028fa565b62000cea565b6002546200021a565b620001ca6200042736600462002512565b62000ea5565b6200043762000f21565b6001600160a01b038116620004aa5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156200052b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401620004a1565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60606000858585856040516020016200059794939291906200298a565b6040516020818303038152906040529050600081604051602001620005be929190620029ef565b6040516020818303038152906040529150505b949350505050565b620005e362000f21565b620005ee8162000f2b565b50565b620005fb620010d2565b6001600160a01b038416620006245760405162461bcd60e51b8152600401620004a19062002a29565b6000620006306200112d565b9050600082156200065f5762000647848462001247565b90506200065f6001600160a01b0385168383620013bd565b60006200079d86876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620006a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620006cf919081019062002ace565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200070e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000738919081019062002ace565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000777573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062002b07565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff81111562000819576200081962002532565b60405190808252806020026020018201604052801562000843578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b81526004016200086b919062002b6d565b6020604051808303816000875af11580156200088b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b1919062002bef565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f110b902745a3d7d6b66732479f01de654a3bc6e501be7c8ba2c3a6f9868cb53990620009249086815260200190565b60405180910390a4505050506200093b6001600055565b5050505050565b6200094c620014a9565b62000958600062001505565b565b60606000848484604051602001620009759392919062002c09565b60405160208183030381529060405290506001816040516020016200099c929190620029ef565b6040516020818303038152906040529150505b9392505050565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000a1a90600290839061010001620029ef565b6040516020818303038152906040529150509695505050505050565b62000a40620010d2565b7f0000000000000000000000000000000000000000000000000000000000000000870362000a825760405162461bcd60e51b8152600401620004a19062002c2d565b6001600160a01b03841662000aab5760405162461bcd60e51b8152600401620004a19062002c75565b6001600160a01b03861662000ad45760405162461bcd60e51b8152600401620004a19062002a29565b6001600160a01b03851660009081526006602052604090205460ff161562000bbf5762000b02818362002cce565b831162000b615760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b6064820152608401620004a1565b62000bb96040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001557565b62000cd6565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000c515760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b6064820152608401620004a1565b600062000c5f868562001247565b905082811162000cc45760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b6064820152608401620004a1565b62000cd488888888858862001943565b505b62000ce16001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000d52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d78919062002bef565b101562000de15760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401620004a1565b3360009081526001602052604090205460ff161562000e5c5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401620004a1565b62000e9f848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001bff92505050565b50505050565b62000eaf620014a9565b6001600160a01b03811662000f165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004a1565b620005ee8162001505565b62000958620014a9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f8c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fb2919062002bef565b60025490915081831115620010245760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401620004a1565b8083116200109b5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401620004a1565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011265760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620004a1565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200118f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b5919062002ce4565b9050620011da816001600160a01b031660009081526001602052604090205460ff1690565b15620012425760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401620004a1565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801562001291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012b7919062002bef565b9050620012d06001600160a01b03851633308662001d7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801562001318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200133e919062002bef565b9050818111620013a65760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401620004a1565b620013b2828262002d04565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200140f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001435919062002bef565b62001441919062002cce565b6040516001600160a01b03851660248201526044810182905290915062000e9f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001da1565b6003546001600160a01b03163314620009585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620015636200112d565b90506000808360a001511115620015a6576200158883604001518460a0015162001247565b6040840151909150620015a6906001600160a01b03168383620013bd565b60008360a001518460800151620015be919062002d04565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b1580156200161057600080fd5b505af115801562001625573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001690919062002bef565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016f9919062002ce4565b9050818760000151036200173f57806001600160a01b031687602001516001600160a01b0316146200173f5760405162461bcd60e51b8152600401620004a19062002d1a565b6000620017c588600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200178e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017b4919062002ce4565b8b60600151898d60c00151620009b6565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff81111562001845576200184562002532565b6040519080825280602002602001820160405280156200186f578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001897919062002b6d565b6020604051808303816000875af1158015620018b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018dd919062002bef565b90508089600001518a604001516001600160a01b03167f97935c4470efae40c8440c3abfe968a5512232dd375cc974e712f487c2b99c318c602001518d606001518b604051620019309392919062002c09565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff1615620019bf5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b6064820152608401620004a1565b7f0000000000000000000000000000000000000000000000000000000000000000860362001a015760405162461bcd60e51b8152600401620004a19062002c2d565b600062001a0d6200112d565b9050811562001a2c5762001a2c6001600160a01b0386168284620013bd565b600062001a3a838562002d04565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001a7f90849062002cce565b909155506000905062001a948787846200095a565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001b105762001b1062002532565b60405190808252806020026020018201604052801562001b3a578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001b62919062002b6d565b6020604051808303816000875af115801562001b82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ba8919062002bef565b9050808a896001600160a01b03167f97935c4470efae40c8440c3abfe968a5512232dd375cc974e712f487c2b99c318c8b8860405162001beb9392919062002c09565b60405180910390a450505050505050505050565b6000808280602001905181019062001c18919062002d69565b9092509050600082600281111562001c345762001c34620029d9565b0362001c78576000806000808480602001905181019062001c56919062002dd8565b935093509350935062001c6e89898686868662001e7f565b505050506200093b565b600182600281111562001c8f5762001c8f620029d9565b0362001cce5760008060008380602001905181019062001cb0919062002e62565b92509250925062001cc5888885858562001fee565b5050506200093b565b600282600281111562001ce55762001ce5620029d9565b0362001d34576000806000806000808680602001905181019062001d0a919062002eaa565b95509550955095509550955062001d288b8b88888888888862002168565b5050505050506200093b565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e00000000006044820152606401620004a1565b62000e9f846323b872dd60e01b858585604051602401620014719392919062002c09565b600062001df8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023219092919063ffffffff16565b80519091501562001e7a578080602001905181019062001e19919062002f1a565b62001e7a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620004a1565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001f105760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b6064820152608401620004a1565b600086868686868660405162001f2690620024ee565b62001f379695949392919062002f3e565b604051809103906000f08015801562001f54573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b62001ff8620010d2565b6001600160a01b038216620020215760405162461bcd60e51b8152600401620004a19062002c75565b60008581526007602090815260408083206001600160a01b0380891685529083528184208782168552909252909120541680620020b25760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b6064820152608401620004a1565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620020fd57600080fd5b505af115801562002112573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a2506200093b6001600055565b62002172620010d2565b6001600160a01b0383166200219b5760405162461bcd60e51b8152600401620004a19062002c75565b6001600160a01b038516620021c45760405162461bcd60e51b8152600401620004a19062002a29565b60008881526005602090815260408083206001600160a01b03808c1685529083528184209088168452909152902054828110156200224f5760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b6064820152608401620004a1565b6200225b838262002d04565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620022fa576001600160a01b0386163014620022dd5760405162461bcd60e51b8152600401620004a19062002d1a565b620022f36001600160a01b038616858562002332565b506200230c565b6200230a87878787878762001943565b505b620023176001600055565b5050505050505050565b6060620005d1848460008562002364565b6040516001600160a01b03831660248201526044810182905262001e7a90849063a9059cbb60e01b9060640162001471565b606082471015620023c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401620004a1565b600080866001600160a01b03168587604051620023e5919062002f9d565b60006040518083038185875af1925050503d806000811462002424576040519150601f19603f3d011682016040523d82523d6000602084013e62002429565b606091505b50915091506200243c8783838762002447565b979650505050505050565b60608315620024bb578251600003620024b3576001600160a01b0385163b620024b35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620004a1565b5081620005d1565b620005d18383815115620024d25781518083602001fd5b8060405162461bcd60e51b8152600401620004a19190620026fb565b6111688062002fbc83390190565b6001600160a01b0381168114620005ee57600080fd5b6000602082840312156200252557600080fd5b8135620009af81620024fc565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562002574576200257462002532565b604052919050565b600067ffffffffffffffff82111562002599576200259962002532565b50601f01601f191660200190565b600082601f830112620025b957600080fd5b8135620025d0620025ca826200257c565b62002548565b818152846020838601011115620025e657600080fd5b816020850160208301376000918101602001919091529392505050565b60ff81168114620005ee57600080fd5b600080600080608085870312156200262a57600080fd5b84356200263781620024fc565b9350602085013567ffffffffffffffff808211156200265557600080fd5b6200266388838901620025a7565b945060408701359150808211156200267a57600080fd5b506200268987828801620025a7565b92505060608501356200269c8162002603565b939692955090935050565b60005b83811015620026c4578181015183820152602001620026aa565b50506000910152565b60008151808452620026e7816020860160208601620026a7565b601f01601f19169290920160200192915050565b602081526000620009af6020830184620026cd565b6000602082840312156200272357600080fd5b5035919050565b6000806000606084860312156200274057600080fd5b8335925060208401356200275481620024fc565b915060408401356200276681620024fc565b809150509250925092565b600080600080600060a086880312156200278a57600080fd5b8535945060208601356200279e81620024fc565b93506040860135620027b081620024fc565b92506060860135620027c281620024fc565b949793965091946080013592915050565b600080600060608486031215620027e957600080fd5b8335620027f681620024fc565b925060208401356200280881620024fc565b929592945050506040919091013590565b60008060008060008060c087890312156200283357600080fd5b8635955060208701356200284781620024fc565b945060408701356200285981620024fc565b935060608701356200286b81620024fc565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a031215620028a157600080fd5b873596506020880135620028b581620024fc565b95506040880135620028c781620024fc565b94506060880135620028d981620024fc565b9699959850939660808101359560a0820135955060c0909101359350915050565b600080600080606085870312156200291157600080fd5b8435935060208501356200292581620024fc565b9250604085013567ffffffffffffffff808211156200294357600080fd5b818701915087601f8301126200295857600080fd5b8135818111156200296857600080fd5b8860208285010111156200297b57600080fd5b95989497505060200194505050565b6001600160a01b0385168152608060208201819052600090620029b090830186620026cd565b8281036040840152620029c48186620026cd565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002a1057634e487b7160e01b600052602160045260246000fd5b83825260406020830152620005d16040830184620026cd565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002a86620025ca846200257c565b905082815283838301111562002a9b57600080fd5b620009af836020830184620026a7565b600082601f83011262002abd57600080fd5b620009af8383516020850162002a75565b60006020828403121562002ae157600080fd5b815167ffffffffffffffff81111562002af957600080fd5b620005d18482850162002aab565b60006020828403121562002b1a57600080fd5b8151620009af8162002603565b600081518084526020808501945080840160005b8381101562002b625781516001600160a01b03168752958201959082019060010162002b3b565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002bd061010084018262002b27565b905060a0840151601f198483030160e0850152620013b28282620026cd565b60006020828403121562002c0257600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115620013b757620013b762002cb8565b60006020828403121562002cf757600080fd5b8151620009af81620024fc565b81810381811115620013b757620013b762002cb8565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002d7d57600080fd5b82516003811062002d8d57600080fd5b602084015190925067ffffffffffffffff81111562002dab57600080fd5b8301601f8101851362002dbd57600080fd5b62002dce8582516020840162002a75565b9150509250929050565b6000806000806080858703121562002def57600080fd5b845162002dfc81620024fc565b602086015190945067ffffffffffffffff8082111562002e1b57600080fd5b62002e298883890162002aab565b9450604087015191508082111562002e4057600080fd5b5062002e4f8782880162002aab565b92505060608501516200269c8162002603565b60008060006060848603121562002e7857600080fd5b835162002e8581620024fc565b602085015190935062002e9881620024fc565b80925050604084015190509250925092565b60008060008060008060c0878903121562002ec457600080fd5b86519550602087015162002ed881620024fc565b604088015190955062002eeb81620024fc565b606088015190945062002efe81620024fc565b809350506080870151915060a087015190509295509295509295565b60006020828403121562002f2d57600080fd5b81518015158114620009af57600080fd5b8681526001600160a01b0386811660208301528516604082015260c06060820181905260009062002f7290830186620026cd565b828103608084015262002f868186620026cd565b91505060ff831660a0830152979650505050505050565b6000825162002fb1818460208701620026a7565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea26469706673582212208a8e82a679ec260481bb5d10cf7933d8213beeeb9291c42d2ad6b12aa8eb16e264736f6c63430008120033a26469706673582212201a6762e1ca2a6c158b8866f6e8aabad27e479be480b76d34bbab5720b348768764736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"name\":\"CreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintBridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"}],\"name\":\"SubmitCreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CREATE_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"primaryFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFeeAmount\",\"type\":\"uint256\"}],\"name\":\"bridgeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"nativeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"nativeSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"nativeDecimals\",\"type\":\"uint8\"}],\"name\":\"encodeCreateBridgeTokenData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeMintBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeTransferBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenAddress\",\"type\":\"address\"}],\"name\":\"nativeToWrappedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractERC20\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"messageFeeAmount\",\"type\":\"uint256\"}],\"name\":\"submitCreateBridgeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"submittedBridgeTokenCreations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"tokenCreationSubmitted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeToken\",\"type\":\"address\"}],\"name\":\"wrappedTokenContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"bridgeTokenExists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c06040523480156200001157600080fd5b506040516200440738038062004407833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614159620002ae600039600081816101f801528181610a42015281816119c1015261228c01526000818161017401528181610d0201528181610f2f015261113201526141596000f3fe60806040523480156200001157600080fd5b5060043610620001695760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da11462000394578063c60da61214620003c8578063c63d220714620003df578063c868efaa14620003f6578063d2cc7a70146200040d578063f2fde38b146200041657600080fd5b80637a465fd914620002c35780638343f66114620002ce5780638c56fcf014620003165780638da5cb5b146200032d57806397314297146200033f5780639bd9abc0146200036e57600080fd5b80635f217bcc116200012c5780635f217bcc146200024057806365435568146200024b5780636b47cd9a14620002885780636c7e40d11462000293578063715018a614620002aa5780637497185614620002b457600080fd5b80631a7f5bec146200016e5780632b0d8f1814620001b3578063367e958414620001cc5780634950d2d014620001f25780635eb995141462000229575b600080fd5b620001967f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001ca620001c436600462002512565b6200042d565b005b620001e3620001dd36600462002613565b6200057a565b604051620001aa9190620026fb565b6200021a7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001aa565b620001ca6200023a36600462002710565b620005d9565b6200021a621e848081565b620001966200025c3660046200272a565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200021a620493e081565b620001ca620002a436600462002771565b620005f1565b620001ca62000942565b620001966005600160991b0181565b6200021a62030d4081565b62000305620002df3660046200272a565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001aa565b620001e362000327366004620027d3565b6200095a565b6003546001600160a01b031662000196565b620003056200035036600462002512565b6001600160a01b031660009081526001602052604090205460ff1690565b620003056200037f36600462002512565b60066020526000908152604090205460ff1681565b6200021a620003a53660046200272a565b600560209081526000938452604080852082529284528284209052825290205481565b620001e3620003d936600462002819565b620009b6565b620001ca620003f036600462002885565b62000a36565b620001ca62000407366004620028fa565b62000cea565b6002546200021a565b620001ca6200042736600462002512565b62000ea5565b6200043762000f21565b6001600160a01b038116620004aa5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156200052b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401620004a1565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60606000858585856040516020016200059794939291906200298a565b6040516020818303038152906040529050600081604051602001620005be929190620029ef565b6040516020818303038152906040529150505b949350505050565b620005e362000f21565b620005ee8162000f2b565b50565b620005fb620010d2565b6001600160a01b038416620006245760405162461bcd60e51b8152600401620004a19062002a29565b6000620006306200112d565b9050600082156200065f5762000647848462001247565b90506200065f6001600160a01b0385168383620013bd565b60006200079d86876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620006a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620006cf919081019062002ace565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200070e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000738919081019062002ace565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000777573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062002b07565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff81111562000819576200081962002532565b60405190808252806020026020018201604052801562000843578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b81526004016200086b919062002b6d565b6020604051808303816000875af11580156200088b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b1919062002bef565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009249086815260200190565b60405180910390a4505050506200093b6001600055565b5050505050565b6200094c620014a9565b62000958600062001505565b565b60606000848484604051602001620009759392919062002c09565b60405160208183030381529060405290506001816040516020016200099c929190620029ef565b6040516020818303038152906040529150505b9392505050565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000a1a90600290839061010001620029ef565b6040516020818303038152906040529150509695505050505050565b62000a40620010d2565b7f0000000000000000000000000000000000000000000000000000000000000000870362000a825760405162461bcd60e51b8152600401620004a19062002c2d565b6001600160a01b03841662000aab5760405162461bcd60e51b8152600401620004a19062002c75565b6001600160a01b03861662000ad45760405162461bcd60e51b8152600401620004a19062002a29565b6001600160a01b03851660009081526006602052604090205460ff161562000bbf5762000b02818362002cce565b831162000b615760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b6064820152608401620004a1565b62000bb96040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001557565b62000cd6565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000c515760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b6064820152608401620004a1565b600062000c5f868562001247565b905082811162000cc45760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b6064820152608401620004a1565b62000cd488888888858862001943565b505b62000ce16001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000d52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d78919062002bef565b101562000de15760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401620004a1565b3360009081526001602052604090205460ff161562000e5c5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401620004a1565b62000e9f848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001bff92505050565b50505050565b62000eaf620014a9565b6001600160a01b03811662000f165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004a1565b620005ee8162001505565b62000958620014a9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f8c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fb2919062002bef565b60025490915081831115620010245760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401620004a1565b8083116200109b5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401620004a1565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011265760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620004a1565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200118f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b5919062002ce4565b9050620011da816001600160a01b031660009081526001602052604090205460ff1690565b15620012425760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401620004a1565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801562001291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012b7919062002bef565b9050620012d06001600160a01b03851633308662001d7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801562001318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200133e919062002bef565b9050818111620013a65760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401620004a1565b620013b2828262002d04565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200140f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001435919062002bef565b62001441919062002cce565b6040516001600160a01b03851660248201526044810182905290915062000e9f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001da1565b6003546001600160a01b03163314620009585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620015636200112d565b90506000808360a001511115620015a6576200158883604001518460a0015162001247565b6040840151909150620015a6906001600160a01b03168383620013bd565b60008360a001518460800151620015be919062002d04565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b1580156200161057600080fd5b505af115801562001625573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001690919062002bef565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016f9919062002ce4565b9050818760000151036200173f57806001600160a01b031687602001516001600160a01b0316146200173f5760405162461bcd60e51b8152600401620004a19062002d1a565b6000620017c588600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200178e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017b4919062002ce4565b8b60600151898d60c00151620009b6565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff81111562001845576200184562002532565b6040519080825280602002602001820160405280156200186f578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001897919062002b6d565b6020604051808303816000875af1158015620018b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018dd919062002bef565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019309392919062002c09565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff1615620019bf5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b6064820152608401620004a1565b7f0000000000000000000000000000000000000000000000000000000000000000860362001a015760405162461bcd60e51b8152600401620004a19062002c2d565b600062001a0d6200112d565b9050811562001a2c5762001a2c6001600160a01b0386168284620013bd565b600062001a3a838562002d04565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001a7f90849062002cce565b909155506000905062001a948787846200095a565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001b105762001b1062002532565b60405190808252806020026020018201604052801562001b3a578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001b62919062002b6d565b6020604051808303816000875af115801562001b82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ba8919062002bef565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001beb9392919062002c09565b60405180910390a450505050505050505050565b6000808280602001905181019062001c18919062002d69565b9092509050600082600281111562001c345762001c34620029d9565b0362001c78576000806000808480602001905181019062001c56919062002dd8565b935093509350935062001c6e89898686868662001e7f565b505050506200093b565b600182600281111562001c8f5762001c8f620029d9565b0362001cce5760008060008380602001905181019062001cb0919062002e62565b92509250925062001cc5888885858562001fee565b5050506200093b565b600282600281111562001ce55762001ce5620029d9565b0362001d34576000806000806000808680602001905181019062001d0a919062002eaa565b95509550955095509550955062001d288b8b88888888888862002168565b5050505050506200093b565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e00000000006044820152606401620004a1565b62000e9f846323b872dd60e01b858585604051602401620014719392919062002c09565b600062001df8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023219092919063ffffffff16565b80519091501562001e7a578080602001905181019062001e19919062002f1a565b62001e7a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620004a1565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001f105760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b6064820152608401620004a1565b600086868686868660405162001f2690620024ee565b62001f379695949392919062002f3e565b604051809103906000f08015801562001f54573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b62001ff8620010d2565b6001600160a01b038216620020215760405162461bcd60e51b8152600401620004a19062002c75565b60008581526007602090815260408083206001600160a01b0380891685529083528184208782168552909252909120541680620020b25760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b6064820152608401620004a1565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620020fd57600080fd5b505af115801562002112573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a2506200093b6001600055565b62002172620010d2565b6001600160a01b0383166200219b5760405162461bcd60e51b8152600401620004a19062002c75565b6001600160a01b038516620021c45760405162461bcd60e51b8152600401620004a19062002a29565b60008881526005602090815260408083206001600160a01b03808c1685529083528184209088168452909152902054828110156200224f5760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b6064820152608401620004a1565b6200225b838262002d04565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620022fa576001600160a01b0386163014620022dd5760405162461bcd60e51b8152600401620004a19062002d1a565b620022f36001600160a01b038616858562002332565b506200230c565b6200230a87878787878762001943565b505b620023176001600055565b5050505050505050565b6060620005d1848460008562002364565b6040516001600160a01b03831660248201526044810182905262001e7a90849063a9059cbb60e01b9060640162001471565b606082471015620023c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401620004a1565b600080866001600160a01b03168587604051620023e5919062002f9d565b60006040518083038185875af1925050503d806000811462002424576040519150601f19603f3d011682016040523d82523d6000602084013e62002429565b606091505b50915091506200243c8783838762002447565b979650505050505050565b60608315620024bb578251600003620024b3576001600160a01b0385163b620024b35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620004a1565b5081620005d1565b620005d18383815115620024d25781518083602001fd5b8060405162461bcd60e51b8152600401620004a19190620026fb565b6111688062002fbc83390190565b6001600160a01b0381168114620005ee57600080fd5b6000602082840312156200252557600080fd5b8135620009af81620024fc565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562002574576200257462002532565b604052919050565b600067ffffffffffffffff82111562002599576200259962002532565b50601f01601f191660200190565b600082601f830112620025b957600080fd5b8135620025d0620025ca826200257c565b62002548565b818152846020838601011115620025e657600080fd5b816020850160208301376000918101602001919091529392505050565b60ff81168114620005ee57600080fd5b600080600080608085870312156200262a57600080fd5b84356200263781620024fc565b9350602085013567ffffffffffffffff808211156200265557600080fd5b6200266388838901620025a7565b945060408701359150808211156200267a57600080fd5b506200268987828801620025a7565b92505060608501356200269c8162002603565b939692955090935050565b60005b83811015620026c4578181015183820152602001620026aa565b50506000910152565b60008151808452620026e7816020860160208601620026a7565b601f01601f19169290920160200192915050565b602081526000620009af6020830184620026cd565b6000602082840312156200272357600080fd5b5035919050565b6000806000606084860312156200274057600080fd5b8335925060208401356200275481620024fc565b915060408401356200276681620024fc565b809150509250925092565b600080600080600060a086880312156200278a57600080fd5b8535945060208601356200279e81620024fc565b93506040860135620027b081620024fc565b92506060860135620027c281620024fc565b949793965091946080013592915050565b600080600060608486031215620027e957600080fd5b8335620027f681620024fc565b925060208401356200280881620024fc565b929592945050506040919091013590565b60008060008060008060c087890312156200283357600080fd5b8635955060208701356200284781620024fc565b945060408701356200285981620024fc565b935060608701356200286b81620024fc565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a031215620028a157600080fd5b873596506020880135620028b581620024fc565b95506040880135620028c781620024fc565b94506060880135620028d981620024fc565b9699959850939660808101359560a0820135955060c0909101359350915050565b600080600080606085870312156200291157600080fd5b8435935060208501356200292581620024fc565b9250604085013567ffffffffffffffff808211156200294357600080fd5b818701915087601f8301126200295857600080fd5b8135818111156200296857600080fd5b8860208285010111156200297b57600080fd5b95989497505060200194505050565b6001600160a01b0385168152608060208201819052600090620029b090830186620026cd565b8281036040840152620029c48186620026cd565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002a1057634e487b7160e01b600052602160045260246000fd5b83825260406020830152620005d16040830184620026cd565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002a86620025ca846200257c565b905082815283838301111562002a9b57600080fd5b620009af836020830184620026a7565b600082601f83011262002abd57600080fd5b620009af8383516020850162002a75565b60006020828403121562002ae157600080fd5b815167ffffffffffffffff81111562002af957600080fd5b620005d18482850162002aab565b60006020828403121562002b1a57600080fd5b8151620009af8162002603565b600081518084526020808501945080840160005b8381101562002b625781516001600160a01b03168752958201959082019060010162002b3b565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002bd061010084018262002b27565b905060a0840151601f198483030160e0850152620013b28282620026cd565b60006020828403121562002c0257600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115620013b757620013b762002cb8565b60006020828403121562002cf757600080fd5b8151620009af81620024fc565b81810381811115620013b757620013b762002cb8565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002d7d57600080fd5b82516003811062002d8d57600080fd5b602084015190925067ffffffffffffffff81111562002dab57600080fd5b8301601f8101851362002dbd57600080fd5b62002dce8582516020840162002a75565b9150509250929050565b6000806000806080858703121562002def57600080fd5b845162002dfc81620024fc565b602086015190945067ffffffffffffffff8082111562002e1b57600080fd5b62002e298883890162002aab565b9450604087015191508082111562002e4057600080fd5b5062002e4f8782880162002aab565b92505060608501516200269c8162002603565b60008060006060848603121562002e7857600080fd5b835162002e8581620024fc565b602085015190935062002e9881620024fc565b80925050604084015190509250925092565b60008060008060008060c0878903121562002ec457600080fd5b86519550602087015162002ed881620024fc565b604088015190955062002eeb81620024fc565b606088015190945062002efe81620024fc565b809350506080870151915060a087015190509295509295509295565b60006020828403121562002f2d57600080fd5b81518015158114620009af57600080fd5b8681526001600160a01b0386811660208301528516604082015260c06060820181905260009062002f7290830186620026cd565b828103608084015262002f868186620026cd565b91505060ff831660a0830152979650505050505050565b6000825162002fb1818460208701620026a7565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea26469706673582212208a8e82a679ec260481bb5d10cf7933d8213beeeb9291c42d2ad6b12aa8eb16e264736f6c63430008120033a264697066735822122092a2f41777b69eacb353e9198299ce6a038eb4607ffa841ed2c58bcfe009643264736f6c63430008120033", } // ERC20BridgeABI is the input ABI used to generate the binding from. @@ -916,17 +916,17 @@ func (it *ERC20BridgeBridgeTokensIterator) Close() error { type ERC20BridgeBridgeTokens struct { TokenContractAddress common.Address DestinationBlockchainID [32]byte - TeleporterMessageID *big.Int + TeleporterMessageID [32]byte DestinationBridgeAddress common.Address Recipient common.Address Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterBridgeTokens is a free log retrieval operation binding the contract event 0x97935c4470efae40c8440c3abfe968a5512232dd375cc974e712f487c2b99c31. +// FilterBridgeTokens is a free log retrieval operation binding the contract event 0x217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c257. // -// Solidity: event BridgeTokens(address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, uint256 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount) -func (_ERC20Bridge *ERC20BridgeFilterer) FilterBridgeTokens(opts *bind.FilterOpts, tokenContractAddress []common.Address, destinationBlockchainID [][32]byte, teleporterMessageID []*big.Int) (*ERC20BridgeBridgeTokensIterator, error) { +// Solidity: event BridgeTokens(address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, bytes32 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterBridgeTokens(opts *bind.FilterOpts, tokenContractAddress []common.Address, destinationBlockchainID [][32]byte, teleporterMessageID [][32]byte) (*ERC20BridgeBridgeTokensIterator, error) { var tokenContractAddressRule []interface{} for _, tokenContractAddressItem := range tokenContractAddress { @@ -948,10 +948,10 @@ func (_ERC20Bridge *ERC20BridgeFilterer) FilterBridgeTokens(opts *bind.FilterOpt return &ERC20BridgeBridgeTokensIterator{contract: _ERC20Bridge.contract, event: "BridgeTokens", logs: logs, sub: sub}, nil } -// WatchBridgeTokens is a free log subscription operation binding the contract event 0x97935c4470efae40c8440c3abfe968a5512232dd375cc974e712f487c2b99c31. +// WatchBridgeTokens is a free log subscription operation binding the contract event 0x217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c257. // -// Solidity: event BridgeTokens(address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, uint256 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount) -func (_ERC20Bridge *ERC20BridgeFilterer) WatchBridgeTokens(opts *bind.WatchOpts, sink chan<- *ERC20BridgeBridgeTokens, tokenContractAddress []common.Address, destinationBlockchainID [][32]byte, teleporterMessageID []*big.Int) (event.Subscription, error) { +// Solidity: event BridgeTokens(address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, bytes32 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchBridgeTokens(opts *bind.WatchOpts, sink chan<- *ERC20BridgeBridgeTokens, tokenContractAddress []common.Address, destinationBlockchainID [][32]byte, teleporterMessageID [][32]byte) (event.Subscription, error) { var tokenContractAddressRule []interface{} for _, tokenContractAddressItem := range tokenContractAddress { @@ -998,9 +998,9 @@ func (_ERC20Bridge *ERC20BridgeFilterer) WatchBridgeTokens(opts *bind.WatchOpts, }), nil } -// ParseBridgeTokens is a log parse operation binding the contract event 0x97935c4470efae40c8440c3abfe968a5512232dd375cc974e712f487c2b99c31. +// ParseBridgeTokens is a log parse operation binding the contract event 0x217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c257. // -// Solidity: event BridgeTokens(address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, uint256 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount) +// Solidity: event BridgeTokens(address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, bytes32 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount) func (_ERC20Bridge *ERC20BridgeFilterer) ParseBridgeTokens(log types.Log) (*ERC20BridgeBridgeTokens, error) { event := new(ERC20BridgeBridgeTokens) if err := _ERC20Bridge.contract.UnpackLog(event, "BridgeTokens", log); err != nil { @@ -1697,13 +1697,13 @@ type ERC20BridgeSubmitCreateBridgeToken struct { DestinationBlockchainID [32]byte DestinationBridgeAddress common.Address NativeContractAddress common.Address - TeleporterMessageID *big.Int + TeleporterMessageID [32]byte Raw types.Log // Blockchain specific contextual infos } -// FilterSubmitCreateBridgeToken is a free log retrieval operation binding the contract event 0x110b902745a3d7d6b66732479f01de654a3bc6e501be7c8ba2c3a6f9868cb539. +// FilterSubmitCreateBridgeToken is a free log retrieval operation binding the contract event 0x3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd. // -// Solidity: event SubmitCreateBridgeToken(bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, uint256 teleporterMessageID) +// Solidity: event SubmitCreateBridgeToken(bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, bytes32 teleporterMessageID) func (_ERC20Bridge *ERC20BridgeFilterer) FilterSubmitCreateBridgeToken(opts *bind.FilterOpts, destinationBlockchainID [][32]byte, destinationBridgeAddress []common.Address, nativeContractAddress []common.Address) (*ERC20BridgeSubmitCreateBridgeTokenIterator, error) { var destinationBlockchainIDRule []interface{} @@ -1726,9 +1726,9 @@ func (_ERC20Bridge *ERC20BridgeFilterer) FilterSubmitCreateBridgeToken(opts *bin return &ERC20BridgeSubmitCreateBridgeTokenIterator{contract: _ERC20Bridge.contract, event: "SubmitCreateBridgeToken", logs: logs, sub: sub}, nil } -// WatchSubmitCreateBridgeToken is a free log subscription operation binding the contract event 0x110b902745a3d7d6b66732479f01de654a3bc6e501be7c8ba2c3a6f9868cb539. +// WatchSubmitCreateBridgeToken is a free log subscription operation binding the contract event 0x3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd. // -// Solidity: event SubmitCreateBridgeToken(bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, uint256 teleporterMessageID) +// Solidity: event SubmitCreateBridgeToken(bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, bytes32 teleporterMessageID) func (_ERC20Bridge *ERC20BridgeFilterer) WatchSubmitCreateBridgeToken(opts *bind.WatchOpts, sink chan<- *ERC20BridgeSubmitCreateBridgeToken, destinationBlockchainID [][32]byte, destinationBridgeAddress []common.Address, nativeContractAddress []common.Address) (event.Subscription, error) { var destinationBlockchainIDRule []interface{} @@ -1776,9 +1776,9 @@ func (_ERC20Bridge *ERC20BridgeFilterer) WatchSubmitCreateBridgeToken(opts *bind }), nil } -// ParseSubmitCreateBridgeToken is a log parse operation binding the contract event 0x110b902745a3d7d6b66732479f01de654a3bc6e501be7c8ba2c3a6f9868cb539. +// ParseSubmitCreateBridgeToken is a log parse operation binding the contract event 0x3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd. // -// Solidity: event SubmitCreateBridgeToken(bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, uint256 teleporterMessageID) +// Solidity: event SubmitCreateBridgeToken(bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, bytes32 teleporterMessageID) func (_ERC20Bridge *ERC20BridgeFilterer) ParseSubmitCreateBridgeToken(log types.Log) (*ERC20BridgeSubmitCreateBridgeToken, error) { event := new(ERC20BridgeSubmitCreateBridgeToken) if err := _ERC20Bridge.contract.UnpackLog(event, "SubmitCreateBridgeToken", log); err != nil { diff --git a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go index 9539e5ba7..be46a65f5 100644 --- a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go +++ b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go @@ -31,8 +31,8 @@ var ( // ExampleCrossChainMessengerMetaData contains all meta data concerning the ExampleCrossChainMessenger contract. var ExampleCrossChainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ReceiveMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"SendMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getCurrentMessage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200199138038062001991833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b60805161177f620002126000396000818160b30152818161043b0152818161081d0152610b7b015261177f6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397314297116100715780639731429714610133578063b33fead41461016f578063c868efaa14610190578063d2cc7a70146101a3578063f2fde38b146101b5578063f63d09d7146101c857600080fd5b80631a7f5bec146100ae5780632b0d8f18146100f25780635eb9951414610107578063715018a61461011a5780638da5cb5b14610122575b600080fd5b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61010561010036600461117d565b6101db565b005b6101056101153660046111a1565b610323565b610105610337565b6003546001600160a01b03166100d5565b61015f61014136600461117d565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016100e9565b61018261017d3660046111a1565b61034b565b6040516100e992919061120a565b61010561019e366004611277565b610423565b6002545b6040519081526020016100e9565b6101056101c336600461117d565b6105d5565b6101a76101d63660046112d3565b61064b565b6101e3610811565b6001600160a01b0381166102555760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156102d45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161024c565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61032b610811565b61033481610819565b50565b61033f6109b9565b6103496000610a13565b565b6000818152600460209081526040808320815180830190925280546001600160a01b03168252600181018054606094869493929084019161038b90611359565b80601f01602080910402602001604051908101604052809291908181526020018280546103b790611359565b80156104045780601f106103d957610100808354040283529160200191610404565b820191906000526020600020905b8154815290600101906020018083116103e757829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae9190611393565b10156105155760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161024c565b3360009081526001602052604090205460ff161561058e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161024c565b6105cf848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6592505050565b50505050565b6105dd6109b9565b6001600160a01b0381166106425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161024c565b61033481610a13565b6000610655610b1d565b600061065f610b76565b905060008615610689576106738888610c8a565b90506106896001600160a01b0389168383610df4565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516106cb9594939291906113d5565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff81111561074557610745611403565b60405190808252806020026020018201604052801561076e578160200160208202803683370190505b5081526020018888604051602001610787929190611419565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016107b59190611471565b6020604051808303816000875af11580156107d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f89190611393565b925050506108066001600055565b979650505050505050565b6103496109b9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089d9190611393565b6002549091508183111561090d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161024c565b8083116109825760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161024c565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161024c565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610a7b91906114ef565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610ad190826115df565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610b0f919061169f565b60405180910390a350505050565b600260005403610b6f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161024c565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb91906116b2565b9050610c1f816001600160a01b031660009081526001602052604090205460ff1690565b15610c855760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161024c565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190611393565b9050610d0e6001600160a01b038516333086610ed9565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190611393565b9050818111610ddf5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161024c565b610de982826116e5565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e699190611393565b610e7391906116f8565b6040516001600160a01b0385166024820152604481018290529091506105cf90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f11565b6040516001600160a01b03808516602483015283166044820152606481018290526105cf9085906323b872dd60e01b90608401610ea2565b6000610f66826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610fe89092919063ffffffff16565b805190915015610fe35780806020019051810190610f84919061170b565b610fe35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161024c565b505050565b6060610ff78484600085610fff565b949350505050565b6060824710156110605760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161024c565b600080866001600160a01b0316858760405161107c919061172d565b60006040518083038185875af1925050503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506108068783838760608315611139578251600003611132576001600160a01b0385163b6111325760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161024c565b5081610ff7565b610ff7838381511561114e5781518083602001fd5b8060405162461bcd60e51b815260040161024c919061169f565b6001600160a01b038116811461033457600080fd5b60006020828403121561118f57600080fd5b813561119a81611168565b9392505050565b6000602082840312156111b357600080fd5b5035919050565b60005b838110156111d55781810151838201526020016111bd565b50506000910152565b600081518084526111f68160208601602086016111ba565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090610ff7908301846111de565b60008083601f84011261124057600080fd5b50813567ffffffffffffffff81111561125857600080fd5b60208301915083602082850101111561127057600080fd5b9250929050565b6000806000806060858703121561128d57600080fd5b84359350602085013561129f81611168565b9250604085013567ffffffffffffffff8111156112bb57600080fd5b6112c78782880161122e565b95989497509550505050565b600080600080600080600060c0888a0312156112ee57600080fd5b87359650602088013561130081611168565b9550604088013561131081611168565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561133a57600080fd5b6113468a828b0161122e565b989b979a50959850939692959293505050565b600181811c9082168061136d57607f821691505b60208210810361138d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156113a557600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108066080830184866113ac565b634e487b7160e01b600052604160045260246000fd5b602081526000610ff76020830184866113ac565b600081518084526020808501945080840160005b838110156114665781516001600160a01b031687529582019590820190600101611441565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526114d261010084018261142d565b905060a0840151601f198483030160e0850152610de982826111de565b60006020828403121561150157600080fd5b815167ffffffffffffffff8082111561151957600080fd5b818401915084601f83011261152d57600080fd5b81518181111561153f5761153f611403565b604051601f8201601f19908116603f0116810190838211818310171561156757611567611403565b8160405282815287602084870101111561158057600080fd5b6108068360208301602088016111ba565b601f821115610fe357600081815260208120601f850160051c810160208610156115b85750805b601f850160051c820191505b818110156115d7578281556001016115c4565b505050505050565b815167ffffffffffffffff8111156115f9576115f9611403565b61160d816116078454611359565b84611591565b602080601f831160018114611642576000841561162a5750858301515b600019600386901b1c1916600185901b1785556115d7565b600085815260208120601f198616915b8281101561167157888601518255948401946001909101908401611652565b508582101561168f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061119a60208301846111de565b6000602082840312156116c457600080fd5b815161119a81611168565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dee57610dee6116cf565b80820180821115610dee57610dee6116cf565b60006020828403121561171d57600080fd5b8151801515811461119a57600080fd5b6000825161173f8184602087016111ba565b919091019291505056fea2646970667358221220a651942342b498ac562cd9582ae4b6fabcf63abeee7de51030619739298cf7c364736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ReceiveMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"SendMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getCurrentMessage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b506040516200199138038062001991833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b60805161177f620002126000396000818160b30152818161043b0152818161081d0152610b7b015261177f6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397314297116100715780639731429714610133578063b33fead41461016f578063c868efaa14610190578063d2cc7a70146101a3578063f2fde38b146101b5578063f63d09d7146101c857600080fd5b80631a7f5bec146100ae5780632b0d8f18146100f25780635eb9951414610107578063715018a61461011a5780638da5cb5b14610122575b600080fd5b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61010561010036600461117d565b6101db565b005b6101056101153660046111a1565b610323565b610105610337565b6003546001600160a01b03166100d5565b61015f61014136600461117d565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016100e9565b61018261017d3660046111a1565b61034b565b6040516100e992919061120a565b61010561019e366004611277565b610423565b6002545b6040519081526020016100e9565b6101056101c336600461117d565b6105d5565b6101a76101d63660046112d3565b61064b565b6101e3610811565b6001600160a01b0381166102555760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156102d45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161024c565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61032b610811565b61033481610819565b50565b61033f6109b9565b6103496000610a13565b565b6000818152600460209081526040808320815180830190925280546001600160a01b03168252600181018054606094869493929084019161038b90611359565b80601f01602080910402602001604051908101604052809291908181526020018280546103b790611359565b80156104045780601f106103d957610100808354040283529160200191610404565b820191906000526020600020905b8154815290600101906020018083116103e757829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae9190611393565b10156105155760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161024c565b3360009081526001602052604090205460ff161561058e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161024c565b6105cf848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6592505050565b50505050565b6105dd6109b9565b6001600160a01b0381166106425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161024c565b61033481610a13565b6000610655610b1d565b600061065f610b76565b905060008615610689576106738888610c8a565b90506106896001600160a01b0389168383610df4565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516106cb9594939291906113d5565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff81111561074557610745611403565b60405190808252806020026020018201604052801561076e578160200160208202803683370190505b5081526020018888604051602001610787929190611419565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016107b59190611471565b6020604051808303816000875af11580156107d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f89190611393565b925050506108066001600055565b979650505050505050565b6103496109b9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089d9190611393565b6002549091508183111561090d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161024c565b8083116109825760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161024c565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161024c565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610a7b91906114ef565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610ad190826115df565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610b0f919061169f565b60405180910390a350505050565b600260005403610b6f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161024c565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb91906116b2565b9050610c1f816001600160a01b031660009081526001602052604090205460ff1690565b15610c855760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161024c565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190611393565b9050610d0e6001600160a01b038516333086610ed9565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190611393565b9050818111610ddf5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161024c565b610de982826116e5565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e699190611393565b610e7391906116f8565b6040516001600160a01b0385166024820152604481018290529091506105cf90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f11565b6040516001600160a01b03808516602483015283166044820152606481018290526105cf9085906323b872dd60e01b90608401610ea2565b6000610f66826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610fe89092919063ffffffff16565b805190915015610fe35780806020019051810190610f84919061170b565b610fe35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161024c565b505050565b6060610ff78484600085610fff565b949350505050565b6060824710156110605760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161024c565b600080866001600160a01b0316858760405161107c919061172d565b60006040518083038185875af1925050503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506108068783838760608315611139578251600003611132576001600160a01b0385163b6111325760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161024c565b5081610ff7565b610ff7838381511561114e5781518083602001fd5b8060405162461bcd60e51b815260040161024c919061169f565b6001600160a01b038116811461033457600080fd5b60006020828403121561118f57600080fd5b813561119a81611168565b9392505050565b6000602082840312156111b357600080fd5b5035919050565b60005b838110156111d55781810151838201526020016111bd565b50506000910152565b600081518084526111f68160208601602086016111ba565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090610ff7908301846111de565b60008083601f84011261124057600080fd5b50813567ffffffffffffffff81111561125857600080fd5b60208301915083602082850101111561127057600080fd5b9250929050565b6000806000806060858703121561128d57600080fd5b84359350602085013561129f81611168565b9250604085013567ffffffffffffffff8111156112bb57600080fd5b6112c78782880161122e565b95989497509550505050565b600080600080600080600060c0888a0312156112ee57600080fd5b87359650602088013561130081611168565b9550604088013561131081611168565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561133a57600080fd5b6113468a828b0161122e565b989b979a50959850939692959293505050565b600181811c9082168061136d57607f821691505b60208210810361138d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156113a557600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108066080830184866113ac565b634e487b7160e01b600052604160045260246000fd5b602081526000610ff76020830184866113ac565b600081518084526020808501945080840160005b838110156114665781516001600160a01b031687529582019590820190600101611441565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526114d261010084018261142d565b905060a0840151601f198483030160e0850152610de982826111de565b60006020828403121561150157600080fd5b815167ffffffffffffffff8082111561151957600080fd5b818401915084601f83011261152d57600080fd5b81518181111561153f5761153f611403565b604051601f8201601f19908116603f0116810190838211818310171561156757611567611403565b8160405282815287602084870101111561158057600080fd5b6108068360208301602088016111ba565b601f821115610fe357600081815260208120601f850160051c810160208610156115b85750805b601f850160051c820191505b818110156115d7578281556001016115c4565b505050505050565b815167ffffffffffffffff8111156115f9576115f9611403565b61160d816116078454611359565b84611591565b602080601f831160018114611642576000841561162a5750858301515b600019600386901b1c1916600185901b1785556115d7565b600085815260208120601f198616915b8281101561167157888601518255948401946001909101908401611652565b508582101561168f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061119a60208301846111de565b6000602082840312156116c457600080fd5b815161119a81611168565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dee57610dee6116cf565b80820180821115610dee57610dee6116cf565b60006020828403121561171d57600080fd5b8151801515811461119a57600080fd5b6000825161173f8184602087016111ba565b919091019291505056fea2646970667358221220566bee472168b81ca4cc1c20beb5f72dfa1b1d6e86665a396fc9b880e763aa2d64736f6c63430008120033", } // ExampleCrossChainMessengerABI is the input ABI used to generate the binding from. @@ -423,21 +423,21 @@ func (_ExampleCrossChainMessenger *ExampleCrossChainMessengerTransactorSession) // SendMessage is a paid mutator transaction binding the contract method 0xf63d09d7. // -// Solidity: function sendMessage(bytes32 destinationBlockchainID, address destinationAddress, address feeTokenAddress, uint256 feeAmount, uint256 requiredGasLimit, string message) returns(uint256) +// Solidity: function sendMessage(bytes32 destinationBlockchainID, address destinationAddress, address feeTokenAddress, uint256 feeAmount, uint256 requiredGasLimit, string message) returns(bytes32) func (_ExampleCrossChainMessenger *ExampleCrossChainMessengerTransactor) SendMessage(opts *bind.TransactOpts, destinationBlockchainID [32]byte, destinationAddress common.Address, feeTokenAddress common.Address, feeAmount *big.Int, requiredGasLimit *big.Int, message string) (*types.Transaction, error) { return _ExampleCrossChainMessenger.contract.Transact(opts, "sendMessage", destinationBlockchainID, destinationAddress, feeTokenAddress, feeAmount, requiredGasLimit, message) } // SendMessage is a paid mutator transaction binding the contract method 0xf63d09d7. // -// Solidity: function sendMessage(bytes32 destinationBlockchainID, address destinationAddress, address feeTokenAddress, uint256 feeAmount, uint256 requiredGasLimit, string message) returns(uint256) +// Solidity: function sendMessage(bytes32 destinationBlockchainID, address destinationAddress, address feeTokenAddress, uint256 feeAmount, uint256 requiredGasLimit, string message) returns(bytes32) func (_ExampleCrossChainMessenger *ExampleCrossChainMessengerSession) SendMessage(destinationBlockchainID [32]byte, destinationAddress common.Address, feeTokenAddress common.Address, feeAmount *big.Int, requiredGasLimit *big.Int, message string) (*types.Transaction, error) { return _ExampleCrossChainMessenger.Contract.SendMessage(&_ExampleCrossChainMessenger.TransactOpts, destinationBlockchainID, destinationAddress, feeTokenAddress, feeAmount, requiredGasLimit, message) } // SendMessage is a paid mutator transaction binding the contract method 0xf63d09d7. // -// Solidity: function sendMessage(bytes32 destinationBlockchainID, address destinationAddress, address feeTokenAddress, uint256 feeAmount, uint256 requiredGasLimit, string message) returns(uint256) +// Solidity: function sendMessage(bytes32 destinationBlockchainID, address destinationAddress, address feeTokenAddress, uint256 feeAmount, uint256 requiredGasLimit, string message) returns(bytes32) func (_ExampleCrossChainMessenger *ExampleCrossChainMessengerTransactorSession) SendMessage(destinationBlockchainID [32]byte, destinationAddress common.Address, feeTokenAddress common.Address, feeAmount *big.Int, requiredGasLimit *big.Int, message string) (*types.Transaction, error) { return _ExampleCrossChainMessenger.Contract.SendMessage(&_ExampleCrossChainMessenger.TransactOpts, destinationBlockchainID, destinationAddress, feeTokenAddress, feeAmount, requiredGasLimit, message) } diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go index bc06d7c95..abd084389 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go @@ -31,8 +31,8 @@ var ( // ERC20TokenSourceMetaData contains all meta data concerning the ERC20TokenSource contract. var ERC20TokenSourceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20ContractAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"teleporterMessageID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20ContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea2646970667358221220ea4f7fe2fb79a487153a86e34946c46d0dc03e1eb717523b03577a4cf4212c9a64736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20ContractAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20ContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea264697066735822122063d226d228373acfe663868058b31e5f8685dcb5fb4b06e08eeb977009aa5b3264736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", } // ERC20TokenSourceABI is the input ABI used to generate the binding from. @@ -666,15 +666,15 @@ func (it *ERC20TokenSourceTransferToDestinationIterator) Close() error { type ERC20TokenSourceTransferToDestination struct { Sender common.Address Recipient common.Address - TeleporterMessageID *big.Int + TeleporterMessageID [32]byte Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterTransferToDestination is a free log retrieval operation binding the contract event 0x2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a. +// FilterTransferToDestination is a free log retrieval operation binding the contract event 0x6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99. // -// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) -func (_ERC20TokenSource *ERC20TokenSourceFilterer) FilterTransferToDestination(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address, teleporterMessageID []*big.Int) (*ERC20TokenSourceTransferToDestinationIterator, error) { +// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) +func (_ERC20TokenSource *ERC20TokenSourceFilterer) FilterTransferToDestination(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address, teleporterMessageID [][32]byte) (*ERC20TokenSourceTransferToDestinationIterator, error) { var senderRule []interface{} for _, senderItem := range sender { @@ -696,10 +696,10 @@ func (_ERC20TokenSource *ERC20TokenSourceFilterer) FilterTransferToDestination(o return &ERC20TokenSourceTransferToDestinationIterator{contract: _ERC20TokenSource.contract, event: "TransferToDestination", logs: logs, sub: sub}, nil } -// WatchTransferToDestination is a free log subscription operation binding the contract event 0x2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a. +// WatchTransferToDestination is a free log subscription operation binding the contract event 0x6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99. // -// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) -func (_ERC20TokenSource *ERC20TokenSourceFilterer) WatchTransferToDestination(opts *bind.WatchOpts, sink chan<- *ERC20TokenSourceTransferToDestination, sender []common.Address, recipient []common.Address, teleporterMessageID []*big.Int) (event.Subscription, error) { +// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) +func (_ERC20TokenSource *ERC20TokenSourceFilterer) WatchTransferToDestination(opts *bind.WatchOpts, sink chan<- *ERC20TokenSourceTransferToDestination, sender []common.Address, recipient []common.Address, teleporterMessageID [][32]byte) (event.Subscription, error) { var senderRule []interface{} for _, senderItem := range sender { @@ -746,9 +746,9 @@ func (_ERC20TokenSource *ERC20TokenSourceFilterer) WatchTransferToDestination(op }), nil } -// ParseTransferToDestination is a log parse operation binding the contract event 0x2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a. +// ParseTransferToDestination is a log parse operation binding the contract event 0x6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99. // -// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) +// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) func (_ERC20TokenSource *ERC20TokenSourceFilterer) ParseTransferToDestination(log types.Log) (*ERC20TokenSourceTransferToDestination, error) { event := new(ERC20TokenSourceTransferToDestination) if err := _ERC20TokenSource.contract.UnpackLog(event, "TransferToDestination", log); err != nil { diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go index 3ac3a2f87..e58cfee58 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go @@ -37,8 +37,8 @@ type TeleporterFeeInfo struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"teleporterMessageID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnAddressBalance\",\"type\":\"uint256\"}],\"name\":\"ReportTotalBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"teleporterMessageID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToSource\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_FOR_TRANSFER_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_BURNED_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"reportTotalBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToSource\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f2550fa6041684d40e635e29e93dde9017d70c25b46aa88393317b5182ed6ae7c8360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f0322cbb1d3c23f6dbf1deddb3b4ef3ce0f93ae6eec7b44e4f395804104466d143460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea26469706673582212205d326fcb3551f8c55e1f7f5b63b34a003743c912c76760197098dab12cb9165764736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnAddressBalance\",\"type\":\"uint256\"}],\"name\":\"ReportTotalBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToSource\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_FOR_TRANSFER_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_BURNED_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"reportTotalBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToSource\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220edf7cc9354273fea9d880bee82f0bf1a621729ee9e25ac18371409fc4237d8a164736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. @@ -992,15 +992,15 @@ func (it *NativeTokenDestinationReportTotalBurnedTxFeesIterator) Close() error { // NativeTokenDestinationReportTotalBurnedTxFees represents a ReportTotalBurnedTxFees event raised by the NativeTokenDestination contract. type NativeTokenDestinationReportTotalBurnedTxFees struct { - TeleporterMessageID *big.Int + TeleporterMessageID [32]byte BurnAddressBalance *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterReportTotalBurnedTxFees is a free log retrieval operation binding the contract event 0x2550fa6041684d40e635e29e93dde9017d70c25b46aa88393317b5182ed6ae7c. +// FilterReportTotalBurnedTxFees is a free log retrieval operation binding the contract event 0x4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f106191509. // -// Solidity: event ReportTotalBurnedTxFees(uint256 indexed teleporterMessageID, uint256 burnAddressBalance) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterReportTotalBurnedTxFees(opts *bind.FilterOpts, teleporterMessageID []*big.Int) (*NativeTokenDestinationReportTotalBurnedTxFeesIterator, error) { +// Solidity: event ReportTotalBurnedTxFees(bytes32 indexed teleporterMessageID, uint256 burnAddressBalance) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterReportTotalBurnedTxFees(opts *bind.FilterOpts, teleporterMessageID [][32]byte) (*NativeTokenDestinationReportTotalBurnedTxFeesIterator, error) { var teleporterMessageIDRule []interface{} for _, teleporterMessageIDItem := range teleporterMessageID { @@ -1014,10 +1014,10 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterReportTotal return &NativeTokenDestinationReportTotalBurnedTxFeesIterator{contract: _NativeTokenDestination.contract, event: "ReportTotalBurnedTxFees", logs: logs, sub: sub}, nil } -// WatchReportTotalBurnedTxFees is a free log subscription operation binding the contract event 0x2550fa6041684d40e635e29e93dde9017d70c25b46aa88393317b5182ed6ae7c. +// WatchReportTotalBurnedTxFees is a free log subscription operation binding the contract event 0x4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f106191509. // -// Solidity: event ReportTotalBurnedTxFees(uint256 indexed teleporterMessageID, uint256 burnAddressBalance) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchReportTotalBurnedTxFees(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationReportTotalBurnedTxFees, teleporterMessageID []*big.Int) (event.Subscription, error) { +// Solidity: event ReportTotalBurnedTxFees(bytes32 indexed teleporterMessageID, uint256 burnAddressBalance) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchReportTotalBurnedTxFees(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationReportTotalBurnedTxFees, teleporterMessageID [][32]byte) (event.Subscription, error) { var teleporterMessageIDRule []interface{} for _, teleporterMessageIDItem := range teleporterMessageID { @@ -1056,9 +1056,9 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchReportTotalB }), nil } -// ParseReportTotalBurnedTxFees is a log parse operation binding the contract event 0x2550fa6041684d40e635e29e93dde9017d70c25b46aa88393317b5182ed6ae7c. +// ParseReportTotalBurnedTxFees is a log parse operation binding the contract event 0x4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f106191509. // -// Solidity: event ReportTotalBurnedTxFees(uint256 indexed teleporterMessageID, uint256 burnAddressBalance) +// Solidity: event ReportTotalBurnedTxFees(bytes32 indexed teleporterMessageID, uint256 burnAddressBalance) func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseReportTotalBurnedTxFees(log types.Log) (*NativeTokenDestinationReportTotalBurnedTxFees, error) { event := new(NativeTokenDestinationReportTotalBurnedTxFees) if err := _NativeTokenDestination.contract.UnpackLog(event, "ReportTotalBurnedTxFees", log); err != nil { @@ -1139,15 +1139,15 @@ func (it *NativeTokenDestinationTransferToSourceIterator) Close() error { type NativeTokenDestinationTransferToSource struct { Sender common.Address Recipient common.Address - TeleporterMessageID *big.Int + TeleporterMessageID [32]byte Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterTransferToSource is a free log retrieval operation binding the contract event 0x0322cbb1d3c23f6dbf1deddb3b4ef3ce0f93ae6eec7b44e4f395804104466d14. +// FilterTransferToSource is a free log retrieval operation binding the contract event 0x8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c0. // -// Solidity: event TransferToSource(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterTransferToSource(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address, teleporterMessageID []*big.Int) (*NativeTokenDestinationTransferToSourceIterator, error) { +// Solidity: event TransferToSource(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterTransferToSource(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address, teleporterMessageID [][32]byte) (*NativeTokenDestinationTransferToSourceIterator, error) { var senderRule []interface{} for _, senderItem := range sender { @@ -1169,10 +1169,10 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterTransferToS return &NativeTokenDestinationTransferToSourceIterator{contract: _NativeTokenDestination.contract, event: "TransferToSource", logs: logs, sub: sub}, nil } -// WatchTransferToSource is a free log subscription operation binding the contract event 0x0322cbb1d3c23f6dbf1deddb3b4ef3ce0f93ae6eec7b44e4f395804104466d14. +// WatchTransferToSource is a free log subscription operation binding the contract event 0x8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c0. // -// Solidity: event TransferToSource(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchTransferToSource(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationTransferToSource, sender []common.Address, recipient []common.Address, teleporterMessageID []*big.Int) (event.Subscription, error) { +// Solidity: event TransferToSource(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchTransferToSource(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationTransferToSource, sender []common.Address, recipient []common.Address, teleporterMessageID [][32]byte) (event.Subscription, error) { var senderRule []interface{} for _, senderItem := range sender { @@ -1219,9 +1219,9 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchTransferToSo }), nil } -// ParseTransferToSource is a log parse operation binding the contract event 0x0322cbb1d3c23f6dbf1deddb3b4ef3ce0f93ae6eec7b44e4f395804104466d14. +// ParseTransferToSource is a log parse operation binding the contract event 0x8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c0. // -// Solidity: event TransferToSource(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) +// Solidity: event TransferToSource(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseTransferToSource(log types.Log) (*NativeTokenDestinationTransferToSource, error) { event := new(NativeTokenDestinationTransferToSource) if err := _NativeTokenDestination.contract.UnpackLog(event, "TransferToSource", log); err != nil { diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go index 6a481c666..5a1a2b0c9 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go @@ -37,8 +37,8 @@ type TeleporterFeeInfo struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"teleporterMessageID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a3460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220f70e4662c2679fb4a73f670c09d6430821f46cf73e7d1213af9e4e3ec525091f64736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220c36600d1dd6cfdb6207fa4239b1f4c29e670aa39126067bc61ed990e59ea912464736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", } // NativeTokenSourceABI is the input ABI used to generate the binding from. @@ -641,15 +641,15 @@ func (it *NativeTokenSourceTransferToDestinationIterator) Close() error { type NativeTokenSourceTransferToDestination struct { Sender common.Address Recipient common.Address - TeleporterMessageID *big.Int + TeleporterMessageID [32]byte Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterTransferToDestination is a free log retrieval operation binding the contract event 0x2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a. +// FilterTransferToDestination is a free log retrieval operation binding the contract event 0x6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99. // -// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) -func (_NativeTokenSource *NativeTokenSourceFilterer) FilterTransferToDestination(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address, teleporterMessageID []*big.Int) (*NativeTokenSourceTransferToDestinationIterator, error) { +// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) +func (_NativeTokenSource *NativeTokenSourceFilterer) FilterTransferToDestination(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address, teleporterMessageID [][32]byte) (*NativeTokenSourceTransferToDestinationIterator, error) { var senderRule []interface{} for _, senderItem := range sender { @@ -671,10 +671,10 @@ func (_NativeTokenSource *NativeTokenSourceFilterer) FilterTransferToDestination return &NativeTokenSourceTransferToDestinationIterator{contract: _NativeTokenSource.contract, event: "TransferToDestination", logs: logs, sub: sub}, nil } -// WatchTransferToDestination is a free log subscription operation binding the contract event 0x2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a. +// WatchTransferToDestination is a free log subscription operation binding the contract event 0x6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99. // -// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) -func (_NativeTokenSource *NativeTokenSourceFilterer) WatchTransferToDestination(opts *bind.WatchOpts, sink chan<- *NativeTokenSourceTransferToDestination, sender []common.Address, recipient []common.Address, teleporterMessageID []*big.Int) (event.Subscription, error) { +// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) +func (_NativeTokenSource *NativeTokenSourceFilterer) WatchTransferToDestination(opts *bind.WatchOpts, sink chan<- *NativeTokenSourceTransferToDestination, sender []common.Address, recipient []common.Address, teleporterMessageID [][32]byte) (event.Subscription, error) { var senderRule []interface{} for _, senderItem := range sender { @@ -721,9 +721,9 @@ func (_NativeTokenSource *NativeTokenSourceFilterer) WatchTransferToDestination( }), nil } -// ParseTransferToDestination is a log parse operation binding the contract event 0x2b4e8f08417773e367064a6aea9ca2df303a60876676f70b6c3c5e66b314ca5a. +// ParseTransferToDestination is a log parse operation binding the contract event 0x6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99. // -// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, uint256 indexed teleporterMessageID, uint256 amount) +// Solidity: event TransferToDestination(address indexed sender, address indexed recipient, bytes32 indexed teleporterMessageID, uint256 amount) func (_NativeTokenSource *NativeTokenSourceFilterer) ParseTransferToDestination(log types.Log) (*NativeTokenSourceTransferToDestination, error) { event := new(NativeTokenSourceTransferToDestination) if err := _NativeTokenSource.contract.UnpackLog(event, "TransferToDestination", log); err != nil { diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go index eebf52e96..e23ebbffc 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go @@ -31,8 +31,8 @@ var ( // BlockHashPublisherMetaData contains all meta data concerning the BlockHashPublisher contract. var BlockHashPublisherMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"PublishBlockHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"RECEIVE_BLOCK_HASH_REQUIRED_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"publishLatestBlockHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea264697066735822122010b6af01ae9ccbbddca81b7ca0f9cac050ec865e18949c11b4cd61d7283dee0064736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"PublishBlockHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"RECEIVE_BLOCK_HASH_REQUIRED_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"publishLatestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea26469706673582212209a42cc7c63553de0465c2eb589f8fe8977a4498ae0ec7f6a3edfb4fab216675764736f6c63430008120033", } // BlockHashPublisherABI is the input ABI used to generate the binding from. @@ -266,21 +266,21 @@ func (_BlockHashPublisher *BlockHashPublisherCallerSession) TeleporterRegistry() // PublishLatestBlockHash is a paid mutator transaction binding the contract method 0x82ab2b86. // -// Solidity: function publishLatestBlockHash(bytes32 destinationBlockchainID, address destinationAddress) returns(uint256) +// Solidity: function publishLatestBlockHash(bytes32 destinationBlockchainID, address destinationAddress) returns(bytes32) func (_BlockHashPublisher *BlockHashPublisherTransactor) PublishLatestBlockHash(opts *bind.TransactOpts, destinationBlockchainID [32]byte, destinationAddress common.Address) (*types.Transaction, error) { return _BlockHashPublisher.contract.Transact(opts, "publishLatestBlockHash", destinationBlockchainID, destinationAddress) } // PublishLatestBlockHash is a paid mutator transaction binding the contract method 0x82ab2b86. // -// Solidity: function publishLatestBlockHash(bytes32 destinationBlockchainID, address destinationAddress) returns(uint256) +// Solidity: function publishLatestBlockHash(bytes32 destinationBlockchainID, address destinationAddress) returns(bytes32) func (_BlockHashPublisher *BlockHashPublisherSession) PublishLatestBlockHash(destinationBlockchainID [32]byte, destinationAddress common.Address) (*types.Transaction, error) { return _BlockHashPublisher.Contract.PublishLatestBlockHash(&_BlockHashPublisher.TransactOpts, destinationBlockchainID, destinationAddress) } // PublishLatestBlockHash is a paid mutator transaction binding the contract method 0x82ab2b86. // -// Solidity: function publishLatestBlockHash(bytes32 destinationBlockchainID, address destinationAddress) returns(uint256) +// Solidity: function publishLatestBlockHash(bytes32 destinationBlockchainID, address destinationAddress) returns(bytes32) func (_BlockHashPublisher *BlockHashPublisherTransactorSession) PublishLatestBlockHash(destinationBlockchainID [32]byte, destinationAddress common.Address) (*types.Transaction, error) { return _BlockHashPublisher.Contract.PublishLatestBlockHash(&_BlockHashPublisher.TransactOpts, destinationBlockchainID, destinationAddress) } diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go index 64fb14d3a..4fd15fac1 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go @@ -32,7 +32,7 @@ var ( // BlockHashReceiverMetaData contains all meta data concerning the BlockHashReceiver contract. var BlockHashReceiverMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"publisherBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"publisherContractAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"ReceiveBlockHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getLatestBlockInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourcePublisherContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e060405234801561001057600080fd5b50604051610d89380380610d8983398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610b37610252600039600081816101a601526108d4015260008181610138015261085201526000818160f4015281816103ec01526106080152610b376000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063c868efaa11610066578063c868efaa14610230578063d2cc7a7014610243578063f2fde38b1461024b578063f3f39ee51461025e57600080fd5b80638da5cb5b146101c857806397314297146101d9578063b17810be1461021557600080fd5b80635eb99514116100c85780635eb995141461017d5780636c4f6ba914610190578063715018a61461019957806379a0710c146101a157600080fd5b80631a7f5bec146100ef57806329b7b3fd146101335780632b0d8f1814610168575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161012a565b61017b610176366004610a02565b610267565b005b61017b61018b366004610a24565b6103ac565b61015a60045481565b61017b6103c0565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610116565b6102056101e7366004610a02565b6001600160a01b031660009081526020819052604090205460ff1690565b604051901515815260200161012a565b6003546004546040805192835260208301919091520161012a565b61017b61023e366004610a3d565b6103d4565b60015461015a565b61017b610259366004610a02565b610586565b61015a60035481565b61026f6105fc565b6001600160a01b0381166102e15760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff16156103605760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102d8565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103b46105fc565b6103bd81610604565b50565b6103c86107a4565b6103d260006107fe565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801561043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045f9190610ac4565b10156104c65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102d8565b3360009081526020819052604090205460ff161561053f5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102d8565b610580848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061085092505050565b50505050565b61058e6107a4565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d8565b6103bd816107fe565b6103d26107a4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190610ac4565b600154909150818311156106f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102d8565b80831161076d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102d8565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146103d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d8565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146108d25760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461096d5760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102d8565b600080828060200190518101906109849190610add565b915091506003548211156109df576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b03811681146109fd57600080fd5b919050565b600060208284031215610a1457600080fd5b610a1d826109e6565b9392505050565b600060208284031215610a3657600080fd5b5035919050565b60008060008060608587031215610a5357600080fd5b84359350610a63602086016109e6565b9250604085013567ffffffffffffffff80821115610a8057600080fd5b818701915087601f830112610a9457600080fd5b813581811115610aa357600080fd5b886020828501011115610ab557600080fd5b95989497505060200194505050565b600060208284031215610ad657600080fd5b5051919050565b60008060408385031215610af057600080fd5b50508051602090910151909290915056fea26469706673582212205d91745c6c52609e41b12179833976949734d7ab772cc8c8a420bba4dd88ac5864736f6c63430008120033", + Bin: "0x60e060405234801561001057600080fd5b50604051610d89380380610d8983398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610b37610252600039600081816101a601526108d4015260008181610138015261085201526000818160f4015281816103ec01526106080152610b376000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063c868efaa11610066578063c868efaa14610230578063d2cc7a7014610243578063f2fde38b1461024b578063f3f39ee51461025e57600080fd5b80638da5cb5b146101c857806397314297146101d9578063b17810be1461021557600080fd5b80635eb99514116100c85780635eb995141461017d5780636c4f6ba914610190578063715018a61461019957806379a0710c146101a157600080fd5b80631a7f5bec146100ef57806329b7b3fd146101335780632b0d8f1814610168575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161012a565b61017b610176366004610a02565b610267565b005b61017b61018b366004610a24565b6103ac565b61015a60045481565b61017b6103c0565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610116565b6102056101e7366004610a02565b6001600160a01b031660009081526020819052604090205460ff1690565b604051901515815260200161012a565b6003546004546040805192835260208301919091520161012a565b61017b61023e366004610a3d565b6103d4565b60015461015a565b61017b610259366004610a02565b610586565b61015a60035481565b61026f6105fc565b6001600160a01b0381166102e15760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff16156103605760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102d8565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103b46105fc565b6103bd81610604565b50565b6103c86107a4565b6103d260006107fe565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801561043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045f9190610ac4565b10156104c65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102d8565b3360009081526020819052604090205460ff161561053f5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102d8565b610580848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061085092505050565b50505050565b61058e6107a4565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d8565b6103bd816107fe565b6103d26107a4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190610ac4565b600154909150818311156106f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102d8565b80831161076d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102d8565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146103d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d8565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146108d25760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461096d5760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102d8565b600080828060200190518101906109849190610add565b915091506003548211156109df576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b03811681146109fd57600080fd5b919050565b600060208284031215610a1457600080fd5b610a1d826109e6565b9392505050565b600060208284031215610a3657600080fd5b5035919050565b60008060008060608587031215610a5357600080fd5b84359350610a63602086016109e6565b9250604085013567ffffffffffffffff80821115610a8057600080fd5b818701915087601f830112610a9457600080fd5b813581811115610aa357600080fd5b886020828501011115610ab557600080fd5b95989497505060200194505050565b600060208284031215610ad657600080fd5b5051919050565b60008060408385031215610af057600080fd5b50508051602090910151909290915056fea26469706673582212204e2f6760f78a8de721d6d6c203d851a39e98655842cb5546632438a07861c08464736f6c63430008120033", } // BlockHashReceiverABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go index d9475854a..0371128fc 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go @@ -37,7 +37,7 @@ type TeleporterFeeInfo struct { // TeleporterMessage is an auto generated low-level Go binding around an user-defined struct. type TeleporterMessage struct { - MessageID *big.Int + MessageID [32]byte SenderAddress common.Address DestinationBlockchainID [32]byte DestinationAddress common.Address @@ -59,14 +59,14 @@ type TeleporterMessageInput struct { // TeleporterMessageReceipt is an auto generated low-level Go binding around an user-defined struct. type TeleporterMessageReceipt struct { - ReceivedMessageID *big.Int + ReceivedMessageID [32]byte RelayerRewardAddress common.Address } // TeleporterMessengerMetaData contains all meta data concerning the TeleporterMessenger contract. var TeleporterMessengerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"latestMessageIDs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"messageIDs\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"messageID\",\"type\":\"uint256\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600160008190558055613051806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063892bf412116100b8578063ccb5f8091161007c578063ccb5f80914610366578063d127dc9b14610379578063df20e8bc14610382578063e03555df14610395578063e6e67bd5146103b8578063fc2d6197146103f457600080fd5b8063892bf412146102c1578063af402850146102e1578063b771b3bc146102f4578063c473eef814610302578063c9bb11431461033b57600080fd5b80632bc8b0bf116100ff5780632bc8b0bf146101bd57806333e890fe146101d0578063624488501461021c57806366533d121461022f57806382f2c43a1461028f57600080fd5b8063191eb6981461013c57806319570c7414610162578063220c95681461017757806322296c3a1461018a57806329ec9beb1461019d575b600080fd5b61014f61014a3660046120cc565b610407565b6040519081526020015b60405180910390f35b61017561017036600461218c565b61062a565b005b61014f6101853660046121cb565b610865565b6101756101983660046121ed565b610886565b61014f6101ab36600461220a565b60036020526000908152604090205481565b61014f6101cb36600461220a565b61097b565b6102046101de3660046121cb565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b039091168152602001610159565b61014f61022a366004612223565b610992565b61028161023d3660046121cb565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015992919061225d565b6102a261029d3660046121cb565b6109f0565b604080516001600160a01b039093168352602083019190915201610159565b6102d46102cf3660046121cb565b610a39565b6040516101599190612284565b6101756102ef3660046122a4565b610a6c565b6102046005600160991b0181565b61014f6103103660046122f2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61014f6103493660046121cb565b600660209081526000928352604080842090915290825290205481565b610175610374366004612320565b610c01565b61014f60025481565b61014f61039036600461220a565b611113565b6103a86103a33660046121cb565b61111e565b6040519015158152602001610159565b6103df6103c636600461220a565b6004602052600090815260409020805460019091015482565b60408051928352602083019190915201610159565b6101756104023660046122a4565b611148565b60006001600054146104345760405162461bcd60e51b815260040161042b90612347565b60405180910390fd5b60026000908155856001600160401b038111156104535761045361238a565b60405190808252806020026020018201604052801561049857816020015b60408051808201909152600080825260208201528152602001906001900390816104715790505b50905060005b868110156105955760008888838181106104ba576104ba6123a0565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b0316806105475760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161042b565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610577576105776123a0565b602002602001018190525050508061058e906123cc565b905061049e565b506040805160c081018252898152600060208201526106199181016105bf368990038901896124bd565b815260200160008152602001868680806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093855250506040805192835260208084019091529092015250826113a2565b600160005598975050505050505050565b60016000541461064c5760405162461bcd60e51b815260040161042b90612347565b6002600055806106b65760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161042b565b6001600160a01b0382166106dc5760405162461bcd60e51b815260040161042b906124d9565b60008481526005602090815260408083208684529091529020546107125760405162461bcd60e51b815260040161042b9061252d565b60008481526005602090815260408083208684529091529020600101546001600160a01b038381169116146107af5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161042b565b60006107bb83836115d4565b60008681526005602090815260408083208884529091528120600201805492935083929091906107ec908490612573565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f28fe05eedf0479c9159e5b6dd2a28c93fa1a408eba22dc801fd9bc493a7fc0c2910160405180910390a350506001600055505050565b60008281526005602090815260408083208484529091529020545b92915050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806109085760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161042b565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109776001600160a01b038316338361173c565b5050565b6000818152600460205260408120610880906117a4565b60006001600054146109b65760405162461bcd60e51b815260040161042b90612347565b60026000556109e56109c783612695565b833560009081526004602052604090206109e0906117b7565b6113a2565b600160005592915050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b60408051808201909152600080825260208201526000838152600460205260409020610a6590836118c6565b9392505050565b600160005414610a8e5760405162461bcd60e51b815260040161042b90612347565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b03168452930154828201528201528051610af95760405162461bcd60e51b815260040161042b9061252d565b600082604051602001610b0c919061298d565b60408051601f1981840301815291905282518151602083012091925014610b455760405162461bcd60e51b815260040161042b906129a0565b8260000135847f0563d357b89128d5a0c37c9b06420836e35d193eaf17f7960fc88e47d1e02f57858560200151604051610b809291906129e9565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb90610bb2908490600401612a6e565b6020604051808303816000875af1158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf59190612a81565b50506001600055505050565b6001805414610c225760405162461bcd60e51b815260040161042b90612a9a565b60026001556001600160a01b038116610c965760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161042b565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ce3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d0b9190810190612b3f565b9150915080610d6e5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161042b565b60208201516001600160a01b03163014610de55760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161042b565b60025480610e5e576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612a81565b600281905590505b60008360400151806020019051810190610e789190612cdc565b905081816040015114610ee75760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161042b565b8351815160009182526007602090815260408084209284529190529020546001600160a01b031615610f725760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161042b565b610f80338260a0015161198b565b610fde5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161042b565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e0810151511561102a57835161102a9082611a00565b60c08101515160005b818110156110855760008360c001518281518110611053576110536123a0565b60200260200101519050611074876000015182600001518360200151611b2f565b5061107e816123cc565b9050611033565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b03891691830191909152906110c3908290611bff565b82518651604051339291907f6b013241f9192863bc66c1f1e9a01dc592c94592bfed5e1ed380808525679575906110fd908c908990612eec565b60405180910390a4505060018055505050505050565b600061088082611c5b565b60008281526007602090815260408083208484529091528120546001600160a01b03161515610a65565b60018054146111695760405162461bcd60e51b815260040161042b90612a9a565b6002600155600082815260066020908152604080832084358452909152902054806111a65760405162461bcd60e51b815260040161042b9061252d565b80826040516020016111b8919061298d565b60405160208183030381529060405280519060200120146111eb5760405162461bcd60e51b815260040161042b906129a0565b60006111fd60808401606085016121ed565b6001600160a01b03163b116112715760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161042b565b60405182359084907f5ad362d54cba0e49d358be9ce586a7136d10a2533579c4460b7e48ec273083ef90600090a3600083815260066020908152604080832085358452825280832083905585916112cc9186019086016121ed565b6112d960e0860186612f10565b6040516024016112ec9493929190612f56565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061133461132d60808601606087016121ed565b5a84611c75565b9050806113975760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161042b565b505060018055505050565b6000806113b28460000151611c5b565b90506000604051806101000160405280838152602001336001600160a01b031681526020018660000151815260200186602001516001600160a01b0316815260200186606001518152602001866080015181526020018581526020018660a00151815250905060008160405160200161142b9190612f81565b60408051601f198184030181529181528751600090815260036020908152828220879055918901519091015191925090156114a5576040870151516001600160a01b031661148b5760405162461bcd60e51b815260040161042b906124d9565b604087015180516020909101516114a291906115d4565b90505b60408051808201825288820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528c516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b031916919095161790935591015160029091015588519151909186917f0563d357b89128d5a0c37c9b06420836e35d193eaf17f7960fc88e47d1e02f57906115529088908690612f94565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb90611584908690600401612a6e565b6020604051808303816000875af11580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c79190612a81565b5093979650505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561161d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116419190612a81565b90506116586001600160a01b038516333086611c8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561169f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c39190612a81565b90508181116117295760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161042b565b6117338282612fa7565b95945050505050565b6040516001600160a01b03831660248201526044810182905261179f90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611cc7565b505050565b8054600182015460009161088091612fa7565b606060006117ce60056117c9856117a4565b611d99565b90508060000361181d576040805160008082526020820190925290611815565b60408051808201909152600080825260208201528152602001906001900390816117ee5790505b509392505050565b806001600160401b038111156118355761183561238a565b60405190808252806020026020018201604052801561187a57816020015b60408051808201909152600080825260208201528152602001906001900390816118535790505b50915060005b818110156118bf5761189184611daf565b8382815181106118a3576118a36123a0565b6020026020010181905250806118b8906123cc565b9050611880565b5050919050565b60408051808201909152600080825260208201526118e3836117a4565b821061193b5760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161042b565b8260020160008385600001546119519190612573565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b6000815160000361199e57506001610880565b60005b82518110156119f657836001600160a01b03168382815181106119c6576119c66123a0565b60200260200101516001600160a01b0316036119e6576001915050610880565b6119ef816123cc565b90506119a1565b5060009392505050565b80608001515a1015611a625760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161042b565b80606001516001600160a01b03163b600003611a82576109778282611e7a565b602081015160e0820151604051600092611aa0928692602401612fba565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611ae5919084611c75565b905080611afc57611af68484611e7a565b50505050565b825160405185907f5ad362d54cba0e49d358be9ce586a7136d10a2533579c4460b7e48ec273083ef90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611b895750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611bf4908490612573565b909155505050505050565b6001820180548291600285019160009182611c19836123cc565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b600081815260036020526040812054610880906001612573565b60008060008084516020860160008989f195945050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052611af69085906323b872dd60e01b90608401611768565b6000611d1c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ef89092919063ffffffff16565b80519091501561179f5780806020019051810190611d3a9190612fe4565b61179f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161042b565b6000818310611da85781610a65565b5090919050565b604080518082019091526000808252602082015281546001830154819003611e195760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161042b565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611e72908290612573565b909255919050565b80604051602001611e8b9190612f81565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907fbedbbe6103cef0a6c9ecbf6aa23da414542c42d7918bea18aab8b601b2c3a44990611eec908590612f81565b60405180910390a35050565b6060611f078484600085611f0f565b949350505050565b606082471015611f705760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161042b565b600080866001600160a01b03168587604051611f8c9190612fff565b60006040518083038185875af1925050503d8060008114611fc9576040519150601f19603f3d011682016040523d82523d6000602084013e611fce565b606091505b5091509150611fdf87838387611fea565b979650505050505050565b60608315612059578251600003612052576001600160a01b0385163b6120525760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161042b565b5081611f07565b611f07838381511561206e5781518083602001fd5b8060405162461bcd60e51b815260040161042b9190612a6e565b60008083601f84011261209a57600080fd5b5081356001600160401b038111156120b157600080fd5b6020830191508360208260051b8501011115610a3257600080fd5b60008060008060008086880360a08112156120e657600080fd5b8735965060208801356001600160401b038082111561210457600080fd5b6121108b838c01612088565b90985096508691506040603f198401121561212a57600080fd5b60408a01955060808a013592508083111561214457600080fd5b505061215289828a01612088565b979a9699509497509295939492505050565b6001600160a01b038116811461217957600080fd5b50565b803561218781612164565b919050565b600080600080608085870312156121a257600080fd5b843593506020850135925060408501356121bb81612164565b9396929550929360600135925050565b600080604083850312156121de57600080fd5b50508035926020909101359150565b6000602082840312156121ff57600080fd5b8135610a6581612164565b60006020828403121561221c57600080fd5b5035919050565b60006020828403121561223557600080fd5b81356001600160401b0381111561224b57600080fd5b820160e08185031215610a6557600080fd5b82815260608101610a65602083018480516001600160a01b03168252602090810151910152565b815181526020808301516001600160a01b03169082015260408101610880565b600080604083850312156122b757600080fd5b8235915060208301356001600160401b038111156122d457600080fd5b830161010081860312156122e757600080fd5b809150509250929050565b6000806040838503121561230557600080fd5b823561231081612164565b915060208301356122e781612164565b6000806040838503121561233357600080fd5b823563ffffffff8116811461231057600080fd5b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016123de576123de6123b6565b5060010190565b604080519081016001600160401b03811182821017156124075761240761238a565b60405290565b60405160c081016001600160401b03811182821017156124075761240761238a565b60405161010081016001600160401b03811182821017156124075761240761238a565b604051601f8201601f191681016001600160401b038111828210171561247a5761247a61238a565b604052919050565b60006040828403121561249457600080fd5b61249c6123e5565b905081356124a981612164565b808252506020820135602082015292915050565b6000604082840312156124cf57600080fd5b610a658383612482565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b80820180821115610880576108806123b6565b60006001600160401b0382111561259f5761259f61238a565b5060051b60200190565b600082601f8301126125ba57600080fd5b813560206125cf6125ca83612586565b612452565b82815260059290921b840181019181810190868411156125ee57600080fd5b8286015b8481101561261257803561260581612164565b83529183019183016125f2565b509695505050505050565b60006001600160401b038211156126365761263661238a565b50601f01601f191660200190565b600082601f83011261265557600080fd5b81356126636125ca8261261d565b81815284602083860101111561267857600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156126a757600080fd5b6126af61240d565b823581526126bf6020840161217c565b60208201526126d13660408501612482565b60408201526080830135606082015260a08301356001600160401b03808211156126fa57600080fd5b612706368387016125a9565b608084015260c085013591508082111561271f57600080fd5b5061272c36828601612644565b60a08301525092915050565b6000808335601e1984360301811261274f57600080fd5b83016020810192503590506001600160401b0381111561276e57600080fd5b8060051b3603821315610a3257600080fd5b8183526000602080850194508260005b858110156127be5781356127a381612164565b6001600160a01b031687529582019590820190600101612790565b509495945050505050565b6000808335601e198436030181126127e057600080fd5b83016020810192503590506001600160401b038111156127ff57600080fd5b8060061b3603821315610a3257600080fd5b8183526000602080850194508260005b858110156127be57813587528282013561283a81612164565b6001600160a01b0316878401526040968701969190910190600101612821565b6000808335601e1984360301811261287157600080fd5b83016020810192503590506001600160401b0381111561289057600080fd5b803603821315610a3257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101008235845260208301356128df81612164565b6001600160a01b03166020850152604083810135908501526129036060840161217c565b6001600160a01b031660608501526080838101359085015261292860a0840184612738565b8260a087015261293b8387018284612780565b9250505061294c60c08401846127c9565b85830360c087015261295f838284612811565b9250505061297060e084018461285a565b85830360e087015261298383828461289f565b9695505050505050565b602081526000610a6560208301846128c8565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6060815260006129fc60608301856128c8565b9050610a65602083018480516001600160a01b03168252602090810151910152565b60005b83811015612a39578181015183820152602001612a21565b50506000910152565b60008151808452612a5a816020860160208601612a1e565b601f01601f19169290920160200192915050565b602081526000610a656020830184612a42565b600060208284031215612a9357600080fd5b5051919050565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b805161218781612164565b600082601f830112612afb57600080fd5b8151612b096125ca8261261d565b818152846020838601011115612b1e57600080fd5b611f07826020830160208701612a1e565b8051801515811461218757600080fd5b60008060408385031215612b5257600080fd5b82516001600160401b0380821115612b6957600080fd5b9084019060608287031215612b7d57600080fd5b604051606081018181108382111715612b9857612b9861238a565b604052825181526020830151612bad81612164565b6020820152604083015182811115612bc457600080fd5b612bd088828601612aea565b6040830152509350612be791505060208401612b2f565b90509250929050565b600082601f830112612c0157600080fd5b81516020612c116125ca83612586565b82815260059290921b84018101918181019086841115612c3057600080fd5b8286015b84811015612612578051612c4781612164565b8352918301918301612c34565b600082601f830112612c6557600080fd5b81516020612c756125ca83612586565b82815260069290921b84018101918181019086841115612c9457600080fd5b8286015b848110156126125760408189031215612cb15760008081fd5b612cb96123e5565b8151815284820151612cca81612164565b81860152835291830191604001612c98565b600060208284031215612cee57600080fd5b81516001600160401b0380821115612d0557600080fd5b908301906101008286031215612d1a57600080fd5b612d2261242f565b82518152612d3260208401612adf565b602082015260408301516040820152612d4d60608401612adf565b60608201526080830151608082015260a083015182811115612d6e57600080fd5b612d7a87828601612bf0565b60a08301525060c083015182811115612d9257600080fd5b612d9e87828601612c54565b60c08301525060e083015182811115612db657600080fd5b612dc287828601612aea565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156127be5781516001600160a01b031687529582019590820190600101612de5565b600081518084526020808501945080840160005b838110156127be57612e44878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612e1e565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612e9660608601826001600160a01b03169052565b506080830151608085015260a08301518160a0860152612eb882860182612dd1565b91505060c083015184820360c0860152612ed28282612e0a565b91505060e083015184820360e08601526117338282612a42565b6001600160a01b0383168152604060208201819052600090611f0790830184612e57565b6000808335601e19843603018112612f2757600080fd5b8301803591506001600160401b03821115612f4157600080fd5b602001915036819003821315610a3257600080fd5b8481526001600160a01b0384166020820152606060408201819052600090612983908301848661289f565b602081526000610a656020830184612e57565b6060815260006129fc6060830185612e57565b81810381811115610880576108806123b6565b8381526001600160a01b038316602082015260606040820181905260009061173390830184612a42565b600060208284031215612ff657600080fd5b610a6582612b2f565b60008251613011818460208701612a1e565b919091019291505056fea26469706673582212201fa2681487b0d4676eb1bb553bd783424dbc4d2ceba0093810855ffd717d12c664736f6c63430008120033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"latestRawMessageIDs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rawMessageID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50600160008190558055613190806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063980a2584116100b8578063ccb5f8091161007c578063ccb5f80914610322578063d127dc9b14610335578063d39b0c171461033e578063df20e8bc1461039e578063e6e67bd5146103b1578063e8105ebc146103ed57600080fd5b8063980a258414610251578063a9a856141461027c578063b120322a1461028f578063b771b3bc146102db578063c473eef8146102e957600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb5780635513f096146101fe578063624488501461021e578063892bf4121461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a36600461217e565b61041f565b60405190151581526020015b60405180910390f35b6101776101723660046121a0565b61044e565b005b6101776101873660046121a0565b6106b1565b61017761019a366004612216565b610846565b6101b26101ad366004612233565b61093b565b60405190815260200161015b565b6101b26101ce36600461217e565b600660209081526000928352604080842090915290825290205481565b6101776101f936600461224c565b610952565b6101b261020c366004612233565b60036020526000908152604090205481565b6101b261022c36600461228b565b610b8d565b61024461023f36600461217e565b610beb565b60405161015b91906122c5565b6101b261025f36600461217e565b600091825260056020908152604080842092845291905290205490565b6101b261028a366004612329565b610c17565b6102c361029d36600461217e565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102c36005600160991b0181565b6101b26102f73660046123c1565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101776103303660046123ef565b610e31565b6101b260025481565b61039061034c36600461217e565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b929190612416565b6101b26103ac366004612233565b611343565b6103d86103bf366004612233565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6104006103fb36600461217e565b611386565b604080516001600160a01b03909316835260208301919091520161015b565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104785760405162461bcd60e51b815260040161046f9061243d565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104b55760405162461bcd60e51b815260040161046f90612482565b80826040516020016104c7919061271d565b60405160208183030381529060405280519060200120146104fa5760405162461bcd60e51b815260040161046f90612730565b600061050c6080840160608501612216565b6001600160a01b03163b116105805760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161046f565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105db918601908601612216565b6105e860e0860186612779565b6040516024016105fb94939291906127bf565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061064361063c6080860160608701612216565b5a846113cf565b9050806106a65760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161046f565b505060018055505050565b6001600054146106d35760405162461bcd60e51b815260040161046f906127ea565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161073e5760405162461bcd60e51b815260040161046f90612482565b600082604051602001610751919061271d565b60408051601f198184030181529190528251815160208301209192501461078a5760405162461bcd60e51b815260040161046f90612730565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107c592919061282d565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107f79084906004016128b2565b6020604051808303816000875af1158015610816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083a91906128c5565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108c85760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161046f565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109376001600160a01b03831633836113eb565b5050565b600081815260046020526040812061044890611453565b6001600054146109745760405162461bcd60e51b815260040161046f906127ea565b6002600055806109de5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161046f565b6001600160a01b038216610a045760405162461bcd60e51b815260040161046f906128de565b6000848152600560209081526040808320868452909152902054610a3a5760405162461bcd60e51b815260040161046f90612482565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ad75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161046f565b6000610ae38383611466565b6000868152600560209081526040808320888452909152812060020180549293508392909190610b14908490612948565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610bb15760405162461bcd60e51b815260040161046f906127ea565b6002600055610be0610bc283612b58565b83356000908152600460205260409020610bdb906115ce565b6116dd565b600160005592915050565b6040805180820190915260008082526020820152600083815260046020526040902061044590836119bc565b6000600160005414610c3b5760405162461bcd60e51b815260040161046f906127ea565b60026000908155856001600160401b03811115610c5a57610c5a61295b565b604051908082528060200260200182016040528015610c9f57816020015b6040805180820190915260008082526020820152815260200190600190039081610c785790505b50905060005b86811015610d9c576000888883818110610cc157610cc1612bfb565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d4e5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161046f565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d7e57610d7e612bfb565b6020026020010181905250505080610d9590612c11565b9050610ca5565b506040805160c08101825289815260006020820152610e20918101610dc636899003890189612c2a565b815260200160008152602001868680806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093855250506040805192835260208084019091529092015250826116dd565b600160005598975050505050505050565b6001805414610e525760405162461bcd60e51b815260040161046f9061243d565b60026001556001600160a01b038116610ec65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161046f565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3b9190810190612ca6565b9150915080610f9e5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161046f565b60208201516001600160a01b031630146110155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161046f565b6002548061108e576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611062573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108691906128c5565b600281905590505b600083604001518060200190518101906110a89190612e43565b9050818160400151146111175760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161046f565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111a25760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161046f565b6111b0338260a00151611a81565b61120e5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161046f565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e0810151511561125a57835161125a9082611af6565b60c08101515160005b818110156112b55760008360c00151828151811061128357611283612bfb565b602002602001015190506112a4876000015182600001518360200151611c25565b506112ae81612c11565b9050611263565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b03891691830191909152906112f3908290611cf5565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061132d908c908990613053565b60405180910390a4505060018055505050505050565b600254600090806113665760405162461bcd60e51b815260040161046f90613077565b600061137184611d51565b905061137e828583611d6b565b949350505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b03831660248201526044810182905261144e90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611df2565b505050565b80546001820154600091610448916130c0565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d391906128c5565b90506114ea6001600160a01b038516333086611ec4565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155591906128c5565b90508181116115bb5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161046f565b6115c582826130c0565b95945050505050565b606060006115e560056115e085611453565b611efc565b90508060000361163457604080516000808252602082019092529061162c565b60408051808201909152600080825260208201528152602001906001900390816116055790505b509392505050565b806001600160401b0381111561164c5761164c61295b565b60405190808252806020026020018201604052801561169157816020015b604080518082019091526000808252602082015281526020019060019003908161166a5790505b50915060005b818110156116d6576116a884611f12565b8382815181106116ba576116ba612bfb565b6020026020010181905250806116cf90612c11565b9050611697565b5050919050565b60025460009080611759576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175191906128c5565b600281905590505b806117765760405162461bcd60e51b815260040161046f90613077565b60006117858560000151611d51565b9050600061179883876000015184611d6b565b90506000604051806101000160405280838152602001336001600160a01b031681526020018860000151815260200188602001516001600160a01b0316815260200188606001518152602001886080015181526020018781526020018860a00151815250905060008160405160200161181191906130d3565b60408051601f198184030181529181528951600090815260036020908152828220889055918b015190910151919250901561188b576040890151516001600160a01b03166118715760405162461bcd60e51b815260040161046f906128de565b604089015180516020909101516118889190611466565b90505b6040805180820182528a820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528e516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b03191691909516179093559101516002909101558a519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10509061193890889086906130e6565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061196a9086906004016128b2565b6020604051808303816000875af1158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad91906128c5565b50939998505050505050505050565b60408051808201909152600080825260208201526119d983611453565b8210611a315760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161046f565b826002016000838560000154611a479190612948565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60008151600003611a9457506001610448565b60005b8251811015611aec57836001600160a01b0316838281518110611abc57611abc612bfb565b60200260200101516001600160a01b031603611adc576001915050610448565b611ae581612c11565b9050611a97565b5060009392505050565b80608001515a1015611b585760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161046f565b80606001516001600160a01b03163b600003611b78576109378282611fdd565b602081015160e0820151604051600092611b969286926024016130f9565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611bdb9190846113cf565b905080611bf257611bec8484611fdd565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c7f5750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611cea908490612948565b909155505050505050565b6001820180548291600285019160009182611d0f83612c11565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b600081815260036020526040812054610448906001612948565b604080513060208201529081018490526060810183905260808101829052600090819060a0016040516020818303038152906040529050600281604051611db29190613123565b602060405180830381855afa158015611dcf573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115c591906128c5565b6000611e47826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661205b9092919063ffffffff16565b80519091501561144e5780806020019051810190611e65919061313f565b61144e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161046f565b6040516001600160a01b0380851660248301528316604482015260648101829052611bec9085906323b872dd60e01b90608401611417565b6000818310611f0b5781610445565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f7c5760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161046f565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611fd5908290612948565b909255919050565b80604051602001611fee91906130d3565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d69061204f9085906130d3565b60405180910390a35050565b606061137e848460008585600080866001600160a01b031685876040516120829190613123565b60006040518083038185875af1925050503d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b50915091506120d5878383876120e0565b979650505050505050565b6060831561214f578251600003612148576001600160a01b0385163b6121485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161046f565b508161137e565b61137e83838151156121645781518083602001fd5b8060405162461bcd60e51b815260040161046f91906128b2565b6000806040838503121561219157600080fd5b50508035926020909101359150565b600080604083850312156121b357600080fd5b8235915060208301356001600160401b038111156121d057600080fd5b830161010081860312156121e357600080fd5b809150509250929050565b6001600160a01b038116811461220357600080fd5b50565b8035612211816121ee565b919050565b60006020828403121561222857600080fd5b81356113e4816121ee565b60006020828403121561224557600080fd5b5035919050565b6000806000806080858703121561226257600080fd5b8435935060208501359250604085013561227b816121ee565b9396929550929360600135925050565b60006020828403121561229d57600080fd5b81356001600160401b038111156122b357600080fd5b820160e081850312156113e457600080fd5b815181526020808301516001600160a01b03169082015260408101610448565b60008083601f8401126122f757600080fd5b5081356001600160401b0381111561230e57600080fd5b6020830191508360208260051b85010111156113c857600080fd5b60008060008060008086880360a081121561234357600080fd5b8735965060208801356001600160401b038082111561236157600080fd5b61236d8b838c016122e5565b90985096508691506040603f198401121561238757600080fd5b60408a01955060808a01359250808311156123a157600080fd5b50506123af89828a016122e5565b979a9699509497509295939492505050565b600080604083850312156123d457600080fd5b82356123df816121ee565b915060208301356121e3816121ee565b6000806040838503121561240257600080fd5b823563ffffffff811681146123df57600080fd5b828152606081016113e4602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e198436030181126124df57600080fd5b83016020810192503590506001600160401b038111156124fe57600080fd5b8060051b36038213156113c857600080fd5b8183526000602080850194508260005b8581101561254e578135612533816121ee565b6001600160a01b031687529582019590820190600101612520565b509495945050505050565b6000808335601e1984360301811261257057600080fd5b83016020810192503590506001600160401b0381111561258f57600080fd5b8060061b36038213156113c857600080fd5b8183526000602080850194508260005b8581101561254e5781358752828201356125ca816121ee565b6001600160a01b03168784015260409687019691909101906001016125b1565b6000808335601e1984360301811261260157600080fd5b83016020810192503590506001600160401b0381111561262057600080fd5b8036038213156113c857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600061010082358452602083013561266f816121ee565b6001600160a01b031660208501526040838101359085015261269360608401612206565b6001600160a01b03166060850152608083810135908501526126b860a08401846124c8565b8260a08701526126cb8387018284612510565b925050506126dc60c0840184612559565b85830360c08701526126ef8382846125a1565b9250505061270060e08401846125ea565b85830360e087015261271383828461262f565b9695505050505050565b6020815260006104456020830184612658565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261279057600080fd5b8301803591506001600160401b038211156127aa57600080fd5b6020019150368190038213156113c857600080fd5b8481526001600160a01b0384166020820152606060408201819052600090612713908301848661262f565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b6060815260006128406060830185612658565b90506113e4602083018480516001600160a01b03168252602090810151910152565b60005b8381101561287d578181015183820152602001612865565b50506000910152565b6000815180845261289e816020860160208601612862565b601f01601f19169290920160200192915050565b6020815260006104456020830184612886565b6000602082840312156128d757600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044857610448612932565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156129935761299361295b565b60405290565b60405160c081016001600160401b03811182821017156129935761299361295b565b60405161010081016001600160401b03811182821017156129935761299361295b565b604051601f8201601f191681016001600160401b0381118282101715612a0657612a0661295b565b604052919050565b600060408284031215612a2057600080fd5b612a28612971565b90508135612a35816121ee565b808252506020820135602082015292915050565b60006001600160401b03821115612a6257612a6261295b565b5060051b60200190565b600082601f830112612a7d57600080fd5b81356020612a92612a8d83612a49565b6129de565b82815260059290921b84018101918181019086841115612ab157600080fd5b8286015b84811015612ad5578035612ac8816121ee565b8352918301918301612ab5565b509695505050505050565b60006001600160401b03821115612af957612af961295b565b50601f01601f191660200190565b600082601f830112612b1857600080fd5b8135612b26612a8d82612ae0565b818152846020838601011115612b3b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b6a57600080fd5b612b72612999565b82358152612b8260208401612206565b6020820152612b943660408501612a0e565b60408201526080830135606082015260a08301356001600160401b0380821115612bbd57600080fd5b612bc936838701612a6c565b608084015260c0850135915080821115612be257600080fd5b50612bef36828601612b07565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c2357612c23612932565b5060010190565b600060408284031215612c3c57600080fd5b6104458383612a0e565b8051612211816121ee565b600082601f830112612c6257600080fd5b8151612c70612a8d82612ae0565b818152846020838601011115612c8557600080fd5b61137e826020830160208701612862565b8051801515811461221157600080fd5b60008060408385031215612cb957600080fd5b82516001600160401b0380821115612cd057600080fd5b9084019060608287031215612ce457600080fd5b604051606081018181108382111715612cff57612cff61295b565b604052825181526020830151612d14816121ee565b6020820152604083015182811115612d2b57600080fd5b612d3788828601612c51565b6040830152509350612d4e91505060208401612c96565b90509250929050565b600082601f830112612d6857600080fd5b81516020612d78612a8d83612a49565b82815260059290921b84018101918181019086841115612d9757600080fd5b8286015b84811015612ad5578051612dae816121ee565b8352918301918301612d9b565b600082601f830112612dcc57600080fd5b81516020612ddc612a8d83612a49565b82815260069290921b84018101918181019086841115612dfb57600080fd5b8286015b84811015612ad55760408189031215612e185760008081fd5b612e20612971565b8151815284820151612e31816121ee565b81860152835291830191604001612dff565b600060208284031215612e5557600080fd5b81516001600160401b0380821115612e6c57600080fd5b908301906101008286031215612e8157600080fd5b612e896129bb565b82518152612e9960208401612c46565b602082015260408301516040820152612eb460608401612c46565b60608201526080830151608082015260a083015182811115612ed557600080fd5b612ee187828601612d57565b60a08301525060c083015182811115612ef957600080fd5b612f0587828601612dbb565b60c08301525060e083015182811115612f1d57600080fd5b612f2987828601612c51565b60e08301525095945050505050565b600081518084526020808501945080840160005b8381101561254e5781516001600160a01b031687529582019590820190600101612f4c565b600081518084526020808501945080840160005b8381101561254e57612fab878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f85565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612ffd60608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261301f82860182612f38565b91505060c083015184820360c08601526130398282612f71565b91505060e083015184820360e08601526115c58282612886565b6001600160a01b038316815260406020820181905260009061137e90830184612fbe565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b8181038181111561044857610448612932565b6020815260006104456020830184612fbe565b6060815260006128406060830185612fbe565b8381526001600160a01b03831660208201526060604082018190526000906115c590830184612886565b60008251613135818460208701612862565b9190910192915050565b60006020828403121561315157600080fd5b61044582612c9656fea2646970667358221220c9c25458574c3e7b14e685dab11f615c5d1262ec49c2208c6b009131df32551964736f6c63430008120033", } // TeleporterMessengerABI is the input ABI used to generate the binding from. @@ -329,10 +329,10 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) CheckRelayerReward return _TeleporterMessenger.Contract.CheckRelayerRewardAmount(&_TeleporterMessenger.CallOpts, relayer, feeAsset) } -// GetFeeInfo is a free data retrieval call binding the contract method 0x82f2c43a. +// GetFeeInfo is a free data retrieval call binding the contract method 0xe8105ebc. // -// Solidity: function getFeeInfo(bytes32 destinationBlockchainID, uint256 messageID) view returns(address, uint256) -func (_TeleporterMessenger *TeleporterMessengerCaller) GetFeeInfo(opts *bind.CallOpts, destinationBlockchainID [32]byte, messageID *big.Int) (common.Address, *big.Int, error) { +// Solidity: function getFeeInfo(bytes32 destinationBlockchainID, bytes32 messageID) view returns(address, uint256) +func (_TeleporterMessenger *TeleporterMessengerCaller) GetFeeInfo(opts *bind.CallOpts, destinationBlockchainID [32]byte, messageID [32]byte) (common.Address, *big.Int, error) { var out []interface{} err := _TeleporterMessenger.contract.Call(opts, &out, "getFeeInfo", destinationBlockchainID, messageID) @@ -347,24 +347,24 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) GetFeeInfo(opts *bind.Cal } -// GetFeeInfo is a free data retrieval call binding the contract method 0x82f2c43a. +// GetFeeInfo is a free data retrieval call binding the contract method 0xe8105ebc. // -// Solidity: function getFeeInfo(bytes32 destinationBlockchainID, uint256 messageID) view returns(address, uint256) -func (_TeleporterMessenger *TeleporterMessengerSession) GetFeeInfo(destinationBlockchainID [32]byte, messageID *big.Int) (common.Address, *big.Int, error) { +// Solidity: function getFeeInfo(bytes32 destinationBlockchainID, bytes32 messageID) view returns(address, uint256) +func (_TeleporterMessenger *TeleporterMessengerSession) GetFeeInfo(destinationBlockchainID [32]byte, messageID [32]byte) (common.Address, *big.Int, error) { return _TeleporterMessenger.Contract.GetFeeInfo(&_TeleporterMessenger.CallOpts, destinationBlockchainID, messageID) } -// GetFeeInfo is a free data retrieval call binding the contract method 0x82f2c43a. +// GetFeeInfo is a free data retrieval call binding the contract method 0xe8105ebc. // -// Solidity: function getFeeInfo(bytes32 destinationBlockchainID, uint256 messageID) view returns(address, uint256) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetFeeInfo(destinationBlockchainID [32]byte, messageID *big.Int) (common.Address, *big.Int, error) { +// Solidity: function getFeeInfo(bytes32 destinationBlockchainID, bytes32 messageID) view returns(address, uint256) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetFeeInfo(destinationBlockchainID [32]byte, messageID [32]byte) (common.Address, *big.Int, error) { return _TeleporterMessenger.Contract.GetFeeInfo(&_TeleporterMessenger.CallOpts, destinationBlockchainID, messageID) } -// GetMessageHash is a free data retrieval call binding the contract method 0x220c9568. +// GetMessageHash is a free data retrieval call binding the contract method 0x980a2584. // -// Solidity: function getMessageHash(bytes32 destinationBlockchainID, uint256 messageID) view returns(bytes32) -func (_TeleporterMessenger *TeleporterMessengerCaller) GetMessageHash(opts *bind.CallOpts, destinationBlockchainID [32]byte, messageID *big.Int) ([32]byte, error) { +// Solidity: function getMessageHash(bytes32 destinationBlockchainID, bytes32 messageID) view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerCaller) GetMessageHash(opts *bind.CallOpts, destinationBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { var out []interface{} err := _TeleporterMessenger.contract.Call(opts, &out, "getMessageHash", destinationBlockchainID, messageID) @@ -378,32 +378,32 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) GetMessageHash(opts *bind } -// GetMessageHash is a free data retrieval call binding the contract method 0x220c9568. +// GetMessageHash is a free data retrieval call binding the contract method 0x980a2584. // -// Solidity: function getMessageHash(bytes32 destinationBlockchainID, uint256 messageID) view returns(bytes32) -func (_TeleporterMessenger *TeleporterMessengerSession) GetMessageHash(destinationBlockchainID [32]byte, messageID *big.Int) ([32]byte, error) { +// Solidity: function getMessageHash(bytes32 destinationBlockchainID, bytes32 messageID) view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerSession) GetMessageHash(destinationBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { return _TeleporterMessenger.Contract.GetMessageHash(&_TeleporterMessenger.CallOpts, destinationBlockchainID, messageID) } -// GetMessageHash is a free data retrieval call binding the contract method 0x220c9568. +// GetMessageHash is a free data retrieval call binding the contract method 0x980a2584. // -// Solidity: function getMessageHash(bytes32 destinationBlockchainID, uint256 messageID) view returns(bytes32) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetMessageHash(destinationBlockchainID [32]byte, messageID *big.Int) ([32]byte, error) { +// Solidity: function getMessageHash(bytes32 destinationBlockchainID, bytes32 messageID) view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetMessageHash(destinationBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { return _TeleporterMessenger.Contract.GetMessageHash(&_TeleporterMessenger.CallOpts, destinationBlockchainID, messageID) } // GetNextMessageID is a free data retrieval call binding the contract method 0xdf20e8bc. // -// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(uint256) -func (_TeleporterMessenger *TeleporterMessengerCaller) GetNextMessageID(opts *bind.CallOpts, destinationBlockchainID [32]byte) (*big.Int, error) { +// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerCaller) GetNextMessageID(opts *bind.CallOpts, destinationBlockchainID [32]byte) ([32]byte, error) { var out []interface{} err := _TeleporterMessenger.contract.Call(opts, &out, "getNextMessageID", destinationBlockchainID) if err != nil { - return *new(*big.Int), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err @@ -411,21 +411,21 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) GetNextMessageID(opts *bi // GetNextMessageID is a free data retrieval call binding the contract method 0xdf20e8bc. // -// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(uint256) -func (_TeleporterMessenger *TeleporterMessengerSession) GetNextMessageID(destinationBlockchainID [32]byte) (*big.Int, error) { +// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerSession) GetNextMessageID(destinationBlockchainID [32]byte) ([32]byte, error) { return _TeleporterMessenger.Contract.GetNextMessageID(&_TeleporterMessenger.CallOpts, destinationBlockchainID) } // GetNextMessageID is a free data retrieval call binding the contract method 0xdf20e8bc. // -// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(uint256) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetNextMessageID(destinationBlockchainID [32]byte) (*big.Int, error) { +// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetNextMessageID(destinationBlockchainID [32]byte) ([32]byte, error) { return _TeleporterMessenger.Contract.GetNextMessageID(&_TeleporterMessenger.CallOpts, destinationBlockchainID) } // GetReceiptAtIndex is a free data retrieval call binding the contract method 0x892bf412. // -// Solidity: function getReceiptAtIndex(bytes32 originBlockchainID, uint256 index) view returns((uint256,address)) +// Solidity: function getReceiptAtIndex(bytes32 originBlockchainID, uint256 index) view returns((bytes32,address)) func (_TeleporterMessenger *TeleporterMessengerCaller) GetReceiptAtIndex(opts *bind.CallOpts, originBlockchainID [32]byte, index *big.Int) (TeleporterMessageReceipt, error) { var out []interface{} err := _TeleporterMessenger.contract.Call(opts, &out, "getReceiptAtIndex", originBlockchainID, index) @@ -442,14 +442,14 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) GetReceiptAtIndex(opts *b // GetReceiptAtIndex is a free data retrieval call binding the contract method 0x892bf412. // -// Solidity: function getReceiptAtIndex(bytes32 originBlockchainID, uint256 index) view returns((uint256,address)) +// Solidity: function getReceiptAtIndex(bytes32 originBlockchainID, uint256 index) view returns((bytes32,address)) func (_TeleporterMessenger *TeleporterMessengerSession) GetReceiptAtIndex(originBlockchainID [32]byte, index *big.Int) (TeleporterMessageReceipt, error) { return _TeleporterMessenger.Contract.GetReceiptAtIndex(&_TeleporterMessenger.CallOpts, originBlockchainID, index) } // GetReceiptAtIndex is a free data retrieval call binding the contract method 0x892bf412. // -// Solidity: function getReceiptAtIndex(bytes32 originBlockchainID, uint256 index) view returns((uint256,address)) +// Solidity: function getReceiptAtIndex(bytes32 originBlockchainID, uint256 index) view returns((bytes32,address)) func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetReceiptAtIndex(originBlockchainID [32]byte, index *big.Int) (TeleporterMessageReceipt, error) { return _TeleporterMessenger.Contract.GetReceiptAtIndex(&_TeleporterMessenger.CallOpts, originBlockchainID, index) } @@ -485,10 +485,10 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetReceiptQueueSiz return _TeleporterMessenger.Contract.GetReceiptQueueSize(&_TeleporterMessenger.CallOpts, originBlockchainID) } -// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0x33e890fe. +// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0xb120322a. // -// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, uint256 messageID) view returns(address) -func (_TeleporterMessenger *TeleporterMessengerCaller) GetRelayerRewardAddress(opts *bind.CallOpts, originBlockchainID [32]byte, messageID *big.Int) (common.Address, error) { +// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, bytes32 messageID) view returns(address) +func (_TeleporterMessenger *TeleporterMessengerCaller) GetRelayerRewardAddress(opts *bind.CallOpts, originBlockchainID [32]byte, messageID [32]byte) (common.Address, error) { var out []interface{} err := _TeleporterMessenger.contract.Call(opts, &out, "getRelayerRewardAddress", originBlockchainID, messageID) @@ -502,26 +502,26 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) GetRelayerRewardAddress(o } -// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0x33e890fe. +// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0xb120322a. // -// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, uint256 messageID) view returns(address) -func (_TeleporterMessenger *TeleporterMessengerSession) GetRelayerRewardAddress(originBlockchainID [32]byte, messageID *big.Int) (common.Address, error) { +// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, bytes32 messageID) view returns(address) +func (_TeleporterMessenger *TeleporterMessengerSession) GetRelayerRewardAddress(originBlockchainID [32]byte, messageID [32]byte) (common.Address, error) { return _TeleporterMessenger.Contract.GetRelayerRewardAddress(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) } -// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0x33e890fe. +// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0xb120322a. // -// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, uint256 messageID) view returns(address) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetRelayerRewardAddress(originBlockchainID [32]byte, messageID *big.Int) (common.Address, error) { +// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, bytes32 messageID) view returns(address) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetRelayerRewardAddress(originBlockchainID [32]byte, messageID [32]byte) (common.Address, error) { return _TeleporterMessenger.Contract.GetRelayerRewardAddress(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) } -// LatestMessageIDs is a free data retrieval call binding the contract method 0x29ec9beb. +// LatestRawMessageIDs is a free data retrieval call binding the contract method 0x5513f096. // -// Solidity: function latestMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 messageID) -func (_TeleporterMessenger *TeleporterMessengerCaller) LatestMessageIDs(opts *bind.CallOpts, destinationBlockchainID [32]byte) (*big.Int, error) { +// Solidity: function latestRawMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 rawMessageID) +func (_TeleporterMessenger *TeleporterMessengerCaller) LatestRawMessageIDs(opts *bind.CallOpts, destinationBlockchainID [32]byte) (*big.Int, error) { var out []interface{} - err := _TeleporterMessenger.contract.Call(opts, &out, "latestMessageIDs", destinationBlockchainID) + err := _TeleporterMessenger.contract.Call(opts, &out, "latestRawMessageIDs", destinationBlockchainID) if err != nil { return *new(*big.Int), err @@ -533,24 +533,24 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) LatestMessageIDs(opts *bi } -// LatestMessageIDs is a free data retrieval call binding the contract method 0x29ec9beb. +// LatestRawMessageIDs is a free data retrieval call binding the contract method 0x5513f096. // -// Solidity: function latestMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 messageID) -func (_TeleporterMessenger *TeleporterMessengerSession) LatestMessageIDs(destinationBlockchainID [32]byte) (*big.Int, error) { - return _TeleporterMessenger.Contract.LatestMessageIDs(&_TeleporterMessenger.CallOpts, destinationBlockchainID) +// Solidity: function latestRawMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 rawMessageID) +func (_TeleporterMessenger *TeleporterMessengerSession) LatestRawMessageIDs(destinationBlockchainID [32]byte) (*big.Int, error) { + return _TeleporterMessenger.Contract.LatestRawMessageIDs(&_TeleporterMessenger.CallOpts, destinationBlockchainID) } -// LatestMessageIDs is a free data retrieval call binding the contract method 0x29ec9beb. +// LatestRawMessageIDs is a free data retrieval call binding the contract method 0x5513f096. // -// Solidity: function latestMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 messageID) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) LatestMessageIDs(destinationBlockchainID [32]byte) (*big.Int, error) { - return _TeleporterMessenger.Contract.LatestMessageIDs(&_TeleporterMessenger.CallOpts, destinationBlockchainID) +// Solidity: function latestRawMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 rawMessageID) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) LatestRawMessageIDs(destinationBlockchainID [32]byte) (*big.Int, error) { + return _TeleporterMessenger.Contract.LatestRawMessageIDs(&_TeleporterMessenger.CallOpts, destinationBlockchainID) } -// MessageReceived is a free data retrieval call binding the contract method 0xe03555df. +// MessageReceived is a free data retrieval call binding the contract method 0x11d433e1. // -// Solidity: function messageReceived(bytes32 originBlockchainID, uint256 messageID) view returns(bool) -func (_TeleporterMessenger *TeleporterMessengerCaller) MessageReceived(opts *bind.CallOpts, originBlockchainID [32]byte, messageID *big.Int) (bool, error) { +// Solidity: function messageReceived(bytes32 originBlockchainID, bytes32 messageID) view returns(bool) +func (_TeleporterMessenger *TeleporterMessengerCaller) MessageReceived(opts *bind.CallOpts, originBlockchainID [32]byte, messageID [32]byte) (bool, error) { var out []interface{} err := _TeleporterMessenger.contract.Call(opts, &out, "messageReceived", originBlockchainID, messageID) @@ -564,17 +564,17 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) MessageReceived(opts *bin } -// MessageReceived is a free data retrieval call binding the contract method 0xe03555df. +// MessageReceived is a free data retrieval call binding the contract method 0x11d433e1. // -// Solidity: function messageReceived(bytes32 originBlockchainID, uint256 messageID) view returns(bool) -func (_TeleporterMessenger *TeleporterMessengerSession) MessageReceived(originBlockchainID [32]byte, messageID *big.Int) (bool, error) { +// Solidity: function messageReceived(bytes32 originBlockchainID, bytes32 messageID) view returns(bool) +func (_TeleporterMessenger *TeleporterMessengerSession) MessageReceived(originBlockchainID [32]byte, messageID [32]byte) (bool, error) { return _TeleporterMessenger.Contract.MessageReceived(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) } -// MessageReceived is a free data retrieval call binding the contract method 0xe03555df. +// MessageReceived is a free data retrieval call binding the contract method 0x11d433e1. // -// Solidity: function messageReceived(bytes32 originBlockchainID, uint256 messageID) view returns(bool) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) MessageReceived(originBlockchainID [32]byte, messageID *big.Int) (bool, error) { +// Solidity: function messageReceived(bytes32 originBlockchainID, bytes32 messageID) view returns(bool) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) MessageReceived(originBlockchainID [32]byte, messageID [32]byte) (bool, error) { return _TeleporterMessenger.Contract.MessageReceived(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) } @@ -623,10 +623,10 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) ReceiptQueues(sour return _TeleporterMessenger.Contract.ReceiptQueues(&_TeleporterMessenger.CallOpts, sourceBlockchainID) } -// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0xc9bb1143. +// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x3b215f2c. // -// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, uint256 messageID) view returns(bytes32 messageHash) -func (_TeleporterMessenger *TeleporterMessengerCaller) ReceivedFailedMessageHashes(opts *bind.CallOpts, sourceBlockchainID [32]byte, messageID *big.Int) ([32]byte, error) { +// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, bytes32 messageID) view returns(bytes32 messageHash) +func (_TeleporterMessenger *TeleporterMessengerCaller) ReceivedFailedMessageHashes(opts *bind.CallOpts, sourceBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { var out []interface{} err := _TeleporterMessenger.contract.Call(opts, &out, "receivedFailedMessageHashes", sourceBlockchainID, messageID) @@ -640,24 +640,24 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) ReceivedFailedMessageHash } -// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0xc9bb1143. +// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x3b215f2c. // -// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, uint256 messageID) view returns(bytes32 messageHash) -func (_TeleporterMessenger *TeleporterMessengerSession) ReceivedFailedMessageHashes(sourceBlockchainID [32]byte, messageID *big.Int) ([32]byte, error) { +// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, bytes32 messageID) view returns(bytes32 messageHash) +func (_TeleporterMessenger *TeleporterMessengerSession) ReceivedFailedMessageHashes(sourceBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { return _TeleporterMessenger.Contract.ReceivedFailedMessageHashes(&_TeleporterMessenger.CallOpts, sourceBlockchainID, messageID) } -// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0xc9bb1143. +// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x3b215f2c. // -// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, uint256 messageID) view returns(bytes32 messageHash) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) ReceivedFailedMessageHashes(sourceBlockchainID [32]byte, messageID *big.Int) ([32]byte, error) { +// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, bytes32 messageID) view returns(bytes32 messageHash) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) ReceivedFailedMessageHashes(sourceBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { return _TeleporterMessenger.Contract.ReceivedFailedMessageHashes(&_TeleporterMessenger.CallOpts, sourceBlockchainID, messageID) } -// SentMessageInfo is a free data retrieval call binding the contract method 0x66533d12. +// SentMessageInfo is a free data retrieval call binding the contract method 0xd39b0c17. // -// Solidity: function sentMessageInfo(bytes32 destinationBlockchainID, uint256 messageID) view returns(bytes32 messageHash, (address,uint256) feeInfo) -func (_TeleporterMessenger *TeleporterMessengerCaller) SentMessageInfo(opts *bind.CallOpts, destinationBlockchainID [32]byte, messageID *big.Int) (struct { +// Solidity: function sentMessageInfo(bytes32 destinationBlockchainID, bytes32 messageID) view returns(bytes32 messageHash, (address,uint256) feeInfo) +func (_TeleporterMessenger *TeleporterMessengerCaller) SentMessageInfo(opts *bind.CallOpts, destinationBlockchainID [32]byte, messageID [32]byte) (struct { MessageHash [32]byte FeeInfo TeleporterFeeInfo }, error) { @@ -679,44 +679,44 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) SentMessageInfo(opts *bin } -// SentMessageInfo is a free data retrieval call binding the contract method 0x66533d12. +// SentMessageInfo is a free data retrieval call binding the contract method 0xd39b0c17. // -// Solidity: function sentMessageInfo(bytes32 destinationBlockchainID, uint256 messageID) view returns(bytes32 messageHash, (address,uint256) feeInfo) -func (_TeleporterMessenger *TeleporterMessengerSession) SentMessageInfo(destinationBlockchainID [32]byte, messageID *big.Int) (struct { +// Solidity: function sentMessageInfo(bytes32 destinationBlockchainID, bytes32 messageID) view returns(bytes32 messageHash, (address,uint256) feeInfo) +func (_TeleporterMessenger *TeleporterMessengerSession) SentMessageInfo(destinationBlockchainID [32]byte, messageID [32]byte) (struct { MessageHash [32]byte FeeInfo TeleporterFeeInfo }, error) { return _TeleporterMessenger.Contract.SentMessageInfo(&_TeleporterMessenger.CallOpts, destinationBlockchainID, messageID) } -// SentMessageInfo is a free data retrieval call binding the contract method 0x66533d12. +// SentMessageInfo is a free data retrieval call binding the contract method 0xd39b0c17. // -// Solidity: function sentMessageInfo(bytes32 destinationBlockchainID, uint256 messageID) view returns(bytes32 messageHash, (address,uint256) feeInfo) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) SentMessageInfo(destinationBlockchainID [32]byte, messageID *big.Int) (struct { +// Solidity: function sentMessageInfo(bytes32 destinationBlockchainID, bytes32 messageID) view returns(bytes32 messageHash, (address,uint256) feeInfo) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) SentMessageInfo(destinationBlockchainID [32]byte, messageID [32]byte) (struct { MessageHash [32]byte FeeInfo TeleporterFeeInfo }, error) { return _TeleporterMessenger.Contract.SentMessageInfo(&_TeleporterMessenger.CallOpts, destinationBlockchainID, messageID) } -// AddFeeAmount is a paid mutator transaction binding the contract method 0x19570c74. +// AddFeeAmount is a paid mutator transaction binding the contract method 0x4e985c49. // -// Solidity: function addFeeAmount(bytes32 destinationBlockchainID, uint256 messageID, address feeTokenAddress, uint256 additionalFeeAmount) returns() -func (_TeleporterMessenger *TeleporterMessengerTransactor) AddFeeAmount(opts *bind.TransactOpts, destinationBlockchainID [32]byte, messageID *big.Int, feeTokenAddress common.Address, additionalFeeAmount *big.Int) (*types.Transaction, error) { +// Solidity: function addFeeAmount(bytes32 destinationBlockchainID, bytes32 messageID, address feeTokenAddress, uint256 additionalFeeAmount) returns() +func (_TeleporterMessenger *TeleporterMessengerTransactor) AddFeeAmount(opts *bind.TransactOpts, destinationBlockchainID [32]byte, messageID [32]byte, feeTokenAddress common.Address, additionalFeeAmount *big.Int) (*types.Transaction, error) { return _TeleporterMessenger.contract.Transact(opts, "addFeeAmount", destinationBlockchainID, messageID, feeTokenAddress, additionalFeeAmount) } -// AddFeeAmount is a paid mutator transaction binding the contract method 0x19570c74. +// AddFeeAmount is a paid mutator transaction binding the contract method 0x4e985c49. // -// Solidity: function addFeeAmount(bytes32 destinationBlockchainID, uint256 messageID, address feeTokenAddress, uint256 additionalFeeAmount) returns() -func (_TeleporterMessenger *TeleporterMessengerSession) AddFeeAmount(destinationBlockchainID [32]byte, messageID *big.Int, feeTokenAddress common.Address, additionalFeeAmount *big.Int) (*types.Transaction, error) { +// Solidity: function addFeeAmount(bytes32 destinationBlockchainID, bytes32 messageID, address feeTokenAddress, uint256 additionalFeeAmount) returns() +func (_TeleporterMessenger *TeleporterMessengerSession) AddFeeAmount(destinationBlockchainID [32]byte, messageID [32]byte, feeTokenAddress common.Address, additionalFeeAmount *big.Int) (*types.Transaction, error) { return _TeleporterMessenger.Contract.AddFeeAmount(&_TeleporterMessenger.TransactOpts, destinationBlockchainID, messageID, feeTokenAddress, additionalFeeAmount) } -// AddFeeAmount is a paid mutator transaction binding the contract method 0x19570c74. +// AddFeeAmount is a paid mutator transaction binding the contract method 0x4e985c49. // -// Solidity: function addFeeAmount(bytes32 destinationBlockchainID, uint256 messageID, address feeTokenAddress, uint256 additionalFeeAmount) returns() -func (_TeleporterMessenger *TeleporterMessengerTransactorSession) AddFeeAmount(destinationBlockchainID [32]byte, messageID *big.Int, feeTokenAddress common.Address, additionalFeeAmount *big.Int) (*types.Transaction, error) { +// Solidity: function addFeeAmount(bytes32 destinationBlockchainID, bytes32 messageID, address feeTokenAddress, uint256 additionalFeeAmount) returns() +func (_TeleporterMessenger *TeleporterMessengerTransactorSession) AddFeeAmount(destinationBlockchainID [32]byte, messageID [32]byte, feeTokenAddress common.Address, additionalFeeAmount *big.Int) (*types.Transaction, error) { return _TeleporterMessenger.Contract.AddFeeAmount(&_TeleporterMessenger.TransactOpts, destinationBlockchainID, messageID, feeTokenAddress, additionalFeeAmount) } @@ -762,87 +762,87 @@ func (_TeleporterMessenger *TeleporterMessengerTransactorSession) RedeemRelayerR return _TeleporterMessenger.Contract.RedeemRelayerRewards(&_TeleporterMessenger.TransactOpts, feeAsset) } -// RetryMessageExecution is a paid mutator transaction binding the contract method 0xfc2d6197. +// RetryMessageExecution is a paid mutator transaction binding the contract method 0x13e8f4bc. // -// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) returns() +// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactor) RetryMessageExecution(opts *bind.TransactOpts, originBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.contract.Transact(opts, "retryMessageExecution", originBlockchainID, message) } -// RetryMessageExecution is a paid mutator transaction binding the contract method 0xfc2d6197. +// RetryMessageExecution is a paid mutator transaction binding the contract method 0x13e8f4bc. // -// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) returns() +// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerSession) RetryMessageExecution(originBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetryMessageExecution(&_TeleporterMessenger.TransactOpts, originBlockchainID, message) } -// RetryMessageExecution is a paid mutator transaction binding the contract method 0xfc2d6197. +// RetryMessageExecution is a paid mutator transaction binding the contract method 0x13e8f4bc. // -// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) returns() +// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactorSession) RetryMessageExecution(originBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetryMessageExecution(&_TeleporterMessenger.TransactOpts, originBlockchainID, message) } -// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0xaf402850. +// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x166a1d8f. // -// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) returns() +// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactor) RetrySendCrossChainMessage(opts *bind.TransactOpts, destinationBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.contract.Transact(opts, "retrySendCrossChainMessage", destinationBlockchainID, message) } -// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0xaf402850. +// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x166a1d8f. // -// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) returns() +// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerSession) RetrySendCrossChainMessage(destinationBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetrySendCrossChainMessage(&_TeleporterMessenger.TransactOpts, destinationBlockchainID, message) } -// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0xaf402850. +// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x166a1d8f. // -// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) returns() +// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactorSession) RetrySendCrossChainMessage(destinationBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetrySendCrossChainMessage(&_TeleporterMessenger.TransactOpts, destinationBlockchainID, message) } // SendCrossChainMessage is a paid mutator transaction binding the contract method 0x62448850. // -// Solidity: function sendCrossChainMessage((bytes32,address,(address,uint256),uint256,address[],bytes) messageInput) returns(uint256) +// Solidity: function sendCrossChainMessage((bytes32,address,(address,uint256),uint256,address[],bytes) messageInput) returns(bytes32) func (_TeleporterMessenger *TeleporterMessengerTransactor) SendCrossChainMessage(opts *bind.TransactOpts, messageInput TeleporterMessageInput) (*types.Transaction, error) { return _TeleporterMessenger.contract.Transact(opts, "sendCrossChainMessage", messageInput) } // SendCrossChainMessage is a paid mutator transaction binding the contract method 0x62448850. // -// Solidity: function sendCrossChainMessage((bytes32,address,(address,uint256),uint256,address[],bytes) messageInput) returns(uint256) +// Solidity: function sendCrossChainMessage((bytes32,address,(address,uint256),uint256,address[],bytes) messageInput) returns(bytes32) func (_TeleporterMessenger *TeleporterMessengerSession) SendCrossChainMessage(messageInput TeleporterMessageInput) (*types.Transaction, error) { return _TeleporterMessenger.Contract.SendCrossChainMessage(&_TeleporterMessenger.TransactOpts, messageInput) } // SendCrossChainMessage is a paid mutator transaction binding the contract method 0x62448850. // -// Solidity: function sendCrossChainMessage((bytes32,address,(address,uint256),uint256,address[],bytes) messageInput) returns(uint256) +// Solidity: function sendCrossChainMessage((bytes32,address,(address,uint256),uint256,address[],bytes) messageInput) returns(bytes32) func (_TeleporterMessenger *TeleporterMessengerTransactorSession) SendCrossChainMessage(messageInput TeleporterMessageInput) (*types.Transaction, error) { return _TeleporterMessenger.Contract.SendCrossChainMessage(&_TeleporterMessenger.TransactOpts, messageInput) } -// SendSpecifiedReceipts is a paid mutator transaction binding the contract method 0x191eb698. +// SendSpecifiedReceipts is a paid mutator transaction binding the contract method 0xa9a85614. // -// Solidity: function sendSpecifiedReceipts(bytes32 originBlockchainID, uint256[] messageIDs, (address,uint256) feeInfo, address[] allowedRelayerAddresses) returns(uint256) -func (_TeleporterMessenger *TeleporterMessengerTransactor) SendSpecifiedReceipts(opts *bind.TransactOpts, originBlockchainID [32]byte, messageIDs []*big.Int, feeInfo TeleporterFeeInfo, allowedRelayerAddresses []common.Address) (*types.Transaction, error) { +// Solidity: function sendSpecifiedReceipts(bytes32 originBlockchainID, bytes32[] messageIDs, (address,uint256) feeInfo, address[] allowedRelayerAddresses) returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerTransactor) SendSpecifiedReceipts(opts *bind.TransactOpts, originBlockchainID [32]byte, messageIDs [][32]byte, feeInfo TeleporterFeeInfo, allowedRelayerAddresses []common.Address) (*types.Transaction, error) { return _TeleporterMessenger.contract.Transact(opts, "sendSpecifiedReceipts", originBlockchainID, messageIDs, feeInfo, allowedRelayerAddresses) } -// SendSpecifiedReceipts is a paid mutator transaction binding the contract method 0x191eb698. +// SendSpecifiedReceipts is a paid mutator transaction binding the contract method 0xa9a85614. // -// Solidity: function sendSpecifiedReceipts(bytes32 originBlockchainID, uint256[] messageIDs, (address,uint256) feeInfo, address[] allowedRelayerAddresses) returns(uint256) -func (_TeleporterMessenger *TeleporterMessengerSession) SendSpecifiedReceipts(originBlockchainID [32]byte, messageIDs []*big.Int, feeInfo TeleporterFeeInfo, allowedRelayerAddresses []common.Address) (*types.Transaction, error) { +// Solidity: function sendSpecifiedReceipts(bytes32 originBlockchainID, bytes32[] messageIDs, (address,uint256) feeInfo, address[] allowedRelayerAddresses) returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerSession) SendSpecifiedReceipts(originBlockchainID [32]byte, messageIDs [][32]byte, feeInfo TeleporterFeeInfo, allowedRelayerAddresses []common.Address) (*types.Transaction, error) { return _TeleporterMessenger.Contract.SendSpecifiedReceipts(&_TeleporterMessenger.TransactOpts, originBlockchainID, messageIDs, feeInfo, allowedRelayerAddresses) } -// SendSpecifiedReceipts is a paid mutator transaction binding the contract method 0x191eb698. +// SendSpecifiedReceipts is a paid mutator transaction binding the contract method 0xa9a85614. // -// Solidity: function sendSpecifiedReceipts(bytes32 originBlockchainID, uint256[] messageIDs, (address,uint256) feeInfo, address[] allowedRelayerAddresses) returns(uint256) -func (_TeleporterMessenger *TeleporterMessengerTransactorSession) SendSpecifiedReceipts(originBlockchainID [32]byte, messageIDs []*big.Int, feeInfo TeleporterFeeInfo, allowedRelayerAddresses []common.Address) (*types.Transaction, error) { +// Solidity: function sendSpecifiedReceipts(bytes32 originBlockchainID, bytes32[] messageIDs, (address,uint256) feeInfo, address[] allowedRelayerAddresses) returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerTransactorSession) SendSpecifiedReceipts(originBlockchainID [32]byte, messageIDs [][32]byte, feeInfo TeleporterFeeInfo, allowedRelayerAddresses []common.Address) (*types.Transaction, error) { return _TeleporterMessenger.Contract.SendSpecifiedReceipts(&_TeleporterMessenger.TransactOpts, originBlockchainID, messageIDs, feeInfo, allowedRelayerAddresses) } @@ -916,15 +916,15 @@ func (it *TeleporterMessengerAddFeeAmountIterator) Close() error { // TeleporterMessengerAddFeeAmount represents a AddFeeAmount event raised by the TeleporterMessenger contract. type TeleporterMessengerAddFeeAmount struct { DestinationBlockchainID [32]byte - MessageID *big.Int + MessageID [32]byte UpdatedFeeInfo TeleporterFeeInfo Raw types.Log // Blockchain specific contextual infos } -// FilterAddFeeAmount is a free log retrieval operation binding the contract event 0x28fe05eedf0479c9159e5b6dd2a28c93fa1a408eba22dc801fd9bc493a7fc0c2. +// FilterAddFeeAmount is a free log retrieval operation binding the contract event 0x1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd. // -// Solidity: event AddFeeAmount(bytes32 indexed destinationBlockchainID, uint256 indexed messageID, (address,uint256) updatedFeeInfo) -func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterAddFeeAmount(opts *bind.FilterOpts, destinationBlockchainID [][32]byte, messageID []*big.Int) (*TeleporterMessengerAddFeeAmountIterator, error) { +// Solidity: event AddFeeAmount(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (address,uint256) updatedFeeInfo) +func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterAddFeeAmount(opts *bind.FilterOpts, destinationBlockchainID [][32]byte, messageID [][32]byte) (*TeleporterMessengerAddFeeAmountIterator, error) { var destinationBlockchainIDRule []interface{} for _, destinationBlockchainIDItem := range destinationBlockchainID { @@ -942,10 +942,10 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterAddFeeAmount(opts return &TeleporterMessengerAddFeeAmountIterator{contract: _TeleporterMessenger.contract, event: "AddFeeAmount", logs: logs, sub: sub}, nil } -// WatchAddFeeAmount is a free log subscription operation binding the contract event 0x28fe05eedf0479c9159e5b6dd2a28c93fa1a408eba22dc801fd9bc493a7fc0c2. +// WatchAddFeeAmount is a free log subscription operation binding the contract event 0x1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd. // -// Solidity: event AddFeeAmount(bytes32 indexed destinationBlockchainID, uint256 indexed messageID, (address,uint256) updatedFeeInfo) -func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchAddFeeAmount(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerAddFeeAmount, destinationBlockchainID [][32]byte, messageID []*big.Int) (event.Subscription, error) { +// Solidity: event AddFeeAmount(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (address,uint256) updatedFeeInfo) +func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchAddFeeAmount(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerAddFeeAmount, destinationBlockchainID [][32]byte, messageID [][32]byte) (event.Subscription, error) { var destinationBlockchainIDRule []interface{} for _, destinationBlockchainIDItem := range destinationBlockchainID { @@ -988,9 +988,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchAddFeeAmount(opts }), nil } -// ParseAddFeeAmount is a log parse operation binding the contract event 0x28fe05eedf0479c9159e5b6dd2a28c93fa1a408eba22dc801fd9bc493a7fc0c2. +// ParseAddFeeAmount is a log parse operation binding the contract event 0x1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd. // -// Solidity: event AddFeeAmount(bytes32 indexed destinationBlockchainID, uint256 indexed messageID, (address,uint256) updatedFeeInfo) +// Solidity: event AddFeeAmount(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (address,uint256) updatedFeeInfo) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseAddFeeAmount(log types.Log) (*TeleporterMessengerAddFeeAmount, error) { event := new(TeleporterMessengerAddFeeAmount) if err := _TeleporterMessenger.contract.UnpackLog(event, "AddFeeAmount", log); err != nil { @@ -1070,14 +1070,14 @@ func (it *TeleporterMessengerMessageExecutedIterator) Close() error { // TeleporterMessengerMessageExecuted represents a MessageExecuted event raised by the TeleporterMessenger contract. type TeleporterMessengerMessageExecuted struct { OriginBlockchainID [32]byte - MessageID *big.Int + MessageID [32]byte Raw types.Log // Blockchain specific contextual infos } -// FilterMessageExecuted is a free log retrieval operation binding the contract event 0x5ad362d54cba0e49d358be9ce586a7136d10a2533579c4460b7e48ec273083ef. +// FilterMessageExecuted is a free log retrieval operation binding the contract event 0x34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c. // -// Solidity: event MessageExecuted(bytes32 indexed originBlockchainID, uint256 indexed messageID) -func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecuted(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID []*big.Int) (*TeleporterMessengerMessageExecutedIterator, error) { +// Solidity: event MessageExecuted(bytes32 indexed originBlockchainID, bytes32 indexed messageID) +func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecuted(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID [][32]byte) (*TeleporterMessengerMessageExecutedIterator, error) { var originBlockchainIDRule []interface{} for _, originBlockchainIDItem := range originBlockchainID { @@ -1095,10 +1095,10 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecuted(o return &TeleporterMessengerMessageExecutedIterator{contract: _TeleporterMessenger.contract, event: "MessageExecuted", logs: logs, sub: sub}, nil } -// WatchMessageExecuted is a free log subscription operation binding the contract event 0x5ad362d54cba0e49d358be9ce586a7136d10a2533579c4460b7e48ec273083ef. +// WatchMessageExecuted is a free log subscription operation binding the contract event 0x34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c. // -// Solidity: event MessageExecuted(bytes32 indexed originBlockchainID, uint256 indexed messageID) -func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecuted(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerMessageExecuted, originBlockchainID [][32]byte, messageID []*big.Int) (event.Subscription, error) { +// Solidity: event MessageExecuted(bytes32 indexed originBlockchainID, bytes32 indexed messageID) +func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecuted(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerMessageExecuted, originBlockchainID [][32]byte, messageID [][32]byte) (event.Subscription, error) { var originBlockchainIDRule []interface{} for _, originBlockchainIDItem := range originBlockchainID { @@ -1141,9 +1141,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecuted(op }), nil } -// ParseMessageExecuted is a log parse operation binding the contract event 0x5ad362d54cba0e49d358be9ce586a7136d10a2533579c4460b7e48ec273083ef. +// ParseMessageExecuted is a log parse operation binding the contract event 0x34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c. // -// Solidity: event MessageExecuted(bytes32 indexed originBlockchainID, uint256 indexed messageID) +// Solidity: event MessageExecuted(bytes32 indexed originBlockchainID, bytes32 indexed messageID) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseMessageExecuted(log types.Log) (*TeleporterMessengerMessageExecuted, error) { event := new(TeleporterMessengerMessageExecuted) if err := _TeleporterMessenger.contract.UnpackLog(event, "MessageExecuted", log); err != nil { @@ -1223,15 +1223,15 @@ func (it *TeleporterMessengerMessageExecutionFailedIterator) Close() error { // TeleporterMessengerMessageExecutionFailed represents a MessageExecutionFailed event raised by the TeleporterMessenger contract. type TeleporterMessengerMessageExecutionFailed struct { OriginBlockchainID [32]byte - MessageID *big.Int + MessageID [32]byte Message TeleporterMessage Raw types.Log // Blockchain specific contextual infos } -// FilterMessageExecutionFailed is a free log retrieval operation binding the contract event 0xbedbbe6103cef0a6c9ecbf6aa23da414542c42d7918bea18aab8b601b2c3a449. +// FilterMessageExecutionFailed is a free log retrieval operation binding the contract event 0x9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d6. // -// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, uint256 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) -func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecutionFailed(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID []*big.Int) (*TeleporterMessengerMessageExecutionFailedIterator, error) { +// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecutionFailed(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID [][32]byte) (*TeleporterMessengerMessageExecutionFailedIterator, error) { var originBlockchainIDRule []interface{} for _, originBlockchainIDItem := range originBlockchainID { @@ -1249,10 +1249,10 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecutionF return &TeleporterMessengerMessageExecutionFailedIterator{contract: _TeleporterMessenger.contract, event: "MessageExecutionFailed", logs: logs, sub: sub}, nil } -// WatchMessageExecutionFailed is a free log subscription operation binding the contract event 0xbedbbe6103cef0a6c9ecbf6aa23da414542c42d7918bea18aab8b601b2c3a449. +// WatchMessageExecutionFailed is a free log subscription operation binding the contract event 0x9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d6. // -// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, uint256 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) -func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecutionFailed(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerMessageExecutionFailed, originBlockchainID [][32]byte, messageID []*big.Int) (event.Subscription, error) { +// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecutionFailed(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerMessageExecutionFailed, originBlockchainID [][32]byte, messageID [][32]byte) (event.Subscription, error) { var originBlockchainIDRule []interface{} for _, originBlockchainIDItem := range originBlockchainID { @@ -1295,9 +1295,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecutionFa }), nil } -// ParseMessageExecutionFailed is a log parse operation binding the contract event 0xbedbbe6103cef0a6c9ecbf6aa23da414542c42d7918bea18aab8b601b2c3a449. +// ParseMessageExecutionFailed is a log parse operation binding the contract event 0x9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d6. // -// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, uint256 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) +// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseMessageExecutionFailed(log types.Log) (*TeleporterMessengerMessageExecutionFailed, error) { event := new(TeleporterMessengerMessageExecutionFailed) if err := _TeleporterMessenger.contract.UnpackLog(event, "MessageExecutionFailed", log); err != nil { @@ -1377,17 +1377,17 @@ func (it *TeleporterMessengerReceiveCrossChainMessageIterator) Close() error { // TeleporterMessengerReceiveCrossChainMessage represents a ReceiveCrossChainMessage event raised by the TeleporterMessenger contract. type TeleporterMessengerReceiveCrossChainMessage struct { OriginBlockchainID [32]byte - MessageID *big.Int + MessageID [32]byte Deliverer common.Address RewardRedeemer common.Address Message TeleporterMessage Raw types.Log // Blockchain specific contextual infos } -// FilterReceiveCrossChainMessage is a free log retrieval operation binding the contract event 0x6b013241f9192863bc66c1f1e9a01dc592c94592bfed5e1ed380808525679575. +// FilterReceiveCrossChainMessage is a free log retrieval operation binding the contract event 0x7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c49096855. // -// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, uint256 indexed messageID, address indexed deliverer, address rewardRedeemer, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) -func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterReceiveCrossChainMessage(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID []*big.Int, deliverer []common.Address) (*TeleporterMessengerReceiveCrossChainMessageIterator, error) { +// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterReceiveCrossChainMessage(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID [][32]byte, deliverer []common.Address) (*TeleporterMessengerReceiveCrossChainMessageIterator, error) { var originBlockchainIDRule []interface{} for _, originBlockchainIDItem := range originBlockchainID { @@ -1409,10 +1409,10 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterReceiveCrossChain return &TeleporterMessengerReceiveCrossChainMessageIterator{contract: _TeleporterMessenger.contract, event: "ReceiveCrossChainMessage", logs: logs, sub: sub}, nil } -// WatchReceiveCrossChainMessage is a free log subscription operation binding the contract event 0x6b013241f9192863bc66c1f1e9a01dc592c94592bfed5e1ed380808525679575. +// WatchReceiveCrossChainMessage is a free log subscription operation binding the contract event 0x7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c49096855. // -// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, uint256 indexed messageID, address indexed deliverer, address rewardRedeemer, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) -func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchReceiveCrossChainMessage(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerReceiveCrossChainMessage, originBlockchainID [][32]byte, messageID []*big.Int, deliverer []common.Address) (event.Subscription, error) { +// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchReceiveCrossChainMessage(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerReceiveCrossChainMessage, originBlockchainID [][32]byte, messageID [][32]byte, deliverer []common.Address) (event.Subscription, error) { var originBlockchainIDRule []interface{} for _, originBlockchainIDItem := range originBlockchainID { @@ -1459,9 +1459,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchReceiveCrossChainM }), nil } -// ParseReceiveCrossChainMessage is a log parse operation binding the contract event 0x6b013241f9192863bc66c1f1e9a01dc592c94592bfed5e1ed380808525679575. +// ParseReceiveCrossChainMessage is a log parse operation binding the contract event 0x7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c49096855. // -// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, uint256 indexed messageID, address indexed deliverer, address rewardRedeemer, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message) +// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseReceiveCrossChainMessage(log types.Log) (*TeleporterMessengerReceiveCrossChainMessage, error) { event := new(TeleporterMessengerReceiveCrossChainMessage) if err := _TeleporterMessenger.contract.UnpackLog(event, "ReceiveCrossChainMessage", log); err != nil { @@ -1695,16 +1695,16 @@ func (it *TeleporterMessengerSendCrossChainMessageIterator) Close() error { // TeleporterMessengerSendCrossChainMessage represents a SendCrossChainMessage event raised by the TeleporterMessenger contract. type TeleporterMessengerSendCrossChainMessage struct { DestinationBlockchainID [32]byte - MessageID *big.Int + MessageID [32]byte Message TeleporterMessage FeeInfo TeleporterFeeInfo Raw types.Log // Blockchain specific contextual infos } -// FilterSendCrossChainMessage is a free log retrieval operation binding the contract event 0x0563d357b89128d5a0c37c9b06420836e35d193eaf17f7960fc88e47d1e02f57. +// FilterSendCrossChainMessage is a free log retrieval operation binding the contract event 0x7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050. // -// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, uint256 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message, (address,uint256) feeInfo) -func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterSendCrossChainMessage(opts *bind.FilterOpts, destinationBlockchainID [][32]byte, messageID []*big.Int) (*TeleporterMessengerSendCrossChainMessageIterator, error) { +// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) +func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterSendCrossChainMessage(opts *bind.FilterOpts, destinationBlockchainID [][32]byte, messageID [][32]byte) (*TeleporterMessengerSendCrossChainMessageIterator, error) { var destinationBlockchainIDRule []interface{} for _, destinationBlockchainIDItem := range destinationBlockchainID { @@ -1722,10 +1722,10 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterSendCrossChainMes return &TeleporterMessengerSendCrossChainMessageIterator{contract: _TeleporterMessenger.contract, event: "SendCrossChainMessage", logs: logs, sub: sub}, nil } -// WatchSendCrossChainMessage is a free log subscription operation binding the contract event 0x0563d357b89128d5a0c37c9b06420836e35d193eaf17f7960fc88e47d1e02f57. +// WatchSendCrossChainMessage is a free log subscription operation binding the contract event 0x7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050. // -// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, uint256 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message, (address,uint256) feeInfo) -func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchSendCrossChainMessage(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerSendCrossChainMessage, destinationBlockchainID [][32]byte, messageID []*big.Int) (event.Subscription, error) { +// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) +func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchSendCrossChainMessage(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerSendCrossChainMessage, destinationBlockchainID [][32]byte, messageID [][32]byte) (event.Subscription, error) { var destinationBlockchainIDRule []interface{} for _, destinationBlockchainIDItem := range destinationBlockchainID { @@ -1768,9 +1768,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchSendCrossChainMess }), nil } -// ParseSendCrossChainMessage is a log parse operation binding the contract event 0x0563d357b89128d5a0c37c9b06420836e35d193eaf17f7960fc88e47d1e02f57. +// ParseSendCrossChainMessage is a log parse operation binding the contract event 0x7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050. // -// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, uint256 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(uint256,address)[],bytes) message, (address,uint256) feeInfo) +// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseSendCrossChainMessage(log types.Log) (*TeleporterMessengerSendCrossChainMessage, error) { event := new(TeleporterMessengerSendCrossChainMessage) if err := _TeleporterMessenger.contract.UnpackLog(event, "SendCrossChainMessage", log); err != nil { diff --git a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go index ed31c15ad..8944d2cea 100644 --- a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go +++ b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go @@ -38,7 +38,7 @@ type ProtocolRegistryEntry struct { // TeleporterRegistryMetaData contains all meta data concerning the TeleporterRegistry contract. var TeleporterRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"internalType\":\"structProtocolRegistryEntry[]\",\"name\":\"initialEntries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"AddProtocolVersion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newVersion\",\"type\":\"uint256\"}],\"name\":\"LatestVersionUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VERSION_INCREMENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATORS_SOURCE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"addProtocolVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getAddressFromVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestTeleporter\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getTeleporterFromVersion\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"getVersionFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea264697066735822122042e323b6502c2858b7b6b9412cce846046592fe79ccd11fd951e3ccc7aa5306264736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220b95bbd05244334159e26e4b2c90b76b8ab5069f5a4d671f5d6b0f0527848f31264736f6c63430008120033", } // TeleporterRegistryABI is the input ABI used to generate the binding from. From 6bb4068ddbcdc6a8cc7c46632005e752821ab86d Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Thu, 14 Dec 2023 17:43:24 -0500 Subject: [PATCH 03/16] Fix unit tests --- .../ERC20Bridge/tests/ERC20BridgeTests.t.sol | 12 ++--- .../Teleporter/tests/AddFeeAmountTests.t.sol | 32 ++++++------- .../Teleporter/tests/GetFeeInfoTests.t.sol | 16 +++---- .../tests/GetMessageHashTests.t.sol | 14 +++--- .../tests/GetRelayerRewardAddressTests.t.sol | 6 +-- .../HandleInitialMessageExecutionTests.t.sol | 34 +++++++------- .../Teleporter/tests/MarkReceiptTests.t.sol | 30 +++++++------ .../tests/MessageReceivedTests.t.sol | 6 +-- .../tests/ReceiveCrossChainMessageTests.t.sol | 30 ++++++++----- .../tests/RedeemRelayerRewardsTests.t.sol | 8 ++-- .../tests/RetryMessageExecutionTests.t.sol | 16 +++---- .../RetrySendCrossChainMessageTests.t.sol | 16 +++---- .../tests/SendCrossChainMessageTests.t.sol | 32 ++++++------- .../tests/SendSpecifiedReceiptsTests.t.sol | 45 +++++++++++-------- .../tests/TeleporterMessengerTest.t.sol | 25 +++++++---- .../tests/PauseTeleporterAddressTests.t.sol | 14 +++--- .../TeleporterOwnerUpgradeableTests.t.sol | 4 +- .../tests/TeleporterUpgradeableTests.t.sol | 12 ++--- 18 files changed, 184 insertions(+), 168 deletions(-) diff --git a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol index 98bd67dd8..3c5d45274 100644 --- a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol +++ b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol @@ -36,7 +36,7 @@ contract ERC20BridgeTest is Test { event BridgeTokens( address indexed tokenContractAddress, bytes32 indexed destinationBlockchainID, - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, address destinationBridgeAddress, address recipient, uint256 amount @@ -46,7 +46,7 @@ contract ERC20BridgeTest is Test { bytes32 indexed destinationBlockchainID, address indexed destinationBridgeAddress, address indexed nativeContractAddress, - uint256 teleporterMessageID + bytes32 teleporterMessageID ); event CreateBridgeToken( @@ -218,7 +218,7 @@ contract ERC20BridgeTest is Test { ) }); - uint256 mockMessageID = 42; + bytes32 mockMessageID = bytes32(uint256(42)); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall( @@ -357,7 +357,7 @@ contract ERC20BridgeTest is Test { ) ); - uint256 mockMessageID = 42; + bytes32 mockMessageID = bytes32(uint256(42)); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall( @@ -460,7 +460,7 @@ contract ERC20BridgeTest is Test { ) ); - uint256 mockMessageID = 42; + bytes32 mockMessageID = bytes32(uint256(42)); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall( @@ -719,7 +719,7 @@ contract ERC20BridgeTest is Test { ) }); - uint256 mockMessageID = 456; + bytes32 mockMessageID = bytes32(uint256(456)); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall( diff --git a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol index 1945aa37a..8c4be368e 100644 --- a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol +++ b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol @@ -19,7 +19,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { // First submit a message with a small fee uint256 originalFeeAmount = 10; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount ); @@ -39,7 +39,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { ); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit AddFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, TeleporterFeeInfo({ feeTokenAddress: address(_mockFeeAsset), @@ -47,7 +47,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { }) ); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, address(_mockFeeAsset), additionalFeeAmount @@ -55,7 +55,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { // Get the fee info to make sure it is properly updated. (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_CHAIN_ID, messageID); + .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(_mockFeeAsset)); assertEq(actualFeeAmount, totalFeeAmount); } @@ -66,7 +66,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { bytes32 fakeMessageID = bytes32(uint256(13)); vm.expectRevert(_formatTeleporterErrorMessage("message not found")); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, fakeMessageID, address(_mockFeeAsset), additionalFeeAmount @@ -77,7 +77,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { // First submit a message with a small fee uint256 originalFeeAmount = 10; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount ); @@ -91,7 +91,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { }); _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts @@ -101,7 +101,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { uint256 additionalFeeAmount = 131313; vm.expectRevert(_formatTeleporterErrorMessage("message not found")); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, address(_mockFeeAsset), additionalFeeAmount @@ -112,7 +112,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { // First submit a message with a small fee uint256 originalFeeAmount = 10; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount ); @@ -122,7 +122,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { _formatTeleporterErrorMessage("zero additional fee amount") ); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, address(_mockFeeAsset), additionalFeeAmount @@ -133,7 +133,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { // First submit a message with a small fee uint256 originalFeeAmount = 10; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount ); @@ -144,7 +144,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { _formatTeleporterErrorMessage("invalid fee asset contract address") ); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, differentFeeAsset, additionalFeeAmount @@ -155,7 +155,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { // First submit a message with a small fee uint256 originalFeeAmount = 10; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount ); @@ -166,7 +166,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { _formatTeleporterErrorMessage("zero fee asset contract address") ); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, invalidFeeAsset, additionalFeeAmount @@ -177,7 +177,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { // First submit a message with a small fee uint256 originalFeeAmount = 10; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount ); @@ -209,7 +209,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { vm.expectRevert("SafeERC20: ERC20 operation did not succeed"); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, address(_mockFeeAsset), additionalFeeAmount diff --git a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol index 0d52c77df..77fb45a68 100644 --- a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol +++ b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol @@ -19,13 +19,13 @@ contract GetFeeInfoTest is TeleporterMessengerTest { // First submit a message with a fee uint256 feeAmount = 1687435413; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, feeAmount ); // Get the fee info to make sure it is correct. (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_CHAIN_ID, messageID); + .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(_mockFeeAsset)); assertEq(actualFeeAmount, feeAmount); } @@ -37,14 +37,14 @@ contract GetFeeInfoTest is TeleporterMessengerTest { uint256 tokenTransferFee = 35413; _mockFeeAsset.setFeeOnTransferSender(address(this), tokenTransferFee); bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, feeAmount ); // Get the fee info to make sure it is correct, including the fee amount being less than // the amount specified when submitting the message due to the "fee on token transfer". (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_CHAIN_ID, messageID); + .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(_mockFeeAsset)); assertEq(actualFeeAmount, feeAmount - tokenTransferFee); } @@ -53,7 +53,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { // First submit a message with a small fee uint256 feeAmount = 10; bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, feeAmount ); @@ -66,7 +66,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddress }); _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts @@ -74,7 +74,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { // Now, if we get the fee info for the message it should be reported as zero since the receipt has already been received. (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_CHAIN_ID, messageID); + .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(0)); assertEq(actualFeeAmount, 0); } @@ -84,7 +84,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { // Get the fee info to make sure it is zero since the message doesn't exist. (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_CHAIN_ID, fakeMessageID); + .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, fakeMessageID); assertEq(actualFeeAsset, address(0)); assertEq(actualFeeAmount, 0); } diff --git a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol index 95e7c2a2a..5379f8993 100644 --- a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol +++ b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol @@ -18,12 +18,12 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testSuccess() public { // Submit a message bytes32 messageID = _sendTestMessageWithNoFee( - DEFAULT_DESTINATION_CHAIN_ID + DEFAULT_DESTINATION_BLOCKCHAIN_ID ); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: messageID, senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -35,7 +35,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { // Get its stored hash bytes32 actualMessageHash = teleporterMessenger.getMessageHash( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID ); assertEq(actualMessageHash, expectedMessageHash); @@ -44,7 +44,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testMessageDoesNotExist() public { assertEq( teleporterMessenger.getMessageHash( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(42)) ), bytes32(0) @@ -54,7 +54,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testMessageAlreadyReceived() public { // Submit a message bytes32 messageID = _sendTestMessageWithNoFee( - DEFAULT_DESTINATION_CHAIN_ID + DEFAULT_DESTINATION_BLOCKCHAIN_ID ); // Now mock receiving a message back from that subnet with a receipt of the above message. @@ -66,7 +66,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddress }); _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts @@ -75,7 +75,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { // Now the message hash should be cleared. assertEq( teleporterMessenger.getMessageHash( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID ), bytes32(0) diff --git a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol index 1b96905af..385de33b7 100644 --- a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol +++ b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol @@ -20,7 +20,7 @@ contract GetRelayerRewardAddressTest is TeleporterMessengerTest { bytes32 mockMessageID = bytes32(uint256(8)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockMessageID ), address(0) @@ -29,7 +29,7 @@ contract GetRelayerRewardAddressTest is TeleporterMessengerTest { // Mock receiving the message address relayerRewardAddress = 0xCAFebAbeDc0D4D7B7EEdCf61eb863fF413BB6234; _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockMessageID, relayerRewardAddress, new TeleporterMessageReceipt[](0) @@ -38,7 +38,7 @@ contract GetRelayerRewardAddressTest is TeleporterMessengerTest { // Now it has the relayer reward address. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockMessageID ), relayerRewardAddress diff --git a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol index 17a63b3ac..78c0b5f12 100644 --- a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol @@ -106,7 +106,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { TeleporterMessage memory messageToReceive = TeleporterMessage({ messageID: bytes32(uint256(42)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -117,7 +117,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { ) }); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -127,7 +127,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Receive the message and check that message execution was successful. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecuted( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); @@ -147,7 +147,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessage(), messageString); assertEq( destinationContract.latestMessageSenderSubnetID(), - DEFAULT_ORIGIN_CHAIN_ID + DEFAULT_ORIGIN_BLOCKCHAIN_ID ); assertEq( destinationContract.latestMessageSenderAddress(), @@ -155,7 +155,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { ); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS @@ -168,7 +168,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { TeleporterMessage memory messageToReceive = TeleporterMessage({ messageID: bytes32(uint256(42)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), requiredGasLimit: uint256( bytes32( @@ -183,7 +183,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { ) }); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -204,7 +204,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { TeleporterMessage memory messageToReceive = TeleporterMessage({ messageID: bytes32(uint256(42)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -215,7 +215,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { ) }); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -227,7 +227,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // still successfully delivered. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); @@ -250,7 +250,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS @@ -259,7 +259,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { _formatTeleporterErrorMessage("retry execution failed") ); teleporterMessenger.retryMessageExecution( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive ); } @@ -270,7 +270,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { TeleporterMessage memory messageToReceive = TeleporterMessage({ messageID: bytes32(uint256(42)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -281,7 +281,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { ) }); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -291,7 +291,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Receive the message. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); @@ -314,7 +314,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS @@ -323,7 +323,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { _formatTeleporterErrorMessage("retry execution failed") ); teleporterMessenger.retryMessageExecution( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive ); } diff --git a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol index 1d72e2e67..5e7cae690 100644 --- a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol +++ b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol @@ -43,7 +43,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { bytes32[3] memory messageIDs; for (uint256 i = 0; i < feeRewardInfos.length; i++) { messageIDs[i] = _sendTestMessageWithFee( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, feeRewardInfos[i].feeAmount ); } @@ -66,7 +66,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { ); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -93,14 +93,14 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) ), expectedRelayerRewardAddress ); assertTrue( teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) ) ); @@ -109,7 +109,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { for (uint256 i = 0; i < receipts.length; i++) { assertEq( teleporterMessenger.getMessageHash( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageIDs[i] ), bytes32(0) @@ -119,7 +119,9 @@ contract MarkReceiptTest is TeleporterMessengerTest { function testReceiptForNoFeeMessage() public { // Submit a a mock message with no fee. - bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_ORIGIN_CHAIN_ID); + bytes32 messageID = _sendTestMessageWithNoFee( + DEFAULT_ORIGIN_BLOCKCHAIN_ID + ); // Mock receiving a message with the a receipts of the mock message sent above. TeleporterMessageReceipt[] @@ -135,7 +137,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { ); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -151,14 +153,14 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID ), expectedRelayerRewardAddress ); assertTrue( teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID ) ); @@ -171,7 +173,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 ); bytes32 receivedMessageID = _sendTestMessageWithFee( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, feeRewardInfo.feeAmount ); @@ -191,7 +193,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { ); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -216,14 +218,14 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID ), expectedRelayerRewardAddress ); assertTrue( teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID ) ); @@ -231,7 +233,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message hashes for the message receipts we received have been cleared. assertEq( teleporterMessenger.getMessageHash( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID ), bytes32(0) diff --git a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol index c90ba0aec..d560008fc 100644 --- a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol +++ b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol @@ -19,7 +19,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { // Mock receiving a message from another subnet. address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234; _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)), relayerRewardAddress, new TeleporterMessageReceipt[](0) @@ -27,7 +27,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { assertEq( teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) ), true @@ -37,7 +37,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { function testUnreceivedMessage() public { assertEq( teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) ), false diff --git a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol index 6e0bea2c6..c897fa4b8 100644 --- a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol @@ -32,7 +32,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { TeleporterMessage memory messageToReceive = TeleporterMessage({ messageID: bytes32(uint256(1)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: allowedRelayers, @@ -40,7 +40,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { message: DEFAULT_MESSAGE_PAYLOAD }); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -49,7 +49,9 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Check receipt queue size assertEq( - teleporterMessenger.getReceiptQueueSize(DEFAULT_ORIGIN_CHAIN_ID), + teleporterMessenger.getReceiptQueueSize( + DEFAULT_ORIGIN_BLOCKCHAIN_ID + ), 0 ); @@ -69,20 +71,22 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Check receipt queue size assertEq( - teleporterMessenger.getReceiptQueueSize(DEFAULT_ORIGIN_CHAIN_ID), + teleporterMessenger.getReceiptQueueSize( + DEFAULT_ORIGIN_BLOCKCHAIN_ID + ), 1 ); // Check receipt queue contents TeleporterMessageReceipt memory receipt = teleporterMessenger - .getReceiptAtIndex(DEFAULT_ORIGIN_CHAIN_ID, 0); + .getReceiptAtIndex(DEFAULT_ORIGIN_BLOCKCHAIN_ID, 0); assertEq(receipt.receivedMessageID, bytes32(uint256(1))); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); // Receive at a different index messageToReceive.messageID = bytes32(uint256(2)); warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); _setUpSuccessGetVerifiedWarpMessageMock(3, warpMessage); @@ -103,13 +107,15 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Check receipt queue size assertEq( - teleporterMessenger.getReceiptQueueSize(DEFAULT_ORIGIN_CHAIN_ID), + teleporterMessenger.getReceiptQueueSize( + DEFAULT_ORIGIN_BLOCKCHAIN_ID + ), 2 ); // Check receipt queue contents receipt = teleporterMessenger.getReceiptAtIndex( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, 1 ); assertEq(receipt.receivedMessageID, bytes32(uint256(2))); @@ -160,7 +166,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { ); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); address invalidSenderAddress = 0xb73aD7e0FF026a805D1f1186EAB89E41bf01835D; @@ -192,7 +198,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { .destinationBlockchainID = invalidDestinationBlockchainID; WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -239,7 +245,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { TeleporterMessage memory messageToReceive = TeleporterMessage({ messageID: bytes32(uint256(42)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: allowedRelayers, @@ -247,7 +253,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { message: DEFAULT_MESSAGE_PAYLOAD }); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); diff --git a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol index 99f61ea6b..0c6bde9cc 100644 --- a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol +++ b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol @@ -108,7 +108,7 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { // is able to redeem the reward. function _setUpRelayerRewards(FeeRewardInfo memory feeRewardInfo) private { bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, feeRewardInfo.feeAmount ); @@ -126,7 +126,7 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -159,14 +159,14 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) ), expectedRelayerRewardAddress ); assertTrue( teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) ) ); diff --git a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol index 872ca1048..8c3254501 100644 --- a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol @@ -116,7 +116,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { TeleporterMessage memory fakeMessage = TeleporterMessage({ messageID: bytes32(uint256(12345)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -126,7 +126,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { vm.expectRevert(_formatTeleporterErrorMessage("message not found")); teleporterMessenger.retryMessageExecution( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, fakeMessage ); } @@ -215,7 +215,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { TeleporterMessage memory messageToReceive = TeleporterMessage({ messageID: bytes32(uint256(42)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -223,7 +223,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { message: abi.encode(action, abi.encode(messageString)) }); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -235,7 +235,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { vm.roll(12); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); @@ -259,19 +259,19 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS ); assertTrue( teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ) ); - return (DEFAULT_ORIGIN_CHAIN_ID, messageToReceive, messageString); + return (DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive, messageString); } function _successfullyRetryMessage() diff --git a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol index cd2a10efd..82e13d5a2 100644 --- a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol @@ -18,13 +18,13 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testSuccess() public { // Send a message bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456 ); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: messageID, senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -34,7 +34,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { // Retry it teleporterMessenger.retrySendCrossChainMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessage ); } @@ -43,7 +43,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { TeleporterMessage memory fakeMessage = TeleporterMessage({ messageID: bytes32(uint256(345)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -52,7 +52,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { }); vm.expectRevert(_formatTeleporterErrorMessage("message not found")); teleporterMessenger.retrySendCrossChainMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, fakeMessage ); } @@ -60,13 +60,13 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testInvalidMessageHash() public { // Send a message, then try to alter it's contents. bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456 ); TeleporterMessage memory alteredMessage = TeleporterMessage({ messageID: messageID, senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -77,7 +77,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { // Retry it - should fail. vm.expectRevert(_formatTeleporterErrorMessage("invalid message hash")); teleporterMessenger.retrySendCrossChainMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, alteredMessage ); } diff --git a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol index 811fd95ec..0bba73f1e 100644 --- a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol @@ -18,12 +18,14 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testSendMessageNoFee() public { // Arrange TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - bytes32(uint256(1)), + teleporterMessenger.getNextMessageID( + DEFAULT_DESTINATION_BLOCKCHAIN_ID + ), hex"deadbeef" ); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: expectedMessage.destinationAddress, feeInfo: feeInfo, requiredGasLimit: expectedMessage.requiredGasLimit, @@ -57,12 +59,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { ); // Act - bytes32 messageID = teleporterMessenger.sendCrossChainMessage( - messageInput - ); - - // Assert - assertEq(messageID, bytes32(uint256(1))); + teleporterMessenger.sendCrossChainMessage(messageInput); // Check receipt queue uint256 queueSize = teleporterMessenger.getReceiptQueueSize( @@ -75,7 +72,9 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { // Arrange // Construct the message to submit. TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - bytes32(uint256(1)), + teleporterMessenger.getNextMessageID( + DEFAULT_DESTINATION_BLOCKCHAIN_ID + ), hex"deadbeef" ); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo( @@ -83,7 +82,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { 13131313131313131313 ); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: expectedMessage.destinationAddress, feeInfo: feeInfo, requiredGasLimit: expectedMessage.requiredGasLimit, @@ -130,19 +129,14 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { ); // Act - bytes32 messageID = teleporterMessenger.sendCrossChainMessage( - messageInput - ); - - // Assert - assertEq(messageID, bytes32(uint256(1))); + teleporterMessenger.sendCrossChainMessage(messageInput); } function testFeeAssetDoesNotExist() public { address invalidFeeAsset = 0xb8be9140D8717f4a8fd7e8ae23C5668bc3A4B39c; uint256 feeAmount = 4567; TeleporterMessageInput memory messageInput = TeleporterMessageInput({ - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, feeInfo: TeleporterFeeInfo(invalidFeeAsset, feeAmount), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, @@ -163,7 +157,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testFeeTransferFailure() public { uint256 feeAmount = 4567; TeleporterMessageInput memory messageInput = TeleporterMessageInput({ - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, feeInfo: TeleporterFeeInfo(address(_mockFeeAsset), feeAmount), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, @@ -194,7 +188,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { address invalidFeeAsset = address(0); uint256 feeAmount = 4567; TeleporterMessageInput memory messageInput = TeleporterMessageInput({ - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, feeInfo: TeleporterFeeInfo(invalidFeeAsset, feeAmount), requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, diff --git a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol index b0d01b2d7..1eae77250 100644 --- a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol +++ b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol @@ -27,7 +27,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { memory expectedReceipts = new TeleporterMessageReceipt[](3); for (uint256 i = 0; i < relayerRewardAddresses.length; i++) { _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(i + 1)), relayerRewardAddresses[i], new TeleporterMessageReceipt[](0) @@ -39,10 +39,13 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { } // Mock sending a message back to that chain, which should include the 3 receipts. + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( + DEFAULT_DESTINATION_BLOCKCHAIN_ID + ); TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: bytes32(uint256(1)), + messageID: expectedMessageID, senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), @@ -52,17 +55,18 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); emit SendCrossChainMessage( - DEFAULT_DESTINATION_CHAIN_ID, - bytes32(uint256(1)), + DEFAULT_DESTINATION_BLOCKCHAIN_ID, + expectedMessageID, expectedMessage, feeInfo ); bytes32 outboundMessageID = _sendTestMessageWithNoFee( - DEFAULT_DESTINATION_CHAIN_ID + DEFAULT_DESTINATION_BLOCKCHAIN_ID ); + assertEq(outboundMessageID, expectedMessageID); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) ), relayerRewardAddresses[0] @@ -82,7 +86,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { TeleporterMessage memory newExpectedMessage = TeleporterMessage({ messageID: bytes32(uint256(2)), senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(0), requiredGasLimit: uint256(0), allowedRelayerAddresses: new address[](0), @@ -97,14 +101,14 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(2)), newExpectedMessage, feeInfo ); outboundMessageID = _sendSpecifiedReceiptsWithNoFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, receiptIDs ); @@ -114,7 +118,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { function testDuplicateAllowed() public { // Mock receiving a message from another chain _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)), DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) @@ -130,10 +134,13 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { memory expectedReceipts = new TeleporterMessageReceipt[](2); expectedReceipts[0] = expectedReceipt; expectedReceipts[1] = expectedReceipt; + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( + DEFAULT_DESTINATION_BLOCKCHAIN_ID + ); TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: bytes32(uint256(1)), + messageID: expectedMessageID, senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(0), requiredGasLimit: uint256(0), allowedRelayerAddresses: new address[](0), @@ -148,23 +155,23 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Test sendSpecifiedReceipts when there are duplicate message IDs in the input. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( - DEFAULT_DESTINATION_CHAIN_ID, - bytes32(uint256(1)), + DEFAULT_DESTINATION_BLOCKCHAIN_ID, + expectedMessageID, expectedMessage, TeleporterFeeInfo(address(0), 0) ); bytes32 outboundMessageID = _sendSpecifiedReceiptsWithNoFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageIDs ); - assertEq(outboundMessageID, bytes32(uint256(1))); + assertEq(outboundMessageID, expectedMessageID); } function testMissingMessage() public { // Mock receiving a message from another chain _receiveTestMessage( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)), DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) @@ -176,7 +183,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Try to send a receipt for an unreceived message from that chain - should fail. vm.expectRevert(_formatTeleporterErrorMessage("receipt not found")); _sendSpecifiedReceiptsWithNoFee( - DEFAULT_DESTINATION_CHAIN_ID, + DEFAULT_DESTINATION_BLOCKCHAIN_ID, missingIDs ); } diff --git a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol index bfd031579..4774fb623 100644 --- a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol +++ b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol @@ -16,11 +16,11 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract TeleporterMessengerTest is Test { TeleporterMessenger public teleporterMessenger; - bytes32 public constant DEFAULT_ORIGIN_CHAIN_ID = + bytes32 public constant DEFAULT_ORIGIN_BLOCKCHAIN_ID = bytes32( hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd" ); - bytes32 public constant DEFAULT_DESTINATION_CHAIN_ID = + bytes32 public constant DEFAULT_DESTINATION_BLOCKCHAIN_ID = bytes32( hex"1234567812345678123456781234567812345678123456781234567812345678" ); @@ -84,7 +84,7 @@ contract TeleporterMessengerTest is Test { vm.mockCall( WARP_PRECOMPILE_ADDRESS, abi.encodeWithSelector(IWarpMessenger.getBlockchainID.selector), - abi.encode(DEFAULT_DESTINATION_CHAIN_ID) + abi.encode(DEFAULT_DESTINATION_BLOCKCHAIN_ID) ); teleporterMessenger = new TeleporterMessenger(); @@ -92,20 +92,27 @@ contract TeleporterMessengerTest is Test { // Blockchain ID should be 0 before it is initialized. assertEq(teleporterMessenger.blockchainID(), bytes32(0)); + // Send an empty message to initialize the blockchain ID. + _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID); + assertEq( + teleporterMessenger.blockchainID(), + DEFAULT_DESTINATION_BLOCKCHAIN_ID + ); + _mockFeeAsset = new UnitTestMockERC20(); } function testEmptyReceiptQueue() public { assertEq( teleporterMessenger.getReceiptQueueSize( - DEFAULT_DESTINATION_CHAIN_ID + DEFAULT_DESTINATION_BLOCKCHAIN_ID ), 0 ); vm.expectRevert("ReceiptQueue: index out of bounds"); TeleporterMessageReceipt memory receipt = teleporterMessenger - .getReceiptAtIndex(DEFAULT_DESTINATION_CHAIN_ID, 0); + .getReceiptAtIndex(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 0); assertEq(receipt.receivedMessageID, 0); assertEq(receipt.relayerRewardAddress, address(0)); } @@ -229,7 +236,7 @@ contract TeleporterMessengerTest is Test { messageData ); WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive) ); @@ -243,7 +250,7 @@ contract TeleporterMessengerTest is Test { // Receive the message - which should fail execution. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); @@ -261,7 +268,7 @@ contract TeleporterMessengerTest is Test { ); return ( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_DESTINATION_ADDRESS, messageToReceive ); @@ -278,7 +285,7 @@ contract TeleporterMessengerTest is Test { TeleporterMessage({ messageID: messageID, senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_CHAIN_ID, + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, allowedRelayerAddresses: new address[](0), diff --git a/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol b/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol index 57cbdb89e..a7a24d788 100644 --- a/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol @@ -19,7 +19,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { // Check that the teleporterAddress is not paused initially vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -34,7 +34,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { ); vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -52,7 +52,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { ); vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -73,7 +73,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { // Check that the teleporterAddress is not paused initially vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -89,7 +89,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { ); vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -103,7 +103,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { ) ); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -131,7 +131,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { ) ); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); diff --git a/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol b/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol index cef0f7562..68cfe1859 100644 --- a/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol @@ -119,7 +119,7 @@ contract TeleporterOwnerUpgradeableTest is TeleporterUpgradeableTest { // Check that Teleporter address was not paused vm.prank(teleporterAddress); ownerApp.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -136,7 +136,7 @@ contract TeleporterOwnerUpgradeableTest is TeleporterUpgradeableTest { ) ); ownerApp.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); diff --git a/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol b/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol index 291386e8c..19f711865 100644 --- a/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol @@ -38,7 +38,7 @@ contract ExampleUpgradeableApp is TeleporterUpgradeable { contract TeleporterUpgradeableTest is TeleporterRegistryTest { ExampleUpgradeableApp public app; - bytes32 public constant DEFAULT_ORIGIN_CHAIN_ID = + bytes32 public constant DEFAULT_ORIGIN_BLOCKCHAIN_ID = bytes32( hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd" ); @@ -73,14 +73,14 @@ contract TeleporterUpgradeableTest is TeleporterRegistryTest { _formatRegistryErrorMessage("protocol address not found") ); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -91,7 +91,7 @@ contract TeleporterUpgradeableTest is TeleporterRegistryTest { assertEq(app.getMinTeleporterVersion(), 1); vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -114,7 +114,7 @@ contract TeleporterUpgradeableTest is TeleporterRegistryTest { ); vm.prank(teleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); @@ -122,7 +122,7 @@ contract TeleporterUpgradeableTest is TeleporterRegistryTest { // Check that calling with the new teleporter address works vm.prank(newTeleporterAddress); app.receiveTeleporterMessage( - DEFAULT_ORIGIN_CHAIN_ID, + DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, "" ); From a121c7cc416aa42b86af0f8f86aaf392d159478a Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Thu, 14 Dec 2023 17:50:53 -0500 Subject: [PATCH 04/16] Fix SendSpecifiedReceiptsTests --- .../Teleporter/tests/SendSpecifiedReceiptsTests.t.sol | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol index 1eae77250..0dfe5958b 100644 --- a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol +++ b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol @@ -83,8 +83,11 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddresses[0] }); + bytes32 newExpectedMessageID = teleporterMessenger.getNextMessageID( + DEFAULT_DESTINATION_BLOCKCHAIN_ID + ); TeleporterMessage memory newExpectedMessage = TeleporterMessage({ - messageID: bytes32(uint256(2)), + messageID: newExpectedMessageID, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(0), @@ -102,7 +105,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(2)), + newExpectedMessageID, newExpectedMessage, feeInfo ); @@ -112,7 +115,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { receiptIDs ); - assertEq(outboundMessageID, bytes32(uint256(2))); + assertEq(outboundMessageID, newExpectedMessageID); } function testDuplicateAllowed() public { From 890707cd0738464cd3cbb798b1b0f42ade787e0b Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 15 Dec 2023 12:00:34 -0500 Subject: [PATCH 05/16] Fix unit tests --- .../tests/ERC20TokenSourceTests.t.sol | 47 ++++++++++++------- .../tests/NativeTokenDestinationTests.t.sol | 30 ++++++++---- .../tests/NativeTokenSourceTests.t.sol | 38 ++++++++++----- .../GetOutstandingReceiptsToSendTests.t.sol | 22 +++++++-- 4 files changed, 93 insertions(+), 44 deletions(-) diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol index 3afd106d2..bb4013436 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol @@ -33,7 +33,7 @@ contract ERC20TokenSourceTest is Test { event TransferToDestination( address indexed sender, address indexed recipient, - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, uint256 amount ); event UnlockTokens(address recipient, uint256 amount); @@ -50,7 +50,7 @@ contract ERC20TokenSourceTest is Test { abi.encodeWithSelector( ITeleporterMessenger.sendCrossChainMessage.selector ), - abi.encode(1) + abi.encode(bytes32(uint256(1))) ); vm.expectCall( @@ -84,7 +84,7 @@ contract ERC20TokenSourceTest is Test { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: 1 + teleporterMessageID: bytes32(uint256(1)) }); TeleporterMessageInput @@ -98,7 +98,10 @@ contract ERC20TokenSourceTest is Test { requiredGasLimit: erc20TokenSource .MINT_NATIVE_TOKENS_REQUIRED_GAS(), allowedRelayerAddresses: new address[](0), - message: abi.encode(_DEFAULT_RECIPIENT, _DEFAULT_TRANSFER_AMOUNT) + message: abi.encode( + _DEFAULT_RECIPIENT, + _DEFAULT_TRANSFER_AMOUNT + ) }); vm.expectCall( @@ -121,7 +124,7 @@ contract ERC20TokenSourceTest is Test { // Give the contract some tokens to burn. erc20TokenSource.transferToDestination( _DEFAULT_RECIPIENT, - _DEFAULT_TRANSFER_AMOUNT * 2 + _DEFAULT_FEE_AMOUNT , + _DEFAULT_TRANSFER_AMOUNT * 2 + _DEFAULT_FEE_AMOUNT, _DEFAULT_FEE_AMOUNT, new address[](0) ); @@ -139,7 +142,10 @@ contract ERC20TokenSourceTest is Test { ) ); - assertEq(_DEFAULT_TRANSFER_AMOUNT, mockERC20.balanceOf(_DEFAULT_RECIPIENT)); + assertEq( + _DEFAULT_TRANSFER_AMOUNT, + mockERC20.balanceOf(_DEFAULT_RECIPIENT) + ); } function testBurnedTxFees() public { @@ -162,14 +168,14 @@ contract ERC20TokenSourceTest is Test { erc20TokenSource.receiveTeleporterMessage( _DEFAULT_OTHER_CHAIN_ID, _DEFAULT_OTHER_BRIDGE_ADDRESS, - abi.encode( - ITokenSource.SourceAction.Burn, - abi.encode(burnedTxFees) - ) + abi.encode(ITokenSource.SourceAction.Burn, abi.encode(burnedTxFees)) ); assertEq(burnedTxFees, erc20TokenSource.destinationBurnedTotal()); - assertEq(burnedTxFees, mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS())); + assertEq( + burnedTxFees, + mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS()) + ); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); erc20TokenSource.receiveTeleporterMessage( @@ -182,7 +188,10 @@ contract ERC20TokenSourceTest is Test { ); assertEq(burnedTxFees, erc20TokenSource.destinationBurnedTotal()); - assertEq(burnedTxFees, mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS())); + assertEq( + burnedTxFees, + mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS()) + ); emit BurnTokens(additionalTxFees); @@ -196,8 +205,14 @@ contract ERC20TokenSourceTest is Test { ) ); - assertEq(burnedTxFees + additionalTxFees, erc20TokenSource.destinationBurnedTotal()); - assertEq(burnedTxFees + additionalTxFees, mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS())); + assertEq( + burnedTxFees + additionalTxFees, + erc20TokenSource.destinationBurnedTotal() + ); + assertEq( + burnedTxFees + additionalTxFees, + mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS()) + ); } function testZeroTeleporterAddress() public { @@ -262,9 +277,7 @@ contract ERC20TokenSourceTest is Test { function testZeroERC20ContractAddress() public { vm.expectRevert( - _formatERC20TokenSourceErrorMessage( - "zero ERC20 contract address" - ) + _formatERC20TokenSourceErrorMessage("zero ERC20 contract address") ); new ERC20TokenSource( diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol index 32e65b470..94a12225a 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol @@ -36,13 +36,13 @@ contract NativeTokenDestinationTest is Test { event TransferToSource( address indexed sender, address indexed recipient, - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, uint256 amount ); event CollateralAdded(uint256 amount, uint256 remaining); event NativeTokensMinted(address indexed recipient, uint256 amount); event ReportTotalBurnedTxFees( - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, uint256 burnAddressBalance ); @@ -62,7 +62,7 @@ contract NativeTokenDestinationTest is Test { abi.encodeWithSelector( ITeleporterMessenger.sendCrossChainMessage.selector ), - abi.encode(1) + abi.encode(bytes32(uint256(1))) ); vm.expectCall( @@ -121,7 +121,7 @@ contract NativeTokenDestinationTest is Test { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: 1 + teleporterMessageID: bytes32(uint256(1)) }); TeleporterMessageInput @@ -164,7 +164,10 @@ contract NativeTokenDestinationTest is Test { function testCollateralizeBridge() public { uint256 firstTransfer = _DEFAULT_INITIAL_RESERVE_IMBALANCE / 4; - assertEq(_DEFAULT_INITIAL_RESERVE_IMBALANCE, nativeTokenDestination.totalSupply()); + assertEq( + _DEFAULT_INITIAL_RESERVE_IMBALANCE, + nativeTokenDestination.totalSupply() + ); vm.expectEmit(true, true, true, true, address(nativeTokenDestination)); emit CollateralAdded({ @@ -179,8 +182,14 @@ contract NativeTokenDestinationTest is Test { abi.encode(_DEFAULT_RECIPIENT, firstTransfer) ); - assertEq(_DEFAULT_INITIAL_RESERVE_IMBALANCE - firstTransfer, nativeTokenDestination.currentReserveImbalance()); - assertEq(_DEFAULT_INITIAL_RESERVE_IMBALANCE, nativeTokenDestination.totalSupply()); + assertEq( + _DEFAULT_INITIAL_RESERVE_IMBALANCE - firstTransfer, + nativeTokenDestination.currentReserveImbalance() + ); + assertEq( + _DEFAULT_INITIAL_RESERVE_IMBALANCE, + nativeTokenDestination.totalSupply() + ); vm.expectEmit(true, true, true, true, address(nativeTokenDestination)); emit CollateralAdded({ @@ -203,7 +212,10 @@ contract NativeTokenDestinationTest is Test { ); assertEq(0, nativeTokenDestination.currentReserveImbalance()); - assertEq(_DEFAULT_INITIAL_RESERVE_IMBALANCE + firstTransfer, nativeTokenDestination.totalSupply()); + assertEq( + _DEFAULT_INITIAL_RESERVE_IMBALANCE + firstTransfer, + nativeTokenDestination.totalSupply() + ); } function testReportBurnedTxFees() public { @@ -214,7 +226,7 @@ contract NativeTokenDestinationTest is Test { vm.expectEmit(true, true, true, true, address(nativeTokenDestination)); emit ReportTotalBurnedTxFees({ burnAddressBalance: burnedFees, - teleporterMessageID: 1 + teleporterMessageID: bytes32(uint256(1)) }); TeleporterMessageInput diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol index 0091ca6f0..5f449cc5c 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol @@ -33,7 +33,7 @@ contract NativeTokenSourceTest is Test { event TransferToDestination( address indexed sender, address indexed recipient, - uint256 indexed teleporterMessageID, + bytes32 indexed teleporterMessageID, uint256 amount ); event UnlockTokens(address recipient, uint256 amount); @@ -50,7 +50,7 @@ contract NativeTokenSourceTest is Test { abi.encodeWithSelector( ITeleporterMessenger.sendCrossChainMessage.selector ), - abi.encode(1) + abi.encode(bytes32(uint256(1))) ); vm.expectCall( @@ -83,7 +83,7 @@ contract NativeTokenSourceTest is Test { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: 1 + teleporterMessageID: bytes32(uint256(1)) }); TeleporterMessageInput @@ -97,7 +97,10 @@ contract NativeTokenSourceTest is Test { requiredGasLimit: nativeTokenSource .MINT_NATIVE_TOKENS_REQUIRED_GAS(), allowedRelayerAddresses: new address[](0), - message: abi.encode(_DEFAULT_RECIPIENT, _DEFAULT_TRANSFER_AMOUNT) + message: abi.encode( + _DEFAULT_RECIPIENT, + _DEFAULT_TRANSFER_AMOUNT + ) }); vm.expectCall( @@ -173,14 +176,14 @@ contract NativeTokenSourceTest is Test { nativeTokenSource.receiveTeleporterMessage( _DEFAULT_OTHER_CHAIN_ID, _DEFAULT_OTHER_BRIDGE_ADDRESS, - abi.encode( - ITokenSource.SourceAction.Burn, - abi.encode(burnedTxFees) - ) + abi.encode(ITokenSource.SourceAction.Burn, abi.encode(burnedTxFees)) ); assertEq(burnedTxFees, nativeTokenSource.destinationBurnedTotal()); - assertEq(burnedTxFees, nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance); + assertEq( + burnedTxFees, + nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance + ); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); nativeTokenSource.receiveTeleporterMessage( @@ -193,7 +196,10 @@ contract NativeTokenSourceTest is Test { ); assertEq(burnedTxFees, nativeTokenSource.destinationBurnedTotal()); - assertEq(burnedTxFees, nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance); + assertEq( + burnedTxFees, + nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance + ); emit BurnTokens(additionalTxFees); @@ -207,8 +213,14 @@ contract NativeTokenSourceTest is Test { ) ); - assertEq(burnedTxFees + additionalTxFees, nativeTokenSource.destinationBurnedTotal()); - assertEq(burnedTxFees + additionalTxFees, nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance); + assertEq( + burnedTxFees + additionalTxFees, + nativeTokenSource.destinationBurnedTotal() + ); + assertEq( + burnedTxFees + additionalTxFees, + nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance + ); } function testZeroTeleporterAddress() public { @@ -354,7 +366,7 @@ contract NativeTokenSourceTest is Test { vm.expectRevert( _formatNativeTokenSourceErrorMessage("insufficient collateral") ); - + vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); nativeTokenSource.receiveTeleporterMessage( _DEFAULT_OTHER_CHAIN_ID, diff --git a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol index d3ca31dac..d0fc15ba1 100644 --- a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol +++ b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol @@ -54,8 +54,11 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Now that we have "received" 3 mock messages, when we send a message back to the // other chain, we should expect to see the 3 receipts included in the message metadata. + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( + blockchainID + ); TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - bytes32(uint256(1)), + expectedMessageID, hex"deadbeef" ); expectedMessage.receipts = expectedReceipts; @@ -73,7 +76,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { vm.mockCall( WARP_PRECOMPILE_ADDRESS, abi.encode(IWarpMessenger.sendWarpMessage.selector), - abi.encode(bytes32(0)) + abi.encode(expectedMessageID) ); // Expect the exact message to be passed to the precompile. @@ -98,9 +101,12 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it does not contain any more receipts. + bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID( + blockchainID + ); TeleporterMessage memory nextExpectedMessage = _createMockTeleporterMessage( - bytes32(uint256(2)), + nextExpectedMessageID, hex"deadbeef" ); nextExpectedMessage.destinationBlockchainID = blockchainID; @@ -187,8 +193,11 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Now that we have "received" 7 mock messages, when we send a message back to the // other chain, we should expect to see the 5 receipts included in the message metadata because // that is the max receipt batch size limit. + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( + blockchainID + ); TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - bytes32(uint256(1)), + expectedMessageID, hex"deadbeef" ); expectedMessage.receipts = expectedReceiptsBatch1; @@ -231,9 +240,12 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it contains the remaining 2 receipts to be sent. + bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID( + blockchainID + ); TeleporterMessage memory nextExpectedMessage = _createMockTeleporterMessage( - bytes32(uint256(2)), + nextExpectedMessageID, hex"deadbeef" ); nextExpectedMessage.receipts = expectedReceiptsBatch2; From 01bb6e9cde5f9218fb53907ad8b4c4d6e9baac4e Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 15 Dec 2023 14:04:59 -0500 Subject: [PATCH 06/16] Message ID does not depend on destination chain. Fix GetNextMessageID tests --- .../INativeTokenDestination.sol | 5 +- .../NativeTokenDestination.sol | 12 +- .../tests/ERC20TokenSourceTests.t.sol | 55 +++----- .../tests/NativeTokenDestinationTests.t.sol | 22 +-- .../tests/NativeTokenSourceTests.t.sol | 71 +++------- .../src/Teleporter/ITeleporterMessenger.sol | 23 ++-- .../src/Teleporter/TeleporterMessenger.sol | 98 +++++--------- .../Teleporter/tests/AddFeeAmountTests.t.sol | 55 +++----- .../Teleporter/tests/GetFeeInfoTests.t.sol | 36 ++--- .../tests/GetMessageHashTests.t.sol | 27 +--- .../tests/GetNextMessageIdTests.t.sol | 126 +++++++----------- .../GetOutstandingReceiptsToSendTests.t.sol | 78 ++++------- .../tests/GetRelayerRewardAddressTests.t.sol | 6 +- .../HandleInitialMessageExecutionTests.t.sol | 74 +++------- .../Teleporter/tests/MarkReceiptTests.t.sol | 99 ++++---------- .../tests/MessageReceivedTests.t.sol | 6 +- .../Teleporter/tests/ReceiptsQueueTests.t.sol | 27 ++-- .../tests/ReceiveCrossChainMessageTests.t.sol | 84 ++++-------- .../tests/RedeemRelayerRewardsTests.t.sol | 27 ++-- .../tests/RetryMessageExecutionTests.t.sol | 21 +-- .../RetrySendCrossChainMessageTests.t.sol | 19 +-- .../tests/SendCrossChainMessageTests.t.sol | 16 +-- .../tests/SendSpecifiedReceiptsTests.t.sol | 69 +++------- .../tests/TeleporterMessengerTest.t.sol | 84 ++++-------- .../tests/PauseTeleporterAddressTests.t.sol | 54 ++------ .../TeleporterOwnerUpgradeableTests.t.sol | 18 +-- .../tests/TeleporterUpgradeableTests.t.sol | 45 ++----- .../tests/UnpauseTeleporterAddressTests.t.sol | 16 +-- .../UpdateMinTeleporterVersionTests.t.sol | 12 +- 29 files changed, 384 insertions(+), 901 deletions(-) diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol index 703e68b95..4c8100503 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/INativeTokenDestination.sol @@ -35,10 +35,7 @@ interface INativeTokenDestination { /** * @dev Emitted when reporting total burned tx fees to source chain. */ - event ReportTotalBurnedTxFees( - bytes32 indexed teleporterMessageID, - uint256 burnAddressBalance - ); + event ReportTotalBurnedTxFees(bytes32 indexed teleporterMessageID, uint256 burnAddressBalance); /** * @dev Burns native tokens on the destination contract chain, and sends a message to the source diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol index 31f71adbc..2d1738f00 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/NativeTokenDestination.sol @@ -24,21 +24,15 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // solhint-disable-next-line no-unused-import import {IAllowList} from "@subnet-evm-contracts/interfaces/IAllowList.sol"; -contract NativeTokenDestination is - ITeleporterReceiver, - INativeTokenDestination, - ReentrancyGuard -{ +contract NativeTokenDestination is ITeleporterReceiver, INativeTokenDestination, ReentrancyGuard { // The address where the burned transaction fees are credited. // Defined as BLACKHOLE_ADDRESS at // https://github.com/ava-labs/subnet-evm/blob/e23ab058d039ff9c8469c89b139d21d52c4bd283/constants/constants.go - address public constant BURNED_TX_FEES_ADDRESS = - 0x0100000000000000000000000000000000000000; + address public constant BURNED_TX_FEES_ADDRESS = 0x0100000000000000000000000000000000000000; // Designated Blackhole Address for this contract. Tokens are sent here to be "burned" before // sending an unlock message to the source chain. Different from the burned tx fee address so // they can be tracked separately. - address public constant BURN_FOR_TRANSFER_ADDRESS = - 0x0100000000000000000000000000000000000001; + address public constant BURN_FOR_TRANSFER_ADDRESS = 0x0100000000000000000000000000000000000001; INativeMinter private immutable _nativeMinter = INativeMinter(0x0200000000000000000000000000000000000001); diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol index 230a81ddb..622e12e82 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol @@ -52,9 +52,7 @@ contract ERC20TokenSourceTest is Test { ); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, - abi.encodeWithSelector( - ITeleporterMessenger.sendCrossChainMessage.selector - ), + abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), abi.encode(bytes32(uint256(1))) ); @@ -87,22 +85,17 @@ contract ERC20TokenSourceTest is Test { teleporterMessageID: bytes32(uint256(1)) }); - TeleporterMessageInput - memory expectedMessageInput = TeleporterMessageInput({ - destinationBlockchainID: _DEFAULT_OTHER_CHAIN_ID, - destinationAddress: _DEFAULT_OTHER_BRIDGE_ADDRESS, - feeInfo: TeleporterFeeInfo({ - feeTokenAddress: address(mockERC20), - amount: _DEFAULT_FEE_AMOUNT - }), - requiredGasLimit: erc20TokenSource - .MINT_NATIVE_TOKENS_REQUIRED_GAS(), - allowedRelayerAddresses: new address[](0), - message: abi.encode( - _DEFAULT_RECIPIENT, - _DEFAULT_TRANSFER_AMOUNT - ) - }); + TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ + destinationBlockchainID: _DEFAULT_OTHER_CHAIN_ID, + destinationAddress: _DEFAULT_OTHER_BRIDGE_ADDRESS, + feeInfo: TeleporterFeeInfo({ + feeTokenAddress: address(mockERC20), + amount: _DEFAULT_FEE_AMOUNT + }), + requiredGasLimit: erc20TokenSource.MINT_NATIVE_TOKENS_REQUIRED_GAS(), + allowedRelayerAddresses: new address[](0), + message: abi.encode(_DEFAULT_RECIPIENT, _DEFAULT_TRANSFER_AMOUNT) + }); vm.expectCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, @@ -139,10 +132,7 @@ contract ERC20TokenSourceTest is Test { ) ); - assertEq( - _DEFAULT_TRANSFER_AMOUNT, - mockERC20.balanceOf(_DEFAULT_RECIPIENT) - ); + assertEq(_DEFAULT_TRANSFER_AMOUNT, mockERC20.balanceOf(_DEFAULT_RECIPIENT)); } function testBurnedTxFees() public { @@ -169,10 +159,7 @@ contract ERC20TokenSourceTest is Test { ); assertEq(burnedTxFees, erc20TokenSource.destinationBurnedTotal()); - assertEq( - burnedTxFees, - mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS()) - ); + assertEq(burnedTxFees, mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS())); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); erc20TokenSource.receiveTeleporterMessage( @@ -182,10 +169,7 @@ contract ERC20TokenSourceTest is Test { ); assertEq(burnedTxFees, erc20TokenSource.destinationBurnedTotal()); - assertEq( - burnedTxFees, - mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS()) - ); + assertEq(burnedTxFees, mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS())); emit BurnTokens(additionalTxFees); @@ -196,10 +180,7 @@ contract ERC20TokenSourceTest is Test { abi.encode(ITokenSource.SourceAction.Burn, abi.encode(burnedTxFees + additionalTxFees)) ); - assertEq( - burnedTxFees + additionalTxFees, - erc20TokenSource.destinationBurnedTotal() - ); + assertEq(burnedTxFees + additionalTxFees, erc20TokenSource.destinationBurnedTotal()); assertEq( burnedTxFees + additionalTxFees, mockERC20.balanceOf(erc20TokenSource.BURNED_TX_FEES_ADDRESS()) @@ -251,9 +232,7 @@ contract ERC20TokenSourceTest is Test { } function testZeroERC20ContractAddress() public { - vm.expectRevert( - _formatERC20TokenSourceErrorMessage("zero ERC20 contract address") - ); + vm.expectRevert(_formatERC20TokenSourceErrorMessage("zero ERC20 contract address")); new ERC20TokenSource( MOCK_TELEPORTER_MESSENGER_ADDRESS, diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol index cdb7b5858..8079c9e9f 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol @@ -46,10 +46,7 @@ contract NativeTokenDestinationTest is Test { ); event CollateralAdded(uint256 amount, uint256 remaining); event NativeTokensMinted(address indexed recipient, uint256 amount); - event ReportTotalBurnedTxFees( - bytes32 indexed teleporterMessageID, - uint256 burnAddressBalance - ); + event ReportTotalBurnedTxFees(bytes32 indexed teleporterMessageID, uint256 burnAddressBalance); function setUp() public virtual { vm.mockCall( @@ -64,9 +61,7 @@ contract NativeTokenDestinationTest is Test { ); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, - abi.encodeWithSelector( - ITeleporterMessenger.sendCrossChainMessage.selector - ), + abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), abi.encode(bytes32(uint256(1))) ); @@ -150,10 +145,7 @@ contract NativeTokenDestinationTest is Test { function testCollateralizeBridge() public { uint256 firstTransfer = _DEFAULT_INITIAL_RESERVE_IMBALANCE / 4; - assertEq( - _DEFAULT_INITIAL_RESERVE_IMBALANCE, - nativeTokenDestination.totalSupply() - ); + assertEq(_DEFAULT_INITIAL_RESERVE_IMBALANCE, nativeTokenDestination.totalSupply()); vm.expectEmit(true, true, true, true, address(nativeTokenDestination)); emit CollateralAdded({ @@ -172,10 +164,7 @@ contract NativeTokenDestinationTest is Test { _DEFAULT_INITIAL_RESERVE_IMBALANCE - firstTransfer, nativeTokenDestination.currentReserveImbalance() ); - assertEq( - _DEFAULT_INITIAL_RESERVE_IMBALANCE, - nativeTokenDestination.totalSupply() - ); + assertEq(_DEFAULT_INITIAL_RESERVE_IMBALANCE, nativeTokenDestination.totalSupply()); vm.expectEmit(true, true, true, true, address(nativeTokenDestination)); emit CollateralAdded({ @@ -199,8 +188,7 @@ contract NativeTokenDestinationTest is Test { assertEq(0, nativeTokenDestination.currentReserveImbalance()); assertEq( - _DEFAULT_INITIAL_RESERVE_IMBALANCE + firstTransfer, - nativeTokenDestination.totalSupply() + _DEFAULT_INITIAL_RESERVE_IMBALANCE + firstTransfer, nativeTokenDestination.totalSupply() ); } diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol index 2d20b881c..2e89280fb 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol @@ -52,9 +52,7 @@ contract NativeTokenSourceTest is Test { ); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, - abi.encodeWithSelector( - ITeleporterMessenger.sendCrossChainMessage.selector - ), + abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), abi.encode(bytes32(uint256(1))) ); @@ -86,36 +84,10 @@ contract NativeTokenSourceTest is Test { teleporterMessageID: bytes32(uint256(1)) }); - TeleporterMessageInput - memory expectedMessageInput = TeleporterMessageInput({ - destinationBlockchainID: _DEFAULT_OTHER_CHAIN_ID, - destinationAddress: _DEFAULT_OTHER_BRIDGE_ADDRESS, - feeInfo: TeleporterFeeInfo({ - feeTokenAddress: address(mockERC20), - amount: _DEFAULT_FEE_AMOUNT - }), - requiredGasLimit: nativeTokenSource - .MINT_NATIVE_TOKENS_REQUIRED_GAS(), - allowedRelayerAddresses: new address[](0), - message: abi.encode( - _DEFAULT_RECIPIENT, - _DEFAULT_TRANSFER_AMOUNT - ) - }); - - vm.expectCall( - MOCK_TELEPORTER_MESSENGER_ADDRESS, - abi.encodeCall( - ITeleporterMessenger.sendCrossChainMessage, - (expectedMessageInput) - ) - ); - - nativeTokenSource.transferToDestination{ - value: _DEFAULT_TRANSFER_AMOUNT - }( - _DEFAULT_RECIPIENT, - TeleporterFeeInfo({ + TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ + destinationBlockchainID: _DEFAULT_OTHER_CHAIN_ID, + destinationAddress: _DEFAULT_OTHER_BRIDGE_ADDRESS, + feeInfo: TeleporterFeeInfo({ feeTokenAddress: address(mockERC20), amount: _DEFAULT_FEE_AMOUNT }), @@ -134,6 +106,17 @@ contract NativeTokenSourceTest is Test { TeleporterFeeInfo({feeTokenAddress: address(mockERC20), amount: _DEFAULT_FEE_AMOUNT}), new address[](0) ); + + vm.expectCall( + MOCK_TELEPORTER_MESSENGER_ADDRESS, + abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)) + ); + + nativeTokenSource.transferToDestination{value: _DEFAULT_TRANSFER_AMOUNT}( + _DEFAULT_RECIPIENT, + TeleporterFeeInfo({feeTokenAddress: address(mockERC20), amount: _DEFAULT_FEE_AMOUNT}), + new address[](0) + ); } function testUnlock() public { @@ -183,10 +166,7 @@ contract NativeTokenSourceTest is Test { ); assertEq(burnedTxFees, nativeTokenSource.destinationBurnedTotal()); - assertEq( - burnedTxFees, - nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance - ); + assertEq(burnedTxFees, nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); nativeTokenSource.receiveTeleporterMessage( @@ -196,10 +176,7 @@ contract NativeTokenSourceTest is Test { ); assertEq(burnedTxFees, nativeTokenSource.destinationBurnedTotal()); - assertEq( - burnedTxFees, - nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance - ); + assertEq(burnedTxFees, nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance); emit BurnTokens(additionalTxFees); @@ -210,13 +187,9 @@ contract NativeTokenSourceTest is Test { abi.encode(ITokenSource.SourceAction.Burn, abi.encode(burnedTxFees + additionalTxFees)) ); + assertEq(burnedTxFees + additionalTxFees, nativeTokenSource.destinationBurnedTotal()); assertEq( - burnedTxFees + additionalTxFees, - nativeTokenSource.destinationBurnedTotal() - ); - assertEq( - burnedTxFees + additionalTxFees, - nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance + burnedTxFees + additionalTxFees, nativeTokenSource.BURNED_TX_FEES_ADDRESS().balance ); } @@ -328,9 +301,7 @@ contract NativeTokenSourceTest is Test { } function testInsufficientCollateral() public { - vm.expectRevert( - _formatNativeTokenSourceErrorMessage("insufficient collateral") - ); + vm.expectRevert(_formatNativeTokenSourceErrorMessage("insufficient collateral")); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); nativeTokenSource.receiveTeleporterMessage( diff --git a/contracts/src/Teleporter/ITeleporterMessenger.sol b/contracts/src/Teleporter/ITeleporterMessenger.sol index 20275f624..dad0d9d86 100644 --- a/contracts/src/Teleporter/ITeleporterMessenger.sol +++ b/contracts/src/Teleporter/ITeleporterMessenger.sol @@ -77,9 +77,7 @@ interface ITeleporterMessenger { * but message execution fails. Failed messages can then be retried with `retryMessageExecution` */ event MessageExecutionFailed( - bytes32 indexed originBlockchainID, - bytes32 indexed messageID, - TeleporterMessage message + bytes32 indexed originBlockchainID, bytes32 indexed messageID, TeleporterMessage message ); /** @@ -89,10 +87,7 @@ interface ITeleporterMessenger { * * Each message received can be executed successfully at most once. */ - event MessageExecuted( - bytes32 indexed originBlockchainID, - bytes32 indexed messageID - ); + event MessageExecuted(bytes32 indexed originBlockchainID, bytes32 indexed messageID); /** * @dev Emitted when a TeleporterMessage is successfully received. @@ -114,9 +109,9 @@ interface ITeleporterMessenger { * @dev Called by transactions to initiate the sending of a cross-chain message. * @return The message ID of the newly sent message. */ - function sendCrossChainMessage( - TeleporterMessageInput calldata messageInput - ) external returns (bytes32); + function sendCrossChainMessage(TeleporterMessageInput calldata messageInput) + external + returns (bytes32); /** * @dev Called by transactions to retry the sending of a cross-chain message. @@ -236,12 +231,10 @@ interface ITeleporterMessenger { ) external view returns (address, uint256); /** - * @dev Gets the next message ID to be used for a given chain ID. - * @return The next message ID to be used to send a message to the given chain ID. + * @dev Gets the next message ID to be used for a message sent from the contract instance. + * @return The next message ID to be used for a message sent from the contract instance. */ - function getNextMessageID( - bytes32 destinationBlockchainID - ) external view returns (bytes32); + function getNextMessageID() external view returns (bytes32); /** * @dev Gets the number of receipts that are waiting to be sent to the given origin chain ID. diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index b9f93022c..5435ba0ef 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -46,12 +46,9 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // The blockchain ID of the chain the contract is deployed on. Initialized lazily on the first call of `receiveCrossChainMessage` bytes32 public blockchainID; - // Tracks the latest raw message ID used for a given destination chain. - // Key is the destination blockchain ID, and the value is the last raw message ID used for - // that chain. Raw message IDs are monotonically incremented integers. The first raw message - // ID used for each chain will be 1 (not 0). - mapping(bytes32 destinationBlockchainID => uint256 rawMessageID) - public latestRawMessageIDs; + // A monotonically incremented integer tracking the total number of message sent by this TeleporterMessenger contract. + // Used to provide uniqueness when generating message IDs for new messages. + uint256 public messageNonce; // Tracks the outstanding receipts to send back to a given chain in subsequent messages sent to that chain. // Key is the blockchain ID of the other chain, and the value is a queue of pending receipts for messages @@ -63,22 +60,24 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // with a receipt. The messages are tracked per chain and keyed by message ID. // The first key is the blockchain ID of the destination chain, the second key is the message ID, and the value is the info // for the uniquely identified message. - mapping(bytes32 destinationBlockchainID => mapping(bytes32 messageID => SentMessageInfo messageInfo)) - public sentMessageInfo; + mapping( + bytes32 destinationBlockchainID => mapping(bytes32 messageID => SentMessageInfo messageInfo) + ) public sentMessageInfo; // Tracks the hash of messages that have been received but whose execution has never succeeded. // Enables retrying of failed messages with higher gas limits. Message execution is guaranteed to // succeed at most once. The first key is the blockchain ID of the sending chain, the second key is the message ID, and // the value is the hash of the uniquely identified message whose execution failed. - mapping(bytes32 sourceBlockchainID => mapping(bytes32 messageID => bytes32 messageHash)) - public receivedFailedMessageHashes; + mapping(bytes32 sourceBlockchainID => mapping(bytes32 messageID => bytes32 messageHash)) public + receivedFailedMessageHashes; // Tracks the relayer reward address for each message delivered from a given chain. // Note that these values are also used to determine if a given message has been delivered or not. // The first key is the blockchain ID, the second key is the message ID, and the value is the reward address // provided by the deliverer of the uniquely identified message. - mapping(bytes32 sourceBlockchainID => mapping(bytes32 messageID => address relayerRewardAddress)) - internal _relayerRewardAddresses; + mapping( + bytes32 sourceBlockchainID => mapping(bytes32 messageID => address relayerRewardAddress) + ) internal _relayerRewardAddresses; // Tracks the reward amounts for a given asset able to be redeemed by a given relayer. // The first key is the relayer reward address, the second key is the fee token contract address, @@ -96,9 +95,11 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { * * Emits a {SendCrossChainMessage} event when message successfully gets sent. */ - function sendCrossChainMessage( - TeleporterMessageInput calldata messageInput - ) external senderNonReentrant returns (bytes32) { + function sendCrossChainMessage(TeleporterMessageInput calldata messageInput) + external + senderNonReentrant + returns (bytes32) + { // Get the outstanding receipts for messages that have been previously received // from the destination chain but not yet acknowledged, and attach the receipts // to the Teleporter message to be sent. @@ -499,23 +500,11 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { } /** - * @dev Returns the next message ID to be used to send a message to the given blockchain ID. + * @dev Gets the next message ID to be used for a message sent from the contract instance. + * @return The next message ID to be used for a message sent from the contract instance. */ - function getNextMessageID( - bytes32 destinationBlockchainID - ) external view returns (bytes32) { - bytes32 blockchainID_ = blockchainID; - require( - blockchainID_ != bytes32(0), - "TeleporterMessenger: blockchainID not set" - ); - uint256 rawMessageID = _getNextRawMessageID(destinationBlockchainID); - return - _calculateMessageID( - blockchainID_, - destinationBlockchainID, - rawMessageID - ); + function getNextMessageID() external view returns (bytes32) { + return _calculateNextMessageID(); } /** @@ -584,20 +573,13 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { blockchainID_ = WARP_MESSENGER.getBlockchainID(); blockchainID = blockchainID_; } - require( - blockchainID_ != bytes32(0), - "TeleporterMessenger: blockchainID not set" - ); + require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); // Get the message ID to use for this message. - uint256 rawMessageID = _getNextRawMessageID( - messageInput.destinationBlockchainID - ); - bytes32 messageID = _calculateMessageID( - blockchainID_, - messageInput.destinationBlockchainID, - rawMessageID - ); + bytes32 messageID = _calculateNextMessageID(); + + // Increment the message nonce so the next message will have a different ID + ++messageNonce; // Construct and serialize the message. TeleporterMessage memory teleporterMessage = TeleporterMessage({ @@ -612,11 +594,6 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { }); bytes memory teleporterMessageBytes = abi.encode(teleporterMessage); - // Set the message ID value as being used. - latestRawMessageIDs[ - messageInput.destinationBlockchainID - ] = rawMessageID; - // If the fee amount is non-zero, transfer the asset into control of this TeleporterMessenger contract instance. // The fee is allowed to be 0 because it's possible for someone to run their own relayer and deliver their own messages, // which does not require further incentivization. They still must pay the transaction fee to submit the message, so @@ -788,27 +765,12 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { /** * @dev Calculates the message ID given this contract's address and required input parameters. */ - function _calculateMessageID( - bytes32 originBlockchainID, - bytes32 destinationBlockchainID, - uint256 rawMessageID - ) private view returns (bytes32) { - bytes memory rawBytes = abi.encode( - address(this), - originBlockchainID, - destinationBlockchainID, - rawMessageID - ); + function _calculateNextMessageID() private view returns (bytes32) { + bytes32 blockchainID_ = blockchainID; + require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); + bytes memory rawBytes = + abi.encode(address(this), blockchainID_, messageNonce); return sha256(rawBytes); } - - /** - * @dev Returns the next raw message ID to be used to send a message to the given `destinationBlockchainID`. - */ - function _getNextRawMessageID( - bytes32 destinationBlockchainID - ) private view returns (uint256) { - return latestRawMessageIDs[destinationBlockchainID] + 1; - } } diff --git a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol index ec8259e7b..c2fc46b02 100644 --- a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol +++ b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol @@ -23,10 +23,8 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testSuccess() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - originalFeeAmount - ); + bytes32 messageID = + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount); // Add to the fee uint256 additionalFeeAmount = 131313; @@ -52,8 +50,8 @@ contract AddFeeAmountTest is TeleporterMessengerTest { ); // Get the fee info to make sure it is properly updated. - (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); + (address actualFeeAsset, uint256 actualFeeAmount) = + teleporterMessenger.getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(_mockFeeAsset)); assertEq(actualFeeAmount, totalFeeAmount); } @@ -74,10 +72,8 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testMessageAlreadyDelivered() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - originalFeeAmount - ); + bytes32 messageID = + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount); // Now mock receiving a message back from that subnet with a receipt of the above message. address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234; @@ -88,10 +84,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { }); _receiveTestMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageID, - relayerRewardAddress, - receipts + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts ); // Now try to add to the fee of the message. Should revert since the message receipt was received already. @@ -108,10 +101,8 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testInvalidAmount() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - originalFeeAmount - ); + bytes32 messageID = + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount); // Expect revert when adding 0 additional amount. uint256 additionalFeeAmount = 0; @@ -127,50 +118,38 @@ contract AddFeeAmountTest is TeleporterMessengerTest { function testMismatchFeeAsset() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - originalFeeAmount - ); + bytes32 messageID = + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount); // Expect revert when using a different fee asset than originally used. uint256 additionalFeeAmount = 131313; address differentFeeAsset = 0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664; vm.expectRevert(_formatTeleporterErrorMessage("invalid fee asset contract address")); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageID, - differentFeeAsset, - additionalFeeAmount + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, differentFeeAsset, additionalFeeAmount ); } function testInvalidFeeAsset() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - originalFeeAmount - ); + bytes32 messageID = + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount); // Expect revert when using an invalid fee asset. uint256 additionalFeeAmount = 131313; address invalidFeeAsset = address(0); vm.expectRevert(_formatTeleporterErrorMessage("zero fee asset contract address")); teleporterMessenger.addFeeAmount( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageID, - invalidFeeAsset, - additionalFeeAmount + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, invalidFeeAsset, additionalFeeAmount ); } function testInsufficientBalance() public { // First submit a message with a small fee uint256 originalFeeAmount = 10; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - originalFeeAmount - ); + bytes32 messageID = + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, originalFeeAmount); // Add to the fee, but mock the ERC20 contract returning an error from transferFrom uint256 additionalFeeAmount = 131313; diff --git a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol index 86e33d40b..3010e11c7 100644 --- a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol +++ b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol @@ -18,14 +18,11 @@ contract GetFeeInfoTest is TeleporterMessengerTest { function testSuccess() public { // First submit a message with a fee uint256 feeAmount = 1687435413; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - feeAmount - ); + bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, feeAmount); // Get the fee info to make sure it is correct. - (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); + (address actualFeeAsset, uint256 actualFeeAmount) = + teleporterMessenger.getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(_mockFeeAsset)); assertEq(actualFeeAmount, feeAmount); } @@ -36,15 +33,12 @@ contract GetFeeInfoTest is TeleporterMessengerTest { uint256 feeAmount = 1687435413; uint256 tokenTransferFee = 35413; _mockFeeAsset.setFeeOnTransferSender(address(this), tokenTransferFee); - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - feeAmount - ); + bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, feeAmount); // Get the fee info to make sure it is correct, including the fee amount being less than // the amount specified when submitting the message due to the "fee on token transfer". - (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); + (address actualFeeAsset, uint256 actualFeeAmount) = + teleporterMessenger.getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(_mockFeeAsset)); assertEq(actualFeeAmount, feeAmount - tokenTransferFee); } @@ -52,10 +46,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { function testAfterReceipt() public { // First submit a message with a small fee uint256 feeAmount = 10; - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - feeAmount - ); + bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, feeAmount); // Now mock receiving a message back from that subnet with a receipt of the above message. address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234; @@ -65,15 +56,12 @@ contract GetFeeInfoTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddress }); _receiveTestMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageID, - relayerRewardAddress, - receipts + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts ); // Now, if we get the fee info for the message it should be reported as zero since the receipt has already been received. - (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); + (address actualFeeAsset, uint256 actualFeeAmount) = + teleporterMessenger.getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualFeeAsset, address(0)); assertEq(actualFeeAmount, 0); } @@ -82,8 +70,8 @@ contract GetFeeInfoTest is TeleporterMessengerTest { bytes32 fakeMessageID = bytes32(uint256(4646)); // Get the fee info to make sure it is zero since the message doesn't exist. - (address actualFeeAsset, uint256 actualFeeAmount) = teleporterMessenger - .getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, fakeMessageID); + (address actualFeeAsset, uint256 actualFeeAmount) = + teleporterMessenger.getFeeInfo(DEFAULT_DESTINATION_BLOCKCHAIN_ID, fakeMessageID); assertEq(actualFeeAsset, address(0)); assertEq(actualFeeAmount, 0); } diff --git a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol index c96fdeb7f..bce8b00aa 100644 --- a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol +++ b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol @@ -21,9 +21,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testSuccess() public { // Submit a message - bytes32 messageID = _sendTestMessageWithNoFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ); + bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: messageID, senderAddress: address(this), @@ -38,18 +36,15 @@ contract GetMessageHashTest is TeleporterMessengerTest { bytes32 expectedMessageHash = keccak256(expectedMessageBytes); // Get its stored hash - bytes32 actualMessageHash = teleporterMessenger.getMessageHash( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageID - ); + bytes32 actualMessageHash = + teleporterMessenger.getMessageHash(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID); assertEq(actualMessageHash, expectedMessageHash); } function testMessageDoesNotExist() public { assertEq( teleporterMessenger.getMessageHash( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(42)) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(42)) ), bytes32(0) ); @@ -57,9 +52,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testMessageAlreadyReceived() public { // Submit a message - bytes32 messageID = _sendTestMessageWithNoFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ); + bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID); // Now mock receiving a message back from that subnet with a receipt of the above message. address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234; @@ -69,18 +62,12 @@ contract GetMessageHashTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddress }); _receiveTestMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageID, - relayerRewardAddress, - receipts + DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts ); // Now the message hash should be cleared. assertEq( - teleporterMessenger.getMessageHash( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageID - ), + teleporterMessenger.getMessageHash(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID), bytes32(0) ); } diff --git a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol index 88773e6b9..bfcab99f3 100644 --- a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol +++ b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol @@ -5,82 +5,50 @@ pragma solidity 0.8.18; -// import {TeleporterMessengerTest, TeleporterMessageInput, TeleporterFeeInfo, IWarpMessenger} from "./TeleporterMessengerTest.t.sol"; - -// contract GetNextMessageIDTest is TeleporterMessengerTest { -// // The state of the contract gets reset before each -// // test is run, with the `setUp()` function being called -// // each time after deployment. -// function setUp() public virtual override { -// TeleporterMessengerTest.setUp(); -// } - -// function testFirstMessageID() public { -// bytes32 blockchainID = bytes32( -// hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" -// ); - -// assertEq(teleporterMessenger.getNextMessageID(blockchainID), 1); -// } - -// function testSecondMessageID() public { -// bytes32 blockchainID = bytes32( -// hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" -// ); - -// vm.mockCall( -// WARP_PRECOMPILE_ADDRESS, -// abi.encode(IWarpMessenger.sendWarpMessage.selector), -// abi.encode(bytes32(0)) -// ); -// TeleporterMessageInput memory messageInput = TeleporterMessageInput({ -// destinationBlockchainID: blockchainID, -// destinationAddress: address(0), -// feeInfo: TeleporterFeeInfo({ -// feeTokenAddress: address(0), -// amount: uint256(0) -// }), -// requiredGasLimit: 1e6, -// allowedRelayerAddresses: new address[](0), -// message: new bytes(0) -// }); - -// uint256 first = teleporterMessenger.sendCrossChainMessage(messageInput); -// uint256 second = teleporterMessenger.getNextMessageID(blockchainID); - -// assertEq(first, 1); -// assertEq(second, 2); -// } - -// function testOtherDestinationSubnetID() public { -// bytes32 blockchainID = bytes32( -// hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff" -// ); -// bytes32 otherBlockchainID = bytes32( -// hex"00000000556677889900aabbccddeeff11223344556677889900aabbccddeeff" -// ); - -// vm.mockCall( -// WARP_PRECOMPILE_ADDRESS, -// abi.encode(IWarpMessenger.sendWarpMessage.selector), -// abi.encode(bytes32(0)) -// ); -// TeleporterMessageInput memory messageInput = TeleporterMessageInput({ -// destinationBlockchainID: blockchainID, -// destinationAddress: address(0), -// feeInfo: TeleporterFeeInfo({ -// feeTokenAddress: address(0), -// amount: uint256(0) -// }), -// requiredGasLimit: 1e6, -// allowedRelayerAddresses: new address[](0), -// message: new bytes(0) -// }); - -// uint256 first = teleporterMessenger.sendCrossChainMessage(messageInput); -// uint256 other = teleporterMessenger.getNextMessageID(otherBlockchainID); - -// assertEq(first, 1); -// assertEq(other, 1); -// } -// } +import {TeleporterMessengerTest, TeleporterMessageInput, TeleporterFeeInfo, IWarpMessenger} from "./TeleporterMessengerTest.t.sol"; + +contract GetNextMessageIDTest is TeleporterMessengerTest { + // The state of the contract gets reset before each + // test is run, with the `setUp()` function being called + // each time after deployment. + function setUp() public virtual override { + TeleporterMessengerTest.setUp(); + } + + function testGetMessageID() public { + // Generate the next expected message ID manually. + bytes32 expectedMessageID = sha256(abi.encode(address(teleporterMessenger), DEFAULT_DESTINATION_BLOCKCHAIN_ID, teleporterMessenger.messageNonce())); + + // Check the contract reports the same as expected. + assertEq(teleporterMessenger.getNextMessageID(), expectedMessageID); + + // Send a message to ensure it is assigned the expected ID. + vm.mockCall( + WARP_PRECOMPILE_ADDRESS, + abi.encode(IWarpMessenger.sendWarpMessage.selector), + abi.encode(bytes32(0)) + ); + TeleporterMessageInput memory messageInput = TeleporterMessageInput({ + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, + destinationAddress: address(0), + feeInfo: TeleporterFeeInfo({ + feeTokenAddress: address(0), + amount: uint256(0) + }), + requiredGasLimit: 1e6, + allowedRelayerAddresses: new address[](0), + message: new bytes(0) + }); + + bytes32 messageID = teleporterMessenger.sendCrossChainMessage(messageInput); + assertEq(messageID, expectedMessageID); + + // Generate the next expected message ID now that a message has been sent. + bytes32 secondExpectedMessageID = sha256(abi.encode(address(teleporterMessenger), DEFAULT_DESTINATION_BLOCKCHAIN_ID, teleporterMessenger.messageNonce())); + + // Check the contract reports the same as expected, and that is different than the first ID. + assertEq(teleporterMessenger.getNextMessageID(), secondExpectedMessageID); + assertNotEq(expectedMessageID, secondExpectedMessageID); + + } +} diff --git a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol index d9176dce8..ddcd01dc9 100644 --- a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol +++ b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol @@ -33,16 +33,13 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { TeleporterMessageReceipt[] memory expectedReceipts = new TeleporterMessageReceipt[](3); expectedReceipts[0] = TeleporterMessageReceipt( - bytes32(uint256(13)), - 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 + bytes32(uint256(13)), 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 ); expectedReceipts[1] = TeleporterMessageReceipt( - bytes32(uint256(42)), - 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 + bytes32(uint256(42)), 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 ); expectedReceipts[2] = TeleporterMessageReceipt( - bytes32(uint256(94)), - 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + bytes32(uint256(94)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); // Mock receiving each of the messages corresponding to the receipts. @@ -59,13 +56,9 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Now that we have "received" 3 mock messages, when we send a message back to the // other chain, we should expect to see the 3 receipts included in the message metadata. - bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( - blockchainID - ); - TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - expectedMessageID, - hex"deadbeef" - ); + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); + TeleporterMessage memory expectedMessage = + _createMockTeleporterMessage(expectedMessageID, hex"deadbeef"); expectedMessage.receipts = expectedReceipts; expectedMessage.destinationBlockchainID = blockchainID; TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); @@ -103,14 +96,9 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it does not contain any more receipts. - bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID( - blockchainID - ); - TeleporterMessage - memory nextExpectedMessage = _createMockTeleporterMessage( - nextExpectedMessageID, - hex"deadbeef" - ); + bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID(); + TeleporterMessage memory nextExpectedMessage = + _createMockTeleporterMessage(nextExpectedMessageID, hex"deadbeef"); nextExpectedMessage.destinationBlockchainID = blockchainID; vm.expectCall( WARP_PRECOMPILE_ADDRESS, @@ -134,38 +122,29 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { function testExceedsLimit() public { // Assemble mock receipt information that we will expect to be // included in a subsequent message sent to another chain. - TeleporterMessageReceipt[] - memory expectedReceiptsBatch1 = new TeleporterMessageReceipt[](5); // the limit of receipts per message is 5. + TeleporterMessageReceipt[] memory expectedReceiptsBatch1 = new TeleporterMessageReceipt[](5); // the limit of receipts per message is 5. expectedReceiptsBatch1[0] = TeleporterMessageReceipt( - bytes32(uint256(13)), - 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 + bytes32(uint256(13)), 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 ); expectedReceiptsBatch1[1] = TeleporterMessageReceipt( - bytes32(uint256(42)), - 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 + bytes32(uint256(42)), 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 ); expectedReceiptsBatch1[2] = TeleporterMessageReceipt( - bytes32(uint256(94)), - 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + bytes32(uint256(94)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch1[3] = TeleporterMessageReceipt( - bytes32(uint256(3)), - 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + bytes32(uint256(3)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch1[4] = TeleporterMessageReceipt( - bytes32(uint256(53)), - 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + bytes32(uint256(53)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); - TeleporterMessageReceipt[] - memory expectedReceiptsBatch2 = new TeleporterMessageReceipt[](2); // the limit of receipts per message is 5. + TeleporterMessageReceipt[] memory expectedReceiptsBatch2 = new TeleporterMessageReceipt[](2); // the limit of receipts per message is 5. expectedReceiptsBatch2[0] = TeleporterMessageReceipt( - bytes32(uint256(75)), - 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + bytes32(uint256(75)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch2[1] = TeleporterMessageReceipt( - bytes32(uint256(80)), - 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + bytes32(uint256(80)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); // Mock receiving each of the messages corresponding to the receipts. @@ -191,13 +170,9 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Now that we have "received" 7 mock messages, when we send a message back to the // other chain, we should expect to see the 5 receipts included in the message metadata because // that is the max receipt batch size limit. - bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( - blockchainID - ); - TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - expectedMessageID, - hex"deadbeef" - ); + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); + TeleporterMessage memory expectedMessage = + _createMockTeleporterMessage(expectedMessageID, hex"deadbeef"); expectedMessage.receipts = expectedReceiptsBatch1; expectedMessage.destinationBlockchainID = blockchainID; TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); @@ -235,14 +210,9 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it contains the remaining 2 receipts to be sent. - bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID( - blockchainID - ); - TeleporterMessage - memory nextExpectedMessage = _createMockTeleporterMessage( - nextExpectedMessageID, - hex"deadbeef" - ); + bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID(); + TeleporterMessage memory nextExpectedMessage = + _createMockTeleporterMessage(nextExpectedMessageID, hex"deadbeef"); nextExpectedMessage.receipts = expectedReceiptsBatch2; nextExpectedMessage.destinationBlockchainID = blockchainID; vm.expectCall( diff --git a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol index 385de33b7..aa11f4ed4 100644 --- a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol +++ b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol @@ -20,8 +20,7 @@ contract GetRelayerRewardAddressTest is TeleporterMessengerTest { bytes32 mockMessageID = bytes32(uint256(8)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - mockMessageID + DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockMessageID ), address(0) ); @@ -38,8 +37,7 @@ contract GetRelayerRewardAddressTest is TeleporterMessengerTest { // Now it has the relayer reward address. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - mockMessageID + DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockMessageID ), relayerRewardAddress ); diff --git a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol index c4b4c2bfc..d3f3309f9 100644 --- a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol @@ -104,20 +104,15 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: abi.encode(SampleMessageReceiverAction.Receive, abi.encode(messageString, true)) }); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); // Receive the message and check that message execution was successful. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); - emit MessageExecuted( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID - ); + emit MessageExecuted(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, @@ -130,18 +125,11 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Check that the message had the proper affect on the destination contract. assertEq(destinationContract.latestMessage(), messageString); - assertEq( - destinationContract.latestMessageSenderSubnetID(), - DEFAULT_ORIGIN_BLOCKCHAIN_ID - ); - assertEq( - destinationContract.latestMessageSenderAddress(), - address(this) - ); + assertEq(destinationContract.latestMessageSenderSubnetID(), DEFAULT_ORIGIN_BLOCKCHAIN_ID); + assertEq(destinationContract.latestMessageSenderAddress(), address(this)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS ); @@ -162,10 +150,8 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: abi.encode(SampleMessageReceiverAction.Receive, abi.encode(messageString, true)) }); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -188,10 +174,8 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: abi.encode(SampleMessageReceiverAction.ReceiveRecursive, abi.encode(messageString)) }); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -201,9 +185,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // still successfully delivered. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID, - messageToReceive + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( @@ -221,18 +203,12 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS ); - vm.expectRevert( - _formatTeleporterErrorMessage("retry execution failed") - ); - teleporterMessenger.retryMessageExecution( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive - ); + vm.expectRevert(_formatTeleporterErrorMessage("retry execution failed")); + teleporterMessenger.retryMessageExecution(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive); } function testStoreHashOfFailedMessageExecution() public { @@ -248,10 +224,8 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: abi.encode(SampleMessageReceiverAction.Receive, abi.encode(messageString, false)) }); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -259,9 +233,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Receive the message. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID, - messageToReceive + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( @@ -279,17 +251,11 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS ); - vm.expectRevert( - _formatTeleporterErrorMessage("retry execution failed") - ); - teleporterMessenger.retryMessageExecution( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive - ); + vm.expectRevert(_formatTeleporterErrorMessage("retry execution failed")); + teleporterMessenger.retryMessageExecution(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive); } } diff --git a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol index 58599d376..47ccf975e 100644 --- a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol +++ b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol @@ -38,10 +38,8 @@ contract MarkReceiptTest is TeleporterMessengerTest { bytes32[3] memory messageIDs; for (uint256 i = 0; i < feeRewardInfos.length; i++) { - messageIDs[i] = _sendTestMessageWithFee( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - feeRewardInfos[i].feeAmount - ); + messageIDs[i] = + _sendTestMessageWithFee(DEFAULT_ORIGIN_BLOCKCHAIN_ID, feeRewardInfos[i].feeAmount); } // Mock receiving a message with the 3 receipts from the mock messages sent above. @@ -54,16 +52,11 @@ contract MarkReceiptTest is TeleporterMessengerTest { relayerRewardAddress: feeRewardInfos[i].relayerRewardAddress }); } - TeleporterMessage - memory messageToReceive = _createMockTeleporterMessage( - bytes32(uint256(1)), - new bytes(0) - ); + TeleporterMessage memory messageToReceive = + _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); messageToReceive.receipts = receipts; - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -84,25 +77,18 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - bytes32(uint256(1)) + DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - bytes32(uint256(1)) - ) + teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1))) ); // Check that the message hashes for the message receipts we received have been cleared. for (uint256 i = 0; i < receipts.length; i++) { assertEq( - teleporterMessenger.getMessageHash( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageIDs[i] - ), + teleporterMessenger.getMessageHash(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageIDs[i]), bytes32(0) ); } @@ -110,9 +96,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { function testReceiptForNoFeeMessage() public { // Submit a a mock message with no fee. - bytes32 messageID = _sendTestMessageWithNoFee( - DEFAULT_ORIGIN_BLOCKCHAIN_ID - ); + bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_ORIGIN_BLOCKCHAIN_ID); // Mock receiving a message with the a receipts of the mock message sent above. TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](1); @@ -120,16 +104,11 @@ contract MarkReceiptTest is TeleporterMessengerTest { receivedMessageID: messageID, relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS }); - TeleporterMessage - memory messageToReceive = _createMockTeleporterMessage( - messageID, - new bytes(0) - ); + TeleporterMessage memory messageToReceive = + _createMockTeleporterMessage(messageID, new bytes(0)); messageToReceive.receipts = receipts; - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -139,30 +118,18 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageID - ), + teleporterMessenger.getRelayerRewardAddress(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID), expectedRelayerRewardAddress ); - assertTrue( - teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageID - ) - ); + assertTrue(teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID)); } function testDuplicateReceiptAllowed() public { // Submit a mock message to be sent. - FeeRewardInfo memory feeRewardInfo = FeeRewardInfo( - 1111111111111111, - 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 - ); - bytes32 receivedMessageID = _sendTestMessageWithFee( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - feeRewardInfo.feeAmount - ); + FeeRewardInfo memory feeRewardInfo = + FeeRewardInfo(1111111111111111, 0x52A258ED593C793251a89bfd36caE158EE9fC4F8); + bytes32 receivedMessageID = + _sendTestMessageWithFee(DEFAULT_ORIGIN_BLOCKCHAIN_ID, feeRewardInfo.feeAmount); // Mock receiving a message with the 2 receipts for the same mock message above. TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](2); @@ -172,16 +139,11 @@ contract MarkReceiptTest is TeleporterMessengerTest { }); receipts[0] = receipt; receipts[1] = receipt; - TeleporterMessage - memory messageToReceive = _createMockTeleporterMessage( - receivedMessageID, - new bytes(0) - ); + TeleporterMessage memory messageToReceive = + _createMockTeleporterMessage(receivedMessageID, new bytes(0)); messageToReceive.receipts = receipts; - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -200,24 +162,17 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - receivedMessageID + DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - receivedMessageID - ) + teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID) ); // Check that the message hashes for the message receipts we received have been cleared. assertEq( - teleporterMessenger.getMessageHash( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - receivedMessageID - ), + teleporterMessenger.getMessageHash(DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID), bytes32(0) ); } diff --git a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol index d560008fc..7abda0941 100644 --- a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol +++ b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol @@ -27,8 +27,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { assertEq( teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(1)) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) ), true ); @@ -37,8 +36,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { function testUnreceivedMessage() public { assertEq( teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(1)) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) ), false ); diff --git a/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol b/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol index c48f04642..7678b191e 100644 --- a/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol +++ b/contracts/src/Teleporter/tests/ReceiptsQueueTests.t.sol @@ -18,21 +18,18 @@ contract ReceiptQueueTest is Test { ReceiptQueue.TeleporterMessageReceiptQueue private _queue; // Add 3 elements to the queue. - TeleporterMessageReceipt private _receipt1 = - TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(543)), - relayerRewardAddress: 0x10eB43ef5982628728E3E4bb9F78834f67Fbb40b - }); - TeleporterMessageReceipt private _receipt2 = - TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(684384)), - relayerRewardAddress: 0x10eB43ef5982628728E3E4bb9F78834f67Fbb40b - }); - TeleporterMessageReceipt private _receipt3 = - TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(654351)), - relayerRewardAddress: 0xcC8E718045817AebA89592C72Ae1C9917f5D0894 - }); + TeleporterMessageReceipt private _receipt1 = TeleporterMessageReceipt({ + receivedMessageID: bytes32(uint256(543)), + relayerRewardAddress: 0x10eB43ef5982628728E3E4bb9F78834f67Fbb40b + }); + TeleporterMessageReceipt private _receipt2 = TeleporterMessageReceipt({ + receivedMessageID: bytes32(uint256(684384)), + relayerRewardAddress: 0x10eB43ef5982628728E3E4bb9F78834f67Fbb40b + }); + TeleporterMessageReceipt private _receipt3 = TeleporterMessageReceipt({ + receivedMessageID: bytes32(uint256(654351)), + relayerRewardAddress: 0xcC8E718045817AebA89592C72Ae1C9917f5D0894 + }); function testEnqueueDequeueSuccess() public { // Check the initial size is zero. diff --git a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol index e00268d62..3db0fa9df 100644 --- a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol @@ -45,21 +45,14 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: DEFAULT_MESSAGE_PAYLOAD }); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); // Check receipt queue size - assertEq( - teleporterMessenger.getReceiptQueueSize( - DEFAULT_ORIGIN_BLOCKCHAIN_ID - ), - 0 - ); + assertEq(teleporterMessenger.getReceiptQueueSize(DEFAULT_ORIGIN_BLOCKCHAIN_ID), 0); // Receive the message. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); @@ -73,25 +66,18 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { teleporterMessenger.receiveCrossChainMessage(0, DEFAULT_RELAYER_REWARD_ADDRESS); // Check receipt queue size - assertEq( - teleporterMessenger.getReceiptQueueSize( - DEFAULT_ORIGIN_BLOCKCHAIN_ID - ), - 1 - ); + assertEq(teleporterMessenger.getReceiptQueueSize(DEFAULT_ORIGIN_BLOCKCHAIN_ID), 1); // Check receipt queue contents - TeleporterMessageReceipt memory receipt = teleporterMessenger - .getReceiptAtIndex(DEFAULT_ORIGIN_BLOCKCHAIN_ID, 0); + TeleporterMessageReceipt memory receipt = + teleporterMessenger.getReceiptAtIndex(DEFAULT_ORIGIN_BLOCKCHAIN_ID, 0); assertEq(receipt.receivedMessageID, bytes32(uint256(1))); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); // Receive at a different index messageToReceive.messageID = bytes32(uint256(2)); - warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); _setUpSuccessGetVerifiedWarpMessageMock(3, warpMessage); // Receive the message. @@ -106,18 +92,10 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { teleporterMessenger.receiveCrossChainMessage(3, DEFAULT_RELAYER_REWARD_ADDRESS); // Check receipt queue size - assertEq( - teleporterMessenger.getReceiptQueueSize( - DEFAULT_ORIGIN_BLOCKCHAIN_ID - ), - 2 - ); + assertEq(teleporterMessenger.getReceiptQueueSize(DEFAULT_ORIGIN_BLOCKCHAIN_ID), 2); // Check receipt queue contents - receipt = teleporterMessenger.getReceiptAtIndex( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - 1 - ); + receipt = teleporterMessenger.getReceiptAtIndex(DEFAULT_ORIGIN_BLOCKCHAIN_ID, 1); assertEq(receipt.receivedMessageID, bytes32(uint256(2))); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); } @@ -154,16 +132,11 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { function testInvalidOriginSenderAddress() public { // Construct the test message to be received. - TeleporterMessage - memory messageToReceive = _createMockTeleporterMessage( - bytes32(uint256(1)), - new bytes(0) - ); - - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + TeleporterMessage memory messageToReceive = + _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); + + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); address invalidSenderAddress = 0xb73aD7e0FF026a805D1f1186EAB89E41bf01835D; warpMessage.originSenderAddress = invalidSenderAddress; @@ -176,21 +149,14 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { function testInvalidDestinationBlockchainID() public { // Construct the test message to be received. - TeleporterMessage - memory messageToReceive = _createMockTeleporterMessage( - bytes32(uint256(1)), - new bytes(0) - ); - bytes32 invalidDestinationBlockchainID = bytes32( - hex"deadbeefcafebabedeadbeefcafebabedeadbeefcafebabedeadbeefcafebabe" - ); - messageToReceive - .destinationBlockchainID = invalidDestinationBlockchainID; + TeleporterMessage memory messageToReceive = + _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); + bytes32 invalidDestinationBlockchainID = + bytes32(hex"deadbeefcafebabedeadbeefcafebabedeadbeefcafebabedeadbeefcafebabe"); + messageToReceive.destinationBlockchainID = invalidDestinationBlockchainID; - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -230,10 +196,8 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: DEFAULT_MESSAGE_PAYLOAD }); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); diff --git a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol index 6ffa29d54..270aada1a 100644 --- a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol +++ b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol @@ -100,27 +100,20 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { // receiving back a message with receipt of that message such that the relayer // is able to redeem the reward. function _setUpRelayerRewards(FeeRewardInfo memory feeRewardInfo) private { - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - feeRewardInfo.feeAmount - ); + bytes32 messageID = + _sendTestMessageWithFee(DEFAULT_ORIGIN_BLOCKCHAIN_ID, feeRewardInfo.feeAmount); TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](1); receipts[0] = TeleporterMessageReceipt({ receivedMessageID: messageID, relayerRewardAddress: feeRewardInfo.relayerRewardAddress }); - TeleporterMessage - memory messageToReceive = _createMockTeleporterMessage( - bytes32(uint256(1)), - new bytes(0) - ); + TeleporterMessage memory messageToReceive = + _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); messageToReceive.receipts = receipts; - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -147,16 +140,12 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - bytes32(uint256(1)) + DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - bytes32(uint256(1)) - ) + teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1))) ); } } diff --git a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol index 201932ed6..5ae91daf4 100644 --- a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol @@ -123,10 +123,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { }); vm.expectRevert(_formatTeleporterErrorMessage("message not found")); - teleporterMessenger.retryMessageExecution( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - fakeMessage - ); + teleporterMessenger.retryMessageExecution(DEFAULT_ORIGIN_BLOCKCHAIN_ID, fakeMessage); } function testInvalidMessageHash() public { @@ -203,10 +200,8 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: abi.encode(action, abi.encode(messageString)) }); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -216,9 +211,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { vm.roll(12); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID, - messageToReceive + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( @@ -237,15 +230,13 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ), DEFAULT_RELAYER_REWARD_ADDRESS ); assertTrue( teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID ) ); diff --git a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol index ec042c96e..db5711224 100644 --- a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol @@ -21,10 +21,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testSuccess() public { // Send a message - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - 654456 - ); + bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: messageID, senderAddress: address(this), @@ -38,8 +35,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { // Retry it teleporterMessenger.retrySendCrossChainMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - expectedMessage + DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessage ); } @@ -56,17 +52,13 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { }); vm.expectRevert(_formatTeleporterErrorMessage("message not found")); teleporterMessenger.retrySendCrossChainMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - fakeMessage + DEFAULT_DESTINATION_BLOCKCHAIN_ID, fakeMessage ); } function testInvalidMessageHash() public { // Send a message, then try to alter it's contents. - bytes32 messageID = _sendTestMessageWithFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - 654456 - ); + bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456); TeleporterMessage memory alteredMessage = TeleporterMessage({ messageID: messageID, senderAddress: address(this), @@ -81,8 +73,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { // Retry it - should fail. vm.expectRevert(_formatTeleporterErrorMessage("invalid message hash")); teleporterMessenger.retrySendCrossChainMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - alteredMessage + DEFAULT_DESTINATION_BLOCKCHAIN_ID, alteredMessage ); } } diff --git a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol index 4bce59adc..12130472f 100644 --- a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol @@ -25,10 +25,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testSendMessageNoFee() public { // Arrange TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - teleporterMessenger.getNextMessageID( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ), - hex"deadbeef" + teleporterMessenger.getNextMessageID(), hex"deadbeef" ); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ @@ -75,15 +72,10 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { // Arrange // Construct the message to submit. TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - teleporterMessenger.getNextMessageID( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ), - hex"deadbeef" - ); - TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo( - address(_mockFeeAsset), - 13131313131313131313 + teleporterMessenger.getNextMessageID(), hex"deadbeef" ); + TeleporterFeeInfo memory feeInfo = + TeleporterFeeInfo(address(_mockFeeAsset), 13131313131313131313); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: expectedMessage.destinationAddress, diff --git a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol index 0239aa6e7..b47f97365 100644 --- a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol +++ b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol @@ -45,9 +45,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { } // Mock sending a message back to that chain, which should include the 3 receipts. - bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ); + bytes32 expectedMessageID = + teleporterMessenger.getNextMessageID(); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: expectedMessageID, senderAddress: address(this), @@ -61,19 +60,13 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); emit SendCrossChainMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - expectedMessageID, - expectedMessage, - feeInfo - ); - bytes32 outboundMessageID = _sendTestMessageWithNoFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID + DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessageID, expectedMessage, feeInfo ); + bytes32 outboundMessageID = _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID); assertEq(outboundMessageID, expectedMessageID); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(1)) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) ), relayerRewardAddresses[0] ); @@ -88,9 +81,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddresses[0] }); - bytes32 newExpectedMessageID = teleporterMessenger.getNextMessageID( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ); + bytes32 newExpectedMessageID = + teleporterMessenger.getNextMessageID(); TeleporterMessage memory newExpectedMessage = TeleporterMessage({ messageID: newExpectedMessageID, senderAddress: address(this), @@ -109,16 +101,11 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - newExpectedMessageID, - newExpectedMessage, - feeInfo + DEFAULT_DESTINATION_BLOCKCHAIN_ID, newExpectedMessageID, newExpectedMessage, feeInfo ); - outboundMessageID = _sendSpecifiedReceiptsWithNoFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - receiptIDs - ); + outboundMessageID = + _sendSpecifiedReceiptsWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, receiptIDs); assertEq(outboundMessageID, newExpectedMessageID); } @@ -133,18 +120,15 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { ); // Mock sending a message to that chain, which should include the 2 copies of the same receipt. - TeleporterMessageReceipt - memory expectedReceipt = TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(1)), - relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS - }); - TeleporterMessageReceipt[] - memory expectedReceipts = new TeleporterMessageReceipt[](2); + TeleporterMessageReceipt memory expectedReceipt = TeleporterMessageReceipt({ + receivedMessageID: bytes32(uint256(1)), + relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS + }); + TeleporterMessageReceipt[] memory expectedReceipts = new TeleporterMessageReceipt[](2); expectedReceipts[0] = expectedReceipt; expectedReceipts[1] = expectedReceipt; - bytes32 expectedMessageID = teleporterMessenger.getNextMessageID( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ); + bytes32 expectedMessageID = + teleporterMessenger.getNextMessageID(); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: expectedMessageID, senderAddress: address(this), @@ -169,10 +153,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { TeleporterFeeInfo(address(0), 0) ); - bytes32 outboundMessageID = _sendSpecifiedReceiptsWithNoFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageIDs - ); + bytes32 outboundMessageID = + _sendSpecifiedReceiptsWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageIDs); assertEq(outboundMessageID, expectedMessageID); } @@ -190,10 +172,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Try to send a receipt for an unreceived message from that chain - should fail. vm.expectRevert(_formatTeleporterErrorMessage("receipt not found")); - _sendSpecifiedReceiptsWithNoFee( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - missingIDs - ); + _sendSpecifiedReceiptsWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, missingIDs); } function _sendSpecifiedReceiptsWithFee( @@ -239,12 +218,6 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { bytes32 blockchainID, bytes32[] memory messageIDs ) private returns (bytes32) { - return - _sendSpecifiedReceiptsWithFee( - blockchainID, - messageIDs, - address(0), - 0 - ); + return _sendSpecifiedReceiptsWithFee(blockchainID, messageIDs, address(0), 0); } } diff --git a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol index aac65259c..48cd96d61 100644 --- a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol +++ b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol @@ -25,15 +25,10 @@ contract TeleporterMessengerTest is Test { TeleporterMessenger public teleporterMessenger; bytes32 public constant DEFAULT_ORIGIN_BLOCKCHAIN_ID = - bytes32( - hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd" - ); + bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); bytes32 public constant DEFAULT_DESTINATION_BLOCKCHAIN_ID = - bytes32( - hex"1234567812345678123456781234567812345678123456781234567812345678" - ); - address public constant DEFAULT_DESTINATION_ADDRESS = - 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; + bytes32(hex"1234567812345678123456781234567812345678123456781234567812345678"); + address public constant DEFAULT_DESTINATION_ADDRESS = 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; uint256 public constant DEFAULT_REQUIRED_GAS_LIMIT = 1e6; address public constant WARP_PRECOMPILE_ADDRESS = 0x0200000000000000000000000000000000000005; address public constant DEFAULT_RELAYER_REWARD_ADDRESS = @@ -63,15 +58,10 @@ contract TeleporterMessengerTest is Test { ); event MessageExecutionFailed( - bytes32 indexed originBlockchainID, - bytes32 indexed messageID, - TeleporterMessage message + bytes32 indexed originBlockchainID, bytes32 indexed messageID, TeleporterMessage message ); - event MessageExecuted( - bytes32 indexed originBlockchainID, - bytes32 indexed messageID - ); + event MessageExecuted(bytes32 indexed originBlockchainID, bytes32 indexed messageID); event FailedFeePayment( bytes32 indexed destinationBlockchainID, @@ -97,25 +87,17 @@ contract TeleporterMessengerTest is Test { // Send an empty message to initialize the blockchain ID. _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID); - assertEq( - teleporterMessenger.blockchainID(), - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ); + assertEq(teleporterMessenger.blockchainID(), DEFAULT_DESTINATION_BLOCKCHAIN_ID); _mockFeeAsset = new UnitTestMockERC20(); } function testEmptyReceiptQueue() public { - assertEq( - teleporterMessenger.getReceiptQueueSize( - DEFAULT_DESTINATION_BLOCKCHAIN_ID - ), - 0 - ); + assertEq(teleporterMessenger.getReceiptQueueSize(DEFAULT_DESTINATION_BLOCKCHAIN_ID), 0); vm.expectRevert("ReceiptQueue: index out of bounds"); - TeleporterMessageReceipt memory receipt = teleporterMessenger - .getReceiptAtIndex(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 0); + TeleporterMessageReceipt memory receipt = + teleporterMessenger.getReceiptAtIndex(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 0); assertEq(receipt.receivedMessageID, 0); assertEq(receipt.relayerRewardAddress, address(0)); } @@ -163,9 +145,7 @@ contract TeleporterMessengerTest is Test { return teleporterMessenger.sendCrossChainMessage(messageInput); } - function _sendTestMessageWithNoFee( - bytes32 blockchainID - ) internal returns (bytes32) { + function _sendTestMessageWithNoFee(bytes32 blockchainID) internal returns (bytes32) { return _sendTestMessageWithFee(blockchainID, 0); } @@ -224,15 +204,10 @@ contract TeleporterMessengerTest is Test { // Construct the test message to be received. By default, the destination // address will be the DEFAULT_DESTINATION_ADDRESS. - TeleporterMessage - memory messageToReceive = _createMockTeleporterMessage( - bytes32(uint256(9)), - messageData - ); - WarpMessage memory warpMessage = _createDefaultWarpMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - abi.encode(messageToReceive) - ); + TeleporterMessage memory messageToReceive = + _createMockTeleporterMessage(bytes32(uint256(9)), messageData); + WarpMessage memory warpMessage = + _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); // We have to mock the precompile call so that it doesn't revert in the tests. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -244,9 +219,7 @@ contract TeleporterMessengerTest is Test { // Receive the message - which should fail execution. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - messageToReceive.messageID, - messageToReceive + DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive ); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( @@ -258,11 +231,7 @@ contract TeleporterMessengerTest is Test { ); teleporterMessenger.receiveCrossChainMessage(0, DEFAULT_RELAYER_REWARD_ADDRESS); - return ( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_DESTINATION_ADDRESS, - messageToReceive - ); + return (DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_DESTINATION_ADDRESS, messageToReceive); } // Create a mock message to be used in tests. It should include no receipts @@ -272,17 +241,16 @@ contract TeleporterMessengerTest is Test { bytes32 messageID, bytes memory message ) internal view returns (TeleporterMessage memory) { - return - TeleporterMessage({ - messageID: messageID, - senderAddress: address(this), - destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, - destinationAddress: DEFAULT_DESTINATION_ADDRESS, - requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, - allowedRelayerAddresses: new address[](0), - receipts: new TeleporterMessageReceipt[](0), - message: message - }); + return TeleporterMessage({ + messageID: messageID, + senderAddress: address(this), + destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, + destinationAddress: DEFAULT_DESTINATION_ADDRESS, + requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT, + allowedRelayerAddresses: new address[](0), + receipts: new TeleporterMessageReceipt[](0), + message: message + }); } function _createDefaultWarpMessage( diff --git a/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol b/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol index 7e101d15c..a5bc4274a 100644 --- a/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/PauseTeleporterAddressTests.t.sol @@ -16,20 +16,12 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { function testPauseTeleporterAddressBasic() public { // Check that the teleporterAddress is not paused initially vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that teleporterAddress can not deliver messages once paused _pauseTeleporterAddressSuccess(app, teleporterAddress); vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("Teleporter address paused")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testAlreadyPausedTeleporterAddress() public { @@ -37,11 +29,7 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { _pauseTeleporterAddressSuccess(app, teleporterAddress); vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("Teleporter address paused")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that teleporterAddress can not be paused again vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("address already paused")); app.pauseTeleporterAddress(teleporterAddress); @@ -56,35 +44,19 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { // Check that the teleporterAddress is not paused initially vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that teleporterAddress can not deliver messages once paused _pauseTeleporterAddressSuccess(app, teleporterAddress); vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("Teleporter address paused")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that after updating mininum Teleporter version, the address is still paused _updateMinTeleporterVersionSuccess(app, teleporterRegistry.latestVersion()); vm.prank(teleporterAddress); - vm.expectRevert( - _formatTeleporterUpgradeableErrorMessage( - "Teleporter address paused" - ) - ); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("Teleporter address paused")); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testPauseBeforeRegister() public { @@ -101,16 +73,8 @@ contract PauseTeleporterAddressTest is TeleporterUpgradeableTest { // Check that the new Teleporter address is paused vm.prank(newTeleporterAddress); - vm.expectRevert( - _formatTeleporterUpgradeableErrorMessage( - "Teleporter address paused" - ) - ); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("Teleporter address paused")); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testPauseZeroAddress() public { diff --git a/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol b/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol index 9f70bbf42..fe8d4ba57 100644 --- a/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/TeleporterOwnerUpgradeableTests.t.sol @@ -110,27 +110,15 @@ contract TeleporterOwnerUpgradeableTest is TeleporterUpgradeableTest { // Check that the Teleporter address is still paused vm.prank(teleporterAddress); - ownerApp.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + vm.expectRevert("TeleporterUpgradeable: Teleporter address paused"); + ownerApp.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Unpause the Teleporter address from owner account _unpauseTeleporterAddressSuccess(ownerApp, teleporterAddress); // Check that the Teleporter address can now deliver messages vm.prank(teleporterAddress); - vm.expectRevert( - _formatTeleporterUpgradeableErrorMessage( - "Teleporter address paused" - ) - ); - ownerApp.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + ownerApp.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testOwnerUpgradeAccess() public { diff --git a/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol b/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol index d38491606..9bd7f66d0 100644 --- a/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/TeleporterUpgradeableTests.t.sol @@ -8,6 +8,7 @@ pragma solidity 0.8.18; import {TeleporterUpgradeable} from "../TeleporterUpgradeable.sol"; import {TeleporterRegistryTest} from "./TeleporterRegistryTests.t.sol"; import {ITeleporterMessenger} from "../../ITeleporterMessenger.sol"; +import {TeleporterMessenger} from "../../TeleporterMessenger.sol"; contract ExampleUpgradeableApp is TeleporterUpgradeable { constructor(address teleporterRegistryAddress) @@ -35,9 +36,7 @@ contract ExampleUpgradeableApp is TeleporterUpgradeable { contract TeleporterUpgradeableTest is TeleporterRegistryTest { ExampleUpgradeableApp public app; bytes32 public constant DEFAULT_ORIGIN_BLOCKCHAIN_ID = - bytes32( - hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd" - ); + bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); address public constant DEFAULT_ORIGIN_ADDRESS = 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; @@ -65,32 +64,18 @@ contract TeleporterUpgradeableTest is TeleporterRegistryTest { function testOnlyAllowedTeleporter() public { assertEq(app.getMinTeleporterVersion(), 1); - vm.expectRevert( - _formatRegistryErrorMessage("protocol address not found") - ); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + vm.expectRevert(_formatRegistryErrorMessage("protocol address not found")); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testUpdateMinTeleporterVersion() public { // First check that calling with initial teleporter address works assertEq(app.getMinTeleporterVersion(), 1); vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Now add new protocol version to registry and update the app's min version address newTeleporterAddress = address(new TeleporterMessenger()); @@ -103,25 +88,13 @@ contract TeleporterUpgradeableTest is TeleporterRegistryTest { assertEq(app.getMinTeleporterVersion(), 2); // Check that calling with the old teleporter address fails - vm.expectRevert( - _formatTeleporterUpgradeableErrorMessage( - "invalid Teleporter sender" - ) - ); + vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("invalid Teleporter sender")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that calling with the new teleporter address works vm.prank(newTeleporterAddress); - app.receiveTeleporterMessage( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, - DEFAULT_ORIGIN_ADDRESS, - "" - ); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testSetMinTeleporterVersion() public { diff --git a/contracts/src/Teleporter/upgrades/tests/UnpauseTeleporterAddressTests.t.sol b/contracts/src/Teleporter/upgrades/tests/UnpauseTeleporterAddressTests.t.sol index 38accbc8a..027874e13 100644 --- a/contracts/src/Teleporter/upgrades/tests/UnpauseTeleporterAddressTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/UnpauseTeleporterAddressTests.t.sol @@ -24,7 +24,7 @@ contract UnpauseTeleporterAddressTest is TeleporterUpgradeableTest { // The Teleporter address paused no longer can deliver messages to the app vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("Teleporter address paused")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Add a new Teleporter address to the registry and update minimum version address newTeleporterAddress = address(new TeleporterMessenger()); @@ -38,27 +38,27 @@ contract UnpauseTeleporterAddressTest is TeleporterUpgradeableTest { // because the minimum version is still greater than the Teleporter address version vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("invalid Teleporter sender")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that the new Teleporter address delivers messages fine vm.prank(newTeleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testUnpauseTeleporterAddressBasic() public { // Check that the teleporterAddress is not paused initially vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that teleporterAddress can not deliver messages once paused _pauseTeleporterAddressSuccess(app, teleporterAddress); vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("Teleporter address paused")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Unpause the teleporterAddress and check that it can deliver messages again _unpauseTeleporterAddressSuccess(app, teleporterAddress); vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testAlreadyUnpausedTeleporterAddress() public { @@ -94,7 +94,7 @@ contract UnpauseTeleporterAddressTest is TeleporterUpgradeableTest { // Check that the new Teleporter address is unpaused vm.prank(newTeleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testUnpauseAfterRegister() public { @@ -114,7 +114,7 @@ contract UnpauseTeleporterAddressTest is TeleporterUpgradeableTest { // Check that the new Teleporter address is unpaused vm.prank(newTeleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testUnpauseZeroAddress() public { diff --git a/contracts/src/Teleporter/upgrades/tests/UpdateMinTeleporterVersionTests.t.sol b/contracts/src/Teleporter/upgrades/tests/UpdateMinTeleporterVersionTests.t.sol index 7855fa8a6..9e676d400 100644 --- a/contracts/src/Teleporter/upgrades/tests/UpdateMinTeleporterVersionTests.t.sol +++ b/contracts/src/Teleporter/upgrades/tests/UpdateMinTeleporterVersionTests.t.sol @@ -17,7 +17,7 @@ contract UpdateMinTeleporterVersionTest is TeleporterUpgradeableTest { // First check that calling with initial teleporter address works assertEq(app.getMinTeleporterVersion(), 1); vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Now add new protocol version to registry and update the app's min version address newTeleporterAddress = address(new TeleporterMessenger()); @@ -29,11 +29,11 @@ contract UpdateMinTeleporterVersionTest is TeleporterUpgradeableTest { // Check that calling with the old teleporter address fails vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("invalid Teleporter sender")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Check that calling with the new teleporter address works vm.prank(newTeleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testUpdateToNonRegisteredVersion() public { @@ -74,11 +74,11 @@ contract UpdateMinTeleporterVersionTest is TeleporterUpgradeableTest { // Make sure that the old minimum Teleporter version can not deliver messages vm.expectRevert(_formatTeleporterUpgradeableErrorMessage("invalid Teleporter sender")); vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); // Make sure that the new minimum Teleporter version can still deliver messages vm.prank(newTeleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testUpdateWithCurrentVersion() public { @@ -99,7 +99,7 @@ contract UpdateMinTeleporterVersionTest is TeleporterUpgradeableTest { // Check that calling with the teleporter address works vm.prank(teleporterAddress); - app.receiveTeleporterMessage(DEFAULT_ORIGIN_CHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); + app.receiveTeleporterMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_ORIGIN_ADDRESS, ""); } function testUpdateWithGreaterThanLatestVersion() public { From 14d8367bfb464ac84c570e634375ca21b4d52606 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 15 Dec 2023 14:09:57 -0500 Subject: [PATCH 07/16] Update ABI bindings --- .../ERC20Bridge/ERC20Bridge/ERC20Bridge.go | 4 +- .../ExampleCrossChainMessenger.go | 4 +- .../ERC20TokenSource/ERC20TokenSource.go | 2 +- .../NativeTokenDestination.go | 2 +- .../NativeTokenSource/NativeTokenSource.go | 2 +- .../BlockHashPublisher/BlockHashPublisher.go | 2 +- .../BlockHashReceiver/BlockHashReceiver.go | 4 +- .../TeleporterMessenger.go | 52 +++++++++---------- .../TeleporterRegistry/TeleporterRegistry.go | 2 +- 9 files changed, 37 insertions(+), 37 deletions(-) diff --git a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go index 69caa80d2..a61e7ef89 100644 --- a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go +++ b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go @@ -31,8 +31,8 @@ var ( // ERC20BridgeMetaData contains all meta data concerning the ERC20Bridge contract. var ERC20BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"name\":\"CreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintBridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"}],\"name\":\"SubmitCreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CREATE_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"primaryFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFeeAmount\",\"type\":\"uint256\"}],\"name\":\"bridgeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"nativeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"nativeSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"nativeDecimals\",\"type\":\"uint8\"}],\"name\":\"encodeCreateBridgeTokenData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeMintBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeTransferBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenAddress\",\"type\":\"address\"}],\"name\":\"nativeToWrappedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractERC20\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"messageFeeAmount\",\"type\":\"uint256\"}],\"name\":\"submitCreateBridgeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"submittedBridgeTokenCreations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"tokenCreationSubmitted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeToken\",\"type\":\"address\"}],\"name\":\"wrappedTokenContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"bridgeTokenExists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b506040516200440738038062004407833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614159620002ae600039600081816101f801528181610a42015281816119c1015261228c01526000818161017401528181610d0201528181610f2f015261113201526141596000f3fe60806040523480156200001157600080fd5b5060043610620001695760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da11462000394578063c60da61214620003c8578063c63d220714620003df578063c868efaa14620003f6578063d2cc7a70146200040d578063f2fde38b146200041657600080fd5b80637a465fd914620002c35780638343f66114620002ce5780638c56fcf014620003165780638da5cb5b146200032d57806397314297146200033f5780639bd9abc0146200036e57600080fd5b80635f217bcc116200012c5780635f217bcc146200024057806365435568146200024b5780636b47cd9a14620002885780636c7e40d11462000293578063715018a614620002aa5780637497185614620002b457600080fd5b80631a7f5bec146200016e5780632b0d8f1814620001b3578063367e958414620001cc5780634950d2d014620001f25780635eb995141462000229575b600080fd5b620001967f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001ca620001c436600462002512565b6200042d565b005b620001e3620001dd36600462002613565b6200057a565b604051620001aa9190620026fb565b6200021a7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001aa565b620001ca6200023a36600462002710565b620005d9565b6200021a621e848081565b620001966200025c3660046200272a565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200021a620493e081565b620001ca620002a436600462002771565b620005f1565b620001ca62000942565b620001966005600160991b0181565b6200021a62030d4081565b62000305620002df3660046200272a565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001aa565b620001e362000327366004620027d3565b6200095a565b6003546001600160a01b031662000196565b620003056200035036600462002512565b6001600160a01b031660009081526001602052604090205460ff1690565b620003056200037f36600462002512565b60066020526000908152604090205460ff1681565b6200021a620003a53660046200272a565b600560209081526000938452604080852082529284528284209052825290205481565b620001e3620003d936600462002819565b620009b6565b620001ca620003f036600462002885565b62000a36565b620001ca62000407366004620028fa565b62000cea565b6002546200021a565b620001ca6200042736600462002512565b62000ea5565b6200043762000f21565b6001600160a01b038116620004aa5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156200052b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401620004a1565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60606000858585856040516020016200059794939291906200298a565b6040516020818303038152906040529050600081604051602001620005be929190620029ef565b6040516020818303038152906040529150505b949350505050565b620005e362000f21565b620005ee8162000f2b565b50565b620005fb620010d2565b6001600160a01b038416620006245760405162461bcd60e51b8152600401620004a19062002a29565b6000620006306200112d565b9050600082156200065f5762000647848462001247565b90506200065f6001600160a01b0385168383620013bd565b60006200079d86876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620006a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620006cf919081019062002ace565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200070e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000738919081019062002ace565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000777573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062002b07565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff81111562000819576200081962002532565b60405190808252806020026020018201604052801562000843578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b81526004016200086b919062002b6d565b6020604051808303816000875af11580156200088b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b1919062002bef565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009249086815260200190565b60405180910390a4505050506200093b6001600055565b5050505050565b6200094c620014a9565b62000958600062001505565b565b60606000848484604051602001620009759392919062002c09565b60405160208183030381529060405290506001816040516020016200099c929190620029ef565b6040516020818303038152906040529150505b9392505050565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000a1a90600290839061010001620029ef565b6040516020818303038152906040529150509695505050505050565b62000a40620010d2565b7f0000000000000000000000000000000000000000000000000000000000000000870362000a825760405162461bcd60e51b8152600401620004a19062002c2d565b6001600160a01b03841662000aab5760405162461bcd60e51b8152600401620004a19062002c75565b6001600160a01b03861662000ad45760405162461bcd60e51b8152600401620004a19062002a29565b6001600160a01b03851660009081526006602052604090205460ff161562000bbf5762000b02818362002cce565b831162000b615760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b6064820152608401620004a1565b62000bb96040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001557565b62000cd6565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000c515760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b6064820152608401620004a1565b600062000c5f868562001247565b905082811162000cc45760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b6064820152608401620004a1565b62000cd488888888858862001943565b505b62000ce16001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000d52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d78919062002bef565b101562000de15760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401620004a1565b3360009081526001602052604090205460ff161562000e5c5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401620004a1565b62000e9f848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001bff92505050565b50505050565b62000eaf620014a9565b6001600160a01b03811662000f165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004a1565b620005ee8162001505565b62000958620014a9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f8c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fb2919062002bef565b60025490915081831115620010245760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401620004a1565b8083116200109b5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401620004a1565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011265760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401620004a1565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200118f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b5919062002ce4565b9050620011da816001600160a01b031660009081526001602052604090205460ff1690565b15620012425760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401620004a1565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801562001291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012b7919062002bef565b9050620012d06001600160a01b03851633308662001d7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801562001318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200133e919062002bef565b9050818111620013a65760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401620004a1565b620013b2828262002d04565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200140f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001435919062002bef565b62001441919062002cce565b6040516001600160a01b03851660248201526044810182905290915062000e9f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001da1565b6003546001600160a01b03163314620009585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620015636200112d565b90506000808360a001511115620015a6576200158883604001518460a0015162001247565b6040840151909150620015a6906001600160a01b03168383620013bd565b60008360a001518460800151620015be919062002d04565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b1580156200161057600080fd5b505af115801562001625573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001690919062002bef565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016f9919062002ce4565b9050818760000151036200173f57806001600160a01b031687602001516001600160a01b0316146200173f5760405162461bcd60e51b8152600401620004a19062002d1a565b6000620017c588600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200178e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017b4919062002ce4565b8b60600151898d60c00151620009b6565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff81111562001845576200184562002532565b6040519080825280602002602001820160405280156200186f578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001897919062002b6d565b6020604051808303816000875af1158015620018b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018dd919062002bef565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019309392919062002c09565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff1615620019bf5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b6064820152608401620004a1565b7f0000000000000000000000000000000000000000000000000000000000000000860362001a015760405162461bcd60e51b8152600401620004a19062002c2d565b600062001a0d6200112d565b9050811562001a2c5762001a2c6001600160a01b0386168284620013bd565b600062001a3a838562002d04565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001a7f90849062002cce565b909155506000905062001a948787846200095a565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001b105762001b1062002532565b60405190808252806020026020018201604052801562001b3a578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001b62919062002b6d565b6020604051808303816000875af115801562001b82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ba8919062002bef565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001beb9392919062002c09565b60405180910390a450505050505050505050565b6000808280602001905181019062001c18919062002d69565b9092509050600082600281111562001c345762001c34620029d9565b0362001c78576000806000808480602001905181019062001c56919062002dd8565b935093509350935062001c6e89898686868662001e7f565b505050506200093b565b600182600281111562001c8f5762001c8f620029d9565b0362001cce5760008060008380602001905181019062001cb0919062002e62565b92509250925062001cc5888885858562001fee565b5050506200093b565b600282600281111562001ce55762001ce5620029d9565b0362001d34576000806000806000808680602001905181019062001d0a919062002eaa565b95509550955095509550955062001d288b8b88888888888862002168565b5050505050506200093b565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e00000000006044820152606401620004a1565b62000e9f846323b872dd60e01b858585604051602401620014719392919062002c09565b600062001df8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023219092919063ffffffff16565b80519091501562001e7a578080602001905181019062001e19919062002f1a565b62001e7a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620004a1565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001f105760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b6064820152608401620004a1565b600086868686868660405162001f2690620024ee565b62001f379695949392919062002f3e565b604051809103906000f08015801562001f54573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b62001ff8620010d2565b6001600160a01b038216620020215760405162461bcd60e51b8152600401620004a19062002c75565b60008581526007602090815260408083206001600160a01b0380891685529083528184208782168552909252909120541680620020b25760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b6064820152608401620004a1565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620020fd57600080fd5b505af115801562002112573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a2506200093b6001600055565b62002172620010d2565b6001600160a01b0383166200219b5760405162461bcd60e51b8152600401620004a19062002c75565b6001600160a01b038516620021c45760405162461bcd60e51b8152600401620004a19062002a29565b60008881526005602090815260408083206001600160a01b03808c1685529083528184209088168452909152902054828110156200224f5760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b6064820152608401620004a1565b6200225b838262002d04565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620022fa576001600160a01b0386163014620022dd5760405162461bcd60e51b8152600401620004a19062002d1a565b620022f36001600160a01b038616858562002332565b506200230c565b6200230a87878787878762001943565b505b620023176001600055565b5050505050505050565b6060620005d1848460008562002364565b6040516001600160a01b03831660248201526044810182905262001e7a90849063a9059cbb60e01b9060640162001471565b606082471015620023c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401620004a1565b600080866001600160a01b03168587604051620023e5919062002f9d565b60006040518083038185875af1925050503d806000811462002424576040519150601f19603f3d011682016040523d82523d6000602084013e62002429565b606091505b50915091506200243c8783838762002447565b979650505050505050565b60608315620024bb578251600003620024b3576001600160a01b0385163b620024b35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620004a1565b5081620005d1565b620005d18383815115620024d25781518083602001fd5b8060405162461bcd60e51b8152600401620004a19190620026fb565b6111688062002fbc83390190565b6001600160a01b0381168114620005ee57600080fd5b6000602082840312156200252557600080fd5b8135620009af81620024fc565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562002574576200257462002532565b604052919050565b600067ffffffffffffffff82111562002599576200259962002532565b50601f01601f191660200190565b600082601f830112620025b957600080fd5b8135620025d0620025ca826200257c565b62002548565b818152846020838601011115620025e657600080fd5b816020850160208301376000918101602001919091529392505050565b60ff81168114620005ee57600080fd5b600080600080608085870312156200262a57600080fd5b84356200263781620024fc565b9350602085013567ffffffffffffffff808211156200265557600080fd5b6200266388838901620025a7565b945060408701359150808211156200267a57600080fd5b506200268987828801620025a7565b92505060608501356200269c8162002603565b939692955090935050565b60005b83811015620026c4578181015183820152602001620026aa565b50506000910152565b60008151808452620026e7816020860160208601620026a7565b601f01601f19169290920160200192915050565b602081526000620009af6020830184620026cd565b6000602082840312156200272357600080fd5b5035919050565b6000806000606084860312156200274057600080fd5b8335925060208401356200275481620024fc565b915060408401356200276681620024fc565b809150509250925092565b600080600080600060a086880312156200278a57600080fd5b8535945060208601356200279e81620024fc565b93506040860135620027b081620024fc565b92506060860135620027c281620024fc565b949793965091946080013592915050565b600080600060608486031215620027e957600080fd5b8335620027f681620024fc565b925060208401356200280881620024fc565b929592945050506040919091013590565b60008060008060008060c087890312156200283357600080fd5b8635955060208701356200284781620024fc565b945060408701356200285981620024fc565b935060608701356200286b81620024fc565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a031215620028a157600080fd5b873596506020880135620028b581620024fc565b95506040880135620028c781620024fc565b94506060880135620028d981620024fc565b9699959850939660808101359560a0820135955060c0909101359350915050565b600080600080606085870312156200291157600080fd5b8435935060208501356200292581620024fc565b9250604085013567ffffffffffffffff808211156200294357600080fd5b818701915087601f8301126200295857600080fd5b8135818111156200296857600080fd5b8860208285010111156200297b57600080fd5b95989497505060200194505050565b6001600160a01b0385168152608060208201819052600090620029b090830186620026cd565b8281036040840152620029c48186620026cd565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002a1057634e487b7160e01b600052602160045260246000fd5b83825260406020830152620005d16040830184620026cd565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002a86620025ca846200257c565b905082815283838301111562002a9b57600080fd5b620009af836020830184620026a7565b600082601f83011262002abd57600080fd5b620009af8383516020850162002a75565b60006020828403121562002ae157600080fd5b815167ffffffffffffffff81111562002af957600080fd5b620005d18482850162002aab565b60006020828403121562002b1a57600080fd5b8151620009af8162002603565b600081518084526020808501945080840160005b8381101562002b625781516001600160a01b03168752958201959082019060010162002b3b565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002bd061010084018262002b27565b905060a0840151601f198483030160e0850152620013b28282620026cd565b60006020828403121562002c0257600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115620013b757620013b762002cb8565b60006020828403121562002cf757600080fd5b8151620009af81620024fc565b81810381811115620013b757620013b762002cb8565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002d7d57600080fd5b82516003811062002d8d57600080fd5b602084015190925067ffffffffffffffff81111562002dab57600080fd5b8301601f8101851362002dbd57600080fd5b62002dce8582516020840162002a75565b9150509250929050565b6000806000806080858703121562002def57600080fd5b845162002dfc81620024fc565b602086015190945067ffffffffffffffff8082111562002e1b57600080fd5b62002e298883890162002aab565b9450604087015191508082111562002e4057600080fd5b5062002e4f8782880162002aab565b92505060608501516200269c8162002603565b60008060006060848603121562002e7857600080fd5b835162002e8581620024fc565b602085015190935062002e9881620024fc565b80925050604084015190509250925092565b60008060008060008060c0878903121562002ec457600080fd5b86519550602087015162002ed881620024fc565b604088015190955062002eeb81620024fc565b606088015190945062002efe81620024fc565b809350506080870151915060a087015190509295509295509295565b60006020828403121562002f2d57600080fd5b81518015158114620009af57600080fd5b8681526001600160a01b0386811660208301528516604082015260c06060820181905260009062002f7290830186620026cd565b828103608084015262002f868186620026cd565b91505060ff831660a0830152979650505050505050565b6000825162002fb1818460208701620026a7565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea26469706673582212208a8e82a679ec260481bb5d10cf7933d8213beeeb9291c42d2ad6b12aa8eb16e264736f6c63430008120033a264697066735822122092a2f41777b69eacb353e9198299ce6a038eb4607ffa841ed2c58bcfe009643264736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"name\":\"CreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintBridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"}],\"name\":\"SubmitCreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CREATE_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"primaryFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFeeAmount\",\"type\":\"uint256\"}],\"name\":\"bridgeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"nativeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"nativeSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"nativeDecimals\",\"type\":\"uint8\"}],\"name\":\"encodeCreateBridgeTokenData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeMintBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeTransferBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenAddress\",\"type\":\"address\"}],\"name\":\"nativeToWrappedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractERC20\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"messageFeeAmount\",\"type\":\"uint256\"}],\"name\":\"submitCreateBridgeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"submittedBridgeTokenCreations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"tokenCreationSubmitted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeToken\",\"type\":\"address\"}],\"name\":\"wrappedTokenContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"bridgeTokenExists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c06040523480156200001157600080fd5b50604051620044ff380380620044ff833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614251620002ae6000396000818161021b01528181610b0c01528181611a6b015261233601526000818161018001528181610dcc01528181610ff101526111f401526142516000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da1146200039f578063c60da61214620003d3578063c63d220714620003ea578063c868efaa1462000401578063d2cc7a701462000418578063f2fde38b146200042157600080fd5b80637a465fd914620002e65780638343f66114620002f15780638c56fcf014620003395780638da5cb5b14620003505780639731429714620003625780639bd9abc0146200037957600080fd5b80635f217bcc116200012c5780635f217bcc146200026357806365435568146200026e5780636b47cd9a14620002ab5780636c7e40d114620002b6578063715018a614620002cd5780637497185614620002d757600080fd5b80631a7f5bec146200017a5780632b0d8f1814620001bf578063367e958414620001d85780634511243e14620001fe5780634950d2d014620002155780635eb99514146200024c575b600080fd5b620001a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001d6620001d0366004620025bc565b62000438565b005b620001ef620001e9366004620026bd565b62000533565b604051620001b69190620027a5565b620001d66200020f366004620025bc565b62000592565b6200023d7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001b6565b620001d66200025d366004620027ba565b62000685565b6200023d621e848081565b620001a26200027f366004620027d4565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200023d620493e081565b620001d6620002c73660046200281b565b6200069d565b620001d6620009ee565b620001a26005600160991b0181565b6200023d62030d4081565b6200032862000302366004620027d4565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001b6565b620001ef6200034a3660046200287d565b62000a06565b6003546001600160a01b0316620001a2565b6200032862000373366004620025bc565b62000a62565b620003286200038a366004620025bc565b60066020526000908152604090205460ff1681565b6200023d620003b0366004620027d4565b600560209081526000938452604080852082529284528284209052825290205481565b620001ef620003e4366004620028c3565b62000a80565b620001d6620003fb3660046200292f565b62000b00565b620001d662000412366004620029a4565b62000db4565b6002546200023d565b620001d662000432366004620025bc565b62000f67565b6200044262000fe3565b6001600160a01b038116620004745760405162461bcd60e51b81526004016200046b9062002a34565b60405180910390fd5b6200047f8162000a62565b15620004e45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016200046b565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b606060008585858560405160200162000550949392919062002a82565b60405160208183030381529060405290506000816040516020016200057792919062002ae7565b6040516020818303038152906040529150505b949350505050565b6200059c62000fe3565b6001600160a01b038116620005c55760405162461bcd60e51b81526004016200046b9062002a34565b620005d08162000a62565b620006305760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016200046b565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6200068f62000fe3565b6200069a8162000fed565b50565b620006a762001194565b6001600160a01b038416620006d05760405162461bcd60e51b81526004016200046b9062002b21565b6000620006dc620011ef565b9050600082156200070b57620006f38484620012f1565b90506200070b6001600160a01b038516838362001467565b60006200084986876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077b919081019062002bc6565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e4919081019062002bc6565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062002bff565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff811115620008c557620008c5620025dc565b604051908082528060200260200182016040528015620008ef578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162000917919062002c65565b6020604051808303816000875af115801562000937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095d919062002ce7565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009d09086815260200190565b60405180910390a450505050620009e76001600055565b5050505050565b620009f862001553565b62000a046000620015af565b565b6060600084848460405160200162000a219392919062002d01565b604051602081830303815290604052905060018160405160200162000a4892919062002ae7565b6040516020818303038152906040529150505b9392505050565b6001600160a01b031660009081526001602052604090205460ff1690565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000ae49060029083906101000162002ae7565b6040516020818303038152906040529150509695505050505050565b62000b0a62001194565b7f0000000000000000000000000000000000000000000000000000000000000000870362000b4c5760405162461bcd60e51b81526004016200046b9062002d25565b6001600160a01b03841662000b755760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b03861662000b9e5760405162461bcd60e51b81526004016200046b9062002b21565b6001600160a01b03851660009081526006602052604090205460ff161562000c895762000bcc818362002dc6565b831162000c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b60648201526084016200046b565b62000c836040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001601565b62000da0565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000d1b5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b60648201526084016200046b565b600062000d298685620012f1565b905082811162000d8e5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b60648201526084016200046b565b62000d9e888888888588620019ed565b505b62000dab6001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000e1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e42919062002ce7565b101562000eab5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016200046b565b62000eb63362000a62565b1562000f1e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016200046b565b62000f61848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001ca992505050565b50505050565b62000f7162001553565b6001600160a01b03811662000fd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200046b565b6200069a81620015af565b62000a0462001553565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001074919062002ce7565b60025490915081831115620010e65760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016200046b565b8083116200115d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016200046b565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011e85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200046b565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001277919062002ddc565b9050620012848162000a62565b15620012ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016200046b565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156200133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001361919062002ce7565b90506200137a6001600160a01b03851633308662001e27565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015620013c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013e8919062002ce7565b9050818111620014505760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016200046b565b6200145c828262002dfc565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620014b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014df919062002ce7565b620014eb919062002dc6565b6040516001600160a01b03851660248201526044810182905290915062000f6190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e4b565b6003546001600160a01b0316331462000a045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200046b565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200160d620011ef565b90506000808360a00151111562001650576200163283604001518460a00151620012f1565b604084015190915062001650906001600160a01b0316838362001467565b60008360a00151846080015162001668919062002dfc565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b158015620016ba57600080fd5b505af1158015620016cf573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173a919062002ce7565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062002ddc565b905081876000015103620017e957806001600160a01b031687602001516001600160a01b031614620017e95760405162461bcd60e51b81526004016200046b9062002e12565b60006200186f88600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200185e919062002ddc565b8b60600151898d60c0015162000a80565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff811115620018ef57620018ef620025dc565b60405190808252806020026020018201604052801562001919578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001941919062002c65565b6020604051808303816000875af115801562001961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001987919062002ce7565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019da9392919062002d01565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff161562001a695760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b60648201526084016200046b565b7f0000000000000000000000000000000000000000000000000000000000000000860362001aab5760405162461bcd60e51b81526004016200046b9062002d25565b600062001ab7620011ef565b9050811562001ad65762001ad66001600160a01b038616828462001467565b600062001ae4838562002dfc565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001b2990849062002dc6565b909155506000905062001b3e87878462000a06565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001bba5762001bba620025dc565b60405190808252806020026020018201604052801562001be4578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001c0c919062002c65565b6020604051808303816000875af115801562001c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c52919062002ce7565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001c959392919062002d01565b60405180910390a450505050505050505050565b6000808280602001905181019062001cc2919062002e61565b9092509050600082600281111562001cde5762001cde62002ad1565b0362001d22576000806000808480602001905181019062001d00919062002ed0565b935093509350935062001d1889898686868662001f29565b50505050620009e7565b600182600281111562001d395762001d3962002ad1565b0362001d785760008060008380602001905181019062001d5a919062002f5a565b92509250925062001d6f888885858562002098565b505050620009e7565b600282600281111562001d8f5762001d8f62002ad1565b0362001dde576000806000806000808680602001905181019062001db4919062002fa2565b95509550955095509550955062001dd28b8b88888888888862002212565b505050505050620009e7565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e000000000060448201526064016200046b565b62000f61846323b872dd60e01b8585856040516024016200151b9392919062002d01565b600062001ea2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023cb9092919063ffffffff16565b80519091501562001f24578080602001905181019062001ec3919062003012565b62001f245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200046b565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001fba5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b60648201526084016200046b565b600086868686868660405162001fd09062002598565b62001fe19695949392919062003036565b604051809103906000f08015801562001ffe573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b620020a262001194565b6001600160a01b038216620020cb5760405162461bcd60e51b81526004016200046b9062002d6d565b60008581526007602090815260408083206001600160a01b03808916855290835281842087821685529092529091205416806200215c5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016200046b565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620021a757600080fd5b505af1158015620021bc573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a250620009e76001600055565b6200221c62001194565b6001600160a01b038316620022455760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b0385166200226e5760405162461bcd60e51b81526004016200046b9062002b21565b60008881526005602090815260408083206001600160a01b03808c168552908352818420908816845290915290205482811015620022f95760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b60648201526084016200046b565b62002305838262002dfc565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620023a4576001600160a01b0386163014620023875760405162461bcd60e51b81526004016200046b9062002e12565b6200239d6001600160a01b0386168585620023dc565b50620023b6565b620023b4878787878787620019ed565b505b620023c16001600055565b5050505050505050565b60606200058a84846000856200240e565b6040516001600160a01b03831660248201526044810182905262001f2490849063a9059cbb60e01b906064016200151b565b606082471015620024715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200046b565b600080866001600160a01b031685876040516200248f919062003095565b60006040518083038185875af1925050503d8060008114620024ce576040519150601f19603f3d011682016040523d82523d6000602084013e620024d3565b606091505b5091509150620024e687838387620024f1565b979650505050505050565b60608315620025655782516000036200255d576001600160a01b0385163b6200255d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200046b565b50816200058a565b6200058a83838151156200257c5781518083602001fd5b8060405162461bcd60e51b81526004016200046b9190620027a5565b61116880620030b483390190565b6001600160a01b03811681146200069a57600080fd5b600060208284031215620025cf57600080fd5b813562000a5b81620025a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200261e576200261e620025dc565b604052919050565b600067ffffffffffffffff821115620026435762002643620025dc565b50601f01601f191660200190565b600082601f8301126200266357600080fd5b81356200267a620026748262002626565b620025f2565b8181528460208386010111156200269057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff811681146200069a57600080fd5b60008060008060808587031215620026d457600080fd5b8435620026e181620025a6565b9350602085013567ffffffffffffffff80821115620026ff57600080fd5b6200270d8883890162002651565b945060408701359150808211156200272457600080fd5b50620027338782880162002651565b92505060608501356200274681620026ad565b939692955090935050565b60005b838110156200276e57818101518382015260200162002754565b50506000910152565b600081518084526200279181602086016020860162002751565b601f01601f19169290920160200192915050565b60208152600062000a5b602083018462002777565b600060208284031215620027cd57600080fd5b5035919050565b600080600060608486031215620027ea57600080fd5b833592506020840135620027fe81620025a6565b915060408401356200281081620025a6565b809150509250925092565b600080600080600060a086880312156200283457600080fd5b8535945060208601356200284881620025a6565b935060408601356200285a81620025a6565b925060608601356200286c81620025a6565b949793965091946080013592915050565b6000806000606084860312156200289357600080fd5b8335620028a081620025a6565b92506020840135620028b281620025a6565b929592945050506040919091013590565b60008060008060008060c08789031215620028dd57600080fd5b863595506020870135620028f181620025a6565b945060408701356200290381620025a6565b935060608701356200291581620025a6565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156200294b57600080fd5b8735965060208801356200295f81620025a6565b955060408801356200297181620025a6565b945060608801356200298381620025a6565b9699959850939660808101359560a0820135955060c0909101359350915050565b60008060008060608587031215620029bb57600080fd5b843593506020850135620029cf81620025a6565b9250604085013567ffffffffffffffff80821115620029ed57600080fd5b818701915087601f83011262002a0257600080fd5b81358181111562002a1257600080fd5b88602082850101111562002a2557600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6001600160a01b038516815260806020820181905260009062002aa89083018662002777565b828103604084015262002abc818662002777565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002b0857634e487b7160e01b600052602160045260246000fd5b838252604060208301526200058a604083018462002777565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002b7e620026748462002626565b905082815283838301111562002b9357600080fd5b62000a5b83602083018462002751565b600082601f83011262002bb557600080fd5b62000a5b8383516020850162002b6d565b60006020828403121562002bd957600080fd5b815167ffffffffffffffff81111562002bf157600080fd5b6200058a8482850162002ba3565b60006020828403121562002c1257600080fd5b815162000a5b81620026ad565b600081518084526020808501945080840160005b8381101562002c5a5781516001600160a01b03168752958201959082019060010162002c33565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002cc861010084018262002c1f565b905060a0840151601f198483030160e08501526200145c828262002777565b60006020828403121562002cfa57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001461576200146162002db0565b60006020828403121562002def57600080fd5b815162000a5b81620025a6565b8181038181111562001461576200146162002db0565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002e7557600080fd5b82516003811062002e8557600080fd5b602084015190925067ffffffffffffffff81111562002ea357600080fd5b8301601f8101851362002eb557600080fd5b62002ec68582516020840162002b6d565b9150509250929050565b6000806000806080858703121562002ee757600080fd5b845162002ef481620025a6565b602086015190945067ffffffffffffffff8082111562002f1357600080fd5b62002f218883890162002ba3565b9450604087015191508082111562002f3857600080fd5b5062002f478782880162002ba3565b92505060608501516200274681620026ad565b60008060006060848603121562002f7057600080fd5b835162002f7d81620025a6565b602085015190935062002f9081620025a6565b80925050604084015190509250925092565b60008060008060008060c0878903121562002fbc57600080fd5b86519550602087015162002fd081620025a6565b604088015190955062002fe381620025a6565b606088015190945062002ff681620025a6565b809350506080870151915060a087015190509295509295509295565b6000602082840312156200302557600080fd5b8151801515811462000a5b57600080fd5b8681526001600160a01b0386811660208301528516604082015260c0606082018190526000906200306a9083018662002777565b82810360808401526200307e818662002777565b91505060ff831660a0830152979650505050505050565b60008251620030a981846020870162002751565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea2646970667358221220ff15d87d9e06053eea65bea2fb7624abc50212a4686d7d62b9d7a5a0ec3d931364736f6c63430008120033a2646970667358221220ab6ff3201ef8c76fa616bd44bd6b48a6582604cad87fc27a53287bd9995be9f164736f6c63430008120033", } // ERC20BridgeABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go index 36459133f..29f43f88e 100644 --- a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go +++ b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go @@ -31,8 +31,8 @@ var ( // ExampleCrossChainMessengerMetaData contains all meta data concerning the ExampleCrossChainMessenger contract. var ExampleCrossChainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ReceiveMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"SendMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getCurrentMessage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200199138038062001991833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b60805161177f620002126000396000818160b30152818161043b0152818161081d0152610b7b015261177f6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397314297116100715780639731429714610133578063b33fead41461016f578063c868efaa14610190578063d2cc7a70146101a3578063f2fde38b146101b5578063f63d09d7146101c857600080fd5b80631a7f5bec146100ae5780632b0d8f18146100f25780635eb9951414610107578063715018a61461011a5780638da5cb5b14610122575b600080fd5b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61010561010036600461117d565b6101db565b005b6101056101153660046111a1565b610323565b610105610337565b6003546001600160a01b03166100d5565b61015f61014136600461117d565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016100e9565b61018261017d3660046111a1565b61034b565b6040516100e992919061120a565b61010561019e366004611277565b610423565b6002545b6040519081526020016100e9565b6101056101c336600461117d565b6105d5565b6101a76101d63660046112d3565b61064b565b6101e3610811565b6001600160a01b0381166102555760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156102d45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161024c565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61032b610811565b61033481610819565b50565b61033f6109b9565b6103496000610a13565b565b6000818152600460209081526040808320815180830190925280546001600160a01b03168252600181018054606094869493929084019161038b90611359565b80601f01602080910402602001604051908101604052809291908181526020018280546103b790611359565b80156104045780601f106103d957610100808354040283529160200191610404565b820191906000526020600020905b8154815290600101906020018083116103e757829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae9190611393565b10156105155760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161024c565b3360009081526001602052604090205460ff161561058e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161024c565b6105cf848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6592505050565b50505050565b6105dd6109b9565b6001600160a01b0381166106425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161024c565b61033481610a13565b6000610655610b1d565b600061065f610b76565b905060008615610689576106738888610c8a565b90506106896001600160a01b0389168383610df4565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516106cb9594939291906113d5565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff81111561074557610745611403565b60405190808252806020026020018201604052801561076e578160200160208202803683370190505b5081526020018888604051602001610787929190611419565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016107b59190611471565b6020604051808303816000875af11580156107d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f89190611393565b925050506108066001600055565b979650505050505050565b6103496109b9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089d9190611393565b6002549091508183111561090d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161024c565b8083116109825760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161024c565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161024c565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610a7b91906114ef565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610ad190826115df565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610b0f919061169f565b60405180910390a350505050565b600260005403610b6f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161024c565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb91906116b2565b9050610c1f816001600160a01b031660009081526001602052604090205460ff1690565b15610c855760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161024c565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190611393565b9050610d0e6001600160a01b038516333086610ed9565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190611393565b9050818111610ddf5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161024c565b610de982826116e5565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e699190611393565b610e7391906116f8565b6040516001600160a01b0385166024820152604481018290529091506105cf90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f11565b6040516001600160a01b03808516602483015283166044820152606481018290526105cf9085906323b872dd60e01b90608401610ea2565b6000610f66826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610fe89092919063ffffffff16565b805190915015610fe35780806020019051810190610f84919061170b565b610fe35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161024c565b505050565b6060610ff78484600085610fff565b949350505050565b6060824710156110605760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161024c565b600080866001600160a01b0316858760405161107c919061172d565b60006040518083038185875af1925050503d80600081146110b9576040519150601f19603f3d011682016040523d82523d6000602084013e6110be565b606091505b50915091506108068783838760608315611139578251600003611132576001600160a01b0385163b6111325760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161024c565b5081610ff7565b610ff7838381511561114e5781518083602001fd5b8060405162461bcd60e51b815260040161024c919061169f565b6001600160a01b038116811461033457600080fd5b60006020828403121561118f57600080fd5b813561119a81611168565b9392505050565b6000602082840312156111b357600080fd5b5035919050565b60005b838110156111d55781810151838201526020016111bd565b50506000910152565b600081518084526111f68160208601602086016111ba565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090610ff7908301846111de565b60008083601f84011261124057600080fd5b50813567ffffffffffffffff81111561125857600080fd5b60208301915083602082850101111561127057600080fd5b9250929050565b6000806000806060858703121561128d57600080fd5b84359350602085013561129f81611168565b9250604085013567ffffffffffffffff8111156112bb57600080fd5b6112c78782880161122e565b95989497509550505050565b600080600080600080600060c0888a0312156112ee57600080fd5b87359650602088013561130081611168565b9550604088013561131081611168565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561133a57600080fd5b6113468a828b0161122e565b989b979a50959850939692959293505050565b600181811c9082168061136d57607f821691505b60208210810361138d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156113a557600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108066080830184866113ac565b634e487b7160e01b600052604160045260246000fd5b602081526000610ff76020830184866113ac565b600081518084526020808501945080840160005b838110156114665781516001600160a01b031687529582019590820190600101611441565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526114d261010084018261142d565b905060a0840151601f198483030160e0850152610de982826111de565b60006020828403121561150157600080fd5b815167ffffffffffffffff8082111561151957600080fd5b818401915084601f83011261152d57600080fd5b81518181111561153f5761153f611403565b604051601f8201601f19908116603f0116810190838211818310171561156757611567611403565b8160405282815287602084870101111561158057600080fd5b6108068360208301602088016111ba565b601f821115610fe357600081815260208120601f850160051c810160208610156115b85750805b601f850160051c820191505b818110156115d7578281556001016115c4565b505050505050565b815167ffffffffffffffff8111156115f9576115f9611403565b61160d816116078454611359565b84611591565b602080601f831160018114611642576000841561162a5750858301515b600019600386901b1c1916600185901b1785556115d7565b600085815260208120601f198616915b8281101561167157888601518255948401946001909101908401611652565b508582101561168f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061119a60208301846111de565b6000602082840312156116c457600080fd5b815161119a81611168565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dee57610dee6116cf565b80820180821115610dee57610dee6116cf565b60006020828403121561171d57600080fd5b8151801515811461119a57600080fd5b6000825161173f8184602087016111ba565b919091019291505056fea2646970667358221220566bee472168b81ca4cc1c20beb5f72dfa1b1d6e86665a396fc9b880e763aa2d64736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ReceiveMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"SendMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getCurrentMessage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001a7338038062001a73833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b608051611861620002126000396000818160be015281816104f2015281816108ca0152610c2801526118616000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806397314297116100715780639731429714610151578063b33fead414610174578063c868efaa14610195578063d2cc7a70146101a8578063f2fde38b146101ba578063f63d09d7146101cd57600080fd5b80631a7f5bec146100b95780632b0d8f18146100fd5780634511243e146101125780635eb9951414610125578063715018a6146101385780638da5cb5b14610140575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004611211565b6101e0565b005b610110610120366004611211565b6102d2565b610110610133366004611235565b6103bc565b6101106103d0565b6003546001600160a01b03166100e0565b61016461015f366004611211565b6103e4565b60405190151581526020016100f4565b610187610182366004611235565b610402565b6040516100f492919061129e565b6101106101a336600461130b565b6104da565b6002545b6040519081526020016100f4565b6101106101c8366004611211565b610682565b6101ac6101db366004611367565b6106f8565b6101e86108be565b6001600160a01b0381166102175760405162461bcd60e51b815260040161020e906113ed565b60405180910390fd5b610220816103e4565b156102835760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161020e565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6102da6108be565b6001600160a01b0381166103005760405162461bcd60e51b815260040161020e906113ed565b610309816103e4565b6103675760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161020e565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6103c46108be565b6103cd816108c6565b50565b6103d8610a66565b6103e26000610ac0565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818152600460209081526040808320815180830190925280546001600160a01b0316825260018101805460609486949392908401916104429061143b565b80601f016020809104026020016040519081016040528092919081815260200182805461046e9061143b565b80156104bb5780601f10610490576101008083540402835291602001916104bb565b820191906000526020600020905b81548152906001019060200180831161049e57829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105659190611475565b10156105cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161020e565b6105d5336103e4565b1561063b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161020e565b61067c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1292505050565b50505050565b61068a610a66565b6001600160a01b0381166106ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020e565b6103cd81610ac0565b6000610702610bca565b600061070c610c23565b905060008615610736576107208888610d1e565b90506107366001600160a01b0389168383610e88565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516107789594939291906114b7565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff8111156107f2576107f26114e5565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50815260200188886040516020016108349291906114fb565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016108629190611553565b6020604051808303816000875af1158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611475565b925050506108b36001600055565b979650505050505050565b6103e2610a66565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611475565b600254909150818311156109ba5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161020e565b808311610a2f5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161020e565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610b2891906115d1565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610b7e90826116c1565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610bbc9190611781565b60405180910390a350505050565b600260005403610c1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161020e565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611794565b9050610cb3816103e4565b15610d195760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161020e565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190611475565b9050610da26001600160a01b038516333086610f6d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190611475565b9050818111610e735760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161020e565b610e7d82826117c7565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190611475565b610f0791906117da565b6040516001600160a01b03851660248201526044810182905290915061067c90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fa5565b6040516001600160a01b038085166024830152831660448201526064810182905261067c9085906323b872dd60e01b90608401610f36565b6000610ffa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661107c9092919063ffffffff16565b805190915015611077578080602001905181019061101891906117ed565b6110775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161020e565b505050565b606061108b8484600085611093565b949350505050565b6060824710156110f45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161020e565b600080866001600160a01b03168587604051611110919061180f565b60006040518083038185875af1925050503d806000811461114d576040519150601f19603f3d011682016040523d82523d6000602084013e611152565b606091505b50915091506108b387838387606083156111cd5782516000036111c6576001600160a01b0385163b6111c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161020e565b508161108b565b61108b83838151156111e25781518083602001fd5b8060405162461bcd60e51b815260040161020e9190611781565b6001600160a01b03811681146103cd57600080fd5b60006020828403121561122357600080fd5b813561122e816111fc565b9392505050565b60006020828403121561124757600080fd5b5035919050565b60005b83811015611269578181015183820152602001611251565b50506000910152565b6000815180845261128a81602086016020860161124e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061108b90830184611272565b60008083601f8401126112d457600080fd5b50813567ffffffffffffffff8111156112ec57600080fd5b60208301915083602082850101111561130457600080fd5b9250929050565b6000806000806060858703121561132157600080fd5b843593506020850135611333816111fc565b9250604085013567ffffffffffffffff81111561134f57600080fd5b61135b878288016112c2565b95989497509550505050565b600080600080600080600060c0888a03121561138257600080fd5b873596506020880135611394816111fc565b955060408801356113a4816111fc565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156113ce57600080fd5b6113da8a828b016112c2565b989b979a50959850939692959293505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600181811c9082168061144f57607f821691505b60208210810361146f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561148757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108b360808301848661148e565b634e487b7160e01b600052604160045260246000fd5b60208152600061108b60208301848661148e565b600081518084526020808501945080840160005b838110156115485781516001600160a01b031687529582019590820190600101611523565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526115b461010084018261150f565b905060a0840151601f198483030160e0850152610e7d8282611272565b6000602082840312156115e357600080fd5b815167ffffffffffffffff808211156115fb57600080fd5b818401915084601f83011261160f57600080fd5b815181811115611621576116216114e5565b604051601f8201601f19908116603f01168101908382118183101715611649576116496114e5565b8160405282815287602084870101111561166257600080fd5b6108b383602083016020880161124e565b601f82111561107757600081815260208120601f850160051c8101602086101561169a5750805b601f850160051c820191505b818110156116b9578281556001016116a6565b505050505050565b815167ffffffffffffffff8111156116db576116db6114e5565b6116ef816116e9845461143b565b84611673565b602080601f831160018114611724576000841561170c5750858301515b600019600386901b1c1916600185901b1785556116b9565b600085815260208120601f198616915b8281101561175357888601518255948401946001909101908401611734565b50858210156117715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061122e6020830184611272565b6000602082840312156117a657600080fd5b815161122e816111fc565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8257610e826117b1565b80820180821115610e8257610e826117b1565b6000602082840312156117ff57600080fd5b8151801515811461122e57600080fd5b6000825161182181846020870161124e565b919091019291505056fea26469706673582212209dd46bdce86203021af4e6d2cd2d5207ab85f0191b7923e450335bc4a218187464736f6c63430008120033", } // ExampleCrossChainMessengerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go index abd084389..79d08eebd 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go @@ -32,7 +32,7 @@ var ( // ERC20TokenSourceMetaData contains all meta data concerning the ERC20TokenSource contract. var ERC20TokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20ContractAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20ContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea264697066735822122063d226d228373acfe663868058b31e5f8685dcb5fb4b06e08eeb977009aa5b3264736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", + Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea264697066735822122030f6c4a61bed1b93fc8331135038f5c3ab1696092ad42f4bcf37019e7a72e3b564736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", } // ERC20TokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go index e58cfee58..f68c4b6e7 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnAddressBalance\",\"type\":\"uint256\"}],\"name\":\"ReportTotalBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToSource\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_FOR_TRANSFER_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_BURNED_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"reportTotalBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToSource\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220edf7cc9354273fea9d880bee82f0bf1a621729ee9e25ac18371409fc4237d8a164736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", + Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220de4cd7ecdf8167621f6921e50d718c8f4112b2ac1081c1ebdc7ba76555ff698264736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go index 5a1a2b0c9..6b0c2e5c9 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220c36600d1dd6cfdb6207fa4239b1f4c29e670aa39126067bc61ed990e59ea912464736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", + Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220dd175aa6e5ad3504ce5c736f2e3dde267b8ad59a13d68c3cda9dce2a6810534e64736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go index e23ebbffc..d6edb5f56 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go @@ -32,7 +32,7 @@ var ( // BlockHashPublisherMetaData contains all meta data concerning the BlockHashPublisher contract. var BlockHashPublisherMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"PublishBlockHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"RECEIVE_BLOCK_HASH_REQUIRED_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"publishLatestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea26469706673582212209a42cc7c63553de0465c2eb589f8fe8977a4498ae0ec7f6a3edfb4fab216675764736f6c63430008120033", + Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea264697066735822122066ebd6900496b1fac0ea9e661667409751395e024962f9321fcb662507327f6264736f6c63430008120033", } // BlockHashPublisherABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go index f61c42783..666eb40a5 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go @@ -31,8 +31,8 @@ var ( // BlockHashReceiverMetaData contains all meta data concerning the BlockHashReceiver contract. var BlockHashReceiverMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"publisherBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"publisherContractAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"ReceiveBlockHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getLatestBlockInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourcePublisherContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e060405234801561001057600080fd5b50604051610d89380380610d8983398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610b37610252600039600081816101a601526108d4015260008181610138015261085201526000818160f4015281816103ec01526106080152610b376000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063c868efaa11610066578063c868efaa14610230578063d2cc7a7014610243578063f2fde38b1461024b578063f3f39ee51461025e57600080fd5b80638da5cb5b146101c857806397314297146101d9578063b17810be1461021557600080fd5b80635eb99514116100c85780635eb995141461017d5780636c4f6ba914610190578063715018a61461019957806379a0710c146101a157600080fd5b80631a7f5bec146100ef57806329b7b3fd146101335780632b0d8f1814610168575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161012a565b61017b610176366004610a02565b610267565b005b61017b61018b366004610a24565b6103ac565b61015a60045481565b61017b6103c0565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610116565b6102056101e7366004610a02565b6001600160a01b031660009081526020819052604090205460ff1690565b604051901515815260200161012a565b6003546004546040805192835260208301919091520161012a565b61017b61023e366004610a3d565b6103d4565b60015461015a565b61017b610259366004610a02565b610586565b61015a60035481565b61026f6105fc565b6001600160a01b0381166102e15760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560448201526d706f72746572206164647265737360901b60648201526084015b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff16156103605760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102d8565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103b46105fc565b6103bd81610604565b50565b6103c86107a4565b6103d260006107fe565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801561043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045f9190610ac4565b10156104c65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102d8565b3360009081526020819052604090205460ff161561053f5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102d8565b610580848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061085092505050565b50505050565b61058e6107a4565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d8565b6103bd816107fe565b6103d26107a4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190610ac4565b600154909150818311156106f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102d8565b80831161076d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102d8565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146103d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d8565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146108d25760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461096d5760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102d8565b600080828060200190518101906109849190610add565b915091506003548211156109df576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b03811681146109fd57600080fd5b919050565b600060208284031215610a1457600080fd5b610a1d826109e6565b9392505050565b600060208284031215610a3657600080fd5b5035919050565b60008060008060608587031215610a5357600080fd5b84359350610a63602086016109e6565b9250604085013567ffffffffffffffff80821115610a8057600080fd5b818701915087601f830112610a9457600080fd5b813581811115610aa357600080fd5b886020828501011115610ab557600080fd5b95989497505060200194505050565b600060208284031215610ad657600080fd5b5051919050565b60008060408385031215610af057600080fd5b50508051602090910151909290915056fea26469706673582212204e2f6760f78a8de721d6d6c203d851a39e98655842cb5546632438a07861c08464736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"publisherBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"publisherContractAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"ReceiveBlockHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getLatestBlockInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourcePublisherContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60e060405234801561001057600080fd5b50604051610eaf380380610eaf83398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610c5d610252600039600081816101c401526109ac015260008181610143015261092a01526000818160ff015281816104c401526106e00152610c5d6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379a0710c11610097578063c868efaa11610066578063c868efaa1461024e578063d2cc7a7014610261578063f2fde38b14610269578063f3f39ee51461027c57600080fd5b806379a0710c146101bf5780638da5cb5b146101e657806397314297146101f7578063b17810be1461023357600080fd5b80634511243e116100d35780634511243e146101885780635eb995141461019b5780636c4f6ba9146101ae578063715018a6146101b757600080fd5b80631a7f5bec146100fa57806329b7b3fd1461013e5780632b0d8f1814610173575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101657f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610135565b610186610181366004610ada565b610285565b005b610186610196366004610ada565b610387565b6101866101a9366004610afc565b610484565b61016560045481565b610186610498565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610121565b610223610205366004610ada565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001610135565b60035460045460408051928352602083019190915201610135565b61018661025c366004610b15565b6104ac565b600154610165565b610186610277366004610ada565b61065e565b61016560035481565b61028d6106d4565b6001600160a01b0381166102bc5760405162461bcd60e51b81526004016102b390610b9c565b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff161561033b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102b3565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61038f6106d4565b6001600160a01b0381166103b55760405162461bcd60e51b81526004016102b390610b9c565b6001600160a01b03811660009081526020819052604090205460ff1661042f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102b3565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152602081905260409020805460ff19169055565b61048c6106d4565b610495816106dc565b50565b6104a061087c565b6104aa60006108d6565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105379190610bea565b101561059e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102b3565b3360009081526020819052604090205460ff16156106175760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102b3565b610658848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061092892505050565b50505050565b61066661087c565b6001600160a01b0381166106cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b3565b610495816108d6565b6104aa61087c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610bea565b600154909150818311156107d05760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102b3565b8083116108455760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102b3565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146104aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b3565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146109aa5760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610a455760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102b3565b60008082806020019051810190610a5c9190610c03565b91509150600354821115610ab7576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b0381168114610ad557600080fd5b919050565b600060208284031215610aec57600080fd5b610af582610abe565b9392505050565b600060208284031215610b0e57600080fd5b5035919050565b60008060008060608587031215610b2b57600080fd5b84359350610b3b60208601610abe565b9250604085013567ffffffffffffffff80821115610b5857600080fd5b818701915087601f830112610b6c57600080fd5b813581811115610b7b57600080fd5b886020828501011115610b8d57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215610bfc57600080fd5b5051919050565b60008060408385031215610c1657600080fd5b50508051602090910151909290915056fea2646970667358221220001b8a033a8260ea5ab4e9228ed9ea77bc40ffed56102dadaff3adc2bc564c7764736f6c63430008120033", } // BlockHashReceiverABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go index 0371128fc..b8c3d6715 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go @@ -65,8 +65,8 @@ type TeleporterMessageReceipt struct { // TeleporterMessengerMetaData contains all meta data concerning the TeleporterMessenger contract. var TeleporterMessengerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"latestRawMessageIDs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rawMessageID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600160008190558055613190806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063980a2584116100b8578063ccb5f8091161007c578063ccb5f80914610322578063d127dc9b14610335578063d39b0c171461033e578063df20e8bc1461039e578063e6e67bd5146103b1578063e8105ebc146103ed57600080fd5b8063980a258414610251578063a9a856141461027c578063b120322a1461028f578063b771b3bc146102db578063c473eef8146102e957600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb5780635513f096146101fe578063624488501461021e578063892bf4121461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a36600461217e565b61041f565b60405190151581526020015b60405180910390f35b6101776101723660046121a0565b61044e565b005b6101776101873660046121a0565b6106b1565b61017761019a366004612216565b610846565b6101b26101ad366004612233565b61093b565b60405190815260200161015b565b6101b26101ce36600461217e565b600660209081526000928352604080842090915290825290205481565b6101776101f936600461224c565b610952565b6101b261020c366004612233565b60036020526000908152604090205481565b6101b261022c36600461228b565b610b8d565b61024461023f36600461217e565b610beb565b60405161015b91906122c5565b6101b261025f36600461217e565b600091825260056020908152604080842092845291905290205490565b6101b261028a366004612329565b610c17565b6102c361029d36600461217e565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102c36005600160991b0181565b6101b26102f73660046123c1565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101776103303660046123ef565b610e31565b6101b260025481565b61039061034c36600461217e565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b929190612416565b6101b26103ac366004612233565b611343565b6103d86103bf366004612233565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6104006103fb36600461217e565b611386565b604080516001600160a01b03909316835260208301919091520161015b565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104785760405162461bcd60e51b815260040161046f9061243d565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104b55760405162461bcd60e51b815260040161046f90612482565b80826040516020016104c7919061271d565b60405160208183030381529060405280519060200120146104fa5760405162461bcd60e51b815260040161046f90612730565b600061050c6080840160608501612216565b6001600160a01b03163b116105805760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161046f565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105db918601908601612216565b6105e860e0860186612779565b6040516024016105fb94939291906127bf565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061064361063c6080860160608701612216565b5a846113cf565b9050806106a65760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161046f565b505060018055505050565b6001600054146106d35760405162461bcd60e51b815260040161046f906127ea565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161073e5760405162461bcd60e51b815260040161046f90612482565b600082604051602001610751919061271d565b60408051601f198184030181529190528251815160208301209192501461078a5760405162461bcd60e51b815260040161046f90612730565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107c592919061282d565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107f79084906004016128b2565b6020604051808303816000875af1158015610816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083a91906128c5565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108c85760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161046f565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109376001600160a01b03831633836113eb565b5050565b600081815260046020526040812061044890611453565b6001600054146109745760405162461bcd60e51b815260040161046f906127ea565b6002600055806109de5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161046f565b6001600160a01b038216610a045760405162461bcd60e51b815260040161046f906128de565b6000848152600560209081526040808320868452909152902054610a3a5760405162461bcd60e51b815260040161046f90612482565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ad75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161046f565b6000610ae38383611466565b6000868152600560209081526040808320888452909152812060020180549293508392909190610b14908490612948565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610bb15760405162461bcd60e51b815260040161046f906127ea565b6002600055610be0610bc283612b58565b83356000908152600460205260409020610bdb906115ce565b6116dd565b600160005592915050565b6040805180820190915260008082526020820152600083815260046020526040902061044590836119bc565b6000600160005414610c3b5760405162461bcd60e51b815260040161046f906127ea565b60026000908155856001600160401b03811115610c5a57610c5a61295b565b604051908082528060200260200182016040528015610c9f57816020015b6040805180820190915260008082526020820152815260200190600190039081610c785790505b50905060005b86811015610d9c576000888883818110610cc157610cc1612bfb565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d4e5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161046f565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d7e57610d7e612bfb565b6020026020010181905250505080610d9590612c11565b9050610ca5565b506040805160c08101825289815260006020820152610e20918101610dc636899003890189612c2a565b815260200160008152602001868680806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093855250506040805192835260208084019091529092015250826116dd565b600160005598975050505050505050565b6001805414610e525760405162461bcd60e51b815260040161046f9061243d565b60026001556001600160a01b038116610ec65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161046f565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3b9190810190612ca6565b9150915080610f9e5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161046f565b60208201516001600160a01b031630146110155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161046f565b6002548061108e576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611062573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108691906128c5565b600281905590505b600083604001518060200190518101906110a89190612e43565b9050818160400151146111175760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161046f565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111a25760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161046f565b6111b0338260a00151611a81565b61120e5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161046f565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e0810151511561125a57835161125a9082611af6565b60c08101515160005b818110156112b55760008360c00151828151811061128357611283612bfb565b602002602001015190506112a4876000015182600001518360200151611c25565b506112ae81612c11565b9050611263565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b03891691830191909152906112f3908290611cf5565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061132d908c908990613053565b60405180910390a4505060018055505050505050565b600254600090806113665760405162461bcd60e51b815260040161046f90613077565b600061137184611d51565b905061137e828583611d6b565b949350505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b03831660248201526044810182905261144e90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611df2565b505050565b80546001820154600091610448916130c0565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d391906128c5565b90506114ea6001600160a01b038516333086611ec4565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155591906128c5565b90508181116115bb5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161046f565b6115c582826130c0565b95945050505050565b606060006115e560056115e085611453565b611efc565b90508060000361163457604080516000808252602082019092529061162c565b60408051808201909152600080825260208201528152602001906001900390816116055790505b509392505050565b806001600160401b0381111561164c5761164c61295b565b60405190808252806020026020018201604052801561169157816020015b604080518082019091526000808252602082015281526020019060019003908161166a5790505b50915060005b818110156116d6576116a884611f12565b8382815181106116ba576116ba612bfb565b6020026020010181905250806116cf90612c11565b9050611697565b5050919050565b60025460009080611759576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175191906128c5565b600281905590505b806117765760405162461bcd60e51b815260040161046f90613077565b60006117858560000151611d51565b9050600061179883876000015184611d6b565b90506000604051806101000160405280838152602001336001600160a01b031681526020018860000151815260200188602001516001600160a01b0316815260200188606001518152602001886080015181526020018781526020018860a00151815250905060008160405160200161181191906130d3565b60408051601f198184030181529181528951600090815260036020908152828220889055918b015190910151919250901561188b576040890151516001600160a01b03166118715760405162461bcd60e51b815260040161046f906128de565b604089015180516020909101516118889190611466565b90505b6040805180820182528a820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528e516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b03191691909516179093559101516002909101558a519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10509061193890889086906130e6565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061196a9086906004016128b2565b6020604051808303816000875af1158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad91906128c5565b50939998505050505050505050565b60408051808201909152600080825260208201526119d983611453565b8210611a315760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161046f565b826002016000838560000154611a479190612948565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60008151600003611a9457506001610448565b60005b8251811015611aec57836001600160a01b0316838281518110611abc57611abc612bfb565b60200260200101516001600160a01b031603611adc576001915050610448565b611ae581612c11565b9050611a97565b5060009392505050565b80608001515a1015611b585760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161046f565b80606001516001600160a01b03163b600003611b78576109378282611fdd565b602081015160e0820151604051600092611b969286926024016130f9565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611bdb9190846113cf565b905080611bf257611bec8484611fdd565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c7f5750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611cea908490612948565b909155505050505050565b6001820180548291600285019160009182611d0f83612c11565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b600081815260036020526040812054610448906001612948565b604080513060208201529081018490526060810183905260808101829052600090819060a0016040516020818303038152906040529050600281604051611db29190613123565b602060405180830381855afa158015611dcf573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115c591906128c5565b6000611e47826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661205b9092919063ffffffff16565b80519091501561144e5780806020019051810190611e65919061313f565b61144e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161046f565b6040516001600160a01b0380851660248301528316604482015260648101829052611bec9085906323b872dd60e01b90608401611417565b6000818310611f0b5781610445565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f7c5760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161046f565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611fd5908290612948565b909255919050565b80604051602001611fee91906130d3565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d69061204f9085906130d3565b60405180910390a35050565b606061137e848460008585600080866001600160a01b031685876040516120829190613123565b60006040518083038185875af1925050503d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b50915091506120d5878383876120e0565b979650505050505050565b6060831561214f578251600003612148576001600160a01b0385163b6121485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161046f565b508161137e565b61137e83838151156121645781518083602001fd5b8060405162461bcd60e51b815260040161046f91906128b2565b6000806040838503121561219157600080fd5b50508035926020909101359150565b600080604083850312156121b357600080fd5b8235915060208301356001600160401b038111156121d057600080fd5b830161010081860312156121e357600080fd5b809150509250929050565b6001600160a01b038116811461220357600080fd5b50565b8035612211816121ee565b919050565b60006020828403121561222857600080fd5b81356113e4816121ee565b60006020828403121561224557600080fd5b5035919050565b6000806000806080858703121561226257600080fd5b8435935060208501359250604085013561227b816121ee565b9396929550929360600135925050565b60006020828403121561229d57600080fd5b81356001600160401b038111156122b357600080fd5b820160e081850312156113e457600080fd5b815181526020808301516001600160a01b03169082015260408101610448565b60008083601f8401126122f757600080fd5b5081356001600160401b0381111561230e57600080fd5b6020830191508360208260051b85010111156113c857600080fd5b60008060008060008086880360a081121561234357600080fd5b8735965060208801356001600160401b038082111561236157600080fd5b61236d8b838c016122e5565b90985096508691506040603f198401121561238757600080fd5b60408a01955060808a01359250808311156123a157600080fd5b50506123af89828a016122e5565b979a9699509497509295939492505050565b600080604083850312156123d457600080fd5b82356123df816121ee565b915060208301356121e3816121ee565b6000806040838503121561240257600080fd5b823563ffffffff811681146123df57600080fd5b828152606081016113e4602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e198436030181126124df57600080fd5b83016020810192503590506001600160401b038111156124fe57600080fd5b8060051b36038213156113c857600080fd5b8183526000602080850194508260005b8581101561254e578135612533816121ee565b6001600160a01b031687529582019590820190600101612520565b509495945050505050565b6000808335601e1984360301811261257057600080fd5b83016020810192503590506001600160401b0381111561258f57600080fd5b8060061b36038213156113c857600080fd5b8183526000602080850194508260005b8581101561254e5781358752828201356125ca816121ee565b6001600160a01b03168784015260409687019691909101906001016125b1565b6000808335601e1984360301811261260157600080fd5b83016020810192503590506001600160401b0381111561262057600080fd5b8036038213156113c857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600061010082358452602083013561266f816121ee565b6001600160a01b031660208501526040838101359085015261269360608401612206565b6001600160a01b03166060850152608083810135908501526126b860a08401846124c8565b8260a08701526126cb8387018284612510565b925050506126dc60c0840184612559565b85830360c08701526126ef8382846125a1565b9250505061270060e08401846125ea565b85830360e087015261271383828461262f565b9695505050505050565b6020815260006104456020830184612658565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261279057600080fd5b8301803591506001600160401b038211156127aa57600080fd5b6020019150368190038213156113c857600080fd5b8481526001600160a01b0384166020820152606060408201819052600090612713908301848661262f565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b6060815260006128406060830185612658565b90506113e4602083018480516001600160a01b03168252602090810151910152565b60005b8381101561287d578181015183820152602001612865565b50506000910152565b6000815180845261289e816020860160208601612862565b601f01601f19169290920160200192915050565b6020815260006104456020830184612886565b6000602082840312156128d757600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044857610448612932565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156129935761299361295b565b60405290565b60405160c081016001600160401b03811182821017156129935761299361295b565b60405161010081016001600160401b03811182821017156129935761299361295b565b604051601f8201601f191681016001600160401b0381118282101715612a0657612a0661295b565b604052919050565b600060408284031215612a2057600080fd5b612a28612971565b90508135612a35816121ee565b808252506020820135602082015292915050565b60006001600160401b03821115612a6257612a6261295b565b5060051b60200190565b600082601f830112612a7d57600080fd5b81356020612a92612a8d83612a49565b6129de565b82815260059290921b84018101918181019086841115612ab157600080fd5b8286015b84811015612ad5578035612ac8816121ee565b8352918301918301612ab5565b509695505050505050565b60006001600160401b03821115612af957612af961295b565b50601f01601f191660200190565b600082601f830112612b1857600080fd5b8135612b26612a8d82612ae0565b818152846020838601011115612b3b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b6a57600080fd5b612b72612999565b82358152612b8260208401612206565b6020820152612b943660408501612a0e565b60408201526080830135606082015260a08301356001600160401b0380821115612bbd57600080fd5b612bc936838701612a6c565b608084015260c0850135915080821115612be257600080fd5b50612bef36828601612b07565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c2357612c23612932565b5060010190565b600060408284031215612c3c57600080fd5b6104458383612a0e565b8051612211816121ee565b600082601f830112612c6257600080fd5b8151612c70612a8d82612ae0565b818152846020838601011115612c8557600080fd5b61137e826020830160208701612862565b8051801515811461221157600080fd5b60008060408385031215612cb957600080fd5b82516001600160401b0380821115612cd057600080fd5b9084019060608287031215612ce457600080fd5b604051606081018181108382111715612cff57612cff61295b565b604052825181526020830151612d14816121ee565b6020820152604083015182811115612d2b57600080fd5b612d3788828601612c51565b6040830152509350612d4e91505060208401612c96565b90509250929050565b600082601f830112612d6857600080fd5b81516020612d78612a8d83612a49565b82815260059290921b84018101918181019086841115612d9757600080fd5b8286015b84811015612ad5578051612dae816121ee565b8352918301918301612d9b565b600082601f830112612dcc57600080fd5b81516020612ddc612a8d83612a49565b82815260069290921b84018101918181019086841115612dfb57600080fd5b8286015b84811015612ad55760408189031215612e185760008081fd5b612e20612971565b8151815284820151612e31816121ee565b81860152835291830191604001612dff565b600060208284031215612e5557600080fd5b81516001600160401b0380821115612e6c57600080fd5b908301906101008286031215612e8157600080fd5b612e896129bb565b82518152612e9960208401612c46565b602082015260408301516040820152612eb460608401612c46565b60608201526080830151608082015260a083015182811115612ed557600080fd5b612ee187828601612d57565b60a08301525060c083015182811115612ef957600080fd5b612f0587828601612dbb565b60c08301525060e083015182811115612f1d57600080fd5b612f2987828601612c51565b60e08301525095945050505050565b600081518084526020808501945080840160005b8381101561254e5781516001600160a01b031687529582019590820190600101612f4c565b600081518084526020808501945080840160005b8381101561254e57612fab878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f85565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612ffd60608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261301f82860182612f38565b91505060c083015184820360c08601526130398282612f71565b91505060e083015184820360e08601526115c58282612886565b6001600160a01b038316815260406020820181905260009061137e90830184612fbe565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b8181038181111561044857610448612932565b6020815260006104456020830184612fbe565b6060815260006128406060830185612fbe565b8381526001600160a01b03831660208201526060604082018190526000906115c590830184612886565b60008251613135818460208701612862565b9190910192915050565b60006020828403121561315157600080fd5b61044582612c9656fea2646970667358221220c9c25458574c3e7b14e685dab11f615c5d1262ec49c2208c6b009131df32551964736f6c63430008120033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50600160008190558055613196806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d127dc9b1161007c578063d127dc9b14610315578063d39b0c171461031e578063e6e67bd51461037e578063e8105ebc146103ba578063ecc70428146103ec578063f5590f38146103f557600080fd5b8063a9a856141461025c578063b120322a1461026f578063b771b3bc146102bb578063c473eef8146102c9578063ccb5f8091461030257600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb57806362448850146101fe578063892bf41214610211578063980a25841461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a366004612184565b6103fd565b60405190151581526020015b60405180910390f35b6101776101723660046121a6565b61042c565b005b6101776101873660046121a6565b61068f565b61017761019a36600461221c565b610824565b6101b26101ad366004612239565b610919565b60405190815260200161015b565b6101b26101ce366004612184565b600660209081526000928352604080842090915290825290205481565b6101776101f9366004612252565b610930565b6101b261020c366004612291565b610b6b565b61022461021f366004612184565b610bc9565b60405161015b91906122cb565b6101b261023f366004612184565b600091825260056020908152604080842092845291905290205490565b6101b261026a36600461232f565b610bf5565b6102a361027d366004612184565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102a36005600160991b0181565b6101b26102d73660046123c7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101776103103660046123f5565b610e0f565b6101b260025481565b61037061032c366004612184565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b92919061241c565b6103a561038c366004612239565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6103cd6103c8366004612184565b611321565b604080516001600160a01b03909316835260208301919091520161015b565b6101b260035481565b6101b261136a565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104565760405162461bcd60e51b815260040161044d90612443565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104935760405162461bcd60e51b815260040161044d90612488565b80826040516020016104a59190612723565b60405160208183030381529060405280519060200120146104d85760405162461bcd60e51b815260040161044d90612736565b60006104ea608084016060850161221c565b6001600160a01b03163b1161055e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161044d565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105b991860190860161221c565b6105c660e086018661277f565b6040516024016105d994939291906127c5565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061062161061a608086016060870161221c565b5a84611379565b9050806106845760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161044d565b505060018055505050565b6001600054146106b15760405162461bcd60e51b815260040161044d906127f0565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161071c5760405162461bcd60e51b815260040161044d90612488565b60008260405160200161072f9190612723565b60408051601f19818403018152919052825181516020830120919250146107685760405162461bcd60e51b815260040161044d90612736565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107a3929190612833565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107d59084906004016128b8565b6020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081891906128cb565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108a65760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161044d565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109156001600160a01b0383163383611395565b5050565b6000818152600460205260408120610426906113fd565b6001600054146109525760405162461bcd60e51b815260040161044d906127f0565b6002600055806109bc5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161044d565b6001600160a01b0382166109e25760405162461bcd60e51b815260040161044d906128e4565b6000848152600560209081526040808320868452909152902054610a185760405162461bcd60e51b815260040161044d90612488565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ab55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161044d565b6000610ac18383611410565b6000868152600560209081526040808320888452909152812060020180549293508392909190610af290849061294e565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b8f5760405162461bcd60e51b815260040161044d906127f0565b6002600055610bbe610ba083612b5e565b83356000908152600460205260409020610bb990611578565b611687565b600160005592915050565b604080518082019091526000808252602082015260008381526004602052604090206104239083611951565b6000600160005414610c195760405162461bcd60e51b815260040161044d906127f0565b60026000908155856001600160401b03811115610c3857610c38612961565b604051908082528060200260200182016040528015610c7d57816020015b6040805180820190915260008082526020820152815260200190600190039081610c565790505b50905060005b86811015610d7a576000888883818110610c9f57610c9f612c01565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d2c5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161044d565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d5c57610d5c612c01565b6020026020010181905250505080610d7390612c17565b9050610c83565b506040805160c08101825289815260006020820152610dfe918101610da436899003890189612c30565b81526020016000815260200186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050604080519283526020808401909152909201525082611687565b600160005598975050505050505050565b6001805414610e305760405162461bcd60e51b815260040161044d90612443565b60026001556001600160a01b038116610ea45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161044d565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f199190810190612cac565b9150915080610f7c5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161044d565b60208201516001600160a01b03163014610ff35760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161044d565b6002548061106c576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106491906128cb565b600281905590505b600083604001518060200190518101906110869190612e49565b9050818160400151146110f55760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161044d565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111805760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161044d565b61118e338260a00151611a16565b6111ec5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161044d565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e081015151156112385783516112389082611a8b565b60c08101515160005b818110156112935760008360c00151828151811061126157611261612c01565b60200260200101519050611282876000015182600001518360200151611bba565b5061128c81612c17565b9050611241565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b03891691830191909152906112d1908290611c8a565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061130b908c908990613059565b60405180910390a4505060018055505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000611374611ce6565b905090565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b0383166024820152604481018290526113f890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d8b565b505050565b805460018201546000916104269161307d565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147d91906128cb565b90506114946001600160a01b038516333086611e5d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff91906128cb565b90508181116115655760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161044d565b61156f828261307d565b95945050505050565b6060600061158f600561158a856113fd565b611e95565b9050806000036115de5760408051600080825260208201909252906115d6565b60408051808201909152600080825260208201528152602001906001900390816115af5790505b509392505050565b806001600160401b038111156115f6576115f6612961565b60405190808252806020026020018201604052801561163b57816020015b60408051808201909152600080825260208201528152602001906001900390816116145790505b50915060005b818110156116805761165284611eab565b83828151811061166457611664612c01565b60200260200101819052508061167990612c17565b9050611641565b5050919050565b60025460009080611703576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fb91906128cb565b600281905590505b806117205760405162461bcd60e51b815260040161044d90613090565b600061172a611ce6565b905060036000815461173b90612c17565b919050819055506000604051806101000160405280838152602001336001600160a01b031681526020018760000151815260200187602001516001600160a01b0316815260200187606001518152602001876080015181526020018681526020018760a0015181525090506000816040516020016117b991906130d9565b60405160208183030381529060405290506000808860400151602001511115611821576040880151516001600160a01b03166118075760405162461bcd60e51b815260040161044d906128e4565b6040880151805160209091015161181e9190611410565b90505b60408051808201825289820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528d516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b031916919095161790935591015160029091015589519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050906118ce90889086906130ec565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906119009086906004016128b8565b6020604051808303816000875af115801561191f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194391906128cb565b509398975050505050505050565b604080518082019091526000808252602082015261196e836113fd565b82106119c65760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161044d565b8260020160008385600001546119dc919061294e565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60008151600003611a2957506001610426565b60005b8251811015611a8157836001600160a01b0316838281518110611a5157611a51612c01565b60200260200101516001600160a01b031603611a71576001915050610426565b611a7a81612c17565b9050611a2c565b5060009392505050565b80608001515a1015611aed5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161044d565b80606001516001600160a01b03163b600003611b0d576109158282611f76565b602081015160e0820151604051600092611b2b9286926024016130ff565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b70919084611379565b905080611b8757611b818484611f76565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c145750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c7f90849061294e565b909155505050505050565b6001820180548291600285019160009182611ca483612c17565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60025460009080611d095760405162461bcd60e51b815260040161044d90613090565b600354604080513060208201528082018490526060808201939093528151808203909301835260800190819052600290611d44908390613129565b602060405180830381855afa158015611d61573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d8491906128cb565b9250505090565b6000611de0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff49092919063ffffffff16565b8051909150156113f85780806020019051810190611dfe9190613145565b6113f85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044d565b6040516001600160a01b0380851660248301528316604482015260648101829052611b819085906323b872dd60e01b906084016113c1565b6000818310611ea45781610423565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f155760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161044d565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f6e90829061294e565b909255919050565b80604051602001611f8791906130d9565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d690611fe89085906130d9565b60405180910390a35050565b6060612003848460008561200b565b949350505050565b60608247101561206c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161044d565b600080866001600160a01b031685876040516120889190613129565b60006040518083038185875af1925050503d80600081146120c5576040519150601f19603f3d011682016040523d82523d6000602084013e6120ca565b606091505b50915091506120db878383876120e6565b979650505050505050565b6060831561215557825160000361214e576001600160a01b0385163b61214e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044d565b5081612003565b612003838381511561216a5781518083602001fd5b8060405162461bcd60e51b815260040161044d91906128b8565b6000806040838503121561219757600080fd5b50508035926020909101359150565b600080604083850312156121b957600080fd5b8235915060208301356001600160401b038111156121d657600080fd5b830161010081860312156121e957600080fd5b809150509250929050565b6001600160a01b038116811461220957600080fd5b50565b8035612217816121f4565b919050565b60006020828403121561222e57600080fd5b813561138e816121f4565b60006020828403121561224b57600080fd5b5035919050565b6000806000806080858703121561226857600080fd5b84359350602085013592506040850135612281816121f4565b9396929550929360600135925050565b6000602082840312156122a357600080fd5b81356001600160401b038111156122b957600080fd5b820160e0818503121561138e57600080fd5b815181526020808301516001600160a01b03169082015260408101610426565b60008083601f8401126122fd57600080fd5b5081356001600160401b0381111561231457600080fd5b6020830191508360208260051b850101111561136357600080fd5b60008060008060008086880360a081121561234957600080fd5b8735965060208801356001600160401b038082111561236757600080fd5b6123738b838c016122eb565b90985096508691506040603f198401121561238d57600080fd5b60408a01955060808a01359250808311156123a757600080fd5b50506123b589828a016122eb565b979a9699509497509295939492505050565b600080604083850312156123da57600080fd5b82356123e5816121f4565b915060208301356121e9816121f4565b6000806040838503121561240857600080fd5b823563ffffffff811681146123e557600080fd5b8281526060810161138e602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e198436030181126124e557600080fd5b83016020810192503590506001600160401b0381111561250457600080fd5b8060051b360382131561136357600080fd5b8183526000602080850194508260005b85811015612554578135612539816121f4565b6001600160a01b031687529582019590820190600101612526565b509495945050505050565b6000808335601e1984360301811261257657600080fd5b83016020810192503590506001600160401b0381111561259557600080fd5b8060061b360382131561136357600080fd5b8183526000602080850194508260005b858110156125545781358752828201356125d0816121f4565b6001600160a01b03168784015260409687019691909101906001016125b7565b6000808335601e1984360301811261260757600080fd5b83016020810192503590506001600160401b0381111561262657600080fd5b80360382131561136357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000610100823584526020830135612675816121f4565b6001600160a01b03166020850152604083810135908501526126996060840161220c565b6001600160a01b03166060850152608083810135908501526126be60a08401846124ce565b8260a08701526126d18387018284612516565b925050506126e260c084018461255f565b85830360c08701526126f58382846125a7565b9250505061270660e08401846125f0565b85830360e0870152612719838284612635565b9695505050505050565b602081526000610423602083018461265e565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261279657600080fd5b8301803591506001600160401b038211156127b057600080fd5b60200191503681900382131561136357600080fd5b8481526001600160a01b03841660208201526060604082018190526000906127199083018486612635565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b606081526000612846606083018561265e565b905061138e602083018480516001600160a01b03168252602090810151910152565b60005b8381101561288357818101518382015260200161286b565b50506000910152565b600081518084526128a4816020860160208601612868565b601f01601f19169290920160200192915050565b602081526000610423602083018461288c565b6000602082840312156128dd57600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042657610426612938565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561299957612999612961565b60405290565b60405160c081016001600160401b038111828210171561299957612999612961565b60405161010081016001600160401b038111828210171561299957612999612961565b604051601f8201601f191681016001600160401b0381118282101715612a0c57612a0c612961565b604052919050565b600060408284031215612a2657600080fd5b612a2e612977565b90508135612a3b816121f4565b808252506020820135602082015292915050565b60006001600160401b03821115612a6857612a68612961565b5060051b60200190565b600082601f830112612a8357600080fd5b81356020612a98612a9383612a4f565b6129e4565b82815260059290921b84018101918181019086841115612ab757600080fd5b8286015b84811015612adb578035612ace816121f4565b8352918301918301612abb565b509695505050505050565b60006001600160401b03821115612aff57612aff612961565b50601f01601f191660200190565b600082601f830112612b1e57600080fd5b8135612b2c612a9382612ae6565b818152846020838601011115612b4157600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b7057600080fd5b612b7861299f565b82358152612b886020840161220c565b6020820152612b9a3660408501612a14565b60408201526080830135606082015260a08301356001600160401b0380821115612bc357600080fd5b612bcf36838701612a72565b608084015260c0850135915080821115612be857600080fd5b50612bf536828601612b0d565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c2957612c29612938565b5060010190565b600060408284031215612c4257600080fd5b6104238383612a14565b8051612217816121f4565b600082601f830112612c6857600080fd5b8151612c76612a9382612ae6565b818152846020838601011115612c8b57600080fd5b612003826020830160208701612868565b8051801515811461221757600080fd5b60008060408385031215612cbf57600080fd5b82516001600160401b0380821115612cd657600080fd5b9084019060608287031215612cea57600080fd5b604051606081018181108382111715612d0557612d05612961565b604052825181526020830151612d1a816121f4565b6020820152604083015182811115612d3157600080fd5b612d3d88828601612c57565b6040830152509350612d5491505060208401612c9c565b90509250929050565b600082601f830112612d6e57600080fd5b81516020612d7e612a9383612a4f565b82815260059290921b84018101918181019086841115612d9d57600080fd5b8286015b84811015612adb578051612db4816121f4565b8352918301918301612da1565b600082601f830112612dd257600080fd5b81516020612de2612a9383612a4f565b82815260069290921b84018101918181019086841115612e0157600080fd5b8286015b84811015612adb5760408189031215612e1e5760008081fd5b612e26612977565b8151815284820151612e37816121f4565b81860152835291830191604001612e05565b600060208284031215612e5b57600080fd5b81516001600160401b0380821115612e7257600080fd5b908301906101008286031215612e8757600080fd5b612e8f6129c1565b82518152612e9f60208401612c4c565b602082015260408301516040820152612eba60608401612c4c565b60608201526080830151608082015260a083015182811115612edb57600080fd5b612ee787828601612d5d565b60a08301525060c083015182811115612eff57600080fd5b612f0b87828601612dc1565b60c08301525060e083015182811115612f2357600080fd5b612f2f87828601612c57565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156125545781516001600160a01b031687529582019590820190600101612f52565b600081518084526020808501945080840160005b8381101561255457612fb1878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f8b565b60006101008251845260018060a01b03602084015116602085015260408301516040850152606083015161300360608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261302582860182612f3e565b91505060c083015184820360c086015261303f8282612f77565b91505060e083015184820360e086015261156f828261288c565b6001600160a01b038316815260406020820181905260009061200390830184612fc4565b8181038181111561042657610426612938565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b6020815260006104236020830184612fc4565b6060815260006128466060830185612fc4565b8381526001600160a01b038316602082015260606040820181905260009061156f9083018461288c565b6000825161313b818460208701612868565b9190910192915050565b60006020828403121561315757600080fd5b61042382612c9c56fea26469706673582212209c001f47d47fd853cf6540ac4cef1ce9ec74f5ef1ce402b033ee500c4e3128cb64736f6c63430008120033", } // TeleporterMessengerABI is the input ABI used to generate the binding from. @@ -392,12 +392,12 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetMessageHash(des return _TeleporterMessenger.Contract.GetMessageHash(&_TeleporterMessenger.CallOpts, destinationBlockchainID, messageID) } -// GetNextMessageID is a free data retrieval call binding the contract method 0xdf20e8bc. +// GetNextMessageID is a free data retrieval call binding the contract method 0xf5590f38. // -// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(bytes32) -func (_TeleporterMessenger *TeleporterMessengerCaller) GetNextMessageID(opts *bind.CallOpts, destinationBlockchainID [32]byte) ([32]byte, error) { +// Solidity: function getNextMessageID() view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerCaller) GetNextMessageID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _TeleporterMessenger.contract.Call(opts, &out, "getNextMessageID", destinationBlockchainID) + err := _TeleporterMessenger.contract.Call(opts, &out, "getNextMessageID") if err != nil { return *new([32]byte), err @@ -409,18 +409,18 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) GetNextMessageID(opts *bi } -// GetNextMessageID is a free data retrieval call binding the contract method 0xdf20e8bc. +// GetNextMessageID is a free data retrieval call binding the contract method 0xf5590f38. // -// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(bytes32) -func (_TeleporterMessenger *TeleporterMessengerSession) GetNextMessageID(destinationBlockchainID [32]byte) ([32]byte, error) { - return _TeleporterMessenger.Contract.GetNextMessageID(&_TeleporterMessenger.CallOpts, destinationBlockchainID) +// Solidity: function getNextMessageID() view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerSession) GetNextMessageID() ([32]byte, error) { + return _TeleporterMessenger.Contract.GetNextMessageID(&_TeleporterMessenger.CallOpts) } -// GetNextMessageID is a free data retrieval call binding the contract method 0xdf20e8bc. +// GetNextMessageID is a free data retrieval call binding the contract method 0xf5590f38. // -// Solidity: function getNextMessageID(bytes32 destinationBlockchainID) view returns(bytes32) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetNextMessageID(destinationBlockchainID [32]byte) ([32]byte, error) { - return _TeleporterMessenger.Contract.GetNextMessageID(&_TeleporterMessenger.CallOpts, destinationBlockchainID) +// Solidity: function getNextMessageID() view returns(bytes32) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetNextMessageID() ([32]byte, error) { + return _TeleporterMessenger.Contract.GetNextMessageID(&_TeleporterMessenger.CallOpts) } // GetReceiptAtIndex is a free data retrieval call binding the contract method 0x892bf412. @@ -516,12 +516,12 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetRelayerRewardAd return _TeleporterMessenger.Contract.GetRelayerRewardAddress(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) } -// LatestRawMessageIDs is a free data retrieval call binding the contract method 0x5513f096. +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // -// Solidity: function latestRawMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 rawMessageID) -func (_TeleporterMessenger *TeleporterMessengerCaller) LatestRawMessageIDs(opts *bind.CallOpts, destinationBlockchainID [32]byte) (*big.Int, error) { +// Solidity: function messageNonce() view returns(uint256) +func (_TeleporterMessenger *TeleporterMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _TeleporterMessenger.contract.Call(opts, &out, "latestRawMessageIDs", destinationBlockchainID) + err := _TeleporterMessenger.contract.Call(opts, &out, "messageNonce") if err != nil { return *new(*big.Int), err @@ -533,18 +533,18 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) LatestRawMessageIDs(opts } -// LatestRawMessageIDs is a free data retrieval call binding the contract method 0x5513f096. +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // -// Solidity: function latestRawMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 rawMessageID) -func (_TeleporterMessenger *TeleporterMessengerSession) LatestRawMessageIDs(destinationBlockchainID [32]byte) (*big.Int, error) { - return _TeleporterMessenger.Contract.LatestRawMessageIDs(&_TeleporterMessenger.CallOpts, destinationBlockchainID) +// Solidity: function messageNonce() view returns(uint256) +func (_TeleporterMessenger *TeleporterMessengerSession) MessageNonce() (*big.Int, error) { + return _TeleporterMessenger.Contract.MessageNonce(&_TeleporterMessenger.CallOpts) } -// LatestRawMessageIDs is a free data retrieval call binding the contract method 0x5513f096. +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // -// Solidity: function latestRawMessageIDs(bytes32 destinationBlockchainID) view returns(uint256 rawMessageID) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) LatestRawMessageIDs(destinationBlockchainID [32]byte) (*big.Int, error) { - return _TeleporterMessenger.Contract.LatestRawMessageIDs(&_TeleporterMessenger.CallOpts, destinationBlockchainID) +// Solidity: function messageNonce() view returns(uint256) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) MessageNonce() (*big.Int, error) { + return _TeleporterMessenger.Contract.MessageNonce(&_TeleporterMessenger.CallOpts) } // MessageReceived is a free data retrieval call binding the contract method 0x11d433e1. diff --git a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go index 8944d2cea..4a86ff829 100644 --- a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go +++ b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go @@ -38,7 +38,7 @@ type ProtocolRegistryEntry struct { // TeleporterRegistryMetaData contains all meta data concerning the TeleporterRegistry contract. var TeleporterRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"internalType\":\"structProtocolRegistryEntry[]\",\"name\":\"initialEntries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"AddProtocolVersion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newVersion\",\"type\":\"uint256\"}],\"name\":\"LatestVersionUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VERSION_INCREMENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATORS_SOURCE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"addProtocolVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getAddressFromVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestTeleporter\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getTeleporterFromVersion\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"getVersionFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220b95bbd05244334159e26e4b2c90b76b8ab5069f5a4d671f5d6b0f0527848f31264736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea26469706673582212202a1a39ad55bcc32e7fdcb549879090c61afc6325db3bb3d4433f405b181a3cf164736f6c63430008120033", } // TeleporterRegistryABI is the input ABI used to generate the binding from. From 03f14096be2a43bc2d5a9fd4c806e04775e27f6d Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 15 Dec 2023 16:28:42 -0500 Subject: [PATCH 08/16] Fix E2E tests --- .../TeleporterMessenger/event_test.go | 7 +++-- .../Teleporter/TeleporterMessenger/packing.go | 4 +-- .../TeleporterMessenger/packing_test.go | 20 ++++++------ cmd/teleporter-cli/transaction.go | 2 +- .../src/Teleporter/ITeleporterMessenger.sol | 4 +-- .../src/Teleporter/TeleporterMessenger.sol | 3 +- .../tests/GetNextMessageIdTests.t.sol | 31 +++++++++++++------ .../tests/SendCrossChainMessageTests.t.sol | 10 +++--- .../tests/SendSpecifiedReceiptsTests.t.sol | 9 ++---- tests/flows/deliver_to_wrong_chain.go | 2 +- tests/flows/erc20_bridge_multihop.go | 4 +-- tests/flows/insufficient_gas.go | 4 +-- tests/flows/resubmit_altered_message.go | 2 +- tests/flows/send_specific_receipts.go | 7 +++-- tests/testnet/network.go | 6 ++-- tests/utils/utils.go | 10 +++--- 16 files changed, 66 insertions(+), 59 deletions(-) diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go b/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go index 9f458a123..dd1164128 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go @@ -7,6 +7,7 @@ import ( "math/big" "testing" + "github.com/ava-labs/avalanchego/ids" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" ) @@ -65,9 +66,9 @@ func TestToEvent(t *testing.T) { } func TestFilterTeleporterEvents(t *testing.T) { - mockBlockchainID := [32]byte{1, 2, 3, 4} - messageID := big.NewInt(1) - message := createTestTeleporterMessage(messageID.Int64()) + mockBlockchainID := ids.ID{1, 2, 3, 4} + messageID := ids.ID{5, 6, 7, 8} + message := createTestTeleporterMessage(messageID) feeInfo := TeleporterFeeInfo{ FeeTokenAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), Amount: big.NewInt(1), diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go b/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go index bada9b6e5..3f4fec6a3 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go @@ -18,14 +18,14 @@ func init() { // so we must manually keep this up-to-date with the struct defined in the contract. var err error teleporterMessageType, err = abi.NewType("tuple", "struct Overloader.F", []abi.ArgumentMarshaling{ - {Name: "messageID", Type: "uint256"}, + {Name: "messageID", Type: "bytes32"}, {Name: "senderAddress", Type: "address"}, {Name: "destinationBlockchainID", Type: "bytes32"}, {Name: "destinationAddress", Type: "address"}, {Name: "requiredGasLimit", Type: "uint256"}, {Name: "allowedRelayerAddresses", Type: "address[]"}, {Name: "receipts", Type: "tuple[]", Components: []abi.ArgumentMarshaling{ - {Name: "receivedMessageID", Type: "uint256"}, + {Name: "receivedMessageID", Type: "bytes32"}, {Name: "relayerRewardAddress", Type: "address"}, }}, {Name: "message", Type: "bytes"}, diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go b/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go index 831651814..64054f830 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go @@ -8,15 +8,16 @@ import ( "math/big" "testing" + "github.com/ava-labs/avalanchego/ids" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" ) -func createTestTeleporterMessage(messageID int64) TeleporterMessage { +func createTestTeleporterMessage(messageID ids.ID) TeleporterMessage { m := TeleporterMessage{ - MessageID: big.NewInt(messageID), + MessageID: messageID, SenderAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), - DestinationBlockchainID: [32]byte{1, 2, 3, 4}, + DestinationBlockchainID: ids.ID{1, 2, 3, 4}, DestinationAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), RequiredGasLimit: big.NewInt(2), AllowedRelayerAddresses: []common.Address{ @@ -24,7 +25,7 @@ func createTestTeleporterMessage(messageID int64) TeleporterMessage { }, Receipts: []TeleporterMessageReceipt{ { - ReceivedMessageID: big.NewInt(1), + ReceivedMessageID: ids.ID{1}, RelayerRewardAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), }, }, @@ -34,10 +35,7 @@ func createTestTeleporterMessage(messageID int64) TeleporterMessage { } func TestPackUnpackTeleporterMessage(t *testing.T) { - var ( - messageID int64 = 4 - ) - message := createTestTeleporterMessage(messageID) + message := createTestTeleporterMessage(ids.ID{4}) b, err := PackTeleporterMessage(message) if err != nil { @@ -64,9 +62,9 @@ func TestPackUnpackTeleporterMessage(t *testing.T) { } func TestUnpackEvent(t *testing.T) { - mockBlockchainID := [32]byte{1, 2, 3, 4} - messageID := big.NewInt(1) - message := createTestTeleporterMessage(messageID.Int64()) + mockBlockchainID := ids.ID{1, 2, 3, 4} + messageID := ids.ID{5} + message := createTestTeleporterMessage(messageID) feeInfo := TeleporterFeeInfo{ FeeTokenAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), Amount: big.NewInt(1), diff --git a/cmd/teleporter-cli/transaction.go b/cmd/teleporter-cli/transaction.go index 29e12f369..69549416d 100644 --- a/cmd/teleporter-cli/transaction.go +++ b/cmd/teleporter-cli/transaction.go @@ -62,7 +62,7 @@ the command parses to log event fields to a more human readable format.`, cobra.CheckErr(err) logger.Info("Parsed Teleporter message", zap.String("warpMessageID", unsignedMsg.ID().Hex()), - zap.String("teleporterMessageID", teleporterMessage.MessageID.String()), + zap.ByteString("teleporterMessageID", teleporterMessage.MessageID[:]), zap.Any("message", teleporterMessage)) } } diff --git a/contracts/src/Teleporter/ITeleporterMessenger.sol b/contracts/src/Teleporter/ITeleporterMessenger.sol index dad0d9d86..3db28e0f4 100644 --- a/contracts/src/Teleporter/ITeleporterMessenger.sol +++ b/contracts/src/Teleporter/ITeleporterMessenger.sol @@ -231,8 +231,8 @@ interface ITeleporterMessenger { ) external view returns (address, uint256); /** - * @dev Gets the next message ID to be used for a message sent from the contract instance. - * @return The next message ID to be used for a message sent from the contract instance. + * @dev Gets the message ID to be used for the next message sent from the contract instance. + * @return The message ID to be used for the message sent from the contract instance. */ function getNextMessageID() external view returns (bytes32); diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index 5435ba0ef..732118a79 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -768,8 +768,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { function _calculateNextMessageID() private view returns (bytes32) { bytes32 blockchainID_ = blockchainID; require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); - bytes memory rawBytes = - abi.encode(address(this), blockchainID_, messageNonce); + bytes memory rawBytes = abi.encode(address(this), blockchainID_, messageNonce); return sha256(rawBytes); } diff --git a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol index bfcab99f3..2133cfaed 100644 --- a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol +++ b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol @@ -5,7 +5,12 @@ pragma solidity 0.8.18; -import {TeleporterMessengerTest, TeleporterMessageInput, TeleporterFeeInfo, IWarpMessenger} from "./TeleporterMessengerTest.t.sol"; +import { + TeleporterMessengerTest, + TeleporterMessageInput, + TeleporterFeeInfo, + IWarpMessenger +} from "./TeleporterMessengerTest.t.sol"; contract GetNextMessageIDTest is TeleporterMessengerTest { // The state of the contract gets reset before each @@ -17,13 +22,19 @@ contract GetNextMessageIDTest is TeleporterMessengerTest { function testGetMessageID() public { // Generate the next expected message ID manually. - bytes32 expectedMessageID = sha256(abi.encode(address(teleporterMessenger), DEFAULT_DESTINATION_BLOCKCHAIN_ID, teleporterMessenger.messageNonce())); + bytes32 expectedMessageID = sha256( + abi.encode( + address(teleporterMessenger), + DEFAULT_DESTINATION_BLOCKCHAIN_ID, + teleporterMessenger.messageNonce() + ) + ); // Check the contract reports the same as expected. assertEq(teleporterMessenger.getNextMessageID(), expectedMessageID); // Send a message to ensure it is assigned the expected ID. - vm.mockCall( + vm.mockCall( WARP_PRECOMPILE_ADDRESS, abi.encode(IWarpMessenger.sendWarpMessage.selector), abi.encode(bytes32(0)) @@ -31,10 +42,7 @@ contract GetNextMessageIDTest is TeleporterMessengerTest { TeleporterMessageInput memory messageInput = TeleporterMessageInput({ destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(0), - feeInfo: TeleporterFeeInfo({ - feeTokenAddress: address(0), - amount: uint256(0) - }), + feeInfo: TeleporterFeeInfo({feeTokenAddress: address(0), amount: uint256(0)}), requiredGasLimit: 1e6, allowedRelayerAddresses: new address[](0), message: new bytes(0) @@ -44,11 +52,16 @@ contract GetNextMessageIDTest is TeleporterMessengerTest { assertEq(messageID, expectedMessageID); // Generate the next expected message ID now that a message has been sent. - bytes32 secondExpectedMessageID = sha256(abi.encode(address(teleporterMessenger), DEFAULT_DESTINATION_BLOCKCHAIN_ID, teleporterMessenger.messageNonce())); + bytes32 secondExpectedMessageID = sha256( + abi.encode( + address(teleporterMessenger), + DEFAULT_DESTINATION_BLOCKCHAIN_ID, + teleporterMessenger.messageNonce() + ) + ); // Check the contract reports the same as expected, and that is different than the first ID. assertEq(teleporterMessenger.getNextMessageID(), secondExpectedMessageID); assertNotEq(expectedMessageID, secondExpectedMessageID); - } } diff --git a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol index 12130472f..c4f08ee20 100644 --- a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol @@ -24,9 +24,8 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testSendMessageNoFee() public { // Arrange - TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - teleporterMessenger.getNextMessageID(), hex"deadbeef" - ); + TeleporterMessage memory expectedMessage = + _createMockTeleporterMessage(teleporterMessenger.getNextMessageID(), hex"deadbeef"); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, @@ -71,9 +70,8 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testSendMessageWithFee() public { // Arrange // Construct the message to submit. - TeleporterMessage memory expectedMessage = _createMockTeleporterMessage( - teleporterMessenger.getNextMessageID(), hex"deadbeef" - ); + TeleporterMessage memory expectedMessage = + _createMockTeleporterMessage(teleporterMessenger.getNextMessageID(), hex"deadbeef"); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(_mockFeeAsset), 13131313131313131313); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ diff --git a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol index b47f97365..9b0b7d764 100644 --- a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol +++ b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol @@ -45,8 +45,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { } // Mock sending a message back to that chain, which should include the 3 receipts. - bytes32 expectedMessageID = - teleporterMessenger.getNextMessageID(); + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: expectedMessageID, senderAddress: address(this), @@ -81,8 +80,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddresses[0] }); - bytes32 newExpectedMessageID = - teleporterMessenger.getNextMessageID(); + bytes32 newExpectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory newExpectedMessage = TeleporterMessage({ messageID: newExpectedMessageID, senderAddress: address(this), @@ -127,8 +125,7 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { TeleporterMessageReceipt[] memory expectedReceipts = new TeleporterMessageReceipt[](2); expectedReceipts[0] = expectedReceipt; expectedReceipts[1] = expectedReceipt; - bytes32 expectedMessageID = - teleporterMessenger.getNextMessageID(); + bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory expectedMessage = TeleporterMessage({ messageID: expectedMessageID, senderAddress: address(this), diff --git a/tests/flows/deliver_to_wrong_chain.go b/tests/flows/deliver_to_wrong_chain.go index 9eeb71726..d36f20306 100644 --- a/tests/flows/deliver_to_wrong_chain.go +++ b/tests/flows/deliver_to_wrong_chain.go @@ -23,7 +23,7 @@ func DeliverToWrongChain(network interfaces.Network) { // Get the expected teleporter message ID for Subnet C // expectedAtoCMessageID, err := - subnetAInfo.TeleporterMessenger.GetNextMessageID(&bind.CallOpts{}, subnetCInfo.BlockchainID) + subnetAInfo.TeleporterMessenger.GetNextMessageID(&bind.CallOpts{}) Expect(err).Should(BeNil()) // diff --git a/tests/flows/erc20_bridge_multihop.go b/tests/flows/erc20_bridge_multihop.go index a959ae619..31d820aa2 100644 --- a/tests/flows/erc20_bridge_multihop.go +++ b/tests/flows/erc20_bridge_multihop.go @@ -366,7 +366,7 @@ func submitCreateBridgeToken( fundedKey *ecdsa.PrivateKey, transactor *erc20bridge.ERC20Bridge, teleporterMessenger *teleportermessenger.TeleporterMessenger, -) (*types.Receipt, *big.Int) { +) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, source.EVMChainID) Expect(err).Should(BeNil()) @@ -412,7 +412,7 @@ func bridgeToken( isNative bool, nativeTokenChainID ids.ID, teleporterMessenger *teleportermessenger.TeleporterMessenger, -) (*types.Receipt, *big.Int) { +) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, source.EVMChainID) Expect(err).Should(BeNil()) diff --git a/tests/flows/insufficient_gas.go b/tests/flows/insufficient_gas.go index 28555ecda..487af8168 100644 --- a/tests/flows/insufficient_gas.go +++ b/tests/flows/insufficient_gas.go @@ -58,7 +58,7 @@ func InsufficientGas(network interfaces.Network) { receipt.Logs, subnetBInfo.TeleporterMessenger.ParseMessageExecutionFailed, ) Expect(err).Should(BeNil()) - Expect(failedMessageExecutionEvent.MessageID).Should(Equal(messageID)) + Expect(failedMessageExecutionEvent.MessageID[:]).Should(Equal(messageID[:])) Expect(failedMessageExecutionEvent.OriginBlockchainID[:]).Should(Equal(subnetAInfo.BlockchainID[:])) // Retry message execution. This will execute the message with as much gas as needed @@ -72,7 +72,7 @@ func InsufficientGas(network interfaces.Network) { ) executedEvent, err := utils.GetEventFromLogs(receipt.Logs, subnetBInfo.TeleporterMessenger.ParseMessageExecuted) Expect(err).Should(BeNil()) - Expect(executedEvent.MessageID).Should(Equal(messageID)) + Expect(executedEvent.MessageID[:]).Should(Equal(messageID[:])) Expect(executedEvent.OriginBlockchainID[:]).Should(Equal(subnetAInfo.BlockchainID[:])) // diff --git a/tests/flows/resubmit_altered_message.go b/tests/flows/resubmit_altered_message.go index 4fae7b918..77facf22b 100644 --- a/tests/flows/resubmit_altered_message.go +++ b/tests/flows/resubmit_altered_message.go @@ -47,7 +47,7 @@ func ResubmitAlteredMessage(network interfaces.Network) { // Get the Teleporter message from receive event event, err := utils.GetEventFromLogs(receipt.Logs, subnetBInfo.TeleporterMessenger.ParseReceiveCrossChainMessage) Expect(err).Should(BeNil()) - Expect(event.MessageID).Should(Equal(messageID)) + Expect(event.MessageID[:]).Should(Equal(messageID[:])) teleporterMessage := event.Message // Alter the message diff --git a/tests/flows/send_specific_receipts.go b/tests/flows/send_specific_receipts.go index 02ff5b39c..20515465d 100644 --- a/tests/flows/send_specific_receipts.go +++ b/tests/flows/send_specific_receipts.go @@ -1,6 +1,7 @@ package flows import ( + "bytes" "context" "crypto/ecdsa" "math/big" @@ -96,7 +97,7 @@ func SendSpecificReceipts(network interfaces.Network) { ctx, subnetAInfo.BlockchainID, subnetBInfo, - []*big.Int{messageID1, messageID2}, + [][32]byte{messageID1, messageID2}, teleportermessenger.TeleporterFeeInfo{ FeeTokenAddress: mockTokenAddress, Amount: big.NewInt(0), @@ -207,11 +208,11 @@ func getOutstandingReceiptCount(source interfaces.SubnetTestInfo, destinationBlo // Checks the given message ID is included in the list of receipts. func receiptIncluded( - expectedMessageID *big.Int, + expectedMessageID ids.ID, receipts []teleportermessenger.TeleporterMessageReceipt, ) bool { for _, receipt := range receipts { - if receipt.ReceivedMessageID.Cmp(expectedMessageID) == 0 { + if bytes.Equal(receipt.ReceivedMessageID[:], expectedMessageID[:]) { return true } } diff --git a/tests/testnet/network.go b/tests/testnet/network.go index b7ce8cdfb..153f1de51 100644 --- a/tests/testnet/network.go +++ b/tests/testnet/network.go @@ -211,7 +211,7 @@ func (n *testNetwork) RelayMessage(ctx context.Context, func (n *testNetwork) checkMessageDelivered( sourceBlockchainID ids.ID, destination interfaces.SubnetTestInfo, - teleporterMessageID *big.Int) (bool, error) { + teleporterMessageID ids.ID) (bool, error) { destinationTeleporterMessenger, err := teleportermessenger.NewTeleporterMessenger( n.teleporterContractAddress, destination.RPCClient) @@ -228,7 +228,7 @@ func (n *testNetwork) getMessageDeliveryTransactionReceipt( ctx context.Context, sourceBlockchainID ids.ID, destination interfaces.SubnetTestInfo, - teleporterMessageID *big.Int) (*types.Receipt, error) { + teleporterMessageID ids.ID) (*types.Receipt, error) { // Wait until the message is delivered. delivered := false var err error @@ -265,7 +265,7 @@ func (n *testNetwork) getMessageDeliveryTransactionReceipt( Topics: [][]common.Hash{ {abi.Events[receiveCrossChainMessageEventName].ID}, {common.BytesToHash(sourceBlockchainID[:])}, - {common.BigToHash(teleporterMessageID)}, + {common.BytesToHash(teleporterMessageID[:])}, }, }) if err != nil { diff --git a/tests/utils/utils.go b/tests/utils/utils.go index ed7eb624f..134a6d146 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -82,7 +82,7 @@ func SendCrossChainMessageAndWaitForAcceptance( input teleportermessenger.TeleporterMessageInput, senderKey *ecdsa.PrivateKey, // transactor *teleportermessenger.TeleporterMessenger, -) (*types.Receipt, *big.Int) { +) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID) Expect(err).Should(BeNil()) @@ -111,7 +111,7 @@ func SendAddFeeAmountAndWaitForAcceptance( ctx context.Context, source interfaces.SubnetTestInfo, destination interfaces.SubnetTestInfo, - messageID *big.Int, + messageID ids.ID, amount *big.Int, feeContractAddress common.Address, senderKey *ecdsa.PrivateKey, @@ -129,7 +129,7 @@ func SendAddFeeAmountAndWaitForAcceptance( addFeeAmountEvent, err := GetEventFromLogs(receipt.Logs, transactor.ParseAddFeeAmount) Expect(err).Should(BeNil()) - Expect(addFeeAmountEvent.MessageID).Should(Equal(messageID)) + Expect(addFeeAmountEvent.MessageID[:]).Should(Equal(messageID[:])) Expect(addFeeAmountEvent.DestinationBlockchainID[:]).Should(Equal(destination.BlockchainID[:])) log.Info("Send AddFeeAmount transaction on source chain", @@ -213,12 +213,12 @@ func SendSpecifiedReceiptsAndWaitForAcceptance( ctx context.Context, originChainID ids.ID, source interfaces.SubnetTestInfo, - messageIDs []*big.Int, + messageIDs [][32]byte, feeInfo teleportermessenger.TeleporterFeeInfo, allowedRelayerAddresses []common.Address, senderKey *ecdsa.PrivateKey, // transactor *teleportermessenger.TeleporterMessenger, -) (*types.Receipt, *big.Int) { +) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID) Expect(err).Should(BeNil()) From 3ca0822a5743a3dc283a2e28fc259358753fb5a6 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 15 Dec 2023 18:04:28 -0500 Subject: [PATCH 09/16] Clean up unit tests --- .../ERC20Bridge/tests/ERC20BridgeTests.t.sol | 18 +++++++--- .../tests/ERC20TokenSourceTests.t.sol | 22 +++--------- .../tests/NativeTokenBridgeTests.t.sol | 36 +++++++++++++++++++ .../tests/NativeTokenDestinationTests.t.sol | 26 +++----------- .../tests/NativeTokenSourceTests.t.sol | 22 +++--------- .../src/Teleporter/TeleporterMessenger.sol | 4 +-- .../tests/GetNextMessageIdTests.t.sol | 16 ++------- .../Teleporter/tests/MarkReceiptTests.t.sol | 6 ++-- .../tests/MessageReceivedTests.t.sol | 6 ++-- .../tests/ReceiveCrossChainMessageTests.t.sol | 8 ++--- .../tests/RedeemRelayerRewardsTests.t.sol | 6 ++-- .../tests/SendSpecifiedReceiptsTests.t.sol | 26 +++++++------- .../tests/TeleporterMessengerTest.t.sol | 12 ++++++- 13 files changed, 103 insertions(+), 105 deletions(-) create mode 100644 contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol diff --git a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol index 22df17d96..6533b4e06 100644 --- a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol +++ b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol @@ -192,7 +192,7 @@ contract ERC20BridgeTest is Test { ) }); - bytes32 mockMessageID = bytes32(uint256(42)); + bytes32 mockMessageID = _createMessageID(42); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), @@ -301,7 +301,7 @@ contract ERC20BridgeTest is Test { abi.encodeCall(IERC20.approve, (MOCK_TELEPORTER_MESSENGER_ADDRESS, feeAmount)) ); - bytes32 mockMessageID = bytes32(uint256(42)); + bytes32 mockMessageID = _createMessageID(42); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), @@ -378,7 +378,7 @@ contract ERC20BridgeTest is Test { abi.encodeCall(IERC20.approve, (MOCK_TELEPORTER_MESSENGER_ADDRESS, bridgeFeeAmount)) ); - bytes32 mockMessageID = bytes32(uint256(42)); + bytes32 mockMessageID = _createMessageID(42); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), @@ -586,7 +586,7 @@ contract ERC20BridgeTest is Test { ) }); - bytes32 mockMessageID = bytes32(uint256(456)); + bytes32 mockMessageID = _createMessageID(456); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), @@ -667,4 +667,14 @@ contract ERC20BridgeTest is Test { { return bytes(string.concat("ERC20Bridge: ", errorMessage)); } + + function _createMessageID(uint256 messageNonce) private view returns (bytes32) { + return sha256( + abi.encode( + MOCK_TELEPORTER_MESSENGER_ADDRESS, + _MOCK_BLOCKCHAIN_ID, + messageNonce + ) + ); + } } diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol index 622e12e82..593fa554a 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.18; -import {Test} from "forge-std/Test.sol"; +import {NativeTokenBridgeTest} from "./NativeTokenBridgeTests.t.sol"; import { ERC20TokenSource, IERC20, @@ -17,21 +17,7 @@ import { } from "../ERC20TokenSource.sol"; import {UnitTestMockERC20} from "../../../Mocks/UnitTestMockERC20.sol"; -contract ERC20TokenSourceTest is Test { - address public constant MOCK_TELEPORTER_MESSENGER_ADDRESS = - 0x644E5b7c5D4Bc8073732CEa72c66e0BB90dFC00f; - address public constant WARP_PRECOMPILE_ADDRESS = - address(0x0200000000000000000000000000000000000005); - bytes32 private constant _MOCK_BLOCKCHAIN_ID = bytes32(uint256(123456)); - bytes32 private constant _DEFAULT_OTHER_CHAIN_ID = - bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); - address private constant _DEFAULT_OTHER_BRIDGE_ADDRESS = - 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; - uint256 private constant _DEFAULT_INITIAL_RESERVE_IMBALANCE = 1000000000; - address private constant _DEFAULT_RECIPIENT = 0xa4CEE7d1aF6aDdDD33E3b1cC680AB84fdf1b6d1d; - uint256 private constant _DEFAULT_TRANSFER_AMOUNT = 1e18; - uint256 private constant _DEFAULT_FEE_AMOUNT = 123456; - +contract ERC20TokenSourceTest is NativeTokenBridgeTest { ERC20TokenSource public erc20TokenSource; UnitTestMockERC20 public mockERC20; @@ -53,7 +39,7 @@ contract ERC20TokenSourceTest is Test { vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), - abi.encode(bytes32(uint256(1))) + abi.encode(_createMessageID(1)) ); vm.expectCall( @@ -82,7 +68,7 @@ contract ERC20TokenSourceTest is Test { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: bytes32(uint256(1)) + teleporterMessageID: _createMessageID(1) }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol new file mode 100644 index 000000000..bae8e642b --- /dev/null +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol @@ -0,0 +1,36 @@ +// (c) 2023, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +// SPDX-License-Identifier: Ecosystem + +pragma solidity 0.8.18; + +import {Test} from "forge-std/Test.sol"; + +contract NativeTokenBridgeTest is Test { + address public constant MOCK_TELEPORTER_MESSENGER_ADDRESS = + 0x644E5b7c5D4Bc8073732CEa72c66e0BB90dFC00f; + address public constant WARP_PRECOMPILE_ADDRESS = + address(0x0200000000000000000000000000000000000005); + address public constant NATIVE_MINTER_PRECOMPILE_ADDRESS = + address(0x0200000000000000000000000000000000000001); + bytes32 internal constant _MOCK_BLOCKCHAIN_ID = bytes32(uint256(123456)); + bytes32 internal constant _DEFAULT_OTHER_CHAIN_ID = + bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); + address internal constant _DEFAULT_OTHER_BRIDGE_ADDRESS = + 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; + uint256 internal constant _DEFAULT_INITIAL_RESERVE_IMBALANCE = 1000000000; + address internal constant _DEFAULT_RECIPIENT = 0xa4CEE7d1aF6aDdDD33E3b1cC680AB84fdf1b6d1d; + uint256 internal constant _DEFAULT_TRANSFER_AMOUNT = 1e18; + uint256 internal constant _DEFAULT_FEE_AMOUNT = 123456; + + function _createMessageID(uint256 messageNonce) internal pure returns (bytes32) { + return sha256( + abi.encode( + MOCK_TELEPORTER_MESSENGER_ADDRESS, + _MOCK_BLOCKCHAIN_ID, + messageNonce + ) + ); + } +} \ No newline at end of file diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol index 8079c9e9f..80c64de3a 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.18; -import {Test} from "forge-std/Test.sol"; +import {NativeTokenBridgeTest} from "./NativeTokenBridgeTests.t.sol"; import { NativeTokenDestination, IERC20, @@ -18,23 +18,7 @@ import { import {UnitTestMockERC20} from "../../../Mocks/UnitTestMockERC20.sol"; import {INativeMinter} from "@subnet-evm-contracts/interfaces/INativeMinter.sol"; -contract NativeTokenDestinationTest is Test { - address public constant MOCK_TELEPORTER_MESSENGER_ADDRESS = - 0x644E5b7c5D4Bc8073732CEa72c66e0BB90dFC00f; - address public constant WARP_PRECOMPILE_ADDRESS = - address(0x0200000000000000000000000000000000000005); - address public constant NATIVE_MINTER_PRECOMPILE_ADDRESS = - address(0x0200000000000000000000000000000000000001); - bytes32 private constant _MOCK_BLOCKCHAIN_ID = bytes32(uint256(123456)); - bytes32 private constant _DEFAULT_OTHER_CHAIN_ID = - bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); - address private constant _DEFAULT_OTHER_BRIDGE_ADDRESS = - 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; - uint256 private constant _DEFAULT_INITIAL_RESERVE_IMBALANCE = 1000000000; - address private constant _DEFAULT_RECIPIENT = 0xa4CEE7d1aF6aDdDD33E3b1cC680AB84fdf1b6d1d; - uint256 private constant _DEFAULT_TRANSFER_AMOUNT = 1e18; - uint256 private constant _DEFAULT_FEE_AMOUNT = 123456; - +contract NativeTokenDestinationTest is NativeTokenBridgeTest { NativeTokenDestination public nativeTokenDestination; UnitTestMockERC20 public mockERC20; @@ -62,7 +46,7 @@ contract NativeTokenDestinationTest is Test { vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), - abi.encode(bytes32(uint256(1))) + abi.encode(_createMessageID(1)) ); vm.expectCall( @@ -112,7 +96,7 @@ contract NativeTokenDestinationTest is Test { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: bytes32(uint256(1)) + teleporterMessageID: _createMessageID(1) }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ @@ -198,7 +182,7 @@ contract NativeTokenDestinationTest is Test { vm.expectEmit(true, true, true, true, address(nativeTokenDestination)); emit ReportTotalBurnedTxFees({ burnAddressBalance: burnedFees, - teleporterMessageID: bytes32(uint256(1)) + teleporterMessageID: _createMessageID(1) }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol index 2e89280fb..c52ae813a 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.18; -import {Test} from "forge-std/Test.sol"; +import {NativeTokenBridgeTest} from "./NativeTokenBridgeTests.t.sol"; import { NativeTokenSource, IERC20, @@ -17,21 +17,7 @@ import { } from "../NativeTokenSource.sol"; import {UnitTestMockERC20} from "../../../Mocks/UnitTestMockERC20.sol"; -contract NativeTokenSourceTest is Test { - address public constant MOCK_TELEPORTER_MESSENGER_ADDRESS = - 0x644E5b7c5D4Bc8073732CEa72c66e0BB90dFC00f; - address public constant WARP_PRECOMPILE_ADDRESS = - address(0x0200000000000000000000000000000000000005); - bytes32 private constant _MOCK_BLOCKCHAIN_ID = bytes32(uint256(123456)); - bytes32 private constant _DEFAULT_OTHER_CHAIN_ID = - bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); - address private constant _DEFAULT_OTHER_BRIDGE_ADDRESS = - 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; - uint256 private constant _DEFAULT_INITIAL_RESERVE_IMBALANCE = 1000000000; - address private constant _DEFAULT_RECIPIENT = 0xa4CEE7d1aF6aDdDD33E3b1cC680AB84fdf1b6d1d; - uint256 private constant _DEFAULT_TRANSFER_AMOUNT = 1e18; - uint256 private constant _DEFAULT_FEE_AMOUNT = 123456; - +contract NativeTokenSourceTest is NativeTokenBridgeTest { NativeTokenSource public nativeTokenSource; UnitTestMockERC20 public mockERC20; @@ -53,7 +39,7 @@ contract NativeTokenSourceTest is Test { vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), - abi.encode(bytes32(uint256(1))) + abi.encode(_createMessageID(1)) ); vm.expectCall( @@ -81,7 +67,7 @@ contract NativeTokenSourceTest is Test { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: bytes32(uint256(1)) + teleporterMessageID: _createMessageID(1) }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index 732118a79..abd06f927 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -768,8 +768,6 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { function _calculateNextMessageID() private view returns (bytes32) { bytes32 blockchainID_ = blockchainID; require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); - bytes memory rawBytes = abi.encode(address(this), blockchainID_, messageNonce); - - return sha256(rawBytes); + return sha256(abi.encode(address(this), blockchainID_, messageNonce)); } } diff --git a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol index 2133cfaed..cebb0ac60 100644 --- a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol +++ b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol @@ -22,13 +22,7 @@ contract GetNextMessageIDTest is TeleporterMessengerTest { function testGetMessageID() public { // Generate the next expected message ID manually. - bytes32 expectedMessageID = sha256( - abi.encode( - address(teleporterMessenger), - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - teleporterMessenger.messageNonce() - ) - ); + bytes32 expectedMessageID = _createMessageID(teleporterMessenger.messageNonce()); // Check the contract reports the same as expected. assertEq(teleporterMessenger.getNextMessageID(), expectedMessageID); @@ -52,13 +46,7 @@ contract GetNextMessageIDTest is TeleporterMessengerTest { assertEq(messageID, expectedMessageID); // Generate the next expected message ID now that a message has been sent. - bytes32 secondExpectedMessageID = sha256( - abi.encode( - address(teleporterMessenger), - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - teleporterMessenger.messageNonce() - ) - ); + bytes32 secondExpectedMessageID = _createMessageID(teleporterMessenger.messageNonce()); // Check the contract reports the same as expected, and that is different than the first ID. assertEq(teleporterMessenger.getNextMessageID(), secondExpectedMessageID); diff --git a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol index 47ccf975e..340dbf9cd 100644 --- a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol +++ b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol @@ -53,7 +53,7 @@ contract MarkReceiptTest is TeleporterMessengerTest { }); } TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); + _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); @@ -77,12 +77,12 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) + DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1) ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1))) + teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1)) ); // Check that the message hashes for the message receipts we received have been cleared. diff --git a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol index 7abda0941..bfba2bf96 100644 --- a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol +++ b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol @@ -20,14 +20,14 @@ contract MessageReceivedTest is TeleporterMessengerTest { address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234; _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(1)), + _createMessageID(1), relayerRewardAddress, new TeleporterMessageReceipt[](0) ); assertEq( teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, _createMessageID(1) ), true ); @@ -36,7 +36,7 @@ contract MessageReceivedTest is TeleporterMessengerTest { function testUnreceivedMessage() public { assertEq( teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, _createMessageID(1) ), false ); diff --git a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol index 3db0fa9df..7d8a4eb5b 100644 --- a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol @@ -36,7 +36,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Construct the test message to be received. TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: bytes32(uint256(1)), + messageID: _createMessageID(1), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -71,7 +71,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Check receipt queue contents TeleporterMessageReceipt memory receipt = teleporterMessenger.getReceiptAtIndex(DEFAULT_ORIGIN_BLOCKCHAIN_ID, 0); - assertEq(receipt.receivedMessageID, bytes32(uint256(1))); + assertEq(receipt.receivedMessageID, _createMessageID(1)); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); // Receive at a different index @@ -133,7 +133,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { function testInvalidOriginSenderAddress() public { // Construct the test message to be received. TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); + _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); @@ -150,7 +150,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { function testInvalidDestinationBlockchainID() public { // Construct the test message to be received. TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); + _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); bytes32 invalidDestinationBlockchainID = bytes32(hex"deadbeefcafebabedeadbeefcafebabedeadbeefcafebabedeadbeefcafebabe"); messageToReceive.destinationBlockchainID = invalidDestinationBlockchainID; diff --git a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol index 270aada1a..fadc6f975 100644 --- a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol +++ b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol @@ -109,7 +109,7 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { relayerRewardAddress: feeRewardInfo.relayerRewardAddress }); TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(bytes32(uint256(1)), new bytes(0)); + _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = @@ -140,12 +140,12 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1)) + DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1) ), expectedRelayerRewardAddress ); assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, bytes32(uint256(1))) + teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1)) ); } } diff --git a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol index 9b0b7d764..c848274f0 100644 --- a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol +++ b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol @@ -34,12 +34,12 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { for (uint256 i = 0; i < relayerRewardAddresses.length; i++) { _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(i + 1)), + _createMessageID(i + 1), relayerRewardAddresses[i], new TeleporterMessageReceipt[](0) ); expectedReceipts[i] = TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(i + 1)), + receivedMessageID: _createMessageID(i + 1), relayerRewardAddress: relayerRewardAddresses[i] }); } @@ -65,18 +65,18 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { assertEq(outboundMessageID, expectedMessageID); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, bytes32(uint256(1)) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, _createMessageID(1) ), relayerRewardAddresses[0] ); TeleporterMessageReceipt[] memory newExpectedReceipts = new TeleporterMessageReceipt[](2); newExpectedReceipts[0] = TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(3)), + receivedMessageID: _createMessageID(3), relayerRewardAddress: relayerRewardAddresses[2] }); newExpectedReceipts[1] = TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(1)), + receivedMessageID: _createMessageID(1), relayerRewardAddress: relayerRewardAddresses[0] }); @@ -94,8 +94,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Retry sending two of the receipts with {sendSpecifiedReceipts}. bytes32[] memory receiptIDs = new bytes32[](2); - receiptIDs[0] = bytes32(uint256(3)); - receiptIDs[1] = bytes32(uint256(1)); + receiptIDs[0] = _createMessageID(3); + receiptIDs[1] = _createMessageID(1); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( @@ -112,14 +112,14 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Mock receiving a message from another chain _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(1)), + _createMessageID(1), DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) ); // Mock sending a message to that chain, which should include the 2 copies of the same receipt. TeleporterMessageReceipt memory expectedReceipt = TeleporterMessageReceipt({ - receivedMessageID: bytes32(uint256(1)), + receivedMessageID: _createMessageID(1), relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS }); TeleporterMessageReceipt[] memory expectedReceipts = new TeleporterMessageReceipt[](2); @@ -138,8 +138,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { }); bytes32[] memory messageIDs = new bytes32[](2); - messageIDs[0] = bytes32(uint256(1)); - messageIDs[1] = bytes32(uint256(1)); + messageIDs[0] = _createMessageID(1); + messageIDs[1] = _createMessageID(1); // Test sendSpecifiedReceipts when there are duplicate message IDs in the input. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); @@ -159,13 +159,13 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Mock receiving a message from another chain _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - bytes32(uint256(1)), + _createMessageID(1), DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) ); bytes32[] memory missingIDs = new bytes32[](1); - missingIDs[0] = bytes32(uint256(21)); + missingIDs[0] = _createMessageID(21); // Try to send a receipt for an unreceived message from that chain - should fail. vm.expectRevert(_formatTeleporterErrorMessage("receipt not found")); diff --git a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol index 48cd96d61..4214c7f1e 100644 --- a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol +++ b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol @@ -106,6 +106,16 @@ contract TeleporterMessengerTest is Test { * TEST UTILS / HELPERS */ + function _createMessageID(uint256 messageNonce) internal view returns (bytes32) { + return sha256( + abi.encode( + address(teleporterMessenger), + DEFAULT_DESTINATION_BLOCKCHAIN_ID, + messageNonce + ) + ); + } + function _sendTestMessageWithFee( bytes32 blockchainID, uint256 feeAmount @@ -205,7 +215,7 @@ contract TeleporterMessengerTest is Test { // Construct the test message to be received. By default, the destination // address will be the DEFAULT_DESTINATION_ADDRESS. TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(bytes32(uint256(9)), messageData); + _createMockTeleporterMessage(_createMessageID(9), messageData); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); From 666bff71e5e590e752ad69618d235d0917d405b3 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 15 Dec 2023 18:37:33 -0500 Subject: [PATCH 10/16] Fix linter and ABI bindings --- .../ERC20Bridge/ERC20Bridge/ERC20Bridge.go | 2 +- .../ExampleCrossChainMessenger.go | 2 +- .../ERC20TokenSource/ERC20TokenSource.go | 2 +- .../NativeTokenDestination.go | 2 +- .../NativeTokenSource/NativeTokenSource.go | 2 +- .../BlockHashPublisher/BlockHashPublisher.go | 2 +- .../BlockHashReceiver/BlockHashReceiver.go | 2 +- .../TeleporterMessenger/TeleporterMessenger.go | 2 +- .../TeleporterRegistry/TeleporterRegistry.go | 2 +- .../ERC20Bridge/tests/ERC20BridgeTests.t.sol | 15 +++++---------- .../tests/NativeTokenBridgeTests.t.sol | 13 ++++--------- .../tests/TeleporterMessengerTest.t.sol | 18 ++++++++---------- 12 files changed, 26 insertions(+), 38 deletions(-) diff --git a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go index a61e7ef89..70e6fbf0f 100644 --- a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go +++ b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go @@ -32,7 +32,7 @@ var ( // ERC20BridgeMetaData contains all meta data concerning the ERC20Bridge contract. var ERC20BridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"name\":\"CreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintBridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"}],\"name\":\"SubmitCreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CREATE_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"primaryFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFeeAmount\",\"type\":\"uint256\"}],\"name\":\"bridgeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"nativeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"nativeSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"nativeDecimals\",\"type\":\"uint8\"}],\"name\":\"encodeCreateBridgeTokenData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeMintBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeTransferBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenAddress\",\"type\":\"address\"}],\"name\":\"nativeToWrappedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractERC20\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"messageFeeAmount\",\"type\":\"uint256\"}],\"name\":\"submitCreateBridgeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"submittedBridgeTokenCreations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"tokenCreationSubmitted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeToken\",\"type\":\"address\"}],\"name\":\"wrappedTokenContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"bridgeTokenExists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620044ff380380620044ff833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614251620002ae6000396000818161021b01528181610b0c01528181611a6b015261233601526000818161018001528181610dcc01528181610ff101526111f401526142516000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da1146200039f578063c60da61214620003d3578063c63d220714620003ea578063c868efaa1462000401578063d2cc7a701462000418578063f2fde38b146200042157600080fd5b80637a465fd914620002e65780638343f66114620002f15780638c56fcf014620003395780638da5cb5b14620003505780639731429714620003625780639bd9abc0146200037957600080fd5b80635f217bcc116200012c5780635f217bcc146200026357806365435568146200026e5780636b47cd9a14620002ab5780636c7e40d114620002b6578063715018a614620002cd5780637497185614620002d757600080fd5b80631a7f5bec146200017a5780632b0d8f1814620001bf578063367e958414620001d85780634511243e14620001fe5780634950d2d014620002155780635eb99514146200024c575b600080fd5b620001a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001d6620001d0366004620025bc565b62000438565b005b620001ef620001e9366004620026bd565b62000533565b604051620001b69190620027a5565b620001d66200020f366004620025bc565b62000592565b6200023d7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001b6565b620001d66200025d366004620027ba565b62000685565b6200023d621e848081565b620001a26200027f366004620027d4565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200023d620493e081565b620001d6620002c73660046200281b565b6200069d565b620001d6620009ee565b620001a26005600160991b0181565b6200023d62030d4081565b6200032862000302366004620027d4565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001b6565b620001ef6200034a3660046200287d565b62000a06565b6003546001600160a01b0316620001a2565b6200032862000373366004620025bc565b62000a62565b620003286200038a366004620025bc565b60066020526000908152604090205460ff1681565b6200023d620003b0366004620027d4565b600560209081526000938452604080852082529284528284209052825290205481565b620001ef620003e4366004620028c3565b62000a80565b620001d6620003fb3660046200292f565b62000b00565b620001d662000412366004620029a4565b62000db4565b6002546200023d565b620001d662000432366004620025bc565b62000f67565b6200044262000fe3565b6001600160a01b038116620004745760405162461bcd60e51b81526004016200046b9062002a34565b60405180910390fd5b6200047f8162000a62565b15620004e45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016200046b565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b606060008585858560405160200162000550949392919062002a82565b60405160208183030381529060405290506000816040516020016200057792919062002ae7565b6040516020818303038152906040529150505b949350505050565b6200059c62000fe3565b6001600160a01b038116620005c55760405162461bcd60e51b81526004016200046b9062002a34565b620005d08162000a62565b620006305760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016200046b565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6200068f62000fe3565b6200069a8162000fed565b50565b620006a762001194565b6001600160a01b038416620006d05760405162461bcd60e51b81526004016200046b9062002b21565b6000620006dc620011ef565b9050600082156200070b57620006f38484620012f1565b90506200070b6001600160a01b038516838362001467565b60006200084986876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077b919081019062002bc6565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e4919081019062002bc6565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062002bff565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff811115620008c557620008c5620025dc565b604051908082528060200260200182016040528015620008ef578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162000917919062002c65565b6020604051808303816000875af115801562000937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095d919062002ce7565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009d09086815260200190565b60405180910390a450505050620009e76001600055565b5050505050565b620009f862001553565b62000a046000620015af565b565b6060600084848460405160200162000a219392919062002d01565b604051602081830303815290604052905060018160405160200162000a4892919062002ae7565b6040516020818303038152906040529150505b9392505050565b6001600160a01b031660009081526001602052604090205460ff1690565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000ae49060029083906101000162002ae7565b6040516020818303038152906040529150509695505050505050565b62000b0a62001194565b7f0000000000000000000000000000000000000000000000000000000000000000870362000b4c5760405162461bcd60e51b81526004016200046b9062002d25565b6001600160a01b03841662000b755760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b03861662000b9e5760405162461bcd60e51b81526004016200046b9062002b21565b6001600160a01b03851660009081526006602052604090205460ff161562000c895762000bcc818362002dc6565b831162000c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b60648201526084016200046b565b62000c836040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001601565b62000da0565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000d1b5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b60648201526084016200046b565b600062000d298685620012f1565b905082811162000d8e5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b60648201526084016200046b565b62000d9e888888888588620019ed565b505b62000dab6001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000e1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e42919062002ce7565b101562000eab5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016200046b565b62000eb63362000a62565b1562000f1e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016200046b565b62000f61848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001ca992505050565b50505050565b62000f7162001553565b6001600160a01b03811662000fd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200046b565b6200069a81620015af565b62000a0462001553565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001074919062002ce7565b60025490915081831115620010e65760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016200046b565b8083116200115d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016200046b565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011e85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200046b565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001277919062002ddc565b9050620012848162000a62565b15620012ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016200046b565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156200133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001361919062002ce7565b90506200137a6001600160a01b03851633308662001e27565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015620013c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013e8919062002ce7565b9050818111620014505760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016200046b565b6200145c828262002dfc565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620014b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014df919062002ce7565b620014eb919062002dc6565b6040516001600160a01b03851660248201526044810182905290915062000f6190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e4b565b6003546001600160a01b0316331462000a045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200046b565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200160d620011ef565b90506000808360a00151111562001650576200163283604001518460a00151620012f1565b604084015190915062001650906001600160a01b0316838362001467565b60008360a00151846080015162001668919062002dfc565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b158015620016ba57600080fd5b505af1158015620016cf573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173a919062002ce7565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062002ddc565b905081876000015103620017e957806001600160a01b031687602001516001600160a01b031614620017e95760405162461bcd60e51b81526004016200046b9062002e12565b60006200186f88600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200185e919062002ddc565b8b60600151898d60c0015162000a80565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff811115620018ef57620018ef620025dc565b60405190808252806020026020018201604052801562001919578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001941919062002c65565b6020604051808303816000875af115801562001961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001987919062002ce7565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019da9392919062002d01565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff161562001a695760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b60648201526084016200046b565b7f0000000000000000000000000000000000000000000000000000000000000000860362001aab5760405162461bcd60e51b81526004016200046b9062002d25565b600062001ab7620011ef565b9050811562001ad65762001ad66001600160a01b038616828462001467565b600062001ae4838562002dfc565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001b2990849062002dc6565b909155506000905062001b3e87878462000a06565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001bba5762001bba620025dc565b60405190808252806020026020018201604052801562001be4578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001c0c919062002c65565b6020604051808303816000875af115801562001c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c52919062002ce7565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001c959392919062002d01565b60405180910390a450505050505050505050565b6000808280602001905181019062001cc2919062002e61565b9092509050600082600281111562001cde5762001cde62002ad1565b0362001d22576000806000808480602001905181019062001d00919062002ed0565b935093509350935062001d1889898686868662001f29565b50505050620009e7565b600182600281111562001d395762001d3962002ad1565b0362001d785760008060008380602001905181019062001d5a919062002f5a565b92509250925062001d6f888885858562002098565b505050620009e7565b600282600281111562001d8f5762001d8f62002ad1565b0362001dde576000806000806000808680602001905181019062001db4919062002fa2565b95509550955095509550955062001dd28b8b88888888888862002212565b505050505050620009e7565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e000000000060448201526064016200046b565b62000f61846323b872dd60e01b8585856040516024016200151b9392919062002d01565b600062001ea2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023cb9092919063ffffffff16565b80519091501562001f24578080602001905181019062001ec3919062003012565b62001f245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200046b565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001fba5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b60648201526084016200046b565b600086868686868660405162001fd09062002598565b62001fe19695949392919062003036565b604051809103906000f08015801562001ffe573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b620020a262001194565b6001600160a01b038216620020cb5760405162461bcd60e51b81526004016200046b9062002d6d565b60008581526007602090815260408083206001600160a01b03808916855290835281842087821685529092529091205416806200215c5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016200046b565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620021a757600080fd5b505af1158015620021bc573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a250620009e76001600055565b6200221c62001194565b6001600160a01b038316620022455760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b0385166200226e5760405162461bcd60e51b81526004016200046b9062002b21565b60008881526005602090815260408083206001600160a01b03808c168552908352818420908816845290915290205482811015620022f95760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b60648201526084016200046b565b62002305838262002dfc565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620023a4576001600160a01b0386163014620023875760405162461bcd60e51b81526004016200046b9062002e12565b6200239d6001600160a01b0386168585620023dc565b50620023b6565b620023b4878787878787620019ed565b505b620023c16001600055565b5050505050505050565b60606200058a84846000856200240e565b6040516001600160a01b03831660248201526044810182905262001f2490849063a9059cbb60e01b906064016200151b565b606082471015620024715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200046b565b600080866001600160a01b031685876040516200248f919062003095565b60006040518083038185875af1925050503d8060008114620024ce576040519150601f19603f3d011682016040523d82523d6000602084013e620024d3565b606091505b5091509150620024e687838387620024f1565b979650505050505050565b60608315620025655782516000036200255d576001600160a01b0385163b6200255d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200046b565b50816200058a565b6200058a83838151156200257c5781518083602001fd5b8060405162461bcd60e51b81526004016200046b9190620027a5565b61116880620030b483390190565b6001600160a01b03811681146200069a57600080fd5b600060208284031215620025cf57600080fd5b813562000a5b81620025a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200261e576200261e620025dc565b604052919050565b600067ffffffffffffffff821115620026435762002643620025dc565b50601f01601f191660200190565b600082601f8301126200266357600080fd5b81356200267a620026748262002626565b620025f2565b8181528460208386010111156200269057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff811681146200069a57600080fd5b60008060008060808587031215620026d457600080fd5b8435620026e181620025a6565b9350602085013567ffffffffffffffff80821115620026ff57600080fd5b6200270d8883890162002651565b945060408701359150808211156200272457600080fd5b50620027338782880162002651565b92505060608501356200274681620026ad565b939692955090935050565b60005b838110156200276e57818101518382015260200162002754565b50506000910152565b600081518084526200279181602086016020860162002751565b601f01601f19169290920160200192915050565b60208152600062000a5b602083018462002777565b600060208284031215620027cd57600080fd5b5035919050565b600080600060608486031215620027ea57600080fd5b833592506020840135620027fe81620025a6565b915060408401356200281081620025a6565b809150509250925092565b600080600080600060a086880312156200283457600080fd5b8535945060208601356200284881620025a6565b935060408601356200285a81620025a6565b925060608601356200286c81620025a6565b949793965091946080013592915050565b6000806000606084860312156200289357600080fd5b8335620028a081620025a6565b92506020840135620028b281620025a6565b929592945050506040919091013590565b60008060008060008060c08789031215620028dd57600080fd5b863595506020870135620028f181620025a6565b945060408701356200290381620025a6565b935060608701356200291581620025a6565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156200294b57600080fd5b8735965060208801356200295f81620025a6565b955060408801356200297181620025a6565b945060608801356200298381620025a6565b9699959850939660808101359560a0820135955060c0909101359350915050565b60008060008060608587031215620029bb57600080fd5b843593506020850135620029cf81620025a6565b9250604085013567ffffffffffffffff80821115620029ed57600080fd5b818701915087601f83011262002a0257600080fd5b81358181111562002a1257600080fd5b88602082850101111562002a2557600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6001600160a01b038516815260806020820181905260009062002aa89083018662002777565b828103604084015262002abc818662002777565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002b0857634e487b7160e01b600052602160045260246000fd5b838252604060208301526200058a604083018462002777565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002b7e620026748462002626565b905082815283838301111562002b9357600080fd5b62000a5b83602083018462002751565b600082601f83011262002bb557600080fd5b62000a5b8383516020850162002b6d565b60006020828403121562002bd957600080fd5b815167ffffffffffffffff81111562002bf157600080fd5b6200058a8482850162002ba3565b60006020828403121562002c1257600080fd5b815162000a5b81620026ad565b600081518084526020808501945080840160005b8381101562002c5a5781516001600160a01b03168752958201959082019060010162002c33565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002cc861010084018262002c1f565b905060a0840151601f198483030160e08501526200145c828262002777565b60006020828403121562002cfa57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001461576200146162002db0565b60006020828403121562002def57600080fd5b815162000a5b81620025a6565b8181038181111562001461576200146162002db0565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002e7557600080fd5b82516003811062002e8557600080fd5b602084015190925067ffffffffffffffff81111562002ea357600080fd5b8301601f8101851362002eb557600080fd5b62002ec68582516020840162002b6d565b9150509250929050565b6000806000806080858703121562002ee757600080fd5b845162002ef481620025a6565b602086015190945067ffffffffffffffff8082111562002f1357600080fd5b62002f218883890162002ba3565b9450604087015191508082111562002f3857600080fd5b5062002f478782880162002ba3565b92505060608501516200274681620026ad565b60008060006060848603121562002f7057600080fd5b835162002f7d81620025a6565b602085015190935062002f9081620025a6565b80925050604084015190509250925092565b60008060008060008060c0878903121562002fbc57600080fd5b86519550602087015162002fd081620025a6565b604088015190955062002fe381620025a6565b606088015190945062002ff681620025a6565b809350506080870151915060a087015190509295509295509295565b6000602082840312156200302557600080fd5b8151801515811462000a5b57600080fd5b8681526001600160a01b0386811660208301528516604082015260c0606082018190526000906200306a9083018662002777565b82810360808401526200307e818662002777565b91505060ff831660a0830152979650505050505050565b60008251620030a981846020870162002751565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea2646970667358221220ff15d87d9e06053eea65bea2fb7624abc50212a4686d7d62b9d7a5a0ec3d931364736f6c63430008120033a2646970667358221220ab6ff3201ef8c76fa616bd44bd6b48a6582604cad87fc27a53287bd9995be9f164736f6c63430008120033", + Bin: "0x60c06040523480156200001157600080fd5b50604051620044ff380380620044ff833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614251620002ae6000396000818161021b01528181610b0c01528181611a6b015261233601526000818161018001528181610dcc01528181610ff101526111f401526142516000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da1146200039f578063c60da61214620003d3578063c63d220714620003ea578063c868efaa1462000401578063d2cc7a701462000418578063f2fde38b146200042157600080fd5b80637a465fd914620002e65780638343f66114620002f15780638c56fcf014620003395780638da5cb5b14620003505780639731429714620003625780639bd9abc0146200037957600080fd5b80635f217bcc116200012c5780635f217bcc146200026357806365435568146200026e5780636b47cd9a14620002ab5780636c7e40d114620002b6578063715018a614620002cd5780637497185614620002d757600080fd5b80631a7f5bec146200017a5780632b0d8f1814620001bf578063367e958414620001d85780634511243e14620001fe5780634950d2d014620002155780635eb99514146200024c575b600080fd5b620001a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001d6620001d0366004620025bc565b62000438565b005b620001ef620001e9366004620026bd565b62000533565b604051620001b69190620027a5565b620001d66200020f366004620025bc565b62000592565b6200023d7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001b6565b620001d66200025d366004620027ba565b62000685565b6200023d621e848081565b620001a26200027f366004620027d4565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200023d620493e081565b620001d6620002c73660046200281b565b6200069d565b620001d6620009ee565b620001a26005600160991b0181565b6200023d62030d4081565b6200032862000302366004620027d4565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001b6565b620001ef6200034a3660046200287d565b62000a06565b6003546001600160a01b0316620001a2565b6200032862000373366004620025bc565b62000a62565b620003286200038a366004620025bc565b60066020526000908152604090205460ff1681565b6200023d620003b0366004620027d4565b600560209081526000938452604080852082529284528284209052825290205481565b620001ef620003e4366004620028c3565b62000a80565b620001d6620003fb3660046200292f565b62000b00565b620001d662000412366004620029a4565b62000db4565b6002546200023d565b620001d662000432366004620025bc565b62000f67565b6200044262000fe3565b6001600160a01b038116620004745760405162461bcd60e51b81526004016200046b9062002a34565b60405180910390fd5b6200047f8162000a62565b15620004e45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016200046b565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b606060008585858560405160200162000550949392919062002a82565b60405160208183030381529060405290506000816040516020016200057792919062002ae7565b6040516020818303038152906040529150505b949350505050565b6200059c62000fe3565b6001600160a01b038116620005c55760405162461bcd60e51b81526004016200046b9062002a34565b620005d08162000a62565b620006305760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016200046b565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6200068f62000fe3565b6200069a8162000fed565b50565b620006a762001194565b6001600160a01b038416620006d05760405162461bcd60e51b81526004016200046b9062002b21565b6000620006dc620011ef565b9050600082156200070b57620006f38484620012f1565b90506200070b6001600160a01b038516838362001467565b60006200084986876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077b919081019062002bc6565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e4919081019062002bc6565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062002bff565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff811115620008c557620008c5620025dc565b604051908082528060200260200182016040528015620008ef578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162000917919062002c65565b6020604051808303816000875af115801562000937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095d919062002ce7565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009d09086815260200190565b60405180910390a450505050620009e76001600055565b5050505050565b620009f862001553565b62000a046000620015af565b565b6060600084848460405160200162000a219392919062002d01565b604051602081830303815290604052905060018160405160200162000a4892919062002ae7565b6040516020818303038152906040529150505b9392505050565b6001600160a01b031660009081526001602052604090205460ff1690565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000ae49060029083906101000162002ae7565b6040516020818303038152906040529150509695505050505050565b62000b0a62001194565b7f0000000000000000000000000000000000000000000000000000000000000000870362000b4c5760405162461bcd60e51b81526004016200046b9062002d25565b6001600160a01b03841662000b755760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b03861662000b9e5760405162461bcd60e51b81526004016200046b9062002b21565b6001600160a01b03851660009081526006602052604090205460ff161562000c895762000bcc818362002dc6565b831162000c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b60648201526084016200046b565b62000c836040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001601565b62000da0565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000d1b5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b60648201526084016200046b565b600062000d298685620012f1565b905082811162000d8e5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b60648201526084016200046b565b62000d9e888888888588620019ed565b505b62000dab6001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000e1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e42919062002ce7565b101562000eab5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016200046b565b62000eb63362000a62565b1562000f1e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016200046b565b62000f61848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001ca992505050565b50505050565b62000f7162001553565b6001600160a01b03811662000fd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200046b565b6200069a81620015af565b62000a0462001553565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001074919062002ce7565b60025490915081831115620010e65760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016200046b565b8083116200115d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016200046b565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011e85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200046b565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001277919062002ddc565b9050620012848162000a62565b15620012ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016200046b565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156200133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001361919062002ce7565b90506200137a6001600160a01b03851633308662001e27565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015620013c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013e8919062002ce7565b9050818111620014505760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016200046b565b6200145c828262002dfc565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620014b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014df919062002ce7565b620014eb919062002dc6565b6040516001600160a01b03851660248201526044810182905290915062000f6190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e4b565b6003546001600160a01b0316331462000a045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200046b565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200160d620011ef565b90506000808360a00151111562001650576200163283604001518460a00151620012f1565b604084015190915062001650906001600160a01b0316838362001467565b60008360a00151846080015162001668919062002dfc565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b158015620016ba57600080fd5b505af1158015620016cf573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173a919062002ce7565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062002ddc565b905081876000015103620017e957806001600160a01b031687602001516001600160a01b031614620017e95760405162461bcd60e51b81526004016200046b9062002e12565b60006200186f88600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200185e919062002ddc565b8b60600151898d60c0015162000a80565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff811115620018ef57620018ef620025dc565b60405190808252806020026020018201604052801562001919578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001941919062002c65565b6020604051808303816000875af115801562001961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001987919062002ce7565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019da9392919062002d01565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff161562001a695760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b60648201526084016200046b565b7f0000000000000000000000000000000000000000000000000000000000000000860362001aab5760405162461bcd60e51b81526004016200046b9062002d25565b600062001ab7620011ef565b9050811562001ad65762001ad66001600160a01b038616828462001467565b600062001ae4838562002dfc565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001b2990849062002dc6565b909155506000905062001b3e87878462000a06565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001bba5762001bba620025dc565b60405190808252806020026020018201604052801562001be4578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001c0c919062002c65565b6020604051808303816000875af115801562001c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c52919062002ce7565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001c959392919062002d01565b60405180910390a450505050505050505050565b6000808280602001905181019062001cc2919062002e61565b9092509050600082600281111562001cde5762001cde62002ad1565b0362001d22576000806000808480602001905181019062001d00919062002ed0565b935093509350935062001d1889898686868662001f29565b50505050620009e7565b600182600281111562001d395762001d3962002ad1565b0362001d785760008060008380602001905181019062001d5a919062002f5a565b92509250925062001d6f888885858562002098565b505050620009e7565b600282600281111562001d8f5762001d8f62002ad1565b0362001dde576000806000806000808680602001905181019062001db4919062002fa2565b95509550955095509550955062001dd28b8b88888888888862002212565b505050505050620009e7565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e000000000060448201526064016200046b565b62000f61846323b872dd60e01b8585856040516024016200151b9392919062002d01565b600062001ea2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023cb9092919063ffffffff16565b80519091501562001f24578080602001905181019062001ec3919062003012565b62001f245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200046b565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001fba5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b60648201526084016200046b565b600086868686868660405162001fd09062002598565b62001fe19695949392919062003036565b604051809103906000f08015801562001ffe573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b620020a262001194565b6001600160a01b038216620020cb5760405162461bcd60e51b81526004016200046b9062002d6d565b60008581526007602090815260408083206001600160a01b03808916855290835281842087821685529092529091205416806200215c5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016200046b565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620021a757600080fd5b505af1158015620021bc573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a250620009e76001600055565b6200221c62001194565b6001600160a01b038316620022455760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b0385166200226e5760405162461bcd60e51b81526004016200046b9062002b21565b60008881526005602090815260408083206001600160a01b03808c168552908352818420908816845290915290205482811015620022f95760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b60648201526084016200046b565b62002305838262002dfc565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620023a4576001600160a01b0386163014620023875760405162461bcd60e51b81526004016200046b9062002e12565b6200239d6001600160a01b0386168585620023dc565b50620023b6565b620023b4878787878787620019ed565b505b620023c16001600055565b5050505050505050565b60606200058a84846000856200240e565b6040516001600160a01b03831660248201526044810182905262001f2490849063a9059cbb60e01b906064016200151b565b606082471015620024715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200046b565b600080866001600160a01b031685876040516200248f919062003095565b60006040518083038185875af1925050503d8060008114620024ce576040519150601f19603f3d011682016040523d82523d6000602084013e620024d3565b606091505b5091509150620024e687838387620024f1565b979650505050505050565b60608315620025655782516000036200255d576001600160a01b0385163b6200255d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200046b565b50816200058a565b6200058a83838151156200257c5781518083602001fd5b8060405162461bcd60e51b81526004016200046b9190620027a5565b61116880620030b483390190565b6001600160a01b03811681146200069a57600080fd5b600060208284031215620025cf57600080fd5b813562000a5b81620025a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200261e576200261e620025dc565b604052919050565b600067ffffffffffffffff821115620026435762002643620025dc565b50601f01601f191660200190565b600082601f8301126200266357600080fd5b81356200267a620026748262002626565b620025f2565b8181528460208386010111156200269057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff811681146200069a57600080fd5b60008060008060808587031215620026d457600080fd5b8435620026e181620025a6565b9350602085013567ffffffffffffffff80821115620026ff57600080fd5b6200270d8883890162002651565b945060408701359150808211156200272457600080fd5b50620027338782880162002651565b92505060608501356200274681620026ad565b939692955090935050565b60005b838110156200276e57818101518382015260200162002754565b50506000910152565b600081518084526200279181602086016020860162002751565b601f01601f19169290920160200192915050565b60208152600062000a5b602083018462002777565b600060208284031215620027cd57600080fd5b5035919050565b600080600060608486031215620027ea57600080fd5b833592506020840135620027fe81620025a6565b915060408401356200281081620025a6565b809150509250925092565b600080600080600060a086880312156200283457600080fd5b8535945060208601356200284881620025a6565b935060408601356200285a81620025a6565b925060608601356200286c81620025a6565b949793965091946080013592915050565b6000806000606084860312156200289357600080fd5b8335620028a081620025a6565b92506020840135620028b281620025a6565b929592945050506040919091013590565b60008060008060008060c08789031215620028dd57600080fd5b863595506020870135620028f181620025a6565b945060408701356200290381620025a6565b935060608701356200291581620025a6565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156200294b57600080fd5b8735965060208801356200295f81620025a6565b955060408801356200297181620025a6565b945060608801356200298381620025a6565b9699959850939660808101359560a0820135955060c0909101359350915050565b60008060008060608587031215620029bb57600080fd5b843593506020850135620029cf81620025a6565b9250604085013567ffffffffffffffff80821115620029ed57600080fd5b818701915087601f83011262002a0257600080fd5b81358181111562002a1257600080fd5b88602082850101111562002a2557600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6001600160a01b038516815260806020820181905260009062002aa89083018662002777565b828103604084015262002abc818662002777565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002b0857634e487b7160e01b600052602160045260246000fd5b838252604060208301526200058a604083018462002777565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002b7e620026748462002626565b905082815283838301111562002b9357600080fd5b62000a5b83602083018462002751565b600082601f83011262002bb557600080fd5b62000a5b8383516020850162002b6d565b60006020828403121562002bd957600080fd5b815167ffffffffffffffff81111562002bf157600080fd5b6200058a8482850162002ba3565b60006020828403121562002c1257600080fd5b815162000a5b81620026ad565b600081518084526020808501945080840160005b8381101562002c5a5781516001600160a01b03168752958201959082019060010162002c33565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002cc861010084018262002c1f565b905060a0840151601f198483030160e08501526200145c828262002777565b60006020828403121562002cfa57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001461576200146162002db0565b60006020828403121562002def57600080fd5b815162000a5b81620025a6565b8181038181111562001461576200146162002db0565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002e7557600080fd5b82516003811062002e8557600080fd5b602084015190925067ffffffffffffffff81111562002ea357600080fd5b8301601f8101851362002eb557600080fd5b62002ec68582516020840162002b6d565b9150509250929050565b6000806000806080858703121562002ee757600080fd5b845162002ef481620025a6565b602086015190945067ffffffffffffffff8082111562002f1357600080fd5b62002f218883890162002ba3565b9450604087015191508082111562002f3857600080fd5b5062002f478782880162002ba3565b92505060608501516200274681620026ad565b60008060006060848603121562002f7057600080fd5b835162002f7d81620025a6565b602085015190935062002f9081620025a6565b80925050604084015190509250925092565b60008060008060008060c0878903121562002fbc57600080fd5b86519550602087015162002fd081620025a6565b604088015190955062002fe381620025a6565b606088015190945062002ff681620025a6565b809350506080870151915060a087015190509295509295509295565b6000602082840312156200302557600080fd5b8151801515811462000a5b57600080fd5b8681526001600160a01b0386811660208301528516604082015260c0606082018190526000906200306a9083018662002777565b82810360808401526200307e818662002777565b91505060ff831660a0830152979650505050505050565b60008251620030a981846020870162002751565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea2646970667358221220ff15d87d9e06053eea65bea2fb7624abc50212a4686d7d62b9d7a5a0ec3d931364736f6c63430008120033a2646970667358221220198c6b2cb41acac327971edbd6bd2a1eee286c5d8d7968b33a1b473e1f08eaf964736f6c63430008120033", } // ERC20BridgeABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go index 29f43f88e..4dacad207 100644 --- a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go +++ b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go @@ -32,7 +32,7 @@ var ( // ExampleCrossChainMessengerMetaData contains all meta data concerning the ExampleCrossChainMessenger contract. var ExampleCrossChainMessengerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ReceiveMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"SendMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getCurrentMessage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001a7338038062001a73833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b608051611861620002126000396000818160be015281816104f2015281816108ca0152610c2801526118616000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806397314297116100715780639731429714610151578063b33fead414610174578063c868efaa14610195578063d2cc7a70146101a8578063f2fde38b146101ba578063f63d09d7146101cd57600080fd5b80631a7f5bec146100b95780632b0d8f18146100fd5780634511243e146101125780635eb9951414610125578063715018a6146101385780638da5cb5b14610140575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004611211565b6101e0565b005b610110610120366004611211565b6102d2565b610110610133366004611235565b6103bc565b6101106103d0565b6003546001600160a01b03166100e0565b61016461015f366004611211565b6103e4565b60405190151581526020016100f4565b610187610182366004611235565b610402565b6040516100f492919061129e565b6101106101a336600461130b565b6104da565b6002545b6040519081526020016100f4565b6101106101c8366004611211565b610682565b6101ac6101db366004611367565b6106f8565b6101e86108be565b6001600160a01b0381166102175760405162461bcd60e51b815260040161020e906113ed565b60405180910390fd5b610220816103e4565b156102835760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161020e565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6102da6108be565b6001600160a01b0381166103005760405162461bcd60e51b815260040161020e906113ed565b610309816103e4565b6103675760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161020e565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6103c46108be565b6103cd816108c6565b50565b6103d8610a66565b6103e26000610ac0565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818152600460209081526040808320815180830190925280546001600160a01b0316825260018101805460609486949392908401916104429061143b565b80601f016020809104026020016040519081016040528092919081815260200182805461046e9061143b565b80156104bb5780601f10610490576101008083540402835291602001916104bb565b820191906000526020600020905b81548152906001019060200180831161049e57829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105659190611475565b10156105cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161020e565b6105d5336103e4565b1561063b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161020e565b61067c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1292505050565b50505050565b61068a610a66565b6001600160a01b0381166106ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020e565b6103cd81610ac0565b6000610702610bca565b600061070c610c23565b905060008615610736576107208888610d1e565b90506107366001600160a01b0389168383610e88565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516107789594939291906114b7565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff8111156107f2576107f26114e5565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50815260200188886040516020016108349291906114fb565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016108629190611553565b6020604051808303816000875af1158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611475565b925050506108b36001600055565b979650505050505050565b6103e2610a66565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611475565b600254909150818311156109ba5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161020e565b808311610a2f5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161020e565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610b2891906115d1565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610b7e90826116c1565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610bbc9190611781565b60405180910390a350505050565b600260005403610c1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161020e565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611794565b9050610cb3816103e4565b15610d195760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161020e565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190611475565b9050610da26001600160a01b038516333086610f6d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190611475565b9050818111610e735760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161020e565b610e7d82826117c7565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190611475565b610f0791906117da565b6040516001600160a01b03851660248201526044810182905290915061067c90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fa5565b6040516001600160a01b038085166024830152831660448201526064810182905261067c9085906323b872dd60e01b90608401610f36565b6000610ffa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661107c9092919063ffffffff16565b805190915015611077578080602001905181019061101891906117ed565b6110775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161020e565b505050565b606061108b8484600085611093565b949350505050565b6060824710156110f45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161020e565b600080866001600160a01b03168587604051611110919061180f565b60006040518083038185875af1925050503d806000811461114d576040519150601f19603f3d011682016040523d82523d6000602084013e611152565b606091505b50915091506108b387838387606083156111cd5782516000036111c6576001600160a01b0385163b6111c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161020e565b508161108b565b61108b83838151156111e25781518083602001fd5b8060405162461bcd60e51b815260040161020e9190611781565b6001600160a01b03811681146103cd57600080fd5b60006020828403121561122357600080fd5b813561122e816111fc565b9392505050565b60006020828403121561124757600080fd5b5035919050565b60005b83811015611269578181015183820152602001611251565b50506000910152565b6000815180845261128a81602086016020860161124e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061108b90830184611272565b60008083601f8401126112d457600080fd5b50813567ffffffffffffffff8111156112ec57600080fd5b60208301915083602082850101111561130457600080fd5b9250929050565b6000806000806060858703121561132157600080fd5b843593506020850135611333816111fc565b9250604085013567ffffffffffffffff81111561134f57600080fd5b61135b878288016112c2565b95989497509550505050565b600080600080600080600060c0888a03121561138257600080fd5b873596506020880135611394816111fc565b955060408801356113a4816111fc565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156113ce57600080fd5b6113da8a828b016112c2565b989b979a50959850939692959293505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600181811c9082168061144f57607f821691505b60208210810361146f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561148757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108b360808301848661148e565b634e487b7160e01b600052604160045260246000fd5b60208152600061108b60208301848661148e565b600081518084526020808501945080840160005b838110156115485781516001600160a01b031687529582019590820190600101611523565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526115b461010084018261150f565b905060a0840151601f198483030160e0850152610e7d8282611272565b6000602082840312156115e357600080fd5b815167ffffffffffffffff808211156115fb57600080fd5b818401915084601f83011261160f57600080fd5b815181811115611621576116216114e5565b604051601f8201601f19908116603f01168101908382118183101715611649576116496114e5565b8160405282815287602084870101111561166257600080fd5b6108b383602083016020880161124e565b601f82111561107757600081815260208120601f850160051c8101602086101561169a5750805b601f850160051c820191505b818110156116b9578281556001016116a6565b505050505050565b815167ffffffffffffffff8111156116db576116db6114e5565b6116ef816116e9845461143b565b84611673565b602080601f831160018114611724576000841561170c5750858301515b600019600386901b1c1916600185901b1785556116b9565b600085815260208120601f198616915b8281101561175357888601518255948401946001909101908401611734565b50858210156117715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061122e6020830184611272565b6000602082840312156117a657600080fd5b815161122e816111fc565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8257610e826117b1565b80820180821115610e8257610e826117b1565b6000602082840312156117ff57600080fd5b8151801515811461122e57600080fd5b6000825161182181846020870161124e565b919091019291505056fea26469706673582212209dd46bdce86203021af4e6d2cd2d5207ab85f0191b7923e450335bc4a218187464736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001a7338038062001a73833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b608051611861620002126000396000818160be015281816104f2015281816108ca0152610c2801526118616000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806397314297116100715780639731429714610151578063b33fead414610174578063c868efaa14610195578063d2cc7a70146101a8578063f2fde38b146101ba578063f63d09d7146101cd57600080fd5b80631a7f5bec146100b95780632b0d8f18146100fd5780634511243e146101125780635eb9951414610125578063715018a6146101385780638da5cb5b14610140575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004611211565b6101e0565b005b610110610120366004611211565b6102d2565b610110610133366004611235565b6103bc565b6101106103d0565b6003546001600160a01b03166100e0565b61016461015f366004611211565b6103e4565b60405190151581526020016100f4565b610187610182366004611235565b610402565b6040516100f492919061129e565b6101106101a336600461130b565b6104da565b6002545b6040519081526020016100f4565b6101106101c8366004611211565b610682565b6101ac6101db366004611367565b6106f8565b6101e86108be565b6001600160a01b0381166102175760405162461bcd60e51b815260040161020e906113ed565b60405180910390fd5b610220816103e4565b156102835760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161020e565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6102da6108be565b6001600160a01b0381166103005760405162461bcd60e51b815260040161020e906113ed565b610309816103e4565b6103675760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161020e565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6103c46108be565b6103cd816108c6565b50565b6103d8610a66565b6103e26000610ac0565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818152600460209081526040808320815180830190925280546001600160a01b0316825260018101805460609486949392908401916104429061143b565b80601f016020809104026020016040519081016040528092919081815260200182805461046e9061143b565b80156104bb5780601f10610490576101008083540402835291602001916104bb565b820191906000526020600020905b81548152906001019060200180831161049e57829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105659190611475565b10156105cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161020e565b6105d5336103e4565b1561063b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161020e565b61067c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1292505050565b50505050565b61068a610a66565b6001600160a01b0381166106ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020e565b6103cd81610ac0565b6000610702610bca565b600061070c610c23565b905060008615610736576107208888610d1e565b90506107366001600160a01b0389168383610e88565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516107789594939291906114b7565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff8111156107f2576107f26114e5565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50815260200188886040516020016108349291906114fb565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016108629190611553565b6020604051808303816000875af1158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611475565b925050506108b36001600055565b979650505050505050565b6103e2610a66565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611475565b600254909150818311156109ba5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161020e565b808311610a2f5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161020e565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610b2891906115d1565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610b7e90826116c1565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610bbc9190611781565b60405180910390a350505050565b600260005403610c1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161020e565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611794565b9050610cb3816103e4565b15610d195760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161020e565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190611475565b9050610da26001600160a01b038516333086610f6d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190611475565b9050818111610e735760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161020e565b610e7d82826117c7565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190611475565b610f0791906117da565b6040516001600160a01b03851660248201526044810182905290915061067c90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fa5565b6040516001600160a01b038085166024830152831660448201526064810182905261067c9085906323b872dd60e01b90608401610f36565b6000610ffa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661107c9092919063ffffffff16565b805190915015611077578080602001905181019061101891906117ed565b6110775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161020e565b505050565b606061108b8484600085611093565b949350505050565b6060824710156110f45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161020e565b600080866001600160a01b03168587604051611110919061180f565b60006040518083038185875af1925050503d806000811461114d576040519150601f19603f3d011682016040523d82523d6000602084013e611152565b606091505b50915091506108b387838387606083156111cd5782516000036111c6576001600160a01b0385163b6111c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161020e565b508161108b565b61108b83838151156111e25781518083602001fd5b8060405162461bcd60e51b815260040161020e9190611781565b6001600160a01b03811681146103cd57600080fd5b60006020828403121561122357600080fd5b813561122e816111fc565b9392505050565b60006020828403121561124757600080fd5b5035919050565b60005b83811015611269578181015183820152602001611251565b50506000910152565b6000815180845261128a81602086016020860161124e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061108b90830184611272565b60008083601f8401126112d457600080fd5b50813567ffffffffffffffff8111156112ec57600080fd5b60208301915083602082850101111561130457600080fd5b9250929050565b6000806000806060858703121561132157600080fd5b843593506020850135611333816111fc565b9250604085013567ffffffffffffffff81111561134f57600080fd5b61135b878288016112c2565b95989497509550505050565b600080600080600080600060c0888a03121561138257600080fd5b873596506020880135611394816111fc565b955060408801356113a4816111fc565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156113ce57600080fd5b6113da8a828b016112c2565b989b979a50959850939692959293505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600181811c9082168061144f57607f821691505b60208210810361146f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561148757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108b360808301848661148e565b634e487b7160e01b600052604160045260246000fd5b60208152600061108b60208301848661148e565b600081518084526020808501945080840160005b838110156115485781516001600160a01b031687529582019590820190600101611523565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526115b461010084018261150f565b905060a0840151601f198483030160e0850152610e7d8282611272565b6000602082840312156115e357600080fd5b815167ffffffffffffffff808211156115fb57600080fd5b818401915084601f83011261160f57600080fd5b815181811115611621576116216114e5565b604051601f8201601f19908116603f01168101908382118183101715611649576116496114e5565b8160405282815287602084870101111561166257600080fd5b6108b383602083016020880161124e565b601f82111561107757600081815260208120601f850160051c8101602086101561169a5750805b601f850160051c820191505b818110156116b9578281556001016116a6565b505050505050565b815167ffffffffffffffff8111156116db576116db6114e5565b6116ef816116e9845461143b565b84611673565b602080601f831160018114611724576000841561170c5750858301515b600019600386901b1c1916600185901b1785556116b9565b600085815260208120601f198616915b8281101561175357888601518255948401946001909101908401611734565b50858210156117715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061122e6020830184611272565b6000602082840312156117a657600080fd5b815161122e816111fc565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8257610e826117b1565b80820180821115610e8257610e826117b1565b6000602082840312156117ff57600080fd5b8151801515811461122e57600080fd5b6000825161182181846020870161124e565b919091019291505056fea26469706673582212201e58f56a487804bdf4b7af876fc00b5235c869da45d1c459edafce075012a1f164736f6c63430008120033", } // ExampleCrossChainMessengerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go index 79d08eebd..18e6b7a81 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go @@ -32,7 +32,7 @@ var ( // ERC20TokenSourceMetaData contains all meta data concerning the ERC20TokenSource contract. var ERC20TokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20ContractAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20ContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea264697066735822122030f6c4a61bed1b93fc8331135038f5c3ab1696092ad42f4bcf37019e7a72e3b564736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", + Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea2646970667358221220af4432b1da42606a19c914ee7ebeed9abf609142e0c74fcb3bc3c2561a35ad3c64736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", } // ERC20TokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go index f68c4b6e7..14739a388 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnAddressBalance\",\"type\":\"uint256\"}],\"name\":\"ReportTotalBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToSource\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_FOR_TRANSFER_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_BURNED_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"reportTotalBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToSource\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220de4cd7ecdf8167621f6921e50d718c8f4112b2ac1081c1ebdc7ba76555ff698264736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", + Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220c69fdf4513d6ffeda37d0efb41b4745dfc4565503469d051f31ddd50349511d664736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go index 6b0c2e5c9..9342011ec 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220dd175aa6e5ad3504ce5c736f2e3dde267b8ad59a13d68c3cda9dce2a6810534e64736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", + Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220df925b4a95006e326289a6f363f460c332d1b3d9f94bb16fef3a41c55b47557964736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go index d6edb5f56..b704de8a5 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go @@ -32,7 +32,7 @@ var ( // BlockHashPublisherMetaData contains all meta data concerning the BlockHashPublisher contract. var BlockHashPublisherMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"PublishBlockHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"RECEIVE_BLOCK_HASH_REQUIRED_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"publishLatestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea264697066735822122066ebd6900496b1fac0ea9e661667409751395e024962f9321fcb662507327f6264736f6c63430008120033", + Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea2646970667358221220c2a67bbf8d64e77c1f3cceff5c589dede386ce77e3f3c314f4bc1567f9691e0964736f6c63430008120033", } // BlockHashPublisherABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go index 666eb40a5..7afc4e393 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go @@ -32,7 +32,7 @@ var ( // BlockHashReceiverMetaData contains all meta data concerning the BlockHashReceiver contract. var BlockHashReceiverMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"publisherBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"publisherContractAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"ReceiveBlockHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getLatestBlockInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourcePublisherContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e060405234801561001057600080fd5b50604051610eaf380380610eaf83398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610c5d610252600039600081816101c401526109ac015260008181610143015261092a01526000818160ff015281816104c401526106e00152610c5d6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379a0710c11610097578063c868efaa11610066578063c868efaa1461024e578063d2cc7a7014610261578063f2fde38b14610269578063f3f39ee51461027c57600080fd5b806379a0710c146101bf5780638da5cb5b146101e657806397314297146101f7578063b17810be1461023357600080fd5b80634511243e116100d35780634511243e146101885780635eb995141461019b5780636c4f6ba9146101ae578063715018a6146101b757600080fd5b80631a7f5bec146100fa57806329b7b3fd1461013e5780632b0d8f1814610173575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101657f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610135565b610186610181366004610ada565b610285565b005b610186610196366004610ada565b610387565b6101866101a9366004610afc565b610484565b61016560045481565b610186610498565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610121565b610223610205366004610ada565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001610135565b60035460045460408051928352602083019190915201610135565b61018661025c366004610b15565b6104ac565b600154610165565b610186610277366004610ada565b61065e565b61016560035481565b61028d6106d4565b6001600160a01b0381166102bc5760405162461bcd60e51b81526004016102b390610b9c565b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff161561033b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102b3565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61038f6106d4565b6001600160a01b0381166103b55760405162461bcd60e51b81526004016102b390610b9c565b6001600160a01b03811660009081526020819052604090205460ff1661042f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102b3565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152602081905260409020805460ff19169055565b61048c6106d4565b610495816106dc565b50565b6104a061087c565b6104aa60006108d6565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105379190610bea565b101561059e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102b3565b3360009081526020819052604090205460ff16156106175760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102b3565b610658848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061092892505050565b50505050565b61066661087c565b6001600160a01b0381166106cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b3565b610495816108d6565b6104aa61087c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610bea565b600154909150818311156107d05760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102b3565b8083116108455760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102b3565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146104aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b3565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146109aa5760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610a455760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102b3565b60008082806020019051810190610a5c9190610c03565b91509150600354821115610ab7576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b0381168114610ad557600080fd5b919050565b600060208284031215610aec57600080fd5b610af582610abe565b9392505050565b600060208284031215610b0e57600080fd5b5035919050565b60008060008060608587031215610b2b57600080fd5b84359350610b3b60208601610abe565b9250604085013567ffffffffffffffff80821115610b5857600080fd5b818701915087601f830112610b6c57600080fd5b813581811115610b7b57600080fd5b886020828501011115610b8d57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215610bfc57600080fd5b5051919050565b60008060408385031215610c1657600080fd5b50508051602090910151909290915056fea2646970667358221220001b8a033a8260ea5ab4e9228ed9ea77bc40ffed56102dadaff3adc2bc564c7764736f6c63430008120033", + Bin: "0x60e060405234801561001057600080fd5b50604051610eaf380380610eaf83398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610c5d610252600039600081816101c401526109ac015260008181610143015261092a01526000818160ff015281816104c401526106e00152610c5d6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379a0710c11610097578063c868efaa11610066578063c868efaa1461024e578063d2cc7a7014610261578063f2fde38b14610269578063f3f39ee51461027c57600080fd5b806379a0710c146101bf5780638da5cb5b146101e657806397314297146101f7578063b17810be1461023357600080fd5b80634511243e116100d35780634511243e146101885780635eb995141461019b5780636c4f6ba9146101ae578063715018a6146101b757600080fd5b80631a7f5bec146100fa57806329b7b3fd1461013e5780632b0d8f1814610173575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101657f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610135565b610186610181366004610ada565b610285565b005b610186610196366004610ada565b610387565b6101866101a9366004610afc565b610484565b61016560045481565b610186610498565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610121565b610223610205366004610ada565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001610135565b60035460045460408051928352602083019190915201610135565b61018661025c366004610b15565b6104ac565b600154610165565b610186610277366004610ada565b61065e565b61016560035481565b61028d6106d4565b6001600160a01b0381166102bc5760405162461bcd60e51b81526004016102b390610b9c565b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff161561033b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102b3565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61038f6106d4565b6001600160a01b0381166103b55760405162461bcd60e51b81526004016102b390610b9c565b6001600160a01b03811660009081526020819052604090205460ff1661042f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102b3565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152602081905260409020805460ff19169055565b61048c6106d4565b610495816106dc565b50565b6104a061087c565b6104aa60006108d6565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105379190610bea565b101561059e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102b3565b3360009081526020819052604090205460ff16156106175760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102b3565b610658848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061092892505050565b50505050565b61066661087c565b6001600160a01b0381166106cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b3565b610495816108d6565b6104aa61087c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610bea565b600154909150818311156107d05760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102b3565b8083116108455760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102b3565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146104aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b3565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146109aa5760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610a455760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102b3565b60008082806020019051810190610a5c9190610c03565b91509150600354821115610ab7576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b0381168114610ad557600080fd5b919050565b600060208284031215610aec57600080fd5b610af582610abe565b9392505050565b600060208284031215610b0e57600080fd5b5035919050565b60008060008060608587031215610b2b57600080fd5b84359350610b3b60208601610abe565b9250604085013567ffffffffffffffff80821115610b5857600080fd5b818701915087601f830112610b6c57600080fd5b813581811115610b7b57600080fd5b886020828501011115610b8d57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215610bfc57600080fd5b5051919050565b60008060408385031215610c1657600080fd5b50508051602090910151909290915056fea26469706673582212202b2a14a4ab06f48cdfa7e852469e2d6f0e2fbc0b38c5f6051753e7fe27d1ab9064736f6c63430008120033", } // BlockHashReceiverABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go index b8c3d6715..50490a9ce 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go @@ -66,7 +66,7 @@ type TeleporterMessageReceipt struct { // TeleporterMessengerMetaData contains all meta data concerning the TeleporterMessenger contract. var TeleporterMessengerMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600160008190558055613196806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d127dc9b1161007c578063d127dc9b14610315578063d39b0c171461031e578063e6e67bd51461037e578063e8105ebc146103ba578063ecc70428146103ec578063f5590f38146103f557600080fd5b8063a9a856141461025c578063b120322a1461026f578063b771b3bc146102bb578063c473eef8146102c9578063ccb5f8091461030257600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb57806362448850146101fe578063892bf41214610211578063980a25841461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a366004612184565b6103fd565b60405190151581526020015b60405180910390f35b6101776101723660046121a6565b61042c565b005b6101776101873660046121a6565b61068f565b61017761019a36600461221c565b610824565b6101b26101ad366004612239565b610919565b60405190815260200161015b565b6101b26101ce366004612184565b600660209081526000928352604080842090915290825290205481565b6101776101f9366004612252565b610930565b6101b261020c366004612291565b610b6b565b61022461021f366004612184565b610bc9565b60405161015b91906122cb565b6101b261023f366004612184565b600091825260056020908152604080842092845291905290205490565b6101b261026a36600461232f565b610bf5565b6102a361027d366004612184565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102a36005600160991b0181565b6101b26102d73660046123c7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101776103103660046123f5565b610e0f565b6101b260025481565b61037061032c366004612184565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b92919061241c565b6103a561038c366004612239565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6103cd6103c8366004612184565b611321565b604080516001600160a01b03909316835260208301919091520161015b565b6101b260035481565b6101b261136a565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104565760405162461bcd60e51b815260040161044d90612443565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104935760405162461bcd60e51b815260040161044d90612488565b80826040516020016104a59190612723565b60405160208183030381529060405280519060200120146104d85760405162461bcd60e51b815260040161044d90612736565b60006104ea608084016060850161221c565b6001600160a01b03163b1161055e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161044d565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105b991860190860161221c565b6105c660e086018661277f565b6040516024016105d994939291906127c5565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061062161061a608086016060870161221c565b5a84611379565b9050806106845760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161044d565b505060018055505050565b6001600054146106b15760405162461bcd60e51b815260040161044d906127f0565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161071c5760405162461bcd60e51b815260040161044d90612488565b60008260405160200161072f9190612723565b60408051601f19818403018152919052825181516020830120919250146107685760405162461bcd60e51b815260040161044d90612736565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107a3929190612833565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107d59084906004016128b8565b6020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081891906128cb565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108a65760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161044d565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109156001600160a01b0383163383611395565b5050565b6000818152600460205260408120610426906113fd565b6001600054146109525760405162461bcd60e51b815260040161044d906127f0565b6002600055806109bc5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161044d565b6001600160a01b0382166109e25760405162461bcd60e51b815260040161044d906128e4565b6000848152600560209081526040808320868452909152902054610a185760405162461bcd60e51b815260040161044d90612488565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ab55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161044d565b6000610ac18383611410565b6000868152600560209081526040808320888452909152812060020180549293508392909190610af290849061294e565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b8f5760405162461bcd60e51b815260040161044d906127f0565b6002600055610bbe610ba083612b5e565b83356000908152600460205260409020610bb990611578565b611687565b600160005592915050565b604080518082019091526000808252602082015260008381526004602052604090206104239083611951565b6000600160005414610c195760405162461bcd60e51b815260040161044d906127f0565b60026000908155856001600160401b03811115610c3857610c38612961565b604051908082528060200260200182016040528015610c7d57816020015b6040805180820190915260008082526020820152815260200190600190039081610c565790505b50905060005b86811015610d7a576000888883818110610c9f57610c9f612c01565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d2c5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161044d565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d5c57610d5c612c01565b6020026020010181905250505080610d7390612c17565b9050610c83565b506040805160c08101825289815260006020820152610dfe918101610da436899003890189612c30565b81526020016000815260200186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050604080519283526020808401909152909201525082611687565b600160005598975050505050505050565b6001805414610e305760405162461bcd60e51b815260040161044d90612443565b60026001556001600160a01b038116610ea45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161044d565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f199190810190612cac565b9150915080610f7c5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161044d565b60208201516001600160a01b03163014610ff35760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161044d565b6002548061106c576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106491906128cb565b600281905590505b600083604001518060200190518101906110869190612e49565b9050818160400151146110f55760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161044d565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111805760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161044d565b61118e338260a00151611a16565b6111ec5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161044d565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e081015151156112385783516112389082611a8b565b60c08101515160005b818110156112935760008360c00151828151811061126157611261612c01565b60200260200101519050611282876000015182600001518360200151611bba565b5061128c81612c17565b9050611241565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b03891691830191909152906112d1908290611c8a565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061130b908c908990613059565b60405180910390a4505060018055505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000611374611ce6565b905090565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b0383166024820152604481018290526113f890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d8b565b505050565b805460018201546000916104269161307d565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147d91906128cb565b90506114946001600160a01b038516333086611e5d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff91906128cb565b90508181116115655760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161044d565b61156f828261307d565b95945050505050565b6060600061158f600561158a856113fd565b611e95565b9050806000036115de5760408051600080825260208201909252906115d6565b60408051808201909152600080825260208201528152602001906001900390816115af5790505b509392505050565b806001600160401b038111156115f6576115f6612961565b60405190808252806020026020018201604052801561163b57816020015b60408051808201909152600080825260208201528152602001906001900390816116145790505b50915060005b818110156116805761165284611eab565b83828151811061166457611664612c01565b60200260200101819052508061167990612c17565b9050611641565b5050919050565b60025460009080611703576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fb91906128cb565b600281905590505b806117205760405162461bcd60e51b815260040161044d90613090565b600061172a611ce6565b905060036000815461173b90612c17565b919050819055506000604051806101000160405280838152602001336001600160a01b031681526020018760000151815260200187602001516001600160a01b0316815260200187606001518152602001876080015181526020018681526020018760a0015181525090506000816040516020016117b991906130d9565b60405160208183030381529060405290506000808860400151602001511115611821576040880151516001600160a01b03166118075760405162461bcd60e51b815260040161044d906128e4565b6040880151805160209091015161181e9190611410565b90505b60408051808201825289820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528d516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b031916919095161790935591015160029091015589519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050906118ce90889086906130ec565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906119009086906004016128b8565b6020604051808303816000875af115801561191f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194391906128cb565b509398975050505050505050565b604080518082019091526000808252602082015261196e836113fd565b82106119c65760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161044d565b8260020160008385600001546119dc919061294e565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60008151600003611a2957506001610426565b60005b8251811015611a8157836001600160a01b0316838281518110611a5157611a51612c01565b60200260200101516001600160a01b031603611a71576001915050610426565b611a7a81612c17565b9050611a2c565b5060009392505050565b80608001515a1015611aed5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161044d565b80606001516001600160a01b03163b600003611b0d576109158282611f76565b602081015160e0820151604051600092611b2b9286926024016130ff565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b70919084611379565b905080611b8757611b818484611f76565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c145750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c7f90849061294e565b909155505050505050565b6001820180548291600285019160009182611ca483612c17565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60025460009080611d095760405162461bcd60e51b815260040161044d90613090565b600354604080513060208201528082018490526060808201939093528151808203909301835260800190819052600290611d44908390613129565b602060405180830381855afa158015611d61573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d8491906128cb565b9250505090565b6000611de0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff49092919063ffffffff16565b8051909150156113f85780806020019051810190611dfe9190613145565b6113f85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044d565b6040516001600160a01b0380851660248301528316604482015260648101829052611b819085906323b872dd60e01b906084016113c1565b6000818310611ea45781610423565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f155760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161044d565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f6e90829061294e565b909255919050565b80604051602001611f8791906130d9565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d690611fe89085906130d9565b60405180910390a35050565b6060612003848460008561200b565b949350505050565b60608247101561206c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161044d565b600080866001600160a01b031685876040516120889190613129565b60006040518083038185875af1925050503d80600081146120c5576040519150601f19603f3d011682016040523d82523d6000602084013e6120ca565b606091505b50915091506120db878383876120e6565b979650505050505050565b6060831561215557825160000361214e576001600160a01b0385163b61214e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044d565b5081612003565b612003838381511561216a5781518083602001fd5b8060405162461bcd60e51b815260040161044d91906128b8565b6000806040838503121561219757600080fd5b50508035926020909101359150565b600080604083850312156121b957600080fd5b8235915060208301356001600160401b038111156121d657600080fd5b830161010081860312156121e957600080fd5b809150509250929050565b6001600160a01b038116811461220957600080fd5b50565b8035612217816121f4565b919050565b60006020828403121561222e57600080fd5b813561138e816121f4565b60006020828403121561224b57600080fd5b5035919050565b6000806000806080858703121561226857600080fd5b84359350602085013592506040850135612281816121f4565b9396929550929360600135925050565b6000602082840312156122a357600080fd5b81356001600160401b038111156122b957600080fd5b820160e0818503121561138e57600080fd5b815181526020808301516001600160a01b03169082015260408101610426565b60008083601f8401126122fd57600080fd5b5081356001600160401b0381111561231457600080fd5b6020830191508360208260051b850101111561136357600080fd5b60008060008060008086880360a081121561234957600080fd5b8735965060208801356001600160401b038082111561236757600080fd5b6123738b838c016122eb565b90985096508691506040603f198401121561238d57600080fd5b60408a01955060808a01359250808311156123a757600080fd5b50506123b589828a016122eb565b979a9699509497509295939492505050565b600080604083850312156123da57600080fd5b82356123e5816121f4565b915060208301356121e9816121f4565b6000806040838503121561240857600080fd5b823563ffffffff811681146123e557600080fd5b8281526060810161138e602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e198436030181126124e557600080fd5b83016020810192503590506001600160401b0381111561250457600080fd5b8060051b360382131561136357600080fd5b8183526000602080850194508260005b85811015612554578135612539816121f4565b6001600160a01b031687529582019590820190600101612526565b509495945050505050565b6000808335601e1984360301811261257657600080fd5b83016020810192503590506001600160401b0381111561259557600080fd5b8060061b360382131561136357600080fd5b8183526000602080850194508260005b858110156125545781358752828201356125d0816121f4565b6001600160a01b03168784015260409687019691909101906001016125b7565b6000808335601e1984360301811261260757600080fd5b83016020810192503590506001600160401b0381111561262657600080fd5b80360382131561136357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000610100823584526020830135612675816121f4565b6001600160a01b03166020850152604083810135908501526126996060840161220c565b6001600160a01b03166060850152608083810135908501526126be60a08401846124ce565b8260a08701526126d18387018284612516565b925050506126e260c084018461255f565b85830360c08701526126f58382846125a7565b9250505061270660e08401846125f0565b85830360e0870152612719838284612635565b9695505050505050565b602081526000610423602083018461265e565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261279657600080fd5b8301803591506001600160401b038211156127b057600080fd5b60200191503681900382131561136357600080fd5b8481526001600160a01b03841660208201526060604082018190526000906127199083018486612635565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b606081526000612846606083018561265e565b905061138e602083018480516001600160a01b03168252602090810151910152565b60005b8381101561288357818101518382015260200161286b565b50506000910152565b600081518084526128a4816020860160208601612868565b601f01601f19169290920160200192915050565b602081526000610423602083018461288c565b6000602082840312156128dd57600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042657610426612938565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561299957612999612961565b60405290565b60405160c081016001600160401b038111828210171561299957612999612961565b60405161010081016001600160401b038111828210171561299957612999612961565b604051601f8201601f191681016001600160401b0381118282101715612a0c57612a0c612961565b604052919050565b600060408284031215612a2657600080fd5b612a2e612977565b90508135612a3b816121f4565b808252506020820135602082015292915050565b60006001600160401b03821115612a6857612a68612961565b5060051b60200190565b600082601f830112612a8357600080fd5b81356020612a98612a9383612a4f565b6129e4565b82815260059290921b84018101918181019086841115612ab757600080fd5b8286015b84811015612adb578035612ace816121f4565b8352918301918301612abb565b509695505050505050565b60006001600160401b03821115612aff57612aff612961565b50601f01601f191660200190565b600082601f830112612b1e57600080fd5b8135612b2c612a9382612ae6565b818152846020838601011115612b4157600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b7057600080fd5b612b7861299f565b82358152612b886020840161220c565b6020820152612b9a3660408501612a14565b60408201526080830135606082015260a08301356001600160401b0380821115612bc357600080fd5b612bcf36838701612a72565b608084015260c0850135915080821115612be857600080fd5b50612bf536828601612b0d565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c2957612c29612938565b5060010190565b600060408284031215612c4257600080fd5b6104238383612a14565b8051612217816121f4565b600082601f830112612c6857600080fd5b8151612c76612a9382612ae6565b818152846020838601011115612c8b57600080fd5b612003826020830160208701612868565b8051801515811461221757600080fd5b60008060408385031215612cbf57600080fd5b82516001600160401b0380821115612cd657600080fd5b9084019060608287031215612cea57600080fd5b604051606081018181108382111715612d0557612d05612961565b604052825181526020830151612d1a816121f4565b6020820152604083015182811115612d3157600080fd5b612d3d88828601612c57565b6040830152509350612d5491505060208401612c9c565b90509250929050565b600082601f830112612d6e57600080fd5b81516020612d7e612a9383612a4f565b82815260059290921b84018101918181019086841115612d9d57600080fd5b8286015b84811015612adb578051612db4816121f4565b8352918301918301612da1565b600082601f830112612dd257600080fd5b81516020612de2612a9383612a4f565b82815260069290921b84018101918181019086841115612e0157600080fd5b8286015b84811015612adb5760408189031215612e1e5760008081fd5b612e26612977565b8151815284820151612e37816121f4565b81860152835291830191604001612e05565b600060208284031215612e5b57600080fd5b81516001600160401b0380821115612e7257600080fd5b908301906101008286031215612e8757600080fd5b612e8f6129c1565b82518152612e9f60208401612c4c565b602082015260408301516040820152612eba60608401612c4c565b60608201526080830151608082015260a083015182811115612edb57600080fd5b612ee787828601612d5d565b60a08301525060c083015182811115612eff57600080fd5b612f0b87828601612dc1565b60c08301525060e083015182811115612f2357600080fd5b612f2f87828601612c57565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156125545781516001600160a01b031687529582019590820190600101612f52565b600081518084526020808501945080840160005b8381101561255457612fb1878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f8b565b60006101008251845260018060a01b03602084015116602085015260408301516040850152606083015161300360608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261302582860182612f3e565b91505060c083015184820360c086015261303f8282612f77565b91505060e083015184820360e086015261156f828261288c565b6001600160a01b038316815260406020820181905260009061200390830184612fc4565b8181038181111561042657610426612938565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b6020815260006104236020830184612fc4565b6060815260006128466060830185612fc4565b8381526001600160a01b038316602082015260606040820181905260009061156f9083018461288c565b6000825161313b818460208701612868565b9190910192915050565b60006020828403121561315757600080fd5b61042382612c9c56fea26469706673582212209c001f47d47fd853cf6540ac4cef1ce9ec74f5ef1ce402b033ee500c4e3128cb64736f6c63430008120033", + Bin: "0x608060405234801561001057600080fd5b50600160008190558055613195806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d127dc9b1161007c578063d127dc9b14610315578063d39b0c171461031e578063e6e67bd51461037e578063e8105ebc146103ba578063ecc70428146103ec578063f5590f38146103f557600080fd5b8063a9a856141461025c578063b120322a1461026f578063b771b3bc146102bb578063c473eef8146102c9578063ccb5f8091461030257600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb57806362448850146101fe578063892bf41214610211578063980a25841461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a366004612183565b6103fd565b60405190151581526020015b60405180910390f35b6101776101723660046121a5565b61042c565b005b6101776101873660046121a5565b61068f565b61017761019a36600461221b565b610824565b6101b26101ad366004612238565b610919565b60405190815260200161015b565b6101b26101ce366004612183565b600660209081526000928352604080842090915290825290205481565b6101776101f9366004612251565b610930565b6101b261020c366004612290565b610b6b565b61022461021f366004612183565b610bc9565b60405161015b91906122ca565b6101b261023f366004612183565b600091825260056020908152604080842092845291905290205490565b6101b261026a36600461232e565b610bf5565b6102a361027d366004612183565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102a36005600160991b0181565b6101b26102d73660046123c6565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101776103103660046123f4565b610e0f565b6101b260025481565b61037061032c366004612183565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b92919061241b565b6103a561038c366004612238565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6103cd6103c8366004612183565b611321565b604080516001600160a01b03909316835260208301919091520161015b565b6101b260035481565b6101b261136a565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104565760405162461bcd60e51b815260040161044d90612442565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104935760405162461bcd60e51b815260040161044d90612487565b80826040516020016104a59190612722565b60405160208183030381529060405280519060200120146104d85760405162461bcd60e51b815260040161044d90612735565b60006104ea608084016060850161221b565b6001600160a01b03163b1161055e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161044d565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105b991860190860161221b565b6105c660e086018661277e565b6040516024016105d994939291906127c4565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061062161061a608086016060870161221b565b5a84611379565b9050806106845760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161044d565b505060018055505050565b6001600054146106b15760405162461bcd60e51b815260040161044d906127ef565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161071c5760405162461bcd60e51b815260040161044d90612487565b60008260405160200161072f9190612722565b60408051601f19818403018152919052825181516020830120919250146107685760405162461bcd60e51b815260040161044d90612735565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107a3929190612832565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107d59084906004016128b7565b6020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081891906128ca565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108a65760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161044d565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109156001600160a01b0383163383611395565b5050565b6000818152600460205260408120610426906113fd565b6001600054146109525760405162461bcd60e51b815260040161044d906127ef565b6002600055806109bc5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161044d565b6001600160a01b0382166109e25760405162461bcd60e51b815260040161044d906128e3565b6000848152600560209081526040808320868452909152902054610a185760405162461bcd60e51b815260040161044d90612487565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ab55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161044d565b6000610ac18383611410565b6000868152600560209081526040808320888452909152812060020180549293508392909190610af290849061294d565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b8f5760405162461bcd60e51b815260040161044d906127ef565b6002600055610bbe610ba083612b5d565b83356000908152600460205260409020610bb990611578565b611687565b600160005592915050565b604080518082019091526000808252602082015260008381526004602052604090206104239083611951565b6000600160005414610c195760405162461bcd60e51b815260040161044d906127ef565b60026000908155856001600160401b03811115610c3857610c38612960565b604051908082528060200260200182016040528015610c7d57816020015b6040805180820190915260008082526020820152815260200190600190039081610c565790505b50905060005b86811015610d7a576000888883818110610c9f57610c9f612c00565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d2c5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161044d565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d5c57610d5c612c00565b6020026020010181905250505080610d7390612c16565b9050610c83565b506040805160c08101825289815260006020820152610dfe918101610da436899003890189612c2f565b81526020016000815260200186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050604080519283526020808401909152909201525082611687565b600160005598975050505050505050565b6001805414610e305760405162461bcd60e51b815260040161044d90612442565b60026001556001600160a01b038116610ea45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161044d565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f199190810190612cab565b9150915080610f7c5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161044d565b60208201516001600160a01b03163014610ff35760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161044d565b6002548061106c576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106491906128ca565b600281905590505b600083604001518060200190518101906110869190612e48565b9050818160400151146110f55760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161044d565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111805760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161044d565b61118e338260a00151611a16565b6111ec5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161044d565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e081015151156112385783516112389082611a8b565b60c08101515160005b818110156112935760008360c00151828151811061126157611261612c00565b60200260200101519050611282876000015182600001518360200151611bba565b5061128c81612c16565b9050611241565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b03891691830191909152906112d1908290611c8a565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061130b908c908990613058565b60405180910390a4505060018055505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000611374611ce6565b905090565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b0383166024820152604481018290526113f890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d8a565b505050565b805460018201546000916104269161307c565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147d91906128ca565b90506114946001600160a01b038516333086611e5c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff91906128ca565b90508181116115655760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161044d565b61156f828261307c565b95945050505050565b6060600061158f600561158a856113fd565b611e94565b9050806000036115de5760408051600080825260208201909252906115d6565b60408051808201909152600080825260208201528152602001906001900390816115af5790505b509392505050565b806001600160401b038111156115f6576115f6612960565b60405190808252806020026020018201604052801561163b57816020015b60408051808201909152600080825260208201528152602001906001900390816116145790505b50915060005b818110156116805761165284611eaa565b83828151811061166457611664612c00565b60200260200101819052508061167990612c16565b9050611641565b5050919050565b60025460009080611703576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fb91906128ca565b600281905590505b806117205760405162461bcd60e51b815260040161044d9061308f565b600061172a611ce6565b905060036000815461173b90612c16565b919050819055506000604051806101000160405280838152602001336001600160a01b031681526020018760000151815260200187602001516001600160a01b0316815260200187606001518152602001876080015181526020018681526020018760a0015181525090506000816040516020016117b991906130d8565b60405160208183030381529060405290506000808860400151602001511115611821576040880151516001600160a01b03166118075760405162461bcd60e51b815260040161044d906128e3565b6040880151805160209091015161181e9190611410565b90505b60408051808201825289820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528d516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b031916919095161790935591015160029091015589519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050906118ce90889086906130eb565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906119009086906004016128b7565b6020604051808303816000875af115801561191f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194391906128ca565b509398975050505050505050565b604080518082019091526000808252602082015261196e836113fd565b82106119c65760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161044d565b8260020160008385600001546119dc919061294d565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60008151600003611a2957506001610426565b60005b8251811015611a8157836001600160a01b0316838281518110611a5157611a51612c00565b60200260200101516001600160a01b031603611a71576001915050610426565b611a7a81612c16565b9050611a2c565b5060009392505050565b80608001515a1015611aed5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161044d565b80606001516001600160a01b03163b600003611b0d576109158282611f75565b602081015160e0820151604051600092611b2b9286926024016130fe565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b70919084611379565b905080611b8757611b818484611f75565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c145750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c7f90849061294d565b909155505050505050565b6001820180548291600285019160009182611ca483612c16565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60025460009080611d095760405162461bcd60e51b815260040161044d9061308f565b60035460408051306020820152908101839052606081019190915260029060800160408051601f1981840301815290829052611d4491613128565b602060405180830381855afa158015611d61573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d8491906128ca565b91505090565b6000611ddf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff39092919063ffffffff16565b8051909150156113f85780806020019051810190611dfd9190613144565b6113f85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044d565b6040516001600160a01b0380851660248301528316604482015260648101829052611b819085906323b872dd60e01b906084016113c1565b6000818310611ea35781610423565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f145760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161044d565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f6d90829061294d565b909255919050565b80604051602001611f8691906130d8565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d690611fe79085906130d8565b60405180910390a35050565b6060612002848460008561200a565b949350505050565b60608247101561206b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161044d565b600080866001600160a01b031685876040516120879190613128565b60006040518083038185875af1925050503d80600081146120c4576040519150601f19603f3d011682016040523d82523d6000602084013e6120c9565b606091505b50915091506120da878383876120e5565b979650505050505050565b6060831561215457825160000361214d576001600160a01b0385163b61214d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044d565b5081612002565b61200283838151156121695781518083602001fd5b8060405162461bcd60e51b815260040161044d91906128b7565b6000806040838503121561219657600080fd5b50508035926020909101359150565b600080604083850312156121b857600080fd5b8235915060208301356001600160401b038111156121d557600080fd5b830161010081860312156121e857600080fd5b809150509250929050565b6001600160a01b038116811461220857600080fd5b50565b8035612216816121f3565b919050565b60006020828403121561222d57600080fd5b813561138e816121f3565b60006020828403121561224a57600080fd5b5035919050565b6000806000806080858703121561226757600080fd5b84359350602085013592506040850135612280816121f3565b9396929550929360600135925050565b6000602082840312156122a257600080fd5b81356001600160401b038111156122b857600080fd5b820160e0818503121561138e57600080fd5b815181526020808301516001600160a01b03169082015260408101610426565b60008083601f8401126122fc57600080fd5b5081356001600160401b0381111561231357600080fd5b6020830191508360208260051b850101111561136357600080fd5b60008060008060008086880360a081121561234857600080fd5b8735965060208801356001600160401b038082111561236657600080fd5b6123728b838c016122ea565b90985096508691506040603f198401121561238c57600080fd5b60408a01955060808a01359250808311156123a657600080fd5b50506123b489828a016122ea565b979a9699509497509295939492505050565b600080604083850312156123d957600080fd5b82356123e4816121f3565b915060208301356121e8816121f3565b6000806040838503121561240757600080fd5b823563ffffffff811681146123e457600080fd5b8281526060810161138e602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e198436030181126124e457600080fd5b83016020810192503590506001600160401b0381111561250357600080fd5b8060051b360382131561136357600080fd5b8183526000602080850194508260005b85811015612553578135612538816121f3565b6001600160a01b031687529582019590820190600101612525565b509495945050505050565b6000808335601e1984360301811261257557600080fd5b83016020810192503590506001600160401b0381111561259457600080fd5b8060061b360382131561136357600080fd5b8183526000602080850194508260005b858110156125535781358752828201356125cf816121f3565b6001600160a01b03168784015260409687019691909101906001016125b6565b6000808335601e1984360301811261260657600080fd5b83016020810192503590506001600160401b0381111561262557600080fd5b80360382131561136357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000610100823584526020830135612674816121f3565b6001600160a01b03166020850152604083810135908501526126986060840161220b565b6001600160a01b03166060850152608083810135908501526126bd60a08401846124cd565b8260a08701526126d08387018284612515565b925050506126e160c084018461255e565b85830360c08701526126f48382846125a6565b9250505061270560e08401846125ef565b85830360e0870152612718838284612634565b9695505050505050565b602081526000610423602083018461265d565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261279557600080fd5b8301803591506001600160401b038211156127af57600080fd5b60200191503681900382131561136357600080fd5b8481526001600160a01b03841660208201526060604082018190526000906127189083018486612634565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b606081526000612845606083018561265d565b905061138e602083018480516001600160a01b03168252602090810151910152565b60005b8381101561288257818101518382015260200161286a565b50506000910152565b600081518084526128a3816020860160208601612867565b601f01601f19169290920160200192915050565b602081526000610423602083018461288b565b6000602082840312156128dc57600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042657610426612937565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561299857612998612960565b60405290565b60405160c081016001600160401b038111828210171561299857612998612960565b60405161010081016001600160401b038111828210171561299857612998612960565b604051601f8201601f191681016001600160401b0381118282101715612a0b57612a0b612960565b604052919050565b600060408284031215612a2557600080fd5b612a2d612976565b90508135612a3a816121f3565b808252506020820135602082015292915050565b60006001600160401b03821115612a6757612a67612960565b5060051b60200190565b600082601f830112612a8257600080fd5b81356020612a97612a9283612a4e565b6129e3565b82815260059290921b84018101918181019086841115612ab657600080fd5b8286015b84811015612ada578035612acd816121f3565b8352918301918301612aba565b509695505050505050565b60006001600160401b03821115612afe57612afe612960565b50601f01601f191660200190565b600082601f830112612b1d57600080fd5b8135612b2b612a9282612ae5565b818152846020838601011115612b4057600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b6f57600080fd5b612b7761299e565b82358152612b876020840161220b565b6020820152612b993660408501612a13565b60408201526080830135606082015260a08301356001600160401b0380821115612bc257600080fd5b612bce36838701612a71565b608084015260c0850135915080821115612be757600080fd5b50612bf436828601612b0c565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c2857612c28612937565b5060010190565b600060408284031215612c4157600080fd5b6104238383612a13565b8051612216816121f3565b600082601f830112612c6757600080fd5b8151612c75612a9282612ae5565b818152846020838601011115612c8a57600080fd5b612002826020830160208701612867565b8051801515811461221657600080fd5b60008060408385031215612cbe57600080fd5b82516001600160401b0380821115612cd557600080fd5b9084019060608287031215612ce957600080fd5b604051606081018181108382111715612d0457612d04612960565b604052825181526020830151612d19816121f3565b6020820152604083015182811115612d3057600080fd5b612d3c88828601612c56565b6040830152509350612d5391505060208401612c9b565b90509250929050565b600082601f830112612d6d57600080fd5b81516020612d7d612a9283612a4e565b82815260059290921b84018101918181019086841115612d9c57600080fd5b8286015b84811015612ada578051612db3816121f3565b8352918301918301612da0565b600082601f830112612dd157600080fd5b81516020612de1612a9283612a4e565b82815260069290921b84018101918181019086841115612e0057600080fd5b8286015b84811015612ada5760408189031215612e1d5760008081fd5b612e25612976565b8151815284820151612e36816121f3565b81860152835291830191604001612e04565b600060208284031215612e5a57600080fd5b81516001600160401b0380821115612e7157600080fd5b908301906101008286031215612e8657600080fd5b612e8e6129c0565b82518152612e9e60208401612c4b565b602082015260408301516040820152612eb960608401612c4b565b60608201526080830151608082015260a083015182811115612eda57600080fd5b612ee687828601612d5c565b60a08301525060c083015182811115612efe57600080fd5b612f0a87828601612dc0565b60c08301525060e083015182811115612f2257600080fd5b612f2e87828601612c56565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156125535781516001600160a01b031687529582019590820190600101612f51565b600081518084526020808501945080840160005b8381101561255357612fb0878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f8a565b60006101008251845260018060a01b03602084015116602085015260408301516040850152606083015161300260608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261302482860182612f3d565b91505060c083015184820360c086015261303e8282612f76565b91505060e083015184820360e086015261156f828261288b565b6001600160a01b038316815260406020820181905260009061200290830184612fc3565b8181038181111561042657610426612937565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b6020815260006104236020830184612fc3565b6060815260006128456060830185612fc3565b8381526001600160a01b038316602082015260606040820181905260009061156f9083018461288b565b6000825161313a818460208701612867565b9190910192915050565b60006020828403121561315657600080fd5b61042382612c9b56fea2646970667358221220bb24b94c4437d090a30225e7ce004998748dd69bcb7e4cbe698f4f56dc6b42bf64736f6c63430008120033", } // TeleporterMessengerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go index 4a86ff829..250cbd21d 100644 --- a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go +++ b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go @@ -38,7 +38,7 @@ type ProtocolRegistryEntry struct { // TeleporterRegistryMetaData contains all meta data concerning the TeleporterRegistry contract. var TeleporterRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"internalType\":\"structProtocolRegistryEntry[]\",\"name\":\"initialEntries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"AddProtocolVersion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newVersion\",\"type\":\"uint256\"}],\"name\":\"LatestVersionUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VERSION_INCREMENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATORS_SOURCE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"addProtocolVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getAddressFromVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestTeleporter\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getTeleporterFromVersion\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"getVersionFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea26469706673582212202a1a39ad55bcc32e7fdcb549879090c61afc6325db3bb3d4433f405b181a3cf164736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220df6506d8534356c414a9074e258dd279137cec2fd9f5e0c1c3e68966bae52fb564736f6c63430008120033", } // TeleporterRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol index 6533b4e06..d36e10a86 100644 --- a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol +++ b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol @@ -645,6 +645,11 @@ contract ERC20BridgeTest is Test { vm.expectCall(tokenContract, abi.encodeCall(token.decimals, ())); } + function _createMessageID(uint256 messageNonce) private view returns (bytes32) { + return + sha256(abi.encode(MOCK_TELEPORTER_MESSENGER_ADDRESS, _MOCK_BLOCKCHAIN_ID, messageNonce)); + } + function _deriveExpectedContractAddress( address creator, uint8 nonce @@ -667,14 +672,4 @@ contract ERC20BridgeTest is Test { { return bytes(string.concat("ERC20Bridge: ", errorMessage)); } - - function _createMessageID(uint256 messageNonce) private view returns (bytes32) { - return sha256( - abi.encode( - MOCK_TELEPORTER_MESSENGER_ADDRESS, - _MOCK_BLOCKCHAIN_ID, - messageNonce - ) - ); - } } diff --git a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol index bae8e642b..dd4c1d968 100644 --- a/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol +++ b/contracts/src/CrossChainApplications/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol @@ -11,7 +11,7 @@ contract NativeTokenBridgeTest is Test { address public constant MOCK_TELEPORTER_MESSENGER_ADDRESS = 0x644E5b7c5D4Bc8073732CEa72c66e0BB90dFC00f; address public constant WARP_PRECOMPILE_ADDRESS = - address(0x0200000000000000000000000000000000000005); + address(0x0200000000000000000000000000000000000005); address public constant NATIVE_MINTER_PRECOMPILE_ADDRESS = address(0x0200000000000000000000000000000000000001); bytes32 internal constant _MOCK_BLOCKCHAIN_ID = bytes32(uint256(123456)); @@ -25,12 +25,7 @@ contract NativeTokenBridgeTest is Test { uint256 internal constant _DEFAULT_FEE_AMOUNT = 123456; function _createMessageID(uint256 messageNonce) internal pure returns (bytes32) { - return sha256( - abi.encode( - MOCK_TELEPORTER_MESSENGER_ADDRESS, - _MOCK_BLOCKCHAIN_ID, - messageNonce - ) - ); + return + sha256(abi.encode(MOCK_TELEPORTER_MESSENGER_ADDRESS, _MOCK_BLOCKCHAIN_ID, messageNonce)); } -} \ No newline at end of file +} diff --git a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol index 4214c7f1e..5453e6dd2 100644 --- a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol +++ b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol @@ -106,16 +106,6 @@ contract TeleporterMessengerTest is Test { * TEST UTILS / HELPERS */ - function _createMessageID(uint256 messageNonce) internal view returns (bytes32) { - return sha256( - abi.encode( - address(teleporterMessenger), - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - messageNonce - ) - ); - } - function _sendTestMessageWithFee( bytes32 blockchainID, uint256 feeAmount @@ -244,6 +234,14 @@ contract TeleporterMessengerTest is Test { return (DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_DESTINATION_ADDRESS, messageToReceive); } + function _createMessageID(uint256 messageNonce) internal view returns (bytes32) { + return sha256( + abi.encode( + address(teleporterMessenger), DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageNonce + ) + ); + } + // Create a mock message to be used in tests. It should include no receipts // because receipts are only valid if they refer to messages previously send // to the origin chain. From 851030744181c10c263c07543bb305244c4c702f Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 18 Dec 2023 10:38:05 -0500 Subject: [PATCH 11/16] Add _initializeBlockchainID helper. Fix merge --- .../src/Teleporter/TeleporterMessenger.sol | 32 +++++++++++-------- tests/utils/utils.go | 1 - 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index abd06f927..00428ab90 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -245,11 +245,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { ); // If the blockchain ID has yet to be initialized, do so now. - bytes32 blockchainID_ = blockchainID; - if (blockchainID_ == bytes32(0)) { - blockchainID_ = WARP_MESSENGER.getBlockchainID(); - blockchainID = blockchainID_; - } + bytes32 blockchainID_ = _initializeBlockchainID(); // Parse the payload of the message. TeleporterMessage memory teleporterMessage = @@ -568,19 +564,12 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { TeleporterMessageReceipt[] memory receipts ) private returns (bytes32) { // If the blockchain ID has yet to be initialized, do so now. - bytes32 blockchainID_ = blockchainID; - if (blockchainID_ == bytes32(0)) { - blockchainID_ = WARP_MESSENGER.getBlockchainID(); - blockchainID = blockchainID_; - } + bytes32 blockchainID_ = _initializeBlockchainID(); require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); // Get the message ID to use for this message. bytes32 messageID = _calculateNextMessageID(); - // Increment the message nonce so the next message will have a different ID - ++messageNonce; - // Construct and serialize the message. TeleporterMessage memory teleporterMessage = TeleporterMessage({ messageID: messageID, @@ -594,6 +583,9 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { }); bytes memory teleporterMessageBytes = abi.encode(teleporterMessage); + // Increment the message nonce so the next message will have a different ID + ++messageNonce; + // If the fee amount is non-zero, transfer the asset into control of this TeleporterMessenger contract instance. // The fee is allowed to be 0 because it's possible for someone to run their own relayer and deliver their own messages, // which does not require further incentivization. They still must pay the transaction fee to submit the message, so @@ -770,4 +762,18 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); return sha256(abi.encode(address(this), blockchainID_, messageNonce)); } + + /** + * @dev If not already set, initialize blockchainID by getting the current blockchain ID + * value from the Warp precompile. + * @return The current blockchain ID. + */ + function _initializeBlockchainID() private returns (bytes32) { + bytes32 blockchainID_ = blockchainID; + if (blockchainID_ == bytes32(0)) { + blockchainID_ = WARP_MESSENGER.getBlockchainID(); + blockchainID = blockchainID_; + } + return blockchainID_; + } } diff --git a/tests/utils/utils.go b/tests/utils/utils.go index ecf362f19..3089974a6 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -156,7 +156,6 @@ func SendSpecifiedReceiptsAndWaitForAcceptance( feeInfo teleportermessenger.TeleporterFeeInfo, allowedRelayerAddresses []common.Address, senderKey *ecdsa.PrivateKey, - // transactor *teleportermessenger.TeleporterMessenger, ) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, source.EVMChainID) Expect(err).Should(BeNil()) From 96d14d62da2d8d3aab1e6f8c1f3017ea20acce01 Mon Sep 17 00:00:00 2001 From: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> Date: Mon, 18 Dec 2023 10:38:33 -0500 Subject: [PATCH 12/16] Update contracts/src/Teleporter/ITeleporterMessenger.sol Co-authored-by: cam-schultz <78878559+cam-schultz@users.noreply.github.com> Signed-off-by: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> --- contracts/src/Teleporter/ITeleporterMessenger.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/src/Teleporter/ITeleporterMessenger.sol b/contracts/src/Teleporter/ITeleporterMessenger.sol index 3db28e0f4..832dcbb0a 100644 --- a/contracts/src/Teleporter/ITeleporterMessenger.sol +++ b/contracts/src/Teleporter/ITeleporterMessenger.sol @@ -232,7 +232,7 @@ interface ITeleporterMessenger { /** * @dev Gets the message ID to be used for the next message sent from the contract instance. - * @return The message ID to be used for the message sent from the contract instance. + * @return The message ID to be used for the next message sent from the contract instance. */ function getNextMessageID() external view returns (bytes32); From fe68064e4ca4428e75d834fee7b6e8f873297712 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 18 Dec 2023 10:41:50 -0500 Subject: [PATCH 13/16] Fix lint and ABI bindings --- .../ERC20Bridge/ERC20Bridge/ERC20Bridge.go | 2 +- .../ExampleCrossChainMessenger.go | 2 +- .../ERC20TokenSource/ERC20TokenSource.go | 2 +- .../NativeTokenDestination.go | 2 +- .../NativeTokenSource/NativeTokenSource.go | 2 +- .../BlockHashPublisher/BlockHashPublisher.go | 2 +- .../BlockHashReceiver/BlockHashReceiver.go | 2 +- .../TeleporterMessenger.go | 2 +- .../TeleporterRegistry/TeleporterRegistry.go | 2 +- .../ERC20Bridge/tests/ERC20BridgeTests.t.sol | 2 +- .../src/Teleporter/TeleporterMessenger.sol | 28 +++++++++---------- 11 files changed, 24 insertions(+), 24 deletions(-) diff --git a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go index 70e6fbf0f..9534fab44 100644 --- a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go +++ b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go @@ -32,7 +32,7 @@ var ( // ERC20BridgeMetaData contains all meta data concerning the ERC20Bridge contract. var ERC20BridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"name\":\"CreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintBridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"}],\"name\":\"SubmitCreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CREATE_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"primaryFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFeeAmount\",\"type\":\"uint256\"}],\"name\":\"bridgeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"nativeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"nativeSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"nativeDecimals\",\"type\":\"uint8\"}],\"name\":\"encodeCreateBridgeTokenData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeMintBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeTransferBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenAddress\",\"type\":\"address\"}],\"name\":\"nativeToWrappedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractERC20\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"messageFeeAmount\",\"type\":\"uint256\"}],\"name\":\"submitCreateBridgeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"submittedBridgeTokenCreations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"tokenCreationSubmitted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeToken\",\"type\":\"address\"}],\"name\":\"wrappedTokenContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"bridgeTokenExists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620044ff380380620044ff833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614251620002ae6000396000818161021b01528181610b0c01528181611a6b015261233601526000818161018001528181610dcc01528181610ff101526111f401526142516000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da1146200039f578063c60da61214620003d3578063c63d220714620003ea578063c868efaa1462000401578063d2cc7a701462000418578063f2fde38b146200042157600080fd5b80637a465fd914620002e65780638343f66114620002f15780638c56fcf014620003395780638da5cb5b14620003505780639731429714620003625780639bd9abc0146200037957600080fd5b80635f217bcc116200012c5780635f217bcc146200026357806365435568146200026e5780636b47cd9a14620002ab5780636c7e40d114620002b6578063715018a614620002cd5780637497185614620002d757600080fd5b80631a7f5bec146200017a5780632b0d8f1814620001bf578063367e958414620001d85780634511243e14620001fe5780634950d2d014620002155780635eb99514146200024c575b600080fd5b620001a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001d6620001d0366004620025bc565b62000438565b005b620001ef620001e9366004620026bd565b62000533565b604051620001b69190620027a5565b620001d66200020f366004620025bc565b62000592565b6200023d7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001b6565b620001d66200025d366004620027ba565b62000685565b6200023d621e848081565b620001a26200027f366004620027d4565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200023d620493e081565b620001d6620002c73660046200281b565b6200069d565b620001d6620009ee565b620001a26005600160991b0181565b6200023d62030d4081565b6200032862000302366004620027d4565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001b6565b620001ef6200034a3660046200287d565b62000a06565b6003546001600160a01b0316620001a2565b6200032862000373366004620025bc565b62000a62565b620003286200038a366004620025bc565b60066020526000908152604090205460ff1681565b6200023d620003b0366004620027d4565b600560209081526000938452604080852082529284528284209052825290205481565b620001ef620003e4366004620028c3565b62000a80565b620001d6620003fb3660046200292f565b62000b00565b620001d662000412366004620029a4565b62000db4565b6002546200023d565b620001d662000432366004620025bc565b62000f67565b6200044262000fe3565b6001600160a01b038116620004745760405162461bcd60e51b81526004016200046b9062002a34565b60405180910390fd5b6200047f8162000a62565b15620004e45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016200046b565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b606060008585858560405160200162000550949392919062002a82565b60405160208183030381529060405290506000816040516020016200057792919062002ae7565b6040516020818303038152906040529150505b949350505050565b6200059c62000fe3565b6001600160a01b038116620005c55760405162461bcd60e51b81526004016200046b9062002a34565b620005d08162000a62565b620006305760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016200046b565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6200068f62000fe3565b6200069a8162000fed565b50565b620006a762001194565b6001600160a01b038416620006d05760405162461bcd60e51b81526004016200046b9062002b21565b6000620006dc620011ef565b9050600082156200070b57620006f38484620012f1565b90506200070b6001600160a01b038516838362001467565b60006200084986876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077b919081019062002bc6565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e4919081019062002bc6565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062002bff565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff811115620008c557620008c5620025dc565b604051908082528060200260200182016040528015620008ef578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162000917919062002c65565b6020604051808303816000875af115801562000937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095d919062002ce7565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009d09086815260200190565b60405180910390a450505050620009e76001600055565b5050505050565b620009f862001553565b62000a046000620015af565b565b6060600084848460405160200162000a219392919062002d01565b604051602081830303815290604052905060018160405160200162000a4892919062002ae7565b6040516020818303038152906040529150505b9392505050565b6001600160a01b031660009081526001602052604090205460ff1690565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000ae49060029083906101000162002ae7565b6040516020818303038152906040529150509695505050505050565b62000b0a62001194565b7f0000000000000000000000000000000000000000000000000000000000000000870362000b4c5760405162461bcd60e51b81526004016200046b9062002d25565b6001600160a01b03841662000b755760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b03861662000b9e5760405162461bcd60e51b81526004016200046b9062002b21565b6001600160a01b03851660009081526006602052604090205460ff161562000c895762000bcc818362002dc6565b831162000c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b60648201526084016200046b565b62000c836040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001601565b62000da0565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000d1b5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b60648201526084016200046b565b600062000d298685620012f1565b905082811162000d8e5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b60648201526084016200046b565b62000d9e888888888588620019ed565b505b62000dab6001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000e1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e42919062002ce7565b101562000eab5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016200046b565b62000eb63362000a62565b1562000f1e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016200046b565b62000f61848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001ca992505050565b50505050565b62000f7162001553565b6001600160a01b03811662000fd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200046b565b6200069a81620015af565b62000a0462001553565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001074919062002ce7565b60025490915081831115620010e65760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016200046b565b8083116200115d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016200046b565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011e85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200046b565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001277919062002ddc565b9050620012848162000a62565b15620012ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016200046b565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156200133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001361919062002ce7565b90506200137a6001600160a01b03851633308662001e27565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015620013c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013e8919062002ce7565b9050818111620014505760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016200046b565b6200145c828262002dfc565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620014b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014df919062002ce7565b620014eb919062002dc6565b6040516001600160a01b03851660248201526044810182905290915062000f6190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e4b565b6003546001600160a01b0316331462000a045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200046b565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200160d620011ef565b90506000808360a00151111562001650576200163283604001518460a00151620012f1565b604084015190915062001650906001600160a01b0316838362001467565b60008360a00151846080015162001668919062002dfc565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b158015620016ba57600080fd5b505af1158015620016cf573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173a919062002ce7565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062002ddc565b905081876000015103620017e957806001600160a01b031687602001516001600160a01b031614620017e95760405162461bcd60e51b81526004016200046b9062002e12565b60006200186f88600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200185e919062002ddc565b8b60600151898d60c0015162000a80565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff811115620018ef57620018ef620025dc565b60405190808252806020026020018201604052801562001919578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001941919062002c65565b6020604051808303816000875af115801562001961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001987919062002ce7565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019da9392919062002d01565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff161562001a695760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b60648201526084016200046b565b7f0000000000000000000000000000000000000000000000000000000000000000860362001aab5760405162461bcd60e51b81526004016200046b9062002d25565b600062001ab7620011ef565b9050811562001ad65762001ad66001600160a01b038616828462001467565b600062001ae4838562002dfc565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001b2990849062002dc6565b909155506000905062001b3e87878462000a06565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001bba5762001bba620025dc565b60405190808252806020026020018201604052801562001be4578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001c0c919062002c65565b6020604051808303816000875af115801562001c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c52919062002ce7565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001c959392919062002d01565b60405180910390a450505050505050505050565b6000808280602001905181019062001cc2919062002e61565b9092509050600082600281111562001cde5762001cde62002ad1565b0362001d22576000806000808480602001905181019062001d00919062002ed0565b935093509350935062001d1889898686868662001f29565b50505050620009e7565b600182600281111562001d395762001d3962002ad1565b0362001d785760008060008380602001905181019062001d5a919062002f5a565b92509250925062001d6f888885858562002098565b505050620009e7565b600282600281111562001d8f5762001d8f62002ad1565b0362001dde576000806000806000808680602001905181019062001db4919062002fa2565b95509550955095509550955062001dd28b8b88888888888862002212565b505050505050620009e7565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e000000000060448201526064016200046b565b62000f61846323b872dd60e01b8585856040516024016200151b9392919062002d01565b600062001ea2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023cb9092919063ffffffff16565b80519091501562001f24578080602001905181019062001ec3919062003012565b62001f245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200046b565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001fba5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b60648201526084016200046b565b600086868686868660405162001fd09062002598565b62001fe19695949392919062003036565b604051809103906000f08015801562001ffe573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b620020a262001194565b6001600160a01b038216620020cb5760405162461bcd60e51b81526004016200046b9062002d6d565b60008581526007602090815260408083206001600160a01b03808916855290835281842087821685529092529091205416806200215c5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016200046b565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620021a757600080fd5b505af1158015620021bc573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a250620009e76001600055565b6200221c62001194565b6001600160a01b038316620022455760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b0385166200226e5760405162461bcd60e51b81526004016200046b9062002b21565b60008881526005602090815260408083206001600160a01b03808c168552908352818420908816845290915290205482811015620022f95760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b60648201526084016200046b565b62002305838262002dfc565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620023a4576001600160a01b0386163014620023875760405162461bcd60e51b81526004016200046b9062002e12565b6200239d6001600160a01b0386168585620023dc565b50620023b6565b620023b4878787878787620019ed565b505b620023c16001600055565b5050505050505050565b60606200058a84846000856200240e565b6040516001600160a01b03831660248201526044810182905262001f2490849063a9059cbb60e01b906064016200151b565b606082471015620024715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200046b565b600080866001600160a01b031685876040516200248f919062003095565b60006040518083038185875af1925050503d8060008114620024ce576040519150601f19603f3d011682016040523d82523d6000602084013e620024d3565b606091505b5091509150620024e687838387620024f1565b979650505050505050565b60608315620025655782516000036200255d576001600160a01b0385163b6200255d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200046b565b50816200058a565b6200058a83838151156200257c5781518083602001fd5b8060405162461bcd60e51b81526004016200046b9190620027a5565b61116880620030b483390190565b6001600160a01b03811681146200069a57600080fd5b600060208284031215620025cf57600080fd5b813562000a5b81620025a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200261e576200261e620025dc565b604052919050565b600067ffffffffffffffff821115620026435762002643620025dc565b50601f01601f191660200190565b600082601f8301126200266357600080fd5b81356200267a620026748262002626565b620025f2565b8181528460208386010111156200269057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff811681146200069a57600080fd5b60008060008060808587031215620026d457600080fd5b8435620026e181620025a6565b9350602085013567ffffffffffffffff80821115620026ff57600080fd5b6200270d8883890162002651565b945060408701359150808211156200272457600080fd5b50620027338782880162002651565b92505060608501356200274681620026ad565b939692955090935050565b60005b838110156200276e57818101518382015260200162002754565b50506000910152565b600081518084526200279181602086016020860162002751565b601f01601f19169290920160200192915050565b60208152600062000a5b602083018462002777565b600060208284031215620027cd57600080fd5b5035919050565b600080600060608486031215620027ea57600080fd5b833592506020840135620027fe81620025a6565b915060408401356200281081620025a6565b809150509250925092565b600080600080600060a086880312156200283457600080fd5b8535945060208601356200284881620025a6565b935060408601356200285a81620025a6565b925060608601356200286c81620025a6565b949793965091946080013592915050565b6000806000606084860312156200289357600080fd5b8335620028a081620025a6565b92506020840135620028b281620025a6565b929592945050506040919091013590565b60008060008060008060c08789031215620028dd57600080fd5b863595506020870135620028f181620025a6565b945060408701356200290381620025a6565b935060608701356200291581620025a6565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156200294b57600080fd5b8735965060208801356200295f81620025a6565b955060408801356200297181620025a6565b945060608801356200298381620025a6565b9699959850939660808101359560a0820135955060c0909101359350915050565b60008060008060608587031215620029bb57600080fd5b843593506020850135620029cf81620025a6565b9250604085013567ffffffffffffffff80821115620029ed57600080fd5b818701915087601f83011262002a0257600080fd5b81358181111562002a1257600080fd5b88602082850101111562002a2557600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6001600160a01b038516815260806020820181905260009062002aa89083018662002777565b828103604084015262002abc818662002777565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002b0857634e487b7160e01b600052602160045260246000fd5b838252604060208301526200058a604083018462002777565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002b7e620026748462002626565b905082815283838301111562002b9357600080fd5b62000a5b83602083018462002751565b600082601f83011262002bb557600080fd5b62000a5b8383516020850162002b6d565b60006020828403121562002bd957600080fd5b815167ffffffffffffffff81111562002bf157600080fd5b6200058a8482850162002ba3565b60006020828403121562002c1257600080fd5b815162000a5b81620026ad565b600081518084526020808501945080840160005b8381101562002c5a5781516001600160a01b03168752958201959082019060010162002c33565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002cc861010084018262002c1f565b905060a0840151601f198483030160e08501526200145c828262002777565b60006020828403121562002cfa57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001461576200146162002db0565b60006020828403121562002def57600080fd5b815162000a5b81620025a6565b8181038181111562001461576200146162002db0565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002e7557600080fd5b82516003811062002e8557600080fd5b602084015190925067ffffffffffffffff81111562002ea357600080fd5b8301601f8101851362002eb557600080fd5b62002ec68582516020840162002b6d565b9150509250929050565b6000806000806080858703121562002ee757600080fd5b845162002ef481620025a6565b602086015190945067ffffffffffffffff8082111562002f1357600080fd5b62002f218883890162002ba3565b9450604087015191508082111562002f3857600080fd5b5062002f478782880162002ba3565b92505060608501516200274681620026ad565b60008060006060848603121562002f7057600080fd5b835162002f7d81620025a6565b602085015190935062002f9081620025a6565b80925050604084015190509250925092565b60008060008060008060c0878903121562002fbc57600080fd5b86519550602087015162002fd081620025a6565b604088015190955062002fe381620025a6565b606088015190945062002ff681620025a6565b809350506080870151915060a087015190509295509295509295565b6000602082840312156200302557600080fd5b8151801515811462000a5b57600080fd5b8681526001600160a01b0386811660208301528516604082015260c0606082018190526000906200306a9083018662002777565b82810360808401526200307e818662002777565b91505060ff831660a0830152979650505050505050565b60008251620030a981846020870162002751565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea2646970667358221220ff15d87d9e06053eea65bea2fb7624abc50212a4686d7d62b9d7a5a0ec3d931364736f6c63430008120033a2646970667358221220198c6b2cb41acac327971edbd6bd2a1eee286c5d8d7968b33a1b473e1f08eaf964736f6c63430008120033", + Bin: "0x60c06040523480156200001157600080fd5b50604051620044ff380380620044ff833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614251620002ae6000396000818161021b01528181610b0c01528181611a6b015261233601526000818161018001528181610dcc01528181610ff101526111f401526142516000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da1146200039f578063c60da61214620003d3578063c63d220714620003ea578063c868efaa1462000401578063d2cc7a701462000418578063f2fde38b146200042157600080fd5b80637a465fd914620002e65780638343f66114620002f15780638c56fcf014620003395780638da5cb5b14620003505780639731429714620003625780639bd9abc0146200037957600080fd5b80635f217bcc116200012c5780635f217bcc146200026357806365435568146200026e5780636b47cd9a14620002ab5780636c7e40d114620002b6578063715018a614620002cd5780637497185614620002d757600080fd5b80631a7f5bec146200017a5780632b0d8f1814620001bf578063367e958414620001d85780634511243e14620001fe5780634950d2d014620002155780635eb99514146200024c575b600080fd5b620001a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001d6620001d0366004620025bc565b62000438565b005b620001ef620001e9366004620026bd565b62000533565b604051620001b69190620027a5565b620001d66200020f366004620025bc565b62000592565b6200023d7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001b6565b620001d66200025d366004620027ba565b62000685565b6200023d621e848081565b620001a26200027f366004620027d4565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200023d620493e081565b620001d6620002c73660046200281b565b6200069d565b620001d6620009ee565b620001a26005600160991b0181565b6200023d62030d4081565b6200032862000302366004620027d4565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001b6565b620001ef6200034a3660046200287d565b62000a06565b6003546001600160a01b0316620001a2565b6200032862000373366004620025bc565b62000a62565b620003286200038a366004620025bc565b60066020526000908152604090205460ff1681565b6200023d620003b0366004620027d4565b600560209081526000938452604080852082529284528284209052825290205481565b620001ef620003e4366004620028c3565b62000a80565b620001d6620003fb3660046200292f565b62000b00565b620001d662000412366004620029a4565b62000db4565b6002546200023d565b620001d662000432366004620025bc565b62000f67565b6200044262000fe3565b6001600160a01b038116620004745760405162461bcd60e51b81526004016200046b9062002a34565b60405180910390fd5b6200047f8162000a62565b15620004e45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016200046b565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b606060008585858560405160200162000550949392919062002a82565b60405160208183030381529060405290506000816040516020016200057792919062002ae7565b6040516020818303038152906040529150505b949350505050565b6200059c62000fe3565b6001600160a01b038116620005c55760405162461bcd60e51b81526004016200046b9062002a34565b620005d08162000a62565b620006305760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016200046b565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6200068f62000fe3565b6200069a8162000fed565b50565b620006a762001194565b6001600160a01b038416620006d05760405162461bcd60e51b81526004016200046b9062002b21565b6000620006dc620011ef565b9050600082156200070b57620006f38484620012f1565b90506200070b6001600160a01b038516838362001467565b60006200084986876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077b919081019062002bc6565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e4919081019062002bc6565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062002bff565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff811115620008c557620008c5620025dc565b604051908082528060200260200182016040528015620008ef578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162000917919062002c65565b6020604051808303816000875af115801562000937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095d919062002ce7565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009d09086815260200190565b60405180910390a450505050620009e76001600055565b5050505050565b620009f862001553565b62000a046000620015af565b565b6060600084848460405160200162000a219392919062002d01565b604051602081830303815290604052905060018160405160200162000a4892919062002ae7565b6040516020818303038152906040529150505b9392505050565b6001600160a01b031660009081526001602052604090205460ff1690565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000ae49060029083906101000162002ae7565b6040516020818303038152906040529150509695505050505050565b62000b0a62001194565b7f0000000000000000000000000000000000000000000000000000000000000000870362000b4c5760405162461bcd60e51b81526004016200046b9062002d25565b6001600160a01b03841662000b755760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b03861662000b9e5760405162461bcd60e51b81526004016200046b9062002b21565b6001600160a01b03851660009081526006602052604090205460ff161562000c895762000bcc818362002dc6565b831162000c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b60648201526084016200046b565b62000c836040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001601565b62000da0565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000d1b5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b60648201526084016200046b565b600062000d298685620012f1565b905082811162000d8e5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b60648201526084016200046b565b62000d9e888888888588620019ed565b505b62000dab6001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000e1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e42919062002ce7565b101562000eab5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016200046b565b62000eb63362000a62565b1562000f1e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016200046b565b62000f61848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001ca992505050565b50505050565b62000f7162001553565b6001600160a01b03811662000fd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200046b565b6200069a81620015af565b62000a0462001553565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001074919062002ce7565b60025490915081831115620010e65760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016200046b565b8083116200115d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016200046b565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011e85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200046b565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001277919062002ddc565b9050620012848162000a62565b15620012ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016200046b565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156200133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001361919062002ce7565b90506200137a6001600160a01b03851633308662001e27565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015620013c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013e8919062002ce7565b9050818111620014505760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016200046b565b6200145c828262002dfc565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620014b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014df919062002ce7565b620014eb919062002dc6565b6040516001600160a01b03851660248201526044810182905290915062000f6190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e4b565b6003546001600160a01b0316331462000a045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200046b565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200160d620011ef565b90506000808360a00151111562001650576200163283604001518460a00151620012f1565b604084015190915062001650906001600160a01b0316838362001467565b60008360a00151846080015162001668919062002dfc565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b158015620016ba57600080fd5b505af1158015620016cf573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173a919062002ce7565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062002ddc565b905081876000015103620017e957806001600160a01b031687602001516001600160a01b031614620017e95760405162461bcd60e51b81526004016200046b9062002e12565b60006200186f88600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200185e919062002ddc565b8b60600151898d60c0015162000a80565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff811115620018ef57620018ef620025dc565b60405190808252806020026020018201604052801562001919578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001941919062002c65565b6020604051808303816000875af115801562001961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001987919062002ce7565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019da9392919062002d01565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff161562001a695760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b60648201526084016200046b565b7f0000000000000000000000000000000000000000000000000000000000000000860362001aab5760405162461bcd60e51b81526004016200046b9062002d25565b600062001ab7620011ef565b9050811562001ad65762001ad66001600160a01b038616828462001467565b600062001ae4838562002dfc565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001b2990849062002dc6565b909155506000905062001b3e87878462000a06565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001bba5762001bba620025dc565b60405190808252806020026020018201604052801562001be4578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001c0c919062002c65565b6020604051808303816000875af115801562001c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c52919062002ce7565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001c959392919062002d01565b60405180910390a450505050505050505050565b6000808280602001905181019062001cc2919062002e61565b9092509050600082600281111562001cde5762001cde62002ad1565b0362001d22576000806000808480602001905181019062001d00919062002ed0565b935093509350935062001d1889898686868662001f29565b50505050620009e7565b600182600281111562001d395762001d3962002ad1565b0362001d785760008060008380602001905181019062001d5a919062002f5a565b92509250925062001d6f888885858562002098565b505050620009e7565b600282600281111562001d8f5762001d8f62002ad1565b0362001dde576000806000806000808680602001905181019062001db4919062002fa2565b95509550955095509550955062001dd28b8b88888888888862002212565b505050505050620009e7565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e000000000060448201526064016200046b565b62000f61846323b872dd60e01b8585856040516024016200151b9392919062002d01565b600062001ea2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023cb9092919063ffffffff16565b80519091501562001f24578080602001905181019062001ec3919062003012565b62001f245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200046b565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001fba5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b60648201526084016200046b565b600086868686868660405162001fd09062002598565b62001fe19695949392919062003036565b604051809103906000f08015801562001ffe573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b620020a262001194565b6001600160a01b038216620020cb5760405162461bcd60e51b81526004016200046b9062002d6d565b60008581526007602090815260408083206001600160a01b03808916855290835281842087821685529092529091205416806200215c5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016200046b565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620021a757600080fd5b505af1158015620021bc573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a250620009e76001600055565b6200221c62001194565b6001600160a01b038316620022455760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b0385166200226e5760405162461bcd60e51b81526004016200046b9062002b21565b60008881526005602090815260408083206001600160a01b03808c168552908352818420908816845290915290205482811015620022f95760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b60648201526084016200046b565b62002305838262002dfc565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620023a4576001600160a01b0386163014620023875760405162461bcd60e51b81526004016200046b9062002e12565b6200239d6001600160a01b0386168585620023dc565b50620023b6565b620023b4878787878787620019ed565b505b620023c16001600055565b5050505050505050565b60606200058a84846000856200240e565b6040516001600160a01b03831660248201526044810182905262001f2490849063a9059cbb60e01b906064016200151b565b606082471015620024715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200046b565b600080866001600160a01b031685876040516200248f919062003095565b60006040518083038185875af1925050503d8060008114620024ce576040519150601f19603f3d011682016040523d82523d6000602084013e620024d3565b606091505b5091509150620024e687838387620024f1565b979650505050505050565b60608315620025655782516000036200255d576001600160a01b0385163b6200255d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200046b565b50816200058a565b6200058a83838151156200257c5781518083602001fd5b8060405162461bcd60e51b81526004016200046b9190620027a5565b61116880620030b483390190565b6001600160a01b03811681146200069a57600080fd5b600060208284031215620025cf57600080fd5b813562000a5b81620025a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200261e576200261e620025dc565b604052919050565b600067ffffffffffffffff821115620026435762002643620025dc565b50601f01601f191660200190565b600082601f8301126200266357600080fd5b81356200267a620026748262002626565b620025f2565b8181528460208386010111156200269057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff811681146200069a57600080fd5b60008060008060808587031215620026d457600080fd5b8435620026e181620025a6565b9350602085013567ffffffffffffffff80821115620026ff57600080fd5b6200270d8883890162002651565b945060408701359150808211156200272457600080fd5b50620027338782880162002651565b92505060608501356200274681620026ad565b939692955090935050565b60005b838110156200276e57818101518382015260200162002754565b50506000910152565b600081518084526200279181602086016020860162002751565b601f01601f19169290920160200192915050565b60208152600062000a5b602083018462002777565b600060208284031215620027cd57600080fd5b5035919050565b600080600060608486031215620027ea57600080fd5b833592506020840135620027fe81620025a6565b915060408401356200281081620025a6565b809150509250925092565b600080600080600060a086880312156200283457600080fd5b8535945060208601356200284881620025a6565b935060408601356200285a81620025a6565b925060608601356200286c81620025a6565b949793965091946080013592915050565b6000806000606084860312156200289357600080fd5b8335620028a081620025a6565b92506020840135620028b281620025a6565b929592945050506040919091013590565b60008060008060008060c08789031215620028dd57600080fd5b863595506020870135620028f181620025a6565b945060408701356200290381620025a6565b935060608701356200291581620025a6565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156200294b57600080fd5b8735965060208801356200295f81620025a6565b955060408801356200297181620025a6565b945060608801356200298381620025a6565b9699959850939660808101359560a0820135955060c0909101359350915050565b60008060008060608587031215620029bb57600080fd5b843593506020850135620029cf81620025a6565b9250604085013567ffffffffffffffff80821115620029ed57600080fd5b818701915087601f83011262002a0257600080fd5b81358181111562002a1257600080fd5b88602082850101111562002a2557600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6001600160a01b038516815260806020820181905260009062002aa89083018662002777565b828103604084015262002abc818662002777565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002b0857634e487b7160e01b600052602160045260246000fd5b838252604060208301526200058a604083018462002777565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002b7e620026748462002626565b905082815283838301111562002b9357600080fd5b62000a5b83602083018462002751565b600082601f83011262002bb557600080fd5b62000a5b8383516020850162002b6d565b60006020828403121562002bd957600080fd5b815167ffffffffffffffff81111562002bf157600080fd5b6200058a8482850162002ba3565b60006020828403121562002c1257600080fd5b815162000a5b81620026ad565b600081518084526020808501945080840160005b8381101562002c5a5781516001600160a01b03168752958201959082019060010162002c33565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002cc861010084018262002c1f565b905060a0840151601f198483030160e08501526200145c828262002777565b60006020828403121562002cfa57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001461576200146162002db0565b60006020828403121562002def57600080fd5b815162000a5b81620025a6565b8181038181111562001461576200146162002db0565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002e7557600080fd5b82516003811062002e8557600080fd5b602084015190925067ffffffffffffffff81111562002ea357600080fd5b8301601f8101851362002eb557600080fd5b62002ec68582516020840162002b6d565b9150509250929050565b6000806000806080858703121562002ee757600080fd5b845162002ef481620025a6565b602086015190945067ffffffffffffffff8082111562002f1357600080fd5b62002f218883890162002ba3565b9450604087015191508082111562002f3857600080fd5b5062002f478782880162002ba3565b92505060608501516200274681620026ad565b60008060006060848603121562002f7057600080fd5b835162002f7d81620025a6565b602085015190935062002f9081620025a6565b80925050604084015190509250925092565b60008060008060008060c0878903121562002fbc57600080fd5b86519550602087015162002fd081620025a6565b604088015190955062002fe381620025a6565b606088015190945062002ff681620025a6565b809350506080870151915060a087015190509295509295509295565b6000602082840312156200302557600080fd5b8151801515811462000a5b57600080fd5b8681526001600160a01b0386811660208301528516604082015260c0606082018190526000906200306a9083018662002777565b82810360808401526200307e818662002777565b91505060ff831660a0830152979650505050505050565b60008251620030a981846020870162002751565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea2646970667358221220ff15d87d9e06053eea65bea2fb7624abc50212a4686d7d62b9d7a5a0ec3d931364736f6c63430008120033a26469706673582212206ba287a59d5af104361abe7997f78740dde749ef46c2ce9a7c4b76793246f80d64736f6c63430008120033", } // ERC20BridgeABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go index 4dacad207..e0698c198 100644 --- a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go +++ b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go @@ -32,7 +32,7 @@ var ( // ExampleCrossChainMessengerMetaData contains all meta data concerning the ExampleCrossChainMessenger contract. var ExampleCrossChainMessengerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ReceiveMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"SendMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getCurrentMessage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001a7338038062001a73833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b608051611861620002126000396000818160be015281816104f2015281816108ca0152610c2801526118616000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806397314297116100715780639731429714610151578063b33fead414610174578063c868efaa14610195578063d2cc7a70146101a8578063f2fde38b146101ba578063f63d09d7146101cd57600080fd5b80631a7f5bec146100b95780632b0d8f18146100fd5780634511243e146101125780635eb9951414610125578063715018a6146101385780638da5cb5b14610140575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004611211565b6101e0565b005b610110610120366004611211565b6102d2565b610110610133366004611235565b6103bc565b6101106103d0565b6003546001600160a01b03166100e0565b61016461015f366004611211565b6103e4565b60405190151581526020016100f4565b610187610182366004611235565b610402565b6040516100f492919061129e565b6101106101a336600461130b565b6104da565b6002545b6040519081526020016100f4565b6101106101c8366004611211565b610682565b6101ac6101db366004611367565b6106f8565b6101e86108be565b6001600160a01b0381166102175760405162461bcd60e51b815260040161020e906113ed565b60405180910390fd5b610220816103e4565b156102835760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161020e565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6102da6108be565b6001600160a01b0381166103005760405162461bcd60e51b815260040161020e906113ed565b610309816103e4565b6103675760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161020e565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6103c46108be565b6103cd816108c6565b50565b6103d8610a66565b6103e26000610ac0565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818152600460209081526040808320815180830190925280546001600160a01b0316825260018101805460609486949392908401916104429061143b565b80601f016020809104026020016040519081016040528092919081815260200182805461046e9061143b565b80156104bb5780601f10610490576101008083540402835291602001916104bb565b820191906000526020600020905b81548152906001019060200180831161049e57829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105659190611475565b10156105cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161020e565b6105d5336103e4565b1561063b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161020e565b61067c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1292505050565b50505050565b61068a610a66565b6001600160a01b0381166106ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020e565b6103cd81610ac0565b6000610702610bca565b600061070c610c23565b905060008615610736576107208888610d1e565b90506107366001600160a01b0389168383610e88565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516107789594939291906114b7565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff8111156107f2576107f26114e5565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50815260200188886040516020016108349291906114fb565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016108629190611553565b6020604051808303816000875af1158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611475565b925050506108b36001600055565b979650505050505050565b6103e2610a66565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611475565b600254909150818311156109ba5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161020e565b808311610a2f5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161020e565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610b2891906115d1565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610b7e90826116c1565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610bbc9190611781565b60405180910390a350505050565b600260005403610c1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161020e565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611794565b9050610cb3816103e4565b15610d195760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161020e565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190611475565b9050610da26001600160a01b038516333086610f6d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190611475565b9050818111610e735760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161020e565b610e7d82826117c7565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190611475565b610f0791906117da565b6040516001600160a01b03851660248201526044810182905290915061067c90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fa5565b6040516001600160a01b038085166024830152831660448201526064810182905261067c9085906323b872dd60e01b90608401610f36565b6000610ffa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661107c9092919063ffffffff16565b805190915015611077578080602001905181019061101891906117ed565b6110775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161020e565b505050565b606061108b8484600085611093565b949350505050565b6060824710156110f45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161020e565b600080866001600160a01b03168587604051611110919061180f565b60006040518083038185875af1925050503d806000811461114d576040519150601f19603f3d011682016040523d82523d6000602084013e611152565b606091505b50915091506108b387838387606083156111cd5782516000036111c6576001600160a01b0385163b6111c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161020e565b508161108b565b61108b83838151156111e25781518083602001fd5b8060405162461bcd60e51b815260040161020e9190611781565b6001600160a01b03811681146103cd57600080fd5b60006020828403121561122357600080fd5b813561122e816111fc565b9392505050565b60006020828403121561124757600080fd5b5035919050565b60005b83811015611269578181015183820152602001611251565b50506000910152565b6000815180845261128a81602086016020860161124e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061108b90830184611272565b60008083601f8401126112d457600080fd5b50813567ffffffffffffffff8111156112ec57600080fd5b60208301915083602082850101111561130457600080fd5b9250929050565b6000806000806060858703121561132157600080fd5b843593506020850135611333816111fc565b9250604085013567ffffffffffffffff81111561134f57600080fd5b61135b878288016112c2565b95989497509550505050565b600080600080600080600060c0888a03121561138257600080fd5b873596506020880135611394816111fc565b955060408801356113a4816111fc565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156113ce57600080fd5b6113da8a828b016112c2565b989b979a50959850939692959293505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600181811c9082168061144f57607f821691505b60208210810361146f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561148757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108b360808301848661148e565b634e487b7160e01b600052604160045260246000fd5b60208152600061108b60208301848661148e565b600081518084526020808501945080840160005b838110156115485781516001600160a01b031687529582019590820190600101611523565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526115b461010084018261150f565b905060a0840151601f198483030160e0850152610e7d8282611272565b6000602082840312156115e357600080fd5b815167ffffffffffffffff808211156115fb57600080fd5b818401915084601f83011261160f57600080fd5b815181811115611621576116216114e5565b604051601f8201601f19908116603f01168101908382118183101715611649576116496114e5565b8160405282815287602084870101111561166257600080fd5b6108b383602083016020880161124e565b601f82111561107757600081815260208120601f850160051c8101602086101561169a5750805b601f850160051c820191505b818110156116b9578281556001016116a6565b505050505050565b815167ffffffffffffffff8111156116db576116db6114e5565b6116ef816116e9845461143b565b84611673565b602080601f831160018114611724576000841561170c5750858301515b600019600386901b1c1916600185901b1785556116b9565b600085815260208120601f198616915b8281101561175357888601518255948401946001909101908401611734565b50858210156117715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061122e6020830184611272565b6000602082840312156117a657600080fd5b815161122e816111fc565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8257610e826117b1565b80820180821115610e8257610e826117b1565b6000602082840312156117ff57600080fd5b8151801515811461122e57600080fd5b6000825161182181846020870161124e565b919091019291505056fea26469706673582212201e58f56a487804bdf4b7af876fc00b5235c869da45d1c459edafce075012a1f164736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001a7338038062001a73833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b608051611861620002126000396000818160be015281816104f2015281816108ca0152610c2801526118616000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806397314297116100715780639731429714610151578063b33fead414610174578063c868efaa14610195578063d2cc7a70146101a8578063f2fde38b146101ba578063f63d09d7146101cd57600080fd5b80631a7f5bec146100b95780632b0d8f18146100fd5780634511243e146101125780635eb9951414610125578063715018a6146101385780638da5cb5b14610140575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004611211565b6101e0565b005b610110610120366004611211565b6102d2565b610110610133366004611235565b6103bc565b6101106103d0565b6003546001600160a01b03166100e0565b61016461015f366004611211565b6103e4565b60405190151581526020016100f4565b610187610182366004611235565b610402565b6040516100f492919061129e565b6101106101a336600461130b565b6104da565b6002545b6040519081526020016100f4565b6101106101c8366004611211565b610682565b6101ac6101db366004611367565b6106f8565b6101e86108be565b6001600160a01b0381166102175760405162461bcd60e51b815260040161020e906113ed565b60405180910390fd5b610220816103e4565b156102835760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161020e565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6102da6108be565b6001600160a01b0381166103005760405162461bcd60e51b815260040161020e906113ed565b610309816103e4565b6103675760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161020e565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6103c46108be565b6103cd816108c6565b50565b6103d8610a66565b6103e26000610ac0565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818152600460209081526040808320815180830190925280546001600160a01b0316825260018101805460609486949392908401916104429061143b565b80601f016020809104026020016040519081016040528092919081815260200182805461046e9061143b565b80156104bb5780601f10610490576101008083540402835291602001916104bb565b820191906000526020600020905b81548152906001019060200180831161049e57829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105659190611475565b10156105cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161020e565b6105d5336103e4565b1561063b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161020e565b61067c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1292505050565b50505050565b61068a610a66565b6001600160a01b0381166106ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020e565b6103cd81610ac0565b6000610702610bca565b600061070c610c23565b905060008615610736576107208888610d1e565b90506107366001600160a01b0389168383610e88565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516107789594939291906114b7565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff8111156107f2576107f26114e5565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50815260200188886040516020016108349291906114fb565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016108629190611553565b6020604051808303816000875af1158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611475565b925050506108b36001600055565b979650505050505050565b6103e2610a66565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611475565b600254909150818311156109ba5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161020e565b808311610a2f5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161020e565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610b2891906115d1565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610b7e90826116c1565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610bbc9190611781565b60405180910390a350505050565b600260005403610c1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161020e565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611794565b9050610cb3816103e4565b15610d195760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161020e565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190611475565b9050610da26001600160a01b038516333086610f6d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190611475565b9050818111610e735760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161020e565b610e7d82826117c7565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190611475565b610f0791906117da565b6040516001600160a01b03851660248201526044810182905290915061067c90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fa5565b6040516001600160a01b038085166024830152831660448201526064810182905261067c9085906323b872dd60e01b90608401610f36565b6000610ffa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661107c9092919063ffffffff16565b805190915015611077578080602001905181019061101891906117ed565b6110775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161020e565b505050565b606061108b8484600085611093565b949350505050565b6060824710156110f45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161020e565b600080866001600160a01b03168587604051611110919061180f565b60006040518083038185875af1925050503d806000811461114d576040519150601f19603f3d011682016040523d82523d6000602084013e611152565b606091505b50915091506108b387838387606083156111cd5782516000036111c6576001600160a01b0385163b6111c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161020e565b508161108b565b61108b83838151156111e25781518083602001fd5b8060405162461bcd60e51b815260040161020e9190611781565b6001600160a01b03811681146103cd57600080fd5b60006020828403121561122357600080fd5b813561122e816111fc565b9392505050565b60006020828403121561124757600080fd5b5035919050565b60005b83811015611269578181015183820152602001611251565b50506000910152565b6000815180845261128a81602086016020860161124e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061108b90830184611272565b60008083601f8401126112d457600080fd5b50813567ffffffffffffffff8111156112ec57600080fd5b60208301915083602082850101111561130457600080fd5b9250929050565b6000806000806060858703121561132157600080fd5b843593506020850135611333816111fc565b9250604085013567ffffffffffffffff81111561134f57600080fd5b61135b878288016112c2565b95989497509550505050565b600080600080600080600060c0888a03121561138257600080fd5b873596506020880135611394816111fc565b955060408801356113a4816111fc565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156113ce57600080fd5b6113da8a828b016112c2565b989b979a50959850939692959293505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600181811c9082168061144f57607f821691505b60208210810361146f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561148757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108b360808301848661148e565b634e487b7160e01b600052604160045260246000fd5b60208152600061108b60208301848661148e565b600081518084526020808501945080840160005b838110156115485781516001600160a01b031687529582019590820190600101611523565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526115b461010084018261150f565b905060a0840151601f198483030160e0850152610e7d8282611272565b6000602082840312156115e357600080fd5b815167ffffffffffffffff808211156115fb57600080fd5b818401915084601f83011261160f57600080fd5b815181811115611621576116216114e5565b604051601f8201601f19908116603f01168101908382118183101715611649576116496114e5565b8160405282815287602084870101111561166257600080fd5b6108b383602083016020880161124e565b601f82111561107757600081815260208120601f850160051c8101602086101561169a5750805b601f850160051c820191505b818110156116b9578281556001016116a6565b505050505050565b815167ffffffffffffffff8111156116db576116db6114e5565b6116ef816116e9845461143b565b84611673565b602080601f831160018114611724576000841561170c5750858301515b600019600386901b1c1916600185901b1785556116b9565b600085815260208120601f198616915b8281101561175357888601518255948401946001909101908401611734565b50858210156117715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061122e6020830184611272565b6000602082840312156117a657600080fd5b815161122e816111fc565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8257610e826117b1565b80820180821115610e8257610e826117b1565b6000602082840312156117ff57600080fd5b8151801515811461122e57600080fd5b6000825161182181846020870161124e565b919091019291505056fea2646970667358221220696002eed41b50b609d6b88df1ee2e1c6bd89ee2a144fb0b3128e8d68f5cc88064736f6c63430008120033", } // ExampleCrossChainMessengerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go index 18e6b7a81..d69c04b44 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go @@ -32,7 +32,7 @@ var ( // ERC20TokenSourceMetaData contains all meta data concerning the ERC20TokenSource contract. var ERC20TokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20ContractAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20ContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea2646970667358221220af4432b1da42606a19c914ee7ebeed9abf609142e0c74fcb3bc3c2561a35ad3c64736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", + Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea26469706673582212201d28533533d3b624fcc088f6aa04c9928ddaef523f070db3d1c237bcc6f7accb64736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", } // ERC20TokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go index 14739a388..2abd86fc0 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnAddressBalance\",\"type\":\"uint256\"}],\"name\":\"ReportTotalBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToSource\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_FOR_TRANSFER_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_BURNED_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"reportTotalBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToSource\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220c69fdf4513d6ffeda37d0efb41b4745dfc4565503469d051f31ddd50349511d664736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", + Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220addb1cdbc8918a5e22f56eda76207d2cd34eb3e904b14b86d918f2be05e938d064736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go index 9342011ec..48e2257b8 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220df925b4a95006e326289a6f363f460c332d1b3d9f94bb16fef3a41c55b47557964736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", + Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea26469706673582212203ba873b675c3df4cf176bb179bb428c81b10e00721fa3204eaf47ad7e0f8ec3b64736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go index b704de8a5..b43d51ec9 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go @@ -32,7 +32,7 @@ var ( // BlockHashPublisherMetaData contains all meta data concerning the BlockHashPublisher contract. var BlockHashPublisherMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"PublishBlockHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"RECEIVE_BLOCK_HASH_REQUIRED_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"publishLatestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea2646970667358221220c2a67bbf8d64e77c1f3cceff5c589dede386ce77e3f3c314f4bc1567f9691e0964736f6c63430008120033", + Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea26469706673582212202f81af2513cd6a0f5ca525f61d9eacd8df5335b1bfc6be148a3633f310f2c89b64736f6c63430008120033", } // BlockHashPublisherABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go index 7afc4e393..c1342f935 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go @@ -32,7 +32,7 @@ var ( // BlockHashReceiverMetaData contains all meta data concerning the BlockHashReceiver contract. var BlockHashReceiverMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"publisherBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"publisherContractAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"ReceiveBlockHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getLatestBlockInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourcePublisherContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e060405234801561001057600080fd5b50604051610eaf380380610eaf83398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610c5d610252600039600081816101c401526109ac015260008181610143015261092a01526000818160ff015281816104c401526106e00152610c5d6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379a0710c11610097578063c868efaa11610066578063c868efaa1461024e578063d2cc7a7014610261578063f2fde38b14610269578063f3f39ee51461027c57600080fd5b806379a0710c146101bf5780638da5cb5b146101e657806397314297146101f7578063b17810be1461023357600080fd5b80634511243e116100d35780634511243e146101885780635eb995141461019b5780636c4f6ba9146101ae578063715018a6146101b757600080fd5b80631a7f5bec146100fa57806329b7b3fd1461013e5780632b0d8f1814610173575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101657f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610135565b610186610181366004610ada565b610285565b005b610186610196366004610ada565b610387565b6101866101a9366004610afc565b610484565b61016560045481565b610186610498565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610121565b610223610205366004610ada565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001610135565b60035460045460408051928352602083019190915201610135565b61018661025c366004610b15565b6104ac565b600154610165565b610186610277366004610ada565b61065e565b61016560035481565b61028d6106d4565b6001600160a01b0381166102bc5760405162461bcd60e51b81526004016102b390610b9c565b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff161561033b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102b3565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61038f6106d4565b6001600160a01b0381166103b55760405162461bcd60e51b81526004016102b390610b9c565b6001600160a01b03811660009081526020819052604090205460ff1661042f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102b3565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152602081905260409020805460ff19169055565b61048c6106d4565b610495816106dc565b50565b6104a061087c565b6104aa60006108d6565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105379190610bea565b101561059e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102b3565b3360009081526020819052604090205460ff16156106175760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102b3565b610658848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061092892505050565b50505050565b61066661087c565b6001600160a01b0381166106cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b3565b610495816108d6565b6104aa61087c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610bea565b600154909150818311156107d05760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102b3565b8083116108455760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102b3565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146104aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b3565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146109aa5760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610a455760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102b3565b60008082806020019051810190610a5c9190610c03565b91509150600354821115610ab7576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b0381168114610ad557600080fd5b919050565b600060208284031215610aec57600080fd5b610af582610abe565b9392505050565b600060208284031215610b0e57600080fd5b5035919050565b60008060008060608587031215610b2b57600080fd5b84359350610b3b60208601610abe565b9250604085013567ffffffffffffffff80821115610b5857600080fd5b818701915087601f830112610b6c57600080fd5b813581811115610b7b57600080fd5b886020828501011115610b8d57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215610bfc57600080fd5b5051919050565b60008060408385031215610c1657600080fd5b50508051602090910151909290915056fea26469706673582212202b2a14a4ab06f48cdfa7e852469e2d6f0e2fbc0b38c5f6051753e7fe27d1ab9064736f6c63430008120033", + Bin: "0x60e060405234801561001057600080fd5b50604051610eaf380380610eaf83398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610c5d610252600039600081816101c401526109ac015260008181610143015261092a01526000818160ff015281816104c401526106e00152610c5d6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379a0710c11610097578063c868efaa11610066578063c868efaa1461024e578063d2cc7a7014610261578063f2fde38b14610269578063f3f39ee51461027c57600080fd5b806379a0710c146101bf5780638da5cb5b146101e657806397314297146101f7578063b17810be1461023357600080fd5b80634511243e116100d35780634511243e146101885780635eb995141461019b5780636c4f6ba9146101ae578063715018a6146101b757600080fd5b80631a7f5bec146100fa57806329b7b3fd1461013e5780632b0d8f1814610173575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101657f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610135565b610186610181366004610ada565b610285565b005b610186610196366004610ada565b610387565b6101866101a9366004610afc565b610484565b61016560045481565b610186610498565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610121565b610223610205366004610ada565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001610135565b60035460045460408051928352602083019190915201610135565b61018661025c366004610b15565b6104ac565b600154610165565b610186610277366004610ada565b61065e565b61016560035481565b61028d6106d4565b6001600160a01b0381166102bc5760405162461bcd60e51b81526004016102b390610b9c565b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff161561033b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102b3565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61038f6106d4565b6001600160a01b0381166103b55760405162461bcd60e51b81526004016102b390610b9c565b6001600160a01b03811660009081526020819052604090205460ff1661042f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102b3565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152602081905260409020805460ff19169055565b61048c6106d4565b610495816106dc565b50565b6104a061087c565b6104aa60006108d6565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105379190610bea565b101561059e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102b3565b3360009081526020819052604090205460ff16156106175760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102b3565b610658848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061092892505050565b50505050565b61066661087c565b6001600160a01b0381166106cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b3565b610495816108d6565b6104aa61087c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610bea565b600154909150818311156107d05760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102b3565b8083116108455760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102b3565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146104aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b3565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146109aa5760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610a455760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102b3565b60008082806020019051810190610a5c9190610c03565b91509150600354821115610ab7576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b0381168114610ad557600080fd5b919050565b600060208284031215610aec57600080fd5b610af582610abe565b9392505050565b600060208284031215610b0e57600080fd5b5035919050565b60008060008060608587031215610b2b57600080fd5b84359350610b3b60208601610abe565b9250604085013567ffffffffffffffff80821115610b5857600080fd5b818701915087601f830112610b6c57600080fd5b813581811115610b7b57600080fd5b886020828501011115610b8d57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215610bfc57600080fd5b5051919050565b60008060408385031215610c1657600080fd5b50508051602090910151909290915056fea2646970667358221220195fca89a0134729905bc60e9078d4ce7985601d7b937dd9b72fbed966f73fd064736f6c63430008120033", } // BlockHashReceiverABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go index 50490a9ce..c929d7b50 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go @@ -66,7 +66,7 @@ type TeleporterMessageReceipt struct { // TeleporterMessengerMetaData contains all meta data concerning the TeleporterMessenger contract. var TeleporterMessengerMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600160008190558055613195806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d127dc9b1161007c578063d127dc9b14610315578063d39b0c171461031e578063e6e67bd51461037e578063e8105ebc146103ba578063ecc70428146103ec578063f5590f38146103f557600080fd5b8063a9a856141461025c578063b120322a1461026f578063b771b3bc146102bb578063c473eef8146102c9578063ccb5f8091461030257600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb57806362448850146101fe578063892bf41214610211578063980a25841461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a366004612183565b6103fd565b60405190151581526020015b60405180910390f35b6101776101723660046121a5565b61042c565b005b6101776101873660046121a5565b61068f565b61017761019a36600461221b565b610824565b6101b26101ad366004612238565b610919565b60405190815260200161015b565b6101b26101ce366004612183565b600660209081526000928352604080842090915290825290205481565b6101776101f9366004612251565b610930565b6101b261020c366004612290565b610b6b565b61022461021f366004612183565b610bc9565b60405161015b91906122ca565b6101b261023f366004612183565b600091825260056020908152604080842092845291905290205490565b6101b261026a36600461232e565b610bf5565b6102a361027d366004612183565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102a36005600160991b0181565b6101b26102d73660046123c6565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101776103103660046123f4565b610e0f565b6101b260025481565b61037061032c366004612183565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b92919061241b565b6103a561038c366004612238565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6103cd6103c8366004612183565b611321565b604080516001600160a01b03909316835260208301919091520161015b565b6101b260035481565b6101b261136a565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104565760405162461bcd60e51b815260040161044d90612442565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104935760405162461bcd60e51b815260040161044d90612487565b80826040516020016104a59190612722565b60405160208183030381529060405280519060200120146104d85760405162461bcd60e51b815260040161044d90612735565b60006104ea608084016060850161221b565b6001600160a01b03163b1161055e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161044d565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105b991860190860161221b565b6105c660e086018661277e565b6040516024016105d994939291906127c4565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061062161061a608086016060870161221b565b5a84611379565b9050806106845760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161044d565b505060018055505050565b6001600054146106b15760405162461bcd60e51b815260040161044d906127ef565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161071c5760405162461bcd60e51b815260040161044d90612487565b60008260405160200161072f9190612722565b60408051601f19818403018152919052825181516020830120919250146107685760405162461bcd60e51b815260040161044d90612735565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107a3929190612832565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107d59084906004016128b7565b6020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081891906128ca565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108a65760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161044d565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109156001600160a01b0383163383611395565b5050565b6000818152600460205260408120610426906113fd565b6001600054146109525760405162461bcd60e51b815260040161044d906127ef565b6002600055806109bc5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161044d565b6001600160a01b0382166109e25760405162461bcd60e51b815260040161044d906128e3565b6000848152600560209081526040808320868452909152902054610a185760405162461bcd60e51b815260040161044d90612487565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ab55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161044d565b6000610ac18383611410565b6000868152600560209081526040808320888452909152812060020180549293508392909190610af290849061294d565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b8f5760405162461bcd60e51b815260040161044d906127ef565b6002600055610bbe610ba083612b5d565b83356000908152600460205260409020610bb990611578565b611687565b600160005592915050565b604080518082019091526000808252602082015260008381526004602052604090206104239083611951565b6000600160005414610c195760405162461bcd60e51b815260040161044d906127ef565b60026000908155856001600160401b03811115610c3857610c38612960565b604051908082528060200260200182016040528015610c7d57816020015b6040805180820190915260008082526020820152815260200190600190039081610c565790505b50905060005b86811015610d7a576000888883818110610c9f57610c9f612c00565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d2c5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161044d565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d5c57610d5c612c00565b6020026020010181905250505080610d7390612c16565b9050610c83565b506040805160c08101825289815260006020820152610dfe918101610da436899003890189612c2f565b81526020016000815260200186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050604080519283526020808401909152909201525082611687565b600160005598975050505050505050565b6001805414610e305760405162461bcd60e51b815260040161044d90612442565b60026001556001600160a01b038116610ea45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161044d565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f199190810190612cab565b9150915080610f7c5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161044d565b60208201516001600160a01b03163014610ff35760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161044d565b6002548061106c576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106491906128ca565b600281905590505b600083604001518060200190518101906110869190612e48565b9050818160400151146110f55760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161044d565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111805760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161044d565b61118e338260a00151611a16565b6111ec5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161044d565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e081015151156112385783516112389082611a8b565b60c08101515160005b818110156112935760008360c00151828151811061126157611261612c00565b60200260200101519050611282876000015182600001518360200151611bba565b5061128c81612c16565b9050611241565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b03891691830191909152906112d1908290611c8a565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061130b908c908990613058565b60405180910390a4505060018055505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000611374611ce6565b905090565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b0383166024820152604481018290526113f890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d8a565b505050565b805460018201546000916104269161307c565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147d91906128ca565b90506114946001600160a01b038516333086611e5c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff91906128ca565b90508181116115655760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161044d565b61156f828261307c565b95945050505050565b6060600061158f600561158a856113fd565b611e94565b9050806000036115de5760408051600080825260208201909252906115d6565b60408051808201909152600080825260208201528152602001906001900390816115af5790505b509392505050565b806001600160401b038111156115f6576115f6612960565b60405190808252806020026020018201604052801561163b57816020015b60408051808201909152600080825260208201528152602001906001900390816116145790505b50915060005b818110156116805761165284611eaa565b83828151811061166457611664612c00565b60200260200101819052508061167990612c16565b9050611641565b5050919050565b60025460009080611703576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fb91906128ca565b600281905590505b806117205760405162461bcd60e51b815260040161044d9061308f565b600061172a611ce6565b905060036000815461173b90612c16565b919050819055506000604051806101000160405280838152602001336001600160a01b031681526020018760000151815260200187602001516001600160a01b0316815260200187606001518152602001876080015181526020018681526020018760a0015181525090506000816040516020016117b991906130d8565b60405160208183030381529060405290506000808860400151602001511115611821576040880151516001600160a01b03166118075760405162461bcd60e51b815260040161044d906128e3565b6040880151805160209091015161181e9190611410565b90505b60408051808201825289820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528d516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b031916919095161790935591015160029091015589519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050906118ce90889086906130eb565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906119009086906004016128b7565b6020604051808303816000875af115801561191f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194391906128ca565b509398975050505050505050565b604080518082019091526000808252602082015261196e836113fd565b82106119c65760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161044d565b8260020160008385600001546119dc919061294d565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60008151600003611a2957506001610426565b60005b8251811015611a8157836001600160a01b0316838281518110611a5157611a51612c00565b60200260200101516001600160a01b031603611a71576001915050610426565b611a7a81612c16565b9050611a2c565b5060009392505050565b80608001515a1015611aed5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161044d565b80606001516001600160a01b03163b600003611b0d576109158282611f75565b602081015160e0820151604051600092611b2b9286926024016130fe565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b70919084611379565b905080611b8757611b818484611f75565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c145750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c7f90849061294d565b909155505050505050565b6001820180548291600285019160009182611ca483612c16565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60025460009080611d095760405162461bcd60e51b815260040161044d9061308f565b60035460408051306020820152908101839052606081019190915260029060800160408051601f1981840301815290829052611d4491613128565b602060405180830381855afa158015611d61573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d8491906128ca565b91505090565b6000611ddf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff39092919063ffffffff16565b8051909150156113f85780806020019051810190611dfd9190613144565b6113f85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044d565b6040516001600160a01b0380851660248301528316604482015260648101829052611b819085906323b872dd60e01b906084016113c1565b6000818310611ea35781610423565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f145760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161044d565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f6d90829061294d565b909255919050565b80604051602001611f8691906130d8565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d690611fe79085906130d8565b60405180910390a35050565b6060612002848460008561200a565b949350505050565b60608247101561206b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161044d565b600080866001600160a01b031685876040516120879190613128565b60006040518083038185875af1925050503d80600081146120c4576040519150601f19603f3d011682016040523d82523d6000602084013e6120c9565b606091505b50915091506120da878383876120e5565b979650505050505050565b6060831561215457825160000361214d576001600160a01b0385163b61214d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044d565b5081612002565b61200283838151156121695781518083602001fd5b8060405162461bcd60e51b815260040161044d91906128b7565b6000806040838503121561219657600080fd5b50508035926020909101359150565b600080604083850312156121b857600080fd5b8235915060208301356001600160401b038111156121d557600080fd5b830161010081860312156121e857600080fd5b809150509250929050565b6001600160a01b038116811461220857600080fd5b50565b8035612216816121f3565b919050565b60006020828403121561222d57600080fd5b813561138e816121f3565b60006020828403121561224a57600080fd5b5035919050565b6000806000806080858703121561226757600080fd5b84359350602085013592506040850135612280816121f3565b9396929550929360600135925050565b6000602082840312156122a257600080fd5b81356001600160401b038111156122b857600080fd5b820160e0818503121561138e57600080fd5b815181526020808301516001600160a01b03169082015260408101610426565b60008083601f8401126122fc57600080fd5b5081356001600160401b0381111561231357600080fd5b6020830191508360208260051b850101111561136357600080fd5b60008060008060008086880360a081121561234857600080fd5b8735965060208801356001600160401b038082111561236657600080fd5b6123728b838c016122ea565b90985096508691506040603f198401121561238c57600080fd5b60408a01955060808a01359250808311156123a657600080fd5b50506123b489828a016122ea565b979a9699509497509295939492505050565b600080604083850312156123d957600080fd5b82356123e4816121f3565b915060208301356121e8816121f3565b6000806040838503121561240757600080fd5b823563ffffffff811681146123e457600080fd5b8281526060810161138e602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e198436030181126124e457600080fd5b83016020810192503590506001600160401b0381111561250357600080fd5b8060051b360382131561136357600080fd5b8183526000602080850194508260005b85811015612553578135612538816121f3565b6001600160a01b031687529582019590820190600101612525565b509495945050505050565b6000808335601e1984360301811261257557600080fd5b83016020810192503590506001600160401b0381111561259457600080fd5b8060061b360382131561136357600080fd5b8183526000602080850194508260005b858110156125535781358752828201356125cf816121f3565b6001600160a01b03168784015260409687019691909101906001016125b6565b6000808335601e1984360301811261260657600080fd5b83016020810192503590506001600160401b0381111561262557600080fd5b80360382131561136357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000610100823584526020830135612674816121f3565b6001600160a01b03166020850152604083810135908501526126986060840161220b565b6001600160a01b03166060850152608083810135908501526126bd60a08401846124cd565b8260a08701526126d08387018284612515565b925050506126e160c084018461255e565b85830360c08701526126f48382846125a6565b9250505061270560e08401846125ef565b85830360e0870152612718838284612634565b9695505050505050565b602081526000610423602083018461265d565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261279557600080fd5b8301803591506001600160401b038211156127af57600080fd5b60200191503681900382131561136357600080fd5b8481526001600160a01b03841660208201526060604082018190526000906127189083018486612634565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b606081526000612845606083018561265d565b905061138e602083018480516001600160a01b03168252602090810151910152565b60005b8381101561288257818101518382015260200161286a565b50506000910152565b600081518084526128a3816020860160208601612867565b601f01601f19169290920160200192915050565b602081526000610423602083018461288b565b6000602082840312156128dc57600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042657610426612937565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561299857612998612960565b60405290565b60405160c081016001600160401b038111828210171561299857612998612960565b60405161010081016001600160401b038111828210171561299857612998612960565b604051601f8201601f191681016001600160401b0381118282101715612a0b57612a0b612960565b604052919050565b600060408284031215612a2557600080fd5b612a2d612976565b90508135612a3a816121f3565b808252506020820135602082015292915050565b60006001600160401b03821115612a6757612a67612960565b5060051b60200190565b600082601f830112612a8257600080fd5b81356020612a97612a9283612a4e565b6129e3565b82815260059290921b84018101918181019086841115612ab657600080fd5b8286015b84811015612ada578035612acd816121f3565b8352918301918301612aba565b509695505050505050565b60006001600160401b03821115612afe57612afe612960565b50601f01601f191660200190565b600082601f830112612b1d57600080fd5b8135612b2b612a9282612ae5565b818152846020838601011115612b4057600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b6f57600080fd5b612b7761299e565b82358152612b876020840161220b565b6020820152612b993660408501612a13565b60408201526080830135606082015260a08301356001600160401b0380821115612bc257600080fd5b612bce36838701612a71565b608084015260c0850135915080821115612be757600080fd5b50612bf436828601612b0c565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c2857612c28612937565b5060010190565b600060408284031215612c4157600080fd5b6104238383612a13565b8051612216816121f3565b600082601f830112612c6757600080fd5b8151612c75612a9282612ae5565b818152846020838601011115612c8a57600080fd5b612002826020830160208701612867565b8051801515811461221657600080fd5b60008060408385031215612cbe57600080fd5b82516001600160401b0380821115612cd557600080fd5b9084019060608287031215612ce957600080fd5b604051606081018181108382111715612d0457612d04612960565b604052825181526020830151612d19816121f3565b6020820152604083015182811115612d3057600080fd5b612d3c88828601612c56565b6040830152509350612d5391505060208401612c9b565b90509250929050565b600082601f830112612d6d57600080fd5b81516020612d7d612a9283612a4e565b82815260059290921b84018101918181019086841115612d9c57600080fd5b8286015b84811015612ada578051612db3816121f3565b8352918301918301612da0565b600082601f830112612dd157600080fd5b81516020612de1612a9283612a4e565b82815260069290921b84018101918181019086841115612e0057600080fd5b8286015b84811015612ada5760408189031215612e1d5760008081fd5b612e25612976565b8151815284820151612e36816121f3565b81860152835291830191604001612e04565b600060208284031215612e5a57600080fd5b81516001600160401b0380821115612e7157600080fd5b908301906101008286031215612e8657600080fd5b612e8e6129c0565b82518152612e9e60208401612c4b565b602082015260408301516040820152612eb960608401612c4b565b60608201526080830151608082015260a083015182811115612eda57600080fd5b612ee687828601612d5c565b60a08301525060c083015182811115612efe57600080fd5b612f0a87828601612dc0565b60c08301525060e083015182811115612f2257600080fd5b612f2e87828601612c56565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156125535781516001600160a01b031687529582019590820190600101612f51565b600081518084526020808501945080840160005b8381101561255357612fb0878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f8a565b60006101008251845260018060a01b03602084015116602085015260408301516040850152606083015161300260608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261302482860182612f3d565b91505060c083015184820360c086015261303e8282612f76565b91505060e083015184820360e086015261156f828261288b565b6001600160a01b038316815260406020820181905260009061200290830184612fc3565b8181038181111561042657610426612937565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b6020815260006104236020830184612fc3565b6060815260006128456060830185612fc3565b8381526001600160a01b038316602082015260606040820181905260009061156f9083018461288b565b6000825161313a818460208701612867565b9190910192915050565b60006020828403121561315657600080fd5b61042382612c9b56fea2646970667358221220bb24b94c4437d090a30225e7ce004998748dd69bcb7e4cbe698f4f56dc6b42bf64736f6c63430008120033", + Bin: "0x608060405234801561001057600080fd5b50600160008190558055613131806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d127dc9b1161007c578063d127dc9b14610315578063d39b0c171461031e578063e6e67bd51461037e578063e8105ebc146103ba578063ecc70428146103ec578063f5590f38146103f557600080fd5b8063a9a856141461025c578063b120322a1461026f578063b771b3bc146102bb578063c473eef8146102c9578063ccb5f8091461030257600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb57806362448850146101fe578063892bf41214610211578063980a25841461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a366004612124565b6103fd565b60405190151581526020015b60405180910390f35b610177610172366004612146565b61042c565b005b610177610187366004612146565b61068f565b61017761019a3660046121b7565b610824565b6101b26101ad3660046121d4565b610919565b60405190815260200161015b565b6101b26101ce366004612124565b600660209081526000928352604080842090915290825290205481565b6101776101f93660046121ed565b610930565b6101b261020c36600461222c565b610b6b565b61022461021f366004612124565b610bc9565b60405161015b9190612266565b6101b261023f366004612124565b600091825260056020908152604080842092845291905290205490565b6101b261026a3660046122ca565b610bf5565b6102a361027d366004612124565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102a36005600160991b0181565b6101b26102d7366004612362565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610177610310366004612390565b610e0f565b6101b260025481565b61037061032c366004612124565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b9291906123b7565b6103a561038c3660046121d4565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6103cd6103c8366004612124565b6112b4565b604080516001600160a01b03909316835260208301919091520161015b565b6101b260035481565b6101b26112fd565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104565760405162461bcd60e51b815260040161044d906123de565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104935760405162461bcd60e51b815260040161044d90612423565b80826040516020016104a591906126be565b60405160208183030381529060405280519060200120146104d85760405162461bcd60e51b815260040161044d906126d1565b60006104ea60808401606085016121b7565b6001600160a01b03163b1161055e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161044d565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105b99186019086016121b7565b6105c660e086018661271a565b6040516024016105d99493929190612760565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061062161061a60808601606087016121b7565b5a8461130c565b9050806106845760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161044d565b505060018055505050565b6001600054146106b15760405162461bcd60e51b815260040161044d9061278b565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161071c5760405162461bcd60e51b815260040161044d90612423565b60008260405160200161072f91906126be565b60408051601f19818403018152919052825181516020830120919250146107685760405162461bcd60e51b815260040161044d906126d1565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107a39291906127ce565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107d5908490600401612853565b6020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190612866565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108a65760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161044d565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109156001600160a01b0383163383611328565b5050565b600081815260046020526040812061042690611390565b6001600054146109525760405162461bcd60e51b815260040161044d9061278b565b6002600055806109bc5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161044d565b6001600160a01b0382166109e25760405162461bcd60e51b815260040161044d9061287f565b6000848152600560209081526040808320868452909152902054610a185760405162461bcd60e51b815260040161044d90612423565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ab55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161044d565b6000610ac183836113a3565b6000868152600560209081526040808320888452909152812060020180549293508392909190610af29084906128e9565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b8f5760405162461bcd60e51b815260040161044d9061278b565b6002600055610bbe610ba083612af9565b83356000908152600460205260409020610bb99061150b565b61161a565b600160005592915050565b604080518082019091526000808252602082015260008381526004602052604090206104239083611871565b6000600160005414610c195760405162461bcd60e51b815260040161044d9061278b565b60026000908155856001600160401b03811115610c3857610c386128fc565b604051908082528060200260200182016040528015610c7d57816020015b6040805180820190915260008082526020820152815260200190600190039081610c565790505b50905060005b86811015610d7a576000888883818110610c9f57610c9f612b9c565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d2c5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161044d565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d5c57610d5c612b9c565b6020026020010181905250505080610d7390612bb2565b9050610c83565b506040805160c08101825289815260006020820152610dfe918101610da436899003890189612bcb565b8152602001600081526020018686808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060408051928352602080840190915290920152508261161a565b600160005598975050505050505050565b6001805414610e305760405162461bcd60e51b815260040161044d906123de565b60026001556001600160a01b038116610ea45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161044d565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f199190810190612c47565b9150915080610f7c5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161044d565b60208201516001600160a01b03163014610ff35760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161044d565b6000610ffd611936565b9050600083604001518060200190518101906110199190612de4565b9050818160400151146110885760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161044d565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111135760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161044d565b611121338260a001516119b7565b61117f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161044d565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e081015151156111cb5783516111cb9082611a2c565b60c08101515160005b818110156112265760008360c0015182815181106111f4576111f4612b9c565b60200260200101519050611215876000015182600001518360200151611b5b565b5061121f81612bb2565b90506111d4565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b0389169183019190915290611264908290611c2b565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061129e908c908990612ff4565b60405180910390a4505060018055505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000611307611c87565b905090565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b03831660248201526044810182905261138b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d2b565b505050565b8054600182015460009161042691613018565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190612866565b90506114276001600160a01b038516333086611dfd565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114929190612866565b90508181116114f85760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161044d565b6115028282613018565b95945050505050565b60606000611522600561151d85611390565b611e35565b905080600003611571576040805160008082526020820190925290611569565b60408051808201909152600080825260208201528152602001906001900390816115425790505b509392505050565b806001600160401b03811115611589576115896128fc565b6040519080825280602002602001820160405280156115ce57816020015b60408051808201909152600080825260208201528152602001906001900390816115a75790505b50915060005b81811015611613576115e584611e4b565b8382815181106115f7576115f7612b9c565b60200260200101819052508061160c90612bb2565b90506115d4565b5050919050565b600080611625611936565b9050806116445760405162461bcd60e51b815260040161044d9061302b565b600061164e611c87565b90506000604051806101000160405280838152602001336001600160a01b031681526020018760000151815260200187602001516001600160a01b0316815260200187606001518152602001876080015181526020018681526020018760a0015181525090506000816040516020016116c79190613074565b60405160208183030381529060405290506003600081546116e790612bb2565b9091555060408701516020015160009015611741576040880151516001600160a01b03166117275760405162461bcd60e51b815260040161044d9061287f565b6040880151805160209091015161173e91906113a3565b90505b60408051808201825289820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528d516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b031916919095161790935591015160029091015589519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050906117ee9088908690613087565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb90611820908690600401612853565b6020604051808303816000875af115801561183f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118639190612866565b509398975050505050505050565b604080518082019091526000808252602082015261188e83611390565b82106118e65760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161044d565b8260020160008385600001546118fc91906128e9565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b600254600090806119b2576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119aa9190612866565b600281905590505b919050565b600081516000036119ca57506001610426565b60005b8251811015611a2257836001600160a01b03168382815181106119f2576119f2612b9c565b60200260200101516001600160a01b031603611a12576001915050610426565b611a1b81612bb2565b90506119cd565b5060009392505050565b80608001515a1015611a8e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161044d565b80606001516001600160a01b03163b600003611aae576109158282611f16565b602081015160e0820151604051600092611acc92869260240161309a565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b1191908461130c565b905080611b2857611b228484611f16565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611bb55750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c209084906128e9565b909155505050505050565b6001820180548291600285019160009182611c4583612bb2565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60025460009080611caa5760405162461bcd60e51b815260040161044d9061302b565b60035460408051306020820152908101839052606081019190915260029060800160408051601f1981840301815290829052611ce5916130c4565b602060405180830381855afa158015611d02573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d259190612866565b91505090565b6000611d80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f949092919063ffffffff16565b80519091501561138b5780806020019051810190611d9e91906130e0565b61138b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044d565b6040516001600160a01b0380851660248301528316604482015260648101829052611b229085906323b872dd60e01b90608401611354565b6000818310611e445781610423565b5090919050565b604080518082019091526000808252602082015281546001830154819003611eb55760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161044d565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f0e9082906128e9565b909255919050565b80604051602001611f279190613074565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d690611f88908590613074565b60405180910390a35050565b6060611fa38484600085611fab565b949350505050565b60608247101561200c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161044d565b600080866001600160a01b0316858760405161202891906130c4565b60006040518083038185875af1925050503d8060008114612065576040519150601f19603f3d011682016040523d82523d6000602084013e61206a565b606091505b509150915061207b87838387612086565b979650505050505050565b606083156120f55782516000036120ee576001600160a01b0385163b6120ee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044d565b5081611fa3565b611fa3838381511561210a5781518083602001fd5b8060405162461bcd60e51b815260040161044d9190612853565b6000806040838503121561213757600080fd5b50508035926020909101359150565b6000806040838503121561215957600080fd5b8235915060208301356001600160401b0381111561217657600080fd5b8301610100818603121561218957600080fd5b809150509250929050565b6001600160a01b03811681146121a957600080fd5b50565b80356119b281612194565b6000602082840312156121c957600080fd5b813561132181612194565b6000602082840312156121e657600080fd5b5035919050565b6000806000806080858703121561220357600080fd5b8435935060208501359250604085013561221c81612194565b9396929550929360600135925050565b60006020828403121561223e57600080fd5b81356001600160401b0381111561225457600080fd5b820160e0818503121561132157600080fd5b815181526020808301516001600160a01b03169082015260408101610426565b60008083601f84011261229857600080fd5b5081356001600160401b038111156122af57600080fd5b6020830191508360208260051b85010111156112f657600080fd5b60008060008060008086880360a08112156122e457600080fd5b8735965060208801356001600160401b038082111561230257600080fd5b61230e8b838c01612286565b90985096508691506040603f198401121561232857600080fd5b60408a01955060808a013592508083111561234257600080fd5b505061235089828a01612286565b979a9699509497509295939492505050565b6000806040838503121561237557600080fd5b823561238081612194565b9150602083013561218981612194565b600080604083850312156123a357600080fd5b823563ffffffff8116811461238057600080fd5b82815260608101611321602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e1984360301811261248057600080fd5b83016020810192503590506001600160401b0381111561249f57600080fd5b8060051b36038213156112f657600080fd5b8183526000602080850194508260005b858110156124ef5781356124d481612194565b6001600160a01b0316875295820195908201906001016124c1565b509495945050505050565b6000808335601e1984360301811261251157600080fd5b83016020810192503590506001600160401b0381111561253057600080fd5b8060061b36038213156112f657600080fd5b8183526000602080850194508260005b858110156124ef57813587528282013561256b81612194565b6001600160a01b0316878401526040968701969190910190600101612552565b6000808335601e198436030181126125a257600080fd5b83016020810192503590506001600160401b038111156125c157600080fd5b8036038213156112f657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600061010082358452602083013561261081612194565b6001600160a01b0316602085015260408381013590850152612634606084016121ac565b6001600160a01b031660608501526080838101359085015261265960a0840184612469565b8260a087015261266c83870182846124b1565b9250505061267d60c08401846124fa565b85830360c0870152612690838284612542565b925050506126a160e084018461258b565b85830360e08701526126b48382846125d0565b9695505050505050565b60208152600061042360208301846125f9565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261273157600080fd5b8301803591506001600160401b0382111561274b57600080fd5b6020019150368190038213156112f657600080fd5b8481526001600160a01b03841660208201526060604082018190526000906126b490830184866125d0565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b6060815260006127e160608301856125f9565b9050611321602083018480516001600160a01b03168252602090810151910152565b60005b8381101561281e578181015183820152602001612806565b50506000910152565b6000815180845261283f816020860160208601612803565b601f01601f19169290920160200192915050565b6020815260006104236020830184612827565b60006020828403121561287857600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610426576104266128d3565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612934576129346128fc565b60405290565b60405160c081016001600160401b0381118282101715612934576129346128fc565b60405161010081016001600160401b0381118282101715612934576129346128fc565b604051601f8201601f191681016001600160401b03811182821017156129a7576129a76128fc565b604052919050565b6000604082840312156129c157600080fd5b6129c9612912565b905081356129d681612194565b808252506020820135602082015292915050565b60006001600160401b03821115612a0357612a036128fc565b5060051b60200190565b600082601f830112612a1e57600080fd5b81356020612a33612a2e836129ea565b61297f565b82815260059290921b84018101918181019086841115612a5257600080fd5b8286015b84811015612a76578035612a6981612194565b8352918301918301612a56565b509695505050505050565b60006001600160401b03821115612a9a57612a9a6128fc565b50601f01601f191660200190565b600082601f830112612ab957600080fd5b8135612ac7612a2e82612a81565b818152846020838601011115612adc57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b0b57600080fd5b612b1361293a565b82358152612b23602084016121ac565b6020820152612b3536604085016129af565b60408201526080830135606082015260a08301356001600160401b0380821115612b5e57600080fd5b612b6a36838701612a0d565b608084015260c0850135915080821115612b8357600080fd5b50612b9036828601612aa8565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612bc457612bc46128d3565b5060010190565b600060408284031215612bdd57600080fd5b61042383836129af565b80516119b281612194565b600082601f830112612c0357600080fd5b8151612c11612a2e82612a81565b818152846020838601011115612c2657600080fd5b611fa3826020830160208701612803565b805180151581146119b257600080fd5b60008060408385031215612c5a57600080fd5b82516001600160401b0380821115612c7157600080fd5b9084019060608287031215612c8557600080fd5b604051606081018181108382111715612ca057612ca06128fc565b604052825181526020830151612cb581612194565b6020820152604083015182811115612ccc57600080fd5b612cd888828601612bf2565b6040830152509350612cef91505060208401612c37565b90509250929050565b600082601f830112612d0957600080fd5b81516020612d19612a2e836129ea565b82815260059290921b84018101918181019086841115612d3857600080fd5b8286015b84811015612a76578051612d4f81612194565b8352918301918301612d3c565b600082601f830112612d6d57600080fd5b81516020612d7d612a2e836129ea565b82815260069290921b84018101918181019086841115612d9c57600080fd5b8286015b84811015612a765760408189031215612db95760008081fd5b612dc1612912565b8151815284820151612dd281612194565b81860152835291830191604001612da0565b600060208284031215612df657600080fd5b81516001600160401b0380821115612e0d57600080fd5b908301906101008286031215612e2257600080fd5b612e2a61295c565b82518152612e3a60208401612be7565b602082015260408301516040820152612e5560608401612be7565b60608201526080830151608082015260a083015182811115612e7657600080fd5b612e8287828601612cf8565b60a08301525060c083015182811115612e9a57600080fd5b612ea687828601612d5c565b60c08301525060e083015182811115612ebe57600080fd5b612eca87828601612bf2565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156124ef5781516001600160a01b031687529582019590820190600101612eed565b600081518084526020808501945080840160005b838110156124ef57612f4c878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f26565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612f9e60608601826001600160a01b03169052565b506080830151608085015260a08301518160a0860152612fc082860182612ed9565b91505060c083015184820360c0860152612fda8282612f12565b91505060e083015184820360e08601526115028282612827565b6001600160a01b0383168152604060208201819052600090611fa390830184612f5f565b81810381811115610426576104266128d3565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b6020815260006104236020830184612f5f565b6060815260006127e16060830185612f5f565b8381526001600160a01b038316602082015260606040820181905260009061150290830184612827565b600082516130d6818460208701612803565b9190910192915050565b6000602082840312156130f257600080fd5b61042382612c3756fea26469706673582212205fe73e4bf635ca4fec729ac1d334a3e2bde354ea55532c6e1340fd12e5190cdb64736f6c63430008120033", } // TeleporterMessengerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go index 250cbd21d..9e4cb09a3 100644 --- a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go +++ b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go @@ -38,7 +38,7 @@ type ProtocolRegistryEntry struct { // TeleporterRegistryMetaData contains all meta data concerning the TeleporterRegistry contract. var TeleporterRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"internalType\":\"structProtocolRegistryEntry[]\",\"name\":\"initialEntries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"AddProtocolVersion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newVersion\",\"type\":\"uint256\"}],\"name\":\"LatestVersionUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VERSION_INCREMENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATORS_SOURCE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"addProtocolVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getAddressFromVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestTeleporter\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getTeleporterFromVersion\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"getVersionFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220df6506d8534356c414a9074e258dd279137cec2fd9f5e0c1c3e68966bae52fb564736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea264697066735822122091aff4f9dfb4f26ba1dce6706196d725f76b487475fdbb54bd66409ed9664aa264736f6c63430008120033", } // TeleporterRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol index d36e10a86..9f4291e74 100644 --- a/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol +++ b/contracts/src/CrossChainApplications/ERC20Bridge/tests/ERC20BridgeTests.t.sol @@ -645,7 +645,7 @@ contract ERC20BridgeTest is Test { vm.expectCall(tokenContract, abi.encodeCall(token.decimals, ())); } - function _createMessageID(uint256 messageNonce) private view returns (bytes32) { + function _createMessageID(uint256 messageNonce) private pure returns (bytes32) { return sha256(abi.encode(MOCK_TELEPORTER_MESSENGER_ADDRESS, _MOCK_BLOCKCHAIN_ID, messageNonce)); } diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index 00428ab90..0703b56f4 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -552,6 +552,20 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { return false; } + /** + * @dev If not already set, initialize blockchainID by getting the current blockchain ID + * value from the Warp precompile. + * @return The current blockchain ID. + */ + function _initializeBlockchainID() private returns (bytes32) { + bytes32 blockchainID_ = blockchainID; + if (blockchainID_ == bytes32(0)) { + blockchainID_ = WARP_MESSENGER.getBlockchainID(); + blockchainID = blockchainID_; + } + return blockchainID_; + } + /** * @dev Helper function for sending a teleporter message cross chain. * Constructs the Teleporter message and sends it through the Warp Messenger precompile, @@ -762,18 +776,4 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); return sha256(abi.encode(address(this), blockchainID_, messageNonce)); } - - /** - * @dev If not already set, initialize blockchainID by getting the current blockchain ID - * value from the Warp precompile. - * @return The current blockchain ID. - */ - function _initializeBlockchainID() private returns (bytes32) { - bytes32 blockchainID_ = blockchainID; - if (blockchainID_ == bytes32(0)) { - blockchainID_ = WARP_MESSENGER.getBlockchainID(); - blockchainID = blockchainID_; - } - return blockchainID_; - } } From 2cc514922f4ff45e33a9b63a100cf92080fa7470 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Tue, 19 Dec 2023 12:16:18 -0500 Subject: [PATCH 14/16] Recompute hash when receiving --- .../ERC20Bridge/ERC20Bridge/ERC20Bridge.go | 2 +- .../ExampleCrossChainMessenger.go | 2 +- .../ERC20TokenSource/ERC20TokenSource.go | 2 +- .../NativeTokenDestination.go | 2 +- .../NativeTokenSource/NativeTokenSource.go | 2 +- .../BlockHashPublisher/BlockHashPublisher.go | 2 +- .../BlockHashReceiver/BlockHashReceiver.go | 2 +- .../TeleporterMessenger.go | 138 +++++++++--------- .../TeleporterMessenger/event_test.go | 17 ++- .../Teleporter/TeleporterMessenger/packing.go | 2 +- .../TeleporterMessenger/packing_test.go | 23 +-- .../TeleporterRegistry/TeleporterRegistry.go | 2 +- cmd/teleporter-cli/transaction.go | 2 +- .../src/Teleporter/ITeleporterMessenger.sol | 12 +- .../src/Teleporter/TeleporterMessenger.sol | 126 ++++++++-------- .../Teleporter/tests/AddFeeAmountTests.t.sol | 4 +- .../Teleporter/tests/GetFeeInfoTests.t.sol | 4 +- .../tests/GetMessageHashTests.t.sol | 9 +- .../tests/GetNextMessageIdTests.t.sol | 6 +- .../GetOutstandingReceiptsToSendTests.t.sol | 76 +++++----- .../tests/GetRelayerRewardAddressTests.t.sol | 19 +-- .../HandleInitialMessageExecutionTests.t.sol | 44 +++--- .../Teleporter/tests/MarkReceiptTests.t.sol | 43 +++--- .../tests/MessageReceivedTests.t.sol | 13 +- .../tests/ReceiveCrossChainMessageTests.t.sol | 23 +-- .../tests/RedeemRelayerRewardsTests.t.sol | 15 +- .../tests/RetryMessageExecutionTests.t.sol | 27 ++-- .../RetrySendCrossChainMessageTests.t.sol | 12 +- .../tests/SendCrossChainMessageTests.t.sol | 15 +- .../tests/SendSpecifiedReceiptsTests.t.sol | 38 ++--- .../tests/TeleporterMessengerTest.t.sol | 31 ++-- tests/flows/add_fee_amount.go | 4 +- tests/flows/basic_send_receive.go | 4 +- .../flows/deliver_to_nonexistent_contract.go | 8 +- tests/flows/deliver_to_wrong_chain.go | 2 +- tests/flows/erc20_bridge_multihop.go | 17 +-- tests/flows/example_messenger.go | 4 +- tests/flows/insufficient_gas.go | 4 +- tests/flows/relay_message_twice.go | 2 +- tests/flows/relayer_modifies_message.go | 2 +- tests/flows/resubmit_altered_message.go | 2 +- tests/flows/retry_successful_execution.go | 4 +- tests/flows/send_specific_receipts.go | 7 +- tests/flows/unallowed_relayer.go | 2 +- tests/flows/validator_churn.go | 4 +- tests/testnet/network.go | 4 +- tests/utils/utils.go | 4 +- 47 files changed, 386 insertions(+), 403 deletions(-) diff --git a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go index 9534fab44..a7c08f010 100644 --- a/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go +++ b/abi-bindings/go/CrossChainApplications/ERC20Bridge/ERC20Bridge/ERC20Bridge.go @@ -32,7 +32,7 @@ var ( // ERC20BridgeMetaData contains all meta data concerning the ERC20Bridge contract. var ERC20BridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"name\":\"CreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintBridgeTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"}],\"name\":\"SubmitCreateBridgeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CREATE_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_BRIDGE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"primaryFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFeeAmount\",\"type\":\"uint256\"}],\"name\":\"bridgeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"nativeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"nativeSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"nativeDecimals\",\"type\":\"uint8\"}],\"name\":\"encodeCreateBridgeTokenData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeMintBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"encodeTransferBridgeTokensData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nativeBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenAddress\",\"type\":\"address\"}],\"name\":\"nativeToWrappedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bridgeTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractERC20\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"messageFeeAmount\",\"type\":\"uint256\"}],\"name\":\"submitCreateBridgeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeTokenContract\",\"type\":\"address\"}],\"name\":\"submittedBridgeTokenCreations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"tokenCreationSubmitted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeToken\",\"type\":\"address\"}],\"name\":\"wrappedTokenContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"bridgeTokenExists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620044ff380380620044ff833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614251620002ae6000396000818161021b01528181610b0c01528181611a6b015261233601526000818161018001528181610dcc01528181610ff101526111f401526142516000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da1146200039f578063c60da61214620003d3578063c63d220714620003ea578063c868efaa1462000401578063d2cc7a701462000418578063f2fde38b146200042157600080fd5b80637a465fd914620002e65780638343f66114620002f15780638c56fcf014620003395780638da5cb5b14620003505780639731429714620003625780639bd9abc0146200037957600080fd5b80635f217bcc116200012c5780635f217bcc146200026357806365435568146200026e5780636b47cd9a14620002ab5780636c7e40d114620002b6578063715018a614620002cd5780637497185614620002d757600080fd5b80631a7f5bec146200017a5780632b0d8f1814620001bf578063367e958414620001d85780634511243e14620001fe5780634950d2d014620002155780635eb99514146200024c575b600080fd5b620001a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001d6620001d0366004620025bc565b62000438565b005b620001ef620001e9366004620026bd565b62000533565b604051620001b69190620027a5565b620001d66200020f366004620025bc565b62000592565b6200023d7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001b6565b620001d66200025d366004620027ba565b62000685565b6200023d621e848081565b620001a26200027f366004620027d4565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200023d620493e081565b620001d6620002c73660046200281b565b6200069d565b620001d6620009ee565b620001a26005600160991b0181565b6200023d62030d4081565b6200032862000302366004620027d4565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001b6565b620001ef6200034a3660046200287d565b62000a06565b6003546001600160a01b0316620001a2565b6200032862000373366004620025bc565b62000a62565b620003286200038a366004620025bc565b60066020526000908152604090205460ff1681565b6200023d620003b0366004620027d4565b600560209081526000938452604080852082529284528284209052825290205481565b620001ef620003e4366004620028c3565b62000a80565b620001d6620003fb3660046200292f565b62000b00565b620001d662000412366004620029a4565b62000db4565b6002546200023d565b620001d662000432366004620025bc565b62000f67565b6200044262000fe3565b6001600160a01b038116620004745760405162461bcd60e51b81526004016200046b9062002a34565b60405180910390fd5b6200047f8162000a62565b15620004e45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016200046b565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b606060008585858560405160200162000550949392919062002a82565b60405160208183030381529060405290506000816040516020016200057792919062002ae7565b6040516020818303038152906040529150505b949350505050565b6200059c62000fe3565b6001600160a01b038116620005c55760405162461bcd60e51b81526004016200046b9062002a34565b620005d08162000a62565b620006305760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016200046b565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6200068f62000fe3565b6200069a8162000fed565b50565b620006a762001194565b6001600160a01b038416620006d05760405162461bcd60e51b81526004016200046b9062002b21565b6000620006dc620011ef565b9050600082156200070b57620006f38484620012f1565b90506200070b6001600160a01b038516838362001467565b60006200084986876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077b919081019062002bc6565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e4919081019062002bc6565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062002bff565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff811115620008c557620008c5620025dc565b604051908082528060200260200182016040528015620008ef578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162000917919062002c65565b6020604051808303816000875af115801562000937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095d919062002ce7565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009d09086815260200190565b60405180910390a450505050620009e76001600055565b5050505050565b620009f862001553565b62000a046000620015af565b565b6060600084848460405160200162000a219392919062002d01565b604051602081830303815290604052905060018160405160200162000a4892919062002ae7565b6040516020818303038152906040529150505b9392505050565b6001600160a01b031660009081526001602052604090205460ff1690565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000ae49060029083906101000162002ae7565b6040516020818303038152906040529150509695505050505050565b62000b0a62001194565b7f0000000000000000000000000000000000000000000000000000000000000000870362000b4c5760405162461bcd60e51b81526004016200046b9062002d25565b6001600160a01b03841662000b755760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b03861662000b9e5760405162461bcd60e51b81526004016200046b9062002b21565b6001600160a01b03851660009081526006602052604090205460ff161562000c895762000bcc818362002dc6565b831162000c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b60648201526084016200046b565b62000c836040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001601565b62000da0565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000d1b5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b60648201526084016200046b565b600062000d298685620012f1565b905082811162000d8e5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b60648201526084016200046b565b62000d9e888888888588620019ed565b505b62000dab6001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000e1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e42919062002ce7565b101562000eab5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016200046b565b62000eb63362000a62565b1562000f1e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016200046b565b62000f61848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001ca992505050565b50505050565b62000f7162001553565b6001600160a01b03811662000fd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200046b565b6200069a81620015af565b62000a0462001553565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001074919062002ce7565b60025490915081831115620010e65760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016200046b565b8083116200115d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016200046b565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011e85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200046b565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001277919062002ddc565b9050620012848162000a62565b15620012ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016200046b565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156200133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001361919062002ce7565b90506200137a6001600160a01b03851633308662001e27565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015620013c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013e8919062002ce7565b9050818111620014505760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016200046b565b6200145c828262002dfc565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620014b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014df919062002ce7565b620014eb919062002dc6565b6040516001600160a01b03851660248201526044810182905290915062000f6190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e4b565b6003546001600160a01b0316331462000a045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200046b565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200160d620011ef565b90506000808360a00151111562001650576200163283604001518460a00151620012f1565b604084015190915062001650906001600160a01b0316838362001467565b60008360a00151846080015162001668919062002dfc565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b158015620016ba57600080fd5b505af1158015620016cf573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173a919062002ce7565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062002ddc565b905081876000015103620017e957806001600160a01b031687602001516001600160a01b031614620017e95760405162461bcd60e51b81526004016200046b9062002e12565b60006200186f88600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200185e919062002ddc565b8b60600151898d60c0015162000a80565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff811115620018ef57620018ef620025dc565b60405190808252806020026020018201604052801562001919578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001941919062002c65565b6020604051808303816000875af115801562001961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001987919062002ce7565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019da9392919062002d01565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff161562001a695760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b60648201526084016200046b565b7f0000000000000000000000000000000000000000000000000000000000000000860362001aab5760405162461bcd60e51b81526004016200046b9062002d25565b600062001ab7620011ef565b9050811562001ad65762001ad66001600160a01b038616828462001467565b600062001ae4838562002dfc565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001b2990849062002dc6565b909155506000905062001b3e87878462000a06565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001bba5762001bba620025dc565b60405190808252806020026020018201604052801562001be4578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001c0c919062002c65565b6020604051808303816000875af115801562001c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c52919062002ce7565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001c959392919062002d01565b60405180910390a450505050505050505050565b6000808280602001905181019062001cc2919062002e61565b9092509050600082600281111562001cde5762001cde62002ad1565b0362001d22576000806000808480602001905181019062001d00919062002ed0565b935093509350935062001d1889898686868662001f29565b50505050620009e7565b600182600281111562001d395762001d3962002ad1565b0362001d785760008060008380602001905181019062001d5a919062002f5a565b92509250925062001d6f888885858562002098565b505050620009e7565b600282600281111562001d8f5762001d8f62002ad1565b0362001dde576000806000806000808680602001905181019062001db4919062002fa2565b95509550955095509550955062001dd28b8b88888888888862002212565b505050505050620009e7565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e000000000060448201526064016200046b565b62000f61846323b872dd60e01b8585856040516024016200151b9392919062002d01565b600062001ea2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023cb9092919063ffffffff16565b80519091501562001f24578080602001905181019062001ec3919062003012565b62001f245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200046b565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001fba5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b60648201526084016200046b565b600086868686868660405162001fd09062002598565b62001fe19695949392919062003036565b604051809103906000f08015801562001ffe573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b620020a262001194565b6001600160a01b038216620020cb5760405162461bcd60e51b81526004016200046b9062002d6d565b60008581526007602090815260408083206001600160a01b03808916855290835281842087821685529092529091205416806200215c5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016200046b565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620021a757600080fd5b505af1158015620021bc573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a250620009e76001600055565b6200221c62001194565b6001600160a01b038316620022455760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b0385166200226e5760405162461bcd60e51b81526004016200046b9062002b21565b60008881526005602090815260408083206001600160a01b03808c168552908352818420908816845290915290205482811015620022f95760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b60648201526084016200046b565b62002305838262002dfc565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620023a4576001600160a01b0386163014620023875760405162461bcd60e51b81526004016200046b9062002e12565b6200239d6001600160a01b0386168585620023dc565b50620023b6565b620023b4878787878787620019ed565b505b620023c16001600055565b5050505050505050565b60606200058a84846000856200240e565b6040516001600160a01b03831660248201526044810182905262001f2490849063a9059cbb60e01b906064016200151b565b606082471015620024715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200046b565b600080866001600160a01b031685876040516200248f919062003095565b60006040518083038185875af1925050503d8060008114620024ce576040519150601f19603f3d011682016040523d82523d6000602084013e620024d3565b606091505b5091509150620024e687838387620024f1565b979650505050505050565b60608315620025655782516000036200255d576001600160a01b0385163b6200255d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200046b565b50816200058a565b6200058a83838151156200257c5781518083602001fd5b8060405162461bcd60e51b81526004016200046b9190620027a5565b61116880620030b483390190565b6001600160a01b03811681146200069a57600080fd5b600060208284031215620025cf57600080fd5b813562000a5b81620025a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200261e576200261e620025dc565b604052919050565b600067ffffffffffffffff821115620026435762002643620025dc565b50601f01601f191660200190565b600082601f8301126200266357600080fd5b81356200267a620026748262002626565b620025f2565b8181528460208386010111156200269057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff811681146200069a57600080fd5b60008060008060808587031215620026d457600080fd5b8435620026e181620025a6565b9350602085013567ffffffffffffffff80821115620026ff57600080fd5b6200270d8883890162002651565b945060408701359150808211156200272457600080fd5b50620027338782880162002651565b92505060608501356200274681620026ad565b939692955090935050565b60005b838110156200276e57818101518382015260200162002754565b50506000910152565b600081518084526200279181602086016020860162002751565b601f01601f19169290920160200192915050565b60208152600062000a5b602083018462002777565b600060208284031215620027cd57600080fd5b5035919050565b600080600060608486031215620027ea57600080fd5b833592506020840135620027fe81620025a6565b915060408401356200281081620025a6565b809150509250925092565b600080600080600060a086880312156200283457600080fd5b8535945060208601356200284881620025a6565b935060408601356200285a81620025a6565b925060608601356200286c81620025a6565b949793965091946080013592915050565b6000806000606084860312156200289357600080fd5b8335620028a081620025a6565b92506020840135620028b281620025a6565b929592945050506040919091013590565b60008060008060008060c08789031215620028dd57600080fd5b863595506020870135620028f181620025a6565b945060408701356200290381620025a6565b935060608701356200291581620025a6565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156200294b57600080fd5b8735965060208801356200295f81620025a6565b955060408801356200297181620025a6565b945060608801356200298381620025a6565b9699959850939660808101359560a0820135955060c0909101359350915050565b60008060008060608587031215620029bb57600080fd5b843593506020850135620029cf81620025a6565b9250604085013567ffffffffffffffff80821115620029ed57600080fd5b818701915087601f83011262002a0257600080fd5b81358181111562002a1257600080fd5b88602082850101111562002a2557600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6001600160a01b038516815260806020820181905260009062002aa89083018662002777565b828103604084015262002abc818662002777565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002b0857634e487b7160e01b600052602160045260246000fd5b838252604060208301526200058a604083018462002777565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002b7e620026748462002626565b905082815283838301111562002b9357600080fd5b62000a5b83602083018462002751565b600082601f83011262002bb557600080fd5b62000a5b8383516020850162002b6d565b60006020828403121562002bd957600080fd5b815167ffffffffffffffff81111562002bf157600080fd5b6200058a8482850162002ba3565b60006020828403121562002c1257600080fd5b815162000a5b81620026ad565b600081518084526020808501945080840160005b8381101562002c5a5781516001600160a01b03168752958201959082019060010162002c33565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002cc861010084018262002c1f565b905060a0840151601f198483030160e08501526200145c828262002777565b60006020828403121562002cfa57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001461576200146162002db0565b60006020828403121562002def57600080fd5b815162000a5b81620025a6565b8181038181111562001461576200146162002db0565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002e7557600080fd5b82516003811062002e8557600080fd5b602084015190925067ffffffffffffffff81111562002ea357600080fd5b8301601f8101851362002eb557600080fd5b62002ec68582516020840162002b6d565b9150509250929050565b6000806000806080858703121562002ee757600080fd5b845162002ef481620025a6565b602086015190945067ffffffffffffffff8082111562002f1357600080fd5b62002f218883890162002ba3565b9450604087015191508082111562002f3857600080fd5b5062002f478782880162002ba3565b92505060608501516200274681620026ad565b60008060006060848603121562002f7057600080fd5b835162002f7d81620025a6565b602085015190935062002f9081620025a6565b80925050604084015190509250925092565b60008060008060008060c0878903121562002fbc57600080fd5b86519550602087015162002fd081620025a6565b604088015190955062002fe381620025a6565b606088015190945062002ff681620025a6565b809350506080870151915060a087015190509295509295509295565b6000602082840312156200302557600080fd5b8151801515811462000a5b57600080fd5b8681526001600160a01b0386811660208301528516604082015260c0606082018190526000906200306a9083018662002777565b82810360808401526200307e818662002777565b91505060ff831660a0830152979650505050505050565b60008251620030a981846020870162002751565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea2646970667358221220ff15d87d9e06053eea65bea2fb7624abc50212a4686d7d62b9d7a5a0ec3d931364736f6c63430008120033a26469706673582212206ba287a59d5af104361abe7997f78740dde749ef46c2ce9a7c4b76793246f80d64736f6c63430008120033", + Bin: "0x60c06040523480156200001157600080fd5b50604051620044ff380380620044ff833981016040819052620000349162000212565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d919062000244565b600255506200013c33620001c0565b507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000244565b60a052506200025e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200022557600080fd5b81516001600160a01b03811681146200023d57600080fd5b9392505050565b6000602082840312156200025757600080fd5b5051919050565b60805160a051614251620002ae6000396000818161021b01528181610b0c01528181611a6b015261233601526000818161018001528181610dcc01528181610ff101526111f401526142516000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80637a465fd911620000d3578063b9e55da11162000086578063b9e55da1146200039f578063c60da61214620003d3578063c63d220714620003ea578063c868efaa1462000401578063d2cc7a701462000418578063f2fde38b146200042157600080fd5b80637a465fd914620002e65780638343f66114620002f15780638c56fcf014620003395780638da5cb5b14620003505780639731429714620003625780639bd9abc0146200037957600080fd5b80635f217bcc116200012c5780635f217bcc146200026357806365435568146200026e5780636b47cd9a14620002ab5780636c7e40d114620002b6578063715018a614620002cd5780637497185614620002d757600080fd5b80631a7f5bec146200017a5780632b0d8f1814620001bf578063367e958414620001d85780634511243e14620001fe5780634950d2d014620002155780635eb99514146200024c575b600080fd5b620001a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620001d6620001d0366004620025bc565b62000438565b005b620001ef620001e9366004620026bd565b62000533565b604051620001b69190620027a5565b620001d66200020f366004620025bc565b62000592565b6200023d7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001b6565b620001d66200025d366004620027ba565b62000685565b6200023d621e848081565b620001a26200027f366004620027d4565b60076020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6200023d620493e081565b620001d6620002c73660046200281b565b6200069d565b620001d6620009ee565b620001a26005600160991b0181565b6200023d62030d4081565b6200032862000302366004620027d4565b600460209081526000938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001620001b6565b620001ef6200034a3660046200287d565b62000a06565b6003546001600160a01b0316620001a2565b6200032862000373366004620025bc565b62000a62565b620003286200038a366004620025bc565b60066020526000908152604090205460ff1681565b6200023d620003b0366004620027d4565b600560209081526000938452604080852082529284528284209052825290205481565b620001ef620003e4366004620028c3565b62000a80565b620001d6620003fb3660046200292f565b62000b00565b620001d662000412366004620029a4565b62000db4565b6002546200023d565b620001d662000432366004620025bc565b62000f67565b6200044262000fe3565b6001600160a01b038116620004745760405162461bcd60e51b81526004016200046b9062002a34565b60405180910390fd5b6200047f8162000a62565b15620004e45760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016200046b565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b606060008585858560405160200162000550949392919062002a82565b60405160208183030381529060405290506000816040516020016200057792919062002ae7565b6040516020818303038152906040529150505b949350505050565b6200059c62000fe3565b6001600160a01b038116620005c55760405162461bcd60e51b81526004016200046b9062002a34565b620005d08162000a62565b620006305760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016200046b565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6200068f62000fe3565b6200069a8162000fed565b50565b620006a762001194565b6001600160a01b038416620006d05760405162461bcd60e51b81526004016200046b9062002b21565b6000620006dc620011ef565b9050600082156200070b57620006f38484620012f1565b90506200070b6001600160a01b038516838362001467565b60006200084986876001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200077b919081019062002bc6565b886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e4919081019062002bc6565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000823573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062002bff565b90506000836001600160a01b031663624488506040518060c001604052808c81526020018b6001600160a01b0316815260200160405180604001604052808b6001600160a01b03168152602001888152508152602001621e84808152602001600067ffffffffffffffff811115620008c557620008c5620025dc565b604051908082528060200260200182016040528015620008ef578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162000917919062002c65565b6020604051808303816000875af115801562000937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095d919062002ce7565b60008a81526004602090815260408083206001600160a01b03808e16808652918452828520908d16808652935292819020805460ff1916600117905551929350918b907f3800d3f6af9e0e73fee531cb134766d3dae314dd340599073c396d9e5e8736bd90620009d09086815260200190565b60405180910390a450505050620009e76001600055565b5050505050565b620009f862001553565b62000a046000620015af565b565b6060600084848460405160200162000a219392919062002d01565b604051602081830303815290604052905060018160405160200162000a4892919062002ae7565b6040516020818303038152906040529150505b9392505050565b6001600160a01b031660009081526001602052604090205460ff1690565b60408051602081018890526001600160a01b0387811682840152868116606080840191909152908616608083015260a0820185905260c08083018590528351808403909101815260e08301909352919062000ae49060029083906101000162002ae7565b6040516020818303038152906040529150509695505050505050565b62000b0a62001194565b7f0000000000000000000000000000000000000000000000000000000000000000870362000b4c5760405162461bcd60e51b81526004016200046b9062002d25565b6001600160a01b03841662000b755760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b03861662000b9e5760405162461bcd60e51b81526004016200046b9062002b21565b6001600160a01b03851660009081526006602052604090205460ff161562000c895762000bcc818362002dc6565b831162000c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332304272696467653a20696e73756666696369656e7420746f74616c20604482015265185b5bdd5b9d60d21b60648201526084016200046b565b62000c836040518060e00160405280898152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381525062001601565b62000da0565b60008781526004602090815260408083206001600160a01b03808b168552908352818420908916845290915290205460ff1662000d1b5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e76616c69642062726964676520746f6b656044820152686e206164647265737360b81b60648201526084016200046b565b600062000d298685620012f1565b905082811162000d8e5760405162461bcd60e51b815260206004820152602960248201527f45524332304272696467653a20696e73756666696369656e742061646a757374604482015268195908185b5bdd5b9d60ba1b60648201526084016200046b565b62000d9e888888888588620019ed565b505b62000dab6001600055565b50505050505050565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa15801562000e1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e42919062002ce7565b101562000eab5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016200046b565b62000eb63362000a62565b1562000f1e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016200046b565b62000f61848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062001ca992505050565b50505050565b62000f7162001553565b6001600160a01b03811662000fd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200046b565b6200069a81620015af565b62000a0462001553565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001074919062002ce7565b60025490915081831115620010e65760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016200046b565b8083116200115d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016200046b565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b600260005403620011e85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200046b565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001277919062002ddc565b9050620012848162000a62565b15620012ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016200046b565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156200133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001361919062002ce7565b90506200137a6001600160a01b03851633308662001e27565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015620013c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013e8919062002ce7565b9050818111620014505760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016200046b565b6200145c828262002dfc565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620014b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014df919062002ce7565b620014eb919062002dc6565b6040516001600160a01b03851660248201526044810182905290915062000f6190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e4b565b6003546001600160a01b0316331462000a045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200046b565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006200160d620011ef565b90506000808360a00151111562001650576200163283604001518460a00151620012f1565b604084015190915062001650906001600160a01b0316838362001467565b60008360a00151846080015162001668919062002dfc565b604085810151905163079cc67960e41b815233600482015260248101839052919250906001600160a01b038216906379cc679090604401600060405180830381600087803b158015620016ba57600080fd5b505af1158015620016cf573d6000803e3d6000fd5b505050506000816001600160a01b031663f72539686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173a919062002ce7565b90506000826001600160a01b0316631a0b79bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062002ddc565b905081876000015103620017e957806001600160a01b031687602001516001600160a01b031614620017e95760405162461bcd60e51b81526004016200046b9062002e12565b60006200186f88600001518960200151866001600160a01b03166374d32ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200185e919062002ddc565b8b60600151898d60c0015162000a80565b90506000876001600160a01b031663624488506040518060c00160405280878152602001866001600160a01b0316815260200160405180604001604052808e604001516001600160a01b031681526020018c8152508152602001620493e08152602001600067ffffffffffffffff811115620018ef57620018ef620025dc565b60405190808252806020026020018201604052801562001919578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001941919062002c65565b6020604051808303816000875af115801562001961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001987919062002ce7565b90508089600001518a604001516001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c602001518d606001518b604051620019da9392919062002d01565b60405180910390a4505050505050505050565b6001600160a01b03841660009081526006602052604090205460ff161562001a695760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2063616e6e6f742062726964676520777261707060448201526732b2103a37b5b2b760c11b60648201526084016200046b565b7f0000000000000000000000000000000000000000000000000000000000000000860362001aab5760405162461bcd60e51b81526004016200046b9062002d25565b600062001ab7620011ef565b9050811562001ad65762001ad66001600160a01b038616828462001467565b600062001ae4838562002dfc565b60008981526005602090815260408083206001600160a01b03808d168552908352818420908b16845290915281208054929350839290919062001b2990849062002dc6565b909155506000905062001b3e87878462000a06565b90506000836001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b031681526020018a815250815260200162030d408152602001600067ffffffffffffffff81111562001bba5762001bba620025dc565b60405190808252806020026020018201604052801562001be4578160200160208202803683370190505b508152602001858152506040518263ffffffff1660e01b815260040162001c0c919062002c65565b6020604051808303816000875af115801562001c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c52919062002ce7565b9050808a896001600160a01b03167f217c87a6d6d3d58781939a048638f7802a91151cc9eb573762b268bf8ec9c2578c8b8860405162001c959392919062002d01565b60405180910390a450505050505050505050565b6000808280602001905181019062001cc2919062002e61565b9092509050600082600281111562001cde5762001cde62002ad1565b0362001d22576000806000808480602001905181019062001d00919062002ed0565b935093509350935062001d1889898686868662001f29565b50505050620009e7565b600182600281111562001d395762001d3962002ad1565b0362001d785760008060008380602001905181019062001d5a919062002f5a565b92509250925062001d6f888885858562002098565b505050620009e7565b600282600281111562001d8f5762001d8f62002ad1565b0362001dde576000806000806000808680602001905181019062001db4919062002fa2565b95509550955095509550955062001dd28b8b88888888888862002212565b505050505050620009e7565b60405162461bcd60e51b815260206004820152601b60248201527f45524332304272696467653a20696e76616c696420616374696f6e000000000060448201526064016200046b565b62000f61846323b872dd60e01b8585856040516024016200151b9392919062002d01565b600062001ea2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023cb9092919063ffffffff16565b80519091501562001f24578080602001905181019062001ec3919062003012565b62001f245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200046b565b505050565b60008681526007602090815260408083206001600160a01b038981168552908352818420888216855290925290912054161562001fba5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20616c72656164604482015267792065786973747360c01b60648201526084016200046b565b600086868686868660405162001fd09062002598565b62001fe19695949392919062003036565b604051809103906000f08015801562001ffe573d6000803e3d6000fd5b506001600160a01b038181166000818152600660209081526040808320805460ff191660011790558c8352600782528083208c8616808552908352818420958c168085529583529281902080546001600160a01b031916851790555192835293945091928a917fe1c61a845f79534e11924517ddbedc668d0c20e467eafb4d3bd2858e2815f3b5910160405180910390a450505050505050565b620020a262001194565b6001600160a01b038216620020cb5760405162461bcd60e51b81526004016200046b9062002d6d565b60008581526007602090815260408083206001600160a01b03808916855290835281842087821685529092529091205416806200215c5760405162461bcd60e51b815260206004820152602860248201527f45524332304272696467653a2062726964676520746f6b656e20646f6573206e6044820152671bdd08195e1a5cdd60c21b60648201526084016200046b565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528216906340c10f1990604401600060405180830381600087803b158015620021a757600080fd5b505af1158015620021bc573d6000803e3d6000fd5b5050604080516001600160a01b03878116825260208201879052851693507fc0767f158f0d5394b598489a51ed607cd55a8be2dcef113ba1626efcf4c6395492500160405180910390a250620009e76001600055565b6200221c62001194565b6001600160a01b038316620022455760405162461bcd60e51b81526004016200046b9062002d6d565b6001600160a01b0385166200226e5760405162461bcd60e51b81526004016200046b9062002b21565b60008881526005602090815260408083206001600160a01b03808c168552908352818420908816845290915290205482811015620022f95760405162461bcd60e51b815260206004820152602160248201527f45524332304272696467653a20696e73756666696369656e742062616c616e636044820152606560f81b60648201526084016200046b565b62002305838262002dfc565b60008a81526005602090815260408083206001600160a01b03808e168552908352818420908a1684529091529020557f00000000000000000000000000000000000000000000000000000000000000008703620023a4576001600160a01b0386163014620023875760405162461bcd60e51b81526004016200046b9062002e12565b6200239d6001600160a01b0386168585620023dc565b50620023b6565b620023b4878787878787620019ed565b505b620023c16001600055565b5050505050505050565b60606200058a84846000856200240e565b6040516001600160a01b03831660248201526044810182905262001f2490849063a9059cbb60e01b906064016200151b565b606082471015620024715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200046b565b600080866001600160a01b031685876040516200248f919062003095565b60006040518083038185875af1925050503d8060008114620024ce576040519150601f19603f3d011682016040523d82523d6000602084013e620024d3565b606091505b5091509150620024e687838387620024f1565b979650505050505050565b60608315620025655782516000036200255d576001600160a01b0385163b6200255d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200046b565b50816200058a565b6200058a83838151156200257c5781518083602001fd5b8060405162461bcd60e51b81526004016200046b9190620027a5565b61116880620030b483390190565b6001600160a01b03811681146200069a57600080fd5b600060208284031215620025cf57600080fd5b813562000a5b81620025a6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200261e576200261e620025dc565b604052919050565b600067ffffffffffffffff821115620026435762002643620025dc565b50601f01601f191660200190565b600082601f8301126200266357600080fd5b81356200267a620026748262002626565b620025f2565b8181528460208386010111156200269057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff811681146200069a57600080fd5b60008060008060808587031215620026d457600080fd5b8435620026e181620025a6565b9350602085013567ffffffffffffffff80821115620026ff57600080fd5b6200270d8883890162002651565b945060408701359150808211156200272457600080fd5b50620027338782880162002651565b92505060608501356200274681620026ad565b939692955090935050565b60005b838110156200276e57818101518382015260200162002754565b50506000910152565b600081518084526200279181602086016020860162002751565b601f01601f19169290920160200192915050565b60208152600062000a5b602083018462002777565b600060208284031215620027cd57600080fd5b5035919050565b600080600060608486031215620027ea57600080fd5b833592506020840135620027fe81620025a6565b915060408401356200281081620025a6565b809150509250925092565b600080600080600060a086880312156200283457600080fd5b8535945060208601356200284881620025a6565b935060408601356200285a81620025a6565b925060608601356200286c81620025a6565b949793965091946080013592915050565b6000806000606084860312156200289357600080fd5b8335620028a081620025a6565b92506020840135620028b281620025a6565b929592945050506040919091013590565b60008060008060008060c08789031215620028dd57600080fd5b863595506020870135620028f181620025a6565b945060408701356200290381620025a6565b935060608701356200291581620025a6565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156200294b57600080fd5b8735965060208801356200295f81620025a6565b955060408801356200297181620025a6565b945060608801356200298381620025a6565b9699959850939660808101359560a0820135955060c0909101359350915050565b60008060008060608587031215620029bb57600080fd5b843593506020850135620029cf81620025a6565b9250604085013567ffffffffffffffff80821115620029ed57600080fd5b818701915087601f83011262002a0257600080fd5b81358181111562002a1257600080fd5b88602082850101111562002a2557600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b6001600160a01b038516815260806020820181905260009062002aa89083018662002777565b828103604084015262002abc818662002777565b91505060ff8316606083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b60006003841062002b0857634e487b7160e01b600052602160045260246000fd5b838252604060208301526200058a604083018462002777565b6020808252602c908201527f45524332304272696467653a207a65726f2064657374696e6174696f6e20627260408201526b69646765206164647265737360a01b606082015260800190565b600062002b7e620026748462002626565b905082815283838301111562002b9357600080fd5b62000a5b83602083018462002751565b600082601f83011262002bb557600080fd5b62000a5b8383516020850162002b6d565b60006020828403121562002bd957600080fd5b815167ffffffffffffffff81111562002bf157600080fd5b6200058a8482850162002ba3565b60006020828403121562002c1257600080fd5b815162000a5b81620026ad565b600081518084526020808501945080840160005b8381101562002c5a5781516001600160a01b03168752958201959082019060010162002c33565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015262002cc861010084018262002c1f565b905060a0840151601f198483030160e08501526200145c828262002777565b60006020828403121562002cfa57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f45524332304272696467653a2063616e6e6f742062726964676520746f20736160408201526736b29031b430b4b760c11b606082015260800190565b60208082526023908201527f45524332304272696467653a207a65726f20726563697069656e74206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001461576200146162002db0565b60006020828403121562002def57600080fd5b815162000a5b81620025a6565b8181038181111562001461576200146162002db0565b6020808252602f908201527f45524332304272696467653a20696e76616c69642064657374696e6174696f6e60408201526e20627269646765206164647265737360881b606082015260800190565b6000806040838503121562002e7557600080fd5b82516003811062002e8557600080fd5b602084015190925067ffffffffffffffff81111562002ea357600080fd5b8301601f8101851362002eb557600080fd5b62002ec68582516020840162002b6d565b9150509250929050565b6000806000806080858703121562002ee757600080fd5b845162002ef481620025a6565b602086015190945067ffffffffffffffff8082111562002f1357600080fd5b62002f218883890162002ba3565b9450604087015191508082111562002f3857600080fd5b5062002f478782880162002ba3565b92505060608501516200274681620026ad565b60008060006060848603121562002f7057600080fd5b835162002f7d81620025a6565b602085015190935062002f9081620025a6565b80925050604084015190509250925092565b60008060008060008060c0878903121562002fbc57600080fd5b86519550602087015162002fd081620025a6565b604088015190955062002fe381620025a6565b606088015190945062002ff681620025a6565b809350506080870151915060a087015190509295509295509295565b6000602082840312156200302557600080fd5b8151801515811462000a5b57600080fd5b8681526001600160a01b0386811660208301528516604082015260c0606082018190526000906200306a9083018662002777565b82810360808401526200307e818662002777565b91505060ff831660a0830152979650505050505050565b60008251620030a981846020870162002751565b919091019291505056fe6101206040523480156200001257600080fd5b506040516200116838038062001168833981016040819052620000359162000292565b82826003620000458382620003d5565b506004620000548282620003d5565b50879150620000b690505760405162461bcd60e51b815260206004820152602160248201527f427269646765546f6b656e3a207a65726f20736f7572636520636861696e20696044820152601960fa1b60648201526084015b60405180910390fd5b6001600160a01b0385166200011e5760405162461bcd60e51b815260206004820152602760248201527f427269646765546f6b656e3a207a65726f20736f7572636520627269646765206044820152666164647265737360c81b6064820152608401620000ad565b6001600160a01b038416620001855760405162461bcd60e51b815260206004820152602660248201527f427269646765546f6b656e3a207a65726f20736f75726365206173736574206160448201526564647265737360d01b6064820152608401620000ad565b3360805260a09590955250506001600160a01b0391821660c0521660e05260ff1661010052620004a1565b80516001600160a01b0381168114620001c857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f557600080fd5b81516001600160401b0380821115620002125762000212620001cd565b604051601f8301601f19908116603f011681019082821181831017156200023d576200023d620001cd565b816040528381526020925086838588010111156200025a57600080fd5b600091505b838210156200027e57858201830151818301840152908201906200025f565b600093810190920192909252949350505050565b60008060008060008060c08789031215620002ac57600080fd5b86519550620002be60208801620001b0565b9450620002ce60408801620001b0565b60608801519094506001600160401b0380821115620002ec57600080fd5b620002fa8a838b01620001e3565b945060808901519150808211156200031157600080fd5b506200032089828a01620001e3565b92505060a087015160ff811681146200033857600080fd5b809150509295509295509295565b600181811c908216806200035b57607f821691505b6020821081036200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d057600081815260208120601f850160051c81016020861015620003ab5750805b601f850160051c820191505b81811015620003cc57828155600101620003b7565b5050505b505050565b81516001600160401b03811115620003f157620003f1620001cd565b620004098162000402845462000346565b8462000382565b602080601f831160018114620004415760008415620004285750858301515b600019600386901b1c1916600185901b178555620003cc565b600085815260208120601f198616915b82811015620004725788860151825594840194600190910190840162000451565b5085821015620004915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610c7b620004ed60003960006101c70152600061025a01526000610173015260006102fc0152600081816102c2015261041b0152610c7b6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610297578063a9059cbb146102aa578063cd596583146102bd578063dd62ed3e146102e4578063f7253968146102f757600080fd5b806370a082311461022c57806374d32ad41461025557806379cc67901461027c57806395d89b411461028f57600080fd5b806323b872dd116100e957806323b872dd146101ad578063313ce567146101c057806339509351146101f157806340c10f191461020457806342966c681461021957600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631a0b79bf1461016e575b600080fd5b61012361031e565b6040516101309190610aac565b60405180910390f35b61014c610147366004610b16565b6103b0565b6040519015158152602001610130565b6002545b604051908152602001610130565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610130565b61014c6101bb366004610b40565b6103ca565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610130565b61014c6101ff366004610b16565b6103ee565b610217610212366004610b16565b610410565b005b610217610227366004610b7c565b61049b565b61016061023a366004610b95565b6001600160a01b031660009081526020819052604090205490565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61021761028a366004610b16565b6104a8565b6101236104bd565b61014c6102a5366004610b16565b6104cc565b61014c6102b8366004610b16565b610547565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101606102f2366004610bb7565b610555565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461032d90610bea565b80601f016020809104026020016040519081016040528092919081815260200182805461035990610bea565b80156103a65780601f1061037b576101008083540402835291602001916103a6565b820191906000526020600020905b81548152906001019060200180831161038957829003601f168201915b5050505050905090565b6000336103be818585610580565b60019150505b92915050565b6000336103d88582856106a5565b6103e385858561071f565b506001949350505050565b6000336103be8185856104018383610555565b61040b9190610c24565b610580565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260206004820152601960248201527f427269646765546f6b656e3a20756e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b61049782826108c3565b5050565b6104a53382610982565b50565b6104b38233836106a5565b6104978282610982565b60606004805461032d90610bea565b600033816104da8286610555565b90508381101561053a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610484565b6103e38286868403610580565b6000336103be81858561071f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610484565b6001600160a01b0382166106435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106b18484610555565b90506000198114610719578181101561070c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610484565b6107198484848403610580565b50505050565b6001600160a01b0383166107835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610484565b6001600160a01b0382166107e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610484565b6001600160a01b0383166000908152602081905260409020548181101561085d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610484565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610719565b6001600160a01b0382166109195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610484565b806002600082825461092b9190610c24565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166109e25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610484565b6001600160a01b03821660009081526020819052604090205481811015610a565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610484565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610698565b600060208083528351808285015260005b81811015610ad957858101830151858201604001528201610abd565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1157600080fd5b919050565b60008060408385031215610b2957600080fd5b610b3283610afa565b946020939093013593505050565b600080600060608486031215610b5557600080fd5b610b5e84610afa565b9250610b6c60208501610afa565b9150604084013590509250925092565b600060208284031215610b8e57600080fd5b5035919050565b600060208284031215610ba757600080fd5b610bb082610afa565b9392505050565b60008060408385031215610bca57600080fd5b610bd383610afa565b9150610be160208401610afa565b90509250929050565b600181811c90821680610bfe57607f821691505b602082108103610c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103c457634e487b7160e01b600052601160045260246000fdfea2646970667358221220ff15d87d9e06053eea65bea2fb7624abc50212a4686d7d62b9d7a5a0ec3d931364736f6c63430008120033a26469706673582212206f50c7cabdef3374a35fb83bddf0c002ebcdfb3d48177d26573060f5b7dc3f2d64736f6c63430008120033", } // ERC20BridgeABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go index e0698c198..1bdae8340 100644 --- a/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go +++ b/abi-bindings/go/CrossChainApplications/ExampleMessenger/ExampleCrossChainMessenger/ExampleCrossChainMessenger.go @@ -32,7 +32,7 @@ var ( // ExampleCrossChainMessengerMetaData contains all meta data concerning the ExampleCrossChainMessenger contract. var ExampleCrossChainMessengerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ReceiveMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"SendMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getCurrentMessage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001a7338038062001a73833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b608051611861620002126000396000818160be015281816104f2015281816108ca0152610c2801526118616000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806397314297116100715780639731429714610151578063b33fead414610174578063c868efaa14610195578063d2cc7a70146101a8578063f2fde38b146101ba578063f63d09d7146101cd57600080fd5b80631a7f5bec146100b95780632b0d8f18146100fd5780634511243e146101125780635eb9951414610125578063715018a6146101385780638da5cb5b14610140575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004611211565b6101e0565b005b610110610120366004611211565b6102d2565b610110610133366004611235565b6103bc565b6101106103d0565b6003546001600160a01b03166100e0565b61016461015f366004611211565b6103e4565b60405190151581526020016100f4565b610187610182366004611235565b610402565b6040516100f492919061129e565b6101106101a336600461130b565b6104da565b6002545b6040519081526020016100f4565b6101106101c8366004611211565b610682565b6101ac6101db366004611367565b6106f8565b6101e86108be565b6001600160a01b0381166102175760405162461bcd60e51b815260040161020e906113ed565b60405180910390fd5b610220816103e4565b156102835760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161020e565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6102da6108be565b6001600160a01b0381166103005760405162461bcd60e51b815260040161020e906113ed565b610309816103e4565b6103675760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161020e565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6103c46108be565b6103cd816108c6565b50565b6103d8610a66565b6103e26000610ac0565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818152600460209081526040808320815180830190925280546001600160a01b0316825260018101805460609486949392908401916104429061143b565b80601f016020809104026020016040519081016040528092919081815260200182805461046e9061143b565b80156104bb5780601f10610490576101008083540402835291602001916104bb565b820191906000526020600020905b81548152906001019060200180831161049e57829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105659190611475565b10156105cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161020e565b6105d5336103e4565b1561063b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161020e565b61067c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1292505050565b50505050565b61068a610a66565b6001600160a01b0381166106ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020e565b6103cd81610ac0565b6000610702610bca565b600061070c610c23565b905060008615610736576107208888610d1e565b90506107366001600160a01b0389168383610e88565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516107789594939291906114b7565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff8111156107f2576107f26114e5565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50815260200188886040516020016108349291906114fb565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016108629190611553565b6020604051808303816000875af1158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611475565b925050506108b36001600055565b979650505050505050565b6103e2610a66565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611475565b600254909150818311156109ba5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161020e565b808311610a2f5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161020e565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610b2891906115d1565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610b7e90826116c1565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610bbc9190611781565b60405180910390a350505050565b600260005403610c1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161020e565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611794565b9050610cb3816103e4565b15610d195760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161020e565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190611475565b9050610da26001600160a01b038516333086610f6d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190611475565b9050818111610e735760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161020e565b610e7d82826117c7565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190611475565b610f0791906117da565b6040516001600160a01b03851660248201526044810182905290915061067c90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fa5565b6040516001600160a01b038085166024830152831660448201526064810182905261067c9085906323b872dd60e01b90608401610f36565b6000610ffa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661107c9092919063ffffffff16565b805190915015611077578080602001905181019061101891906117ed565b6110775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161020e565b505050565b606061108b8484600085611093565b949350505050565b6060824710156110f45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161020e565b600080866001600160a01b03168587604051611110919061180f565b60006040518083038185875af1925050503d806000811461114d576040519150601f19603f3d011682016040523d82523d6000602084013e611152565b606091505b50915091506108b387838387606083156111cd5782516000036111c6576001600160a01b0385163b6111c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161020e565b508161108b565b61108b83838151156111e25781518083602001fd5b8060405162461bcd60e51b815260040161020e9190611781565b6001600160a01b03811681146103cd57600080fd5b60006020828403121561122357600080fd5b813561122e816111fc565b9392505050565b60006020828403121561124757600080fd5b5035919050565b60005b83811015611269578181015183820152602001611251565b50506000910152565b6000815180845261128a81602086016020860161124e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061108b90830184611272565b60008083601f8401126112d457600080fd5b50813567ffffffffffffffff8111156112ec57600080fd5b60208301915083602082850101111561130457600080fd5b9250929050565b6000806000806060858703121561132157600080fd5b843593506020850135611333816111fc565b9250604085013567ffffffffffffffff81111561134f57600080fd5b61135b878288016112c2565b95989497509550505050565b600080600080600080600060c0888a03121561138257600080fd5b873596506020880135611394816111fc565b955060408801356113a4816111fc565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156113ce57600080fd5b6113da8a828b016112c2565b989b979a50959850939692959293505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600181811c9082168061144f57607f821691505b60208210810361146f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561148757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108b360808301848661148e565b634e487b7160e01b600052604160045260246000fd5b60208152600061108b60208301848661148e565b600081518084526020808501945080840160005b838110156115485781516001600160a01b031687529582019590820190600101611523565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526115b461010084018261150f565b905060a0840151601f198483030160e0850152610e7d8282611272565b6000602082840312156115e357600080fd5b815167ffffffffffffffff808211156115fb57600080fd5b818401915084601f83011261160f57600080fd5b815181811115611621576116216114e5565b604051601f8201601f19908116603f01168101908382118183101715611649576116496114e5565b8160405282815287602084870101111561166257600080fd5b6108b383602083016020880161124e565b601f82111561107757600081815260208120601f850160051c8101602086101561169a5750805b601f850160051c820191505b818110156116b9578281556001016116a6565b505050505050565b815167ffffffffffffffff8111156116db576116db6114e5565b6116ef816116e9845461143b565b84611673565b602080601f831160018114611724576000841561170c5750858301515b600019600386901b1c1916600185901b1785556116b9565b600085815260208120601f198616915b8281101561175357888601518255948401946001909101908401611734565b50858210156117715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061122e6020830184611272565b6000602082840312156117a657600080fd5b815161122e816111fc565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8257610e826117b1565b80820180821115610e8257610e826117b1565b6000602082840312156117ff57600080fd5b8151801515811461122e57600080fd5b6000825161182181846020870161124e565b919091019291505056fea2646970667358221220696002eed41b50b609d6b88df1ee2e1c6bd89ee2a144fb0b3128e8d68f5cc88064736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001a7338038062001a73833981016040819052620000349162000196565b600160005580806001600160a01b038116620000bc5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000107573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012d9190620001c8565b600255506200013c3362000144565b5050620001e2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001a957600080fd5b81516001600160a01b0381168114620001c157600080fd5b9392505050565b600060208284031215620001db57600080fd5b5051919050565b608051611861620002126000396000818160be015281816104f2015281816108ca0152610c2801526118616000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806397314297116100715780639731429714610151578063b33fead414610174578063c868efaa14610195578063d2cc7a70146101a8578063f2fde38b146101ba578063f63d09d7146101cd57600080fd5b80631a7f5bec146100b95780632b0d8f18146100fd5780634511243e146101125780635eb9951414610125578063715018a6146101385780638da5cb5b14610140575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004611211565b6101e0565b005b610110610120366004611211565b6102d2565b610110610133366004611235565b6103bc565b6101106103d0565b6003546001600160a01b03166100e0565b61016461015f366004611211565b6103e4565b60405190151581526020016100f4565b610187610182366004611235565b610402565b6040516100f492919061129e565b6101106101a336600461130b565b6104da565b6002545b6040519081526020016100f4565b6101106101c8366004611211565b610682565b6101ac6101db366004611367565b6106f8565b6101e86108be565b6001600160a01b0381166102175760405162461bcd60e51b815260040161020e906113ed565b60405180910390fd5b610220816103e4565b156102835760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161020e565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6102da6108be565b6001600160a01b0381166103005760405162461bcd60e51b815260040161020e906113ed565b610309816103e4565b6103675760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161020e565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6103c46108be565b6103cd816108c6565b50565b6103d8610a66565b6103e26000610ac0565b565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818152600460209081526040808320815180830190925280546001600160a01b0316825260018101805460609486949392908401916104429061143b565b80601f016020809104026020016040519081016040528092919081815260200182805461046e9061143b565b80156104bb5780601f10610490576101008083540402835291602001916104bb565b820191906000526020600020905b81548152906001019060200180831161049e57829003601f168201915b5050505050815250509050806000015181602001519250925050915091565b60025460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105659190611475565b10156105cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161020e565b6105d5336103e4565b1561063b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161020e565b61067c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1292505050565b50505050565b61068a610a66565b6001600160a01b0381166106ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020e565b6103cd81610ac0565b6000610702610bca565b600061070c610c23565b905060008615610736576107208888610d1e565b90506107366001600160a01b0389168383610e88565b886001600160a01b03168a7fa06eff1edd0c66b8dc96d086dda7ba263edf88d7417e6cb15073b5e7bff8a8ca8a848a8a8a6040516107789594939291906114b7565b60405180910390a3816001600160a01b031663624488506040518060c001604052808d81526020018c6001600160a01b0316815260200160405180604001604052808d6001600160a01b03168152602001868152508152602001898152602001600067ffffffffffffffff8111156107f2576107f26114e5565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50815260200188886040516020016108349291906114fb565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016108629190611553565b6020604051808303816000875af1158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190611475565b925050506108b36001600055565b979650505050505050565b6103e2610a66565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611475565b600254909150818311156109ba5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161020e565b808311610a2f5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161020e565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146103e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020e565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081806020019051810190610b2891906115d1565b6040805180820182526001600160a01b038681168252602080830185815260008a81526004909252939020825181546001600160a01b03191692169190911781559151929350916001820190610b7e90826116c1565b50905050826001600160a01b0316847f1f5c800b5f2b573929a7948f82a199c2a212851b53a6c5bd703ece23999d24aa83604051610bbc9190611781565b60405180910390a350505050565b600260005403610c1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161020e565b6002600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca89190611794565b9050610cb3816103e4565b15610d195760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161020e565b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190611475565b9050610da26001600160a01b038516333086610f6d565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190611475565b9050818111610e735760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161020e565b610e7d82826117c7565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190611475565b610f0791906117da565b6040516001600160a01b03851660248201526044810182905290915061067c90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fa5565b6040516001600160a01b038085166024830152831660448201526064810182905261067c9085906323b872dd60e01b90608401610f36565b6000610ffa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661107c9092919063ffffffff16565b805190915015611077578080602001905181019061101891906117ed565b6110775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161020e565b505050565b606061108b8484600085611093565b949350505050565b6060824710156110f45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161020e565b600080866001600160a01b03168587604051611110919061180f565b60006040518083038185875af1925050503d806000811461114d576040519150601f19603f3d011682016040523d82523d6000602084013e611152565b606091505b50915091506108b387838387606083156111cd5782516000036111c6576001600160a01b0385163b6111c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161020e565b508161108b565b61108b83838151156111e25781518083602001fd5b8060405162461bcd60e51b815260040161020e9190611781565b6001600160a01b03811681146103cd57600080fd5b60006020828403121561122357600080fd5b813561122e816111fc565b9392505050565b60006020828403121561124757600080fd5b5035919050565b60005b83811015611269578181015183820152602001611251565b50506000910152565b6000815180845261128a81602086016020860161124e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061108b90830184611272565b60008083601f8401126112d457600080fd5b50813567ffffffffffffffff8111156112ec57600080fd5b60208301915083602082850101111561130457600080fd5b9250929050565b6000806000806060858703121561132157600080fd5b843593506020850135611333816111fc565b9250604085013567ffffffffffffffff81111561134f57600080fd5b61135b878288016112c2565b95989497509550505050565b600080600080600080600060c0888a03121561138257600080fd5b873596506020880135611394816111fc565b955060408801356113a4816111fc565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156113ce57600080fd5b6113da8a828b016112c2565b989b979a50959850939692959293505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600181811c9082168061144f57607f821691505b60208210810361146f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561148757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b03861681528460208201528360408201526080606082015260006108b360808301848661148e565b634e487b7160e01b600052604160045260246000fd5b60208152600061108b60208301848661148e565b600081518084526020808501945080840160005b838110156115485781516001600160a01b031687529582019590820190600101611523565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526115b461010084018261150f565b905060a0840151601f198483030160e0850152610e7d8282611272565b6000602082840312156115e357600080fd5b815167ffffffffffffffff808211156115fb57600080fd5b818401915084601f83011261160f57600080fd5b815181811115611621576116216114e5565b604051601f8201601f19908116603f01168101908382118183101715611649576116496114e5565b8160405282815287602084870101111561166257600080fd5b6108b383602083016020880161124e565b601f82111561107757600081815260208120601f850160051c8101602086101561169a5750805b601f850160051c820191505b818110156116b9578281556001016116a6565b505050505050565b815167ffffffffffffffff8111156116db576116db6114e5565b6116ef816116e9845461143b565b84611673565b602080601f831160018114611724576000841561170c5750858301515b600019600386901b1c1916600185901b1785556116b9565b600085815260208120601f198616915b8281101561175357888601518255948401946001909101908401611734565b50858210156117715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061122e6020830184611272565b6000602082840312156117a657600080fd5b815161122e816111fc565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8257610e826117b1565b80820180821115610e8257610e826117b1565b6000602082840312156117ff57600080fd5b8151801515811461122e57600080fd5b6000825161182181846020870161124e565b919091019291505056fea2646970667358221220a7f205a20d00142617698e6827cddf0325c3d7c8bdc0998dbf9811a7ab401da964736f6c63430008120033", } // ExampleCrossChainMessengerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go index d69c04b44..ac659817b 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/ERC20TokenSource/ERC20TokenSource.go @@ -32,7 +32,7 @@ var ( // ERC20TokenSourceMetaData contains all meta data concerning the ERC20TokenSource contract. var ERC20TokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20ContractAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20ContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea26469706673582212201d28533533d3b624fcc088f6aa04c9928ddaef523f070db3d1c237bcc6f7accb64736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", + Bin: "0x6101006040523480156200001257600080fd5b50604051620016f1380380620016f183398101604081905262000035916200031d565b60016000556001600160a01b038416620000b15760405162461bcd60e51b815260206004820152603260248201527f4552433230546f6b656e536f757263653a207a65726f2054656c65706f727465604482015271724d657373656e676572206164647265737360701b60648201526084015b60405180910390fd5b6001600160a01b03841660e05282620001155760405162461bcd60e51b81526020600482015260306024820152600080516020620016d183398151915260448201526f1bdb88189b1bd8dad8da185a5b88125160821b6064820152608401620000a8565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018e919062000371565b8303620002045760405162461bcd60e51b815260206004820152603460248201527f4552433230546f6b656e536f757263653a2063616e6e6f74206272696467652060448201527f776974682073616d6520626c6f636b636861696e0000000000000000000000006064820152608401620000a8565b60808390526001600160a01b038216620002765760405162461bcd60e51b81526020600482015260336024820152600080516020620016d183398151915260448201527f6f6e20636f6e74726163742061646472657373000000000000000000000000006064820152608401620000a8565b6001600160a01b0380831660a0528116620002ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433230546f6b656e536f757263653a207a65726f20455243323020636f6e60448201526c7472616374206164647265737360981b6064820152608401620000a8565b6001600160a01b031660c052506200038b915050565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080608085870312156200033457600080fd5b6200033f8562000300565b935060208501519250620003566040860162000300565b9150620003666060860162000300565b905092959194509250565b6000602082840312156200038457600080fd5b5051919050565b60805160a05160c05160e0516112ba620004176000396000818160f50152818161029c015281816102d301526104ed015260008181610183015281816101e30152818161027b0152818161036d01528181610a9a0152610c6a01526000818161013e015281816103330152610605015260008181609d0152818161030d015261058201526112ba6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b6171f7311610066578063b6171f731461012f578063b8c9091a14610139578063c452165e14610160578063c868efaa1461016b578063e486df151461017e57600080fd5b806341d3014d1461009857806355db3e9e146100d257806387a2edba146100db5780639b3e5803146100f0575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100bf60015481565b6100ee6100e9366004610e39565b6101a5565b005b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b6100bf620186a081565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b610117600160981b81565b6100ee610179366004610ed2565b6104da565b6101177f000000000000000000000000000000000000000000000000000000000000000081565b6101ad610785565b6001600160a01b0385166101dc5760405162461bcd60e51b81526004016101d390610f5b565b60405180910390fd5b60006102087f0000000000000000000000000000000000000000000000000000000000000000866107de565b90508381116102705760405162461bcd60e51b815260206004820152602e60248201527f4552433230546f6b656e536f757263653a20696e73756666696369656e74206160448201526d191a9d5cdd195908185b5bdd5b9d60921b60648201526084016101d3565b83156102c1576102c17f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610948565b60006102cd8583610fb9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018b8152508152602001620186a08152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604080516001600160a01b038e166020808301919091529181018890529101906060016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016104339190611060565b6020604051808303816000875af1158015610452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047691906110de565b905080886001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf99856040516104be91815260200190565b60405180910390a45050506104d36001600055565b5050505050565b6104e2610785565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105805760405162461bcd60e51b815260206004820152603b60248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564205460448201527f656c65706f727465724d657373656e67657220636f6e7472616374000000000060648201526084016101d3565b7f000000000000000000000000000000000000000000000000000000000000000084146106035760405162461bcd60e51b815260206004820152602b60248201527f4552433230546f6b656e536f757263653a20696e76616c69642064657374696e60448201526a30ba34b7b71031b430b4b760a91b60648201526084016101d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146106925760405162461bcd60e51b815260206004820152602560248201527f4552433230546f6b656e536f757263653a20756e617574686f72697a6564207360448201526432b73232b960d91b60648201526084016101d3565b6000806106a18385018561110d565b909250905060008260018111156106ba576106ba6111d5565b036106eb57600080828060200190518101906106d691906111eb565b915091506106e48282610a2d565b5050610773565b60018260018111156106ff576106ff6111d5565b0361072b5760008180602001905181019061071a91906110de565b905061072581610ac4565b50610773565b60405162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e536f757263653a20696e76616c696420616374696f6e60448201526064016101d3565b505061077f6001600055565b50505050565b6002600054036107d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101d3565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906110de565b90506108626001600160a01b038516333086610af3565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906110de565b90508181116109335760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101d3565b61093d8282610fb9565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906110de565b6109c79190611219565b6040516001600160a01b03851660248201526044810182905290915061077f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b2b565b6001600160a01b038216610a535760405162461bcd60e51b81526004016101d390610f5b565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610ac07f00000000000000000000000000000000000000000000000000000000000000008383610c02565b5050565b600154811115610af057600060015482610ade9190610fb9565b9050610ae981610c32565b5060018190555b50565b6040516001600160a01b038085166024830152831660448201526064810182905261077f9085906323b872dd60e01b906084016109f6565b6000610b80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c949092919063ffffffff16565b805190915015610bfd5780806020019051810190610b9e919061122c565b610bfd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101d3565b505050565b6040516001600160a01b038316602482015260448101829052610bfd90849063a9059cbb60e01b906064016109f6565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610af07f0000000000000000000000000000000000000000000000000000000000000000600160981b83610c02565b6060610ca38484600085610cab565b949350505050565b606082471015610d0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101d3565b600080866001600160a01b03168587604051610d289190611255565b60006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5091509150610d7b87838387610d86565b979650505050505050565b60608315610df5578251600003610dee576001600160a01b0385163b610dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101d3565b5081610ca3565b610ca38383815115610e0a5781518083602001fd5b8060405162461bcd60e51b81526004016101d39190611271565b6001600160a01b0381168114610af057600080fd5b600080600080600060808688031215610e5157600080fd5b8535610e5c81610e24565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e8757600080fd5b818801915088601f830112610e9b57600080fd5b813581811115610eaa57600080fd5b8960208260051b8501011115610ebf57600080fd5b9699959850939650602001949392505050565b60008060008060608587031215610ee857600080fd5b843593506020850135610efa81610e24565b9250604085013567ffffffffffffffff80821115610f1757600080fd5b818701915087601f830112610f2b57600080fd5b813581811115610f3a57600080fd5b886020828501011115610f4c57600080fd5b95989497505060200194505050565b60208082526028908201527f4552433230546f6b656e536f757263653a207a65726f20726563697069656e74604082015267206164647265737360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942610fa3565b600081518084526020808501945080840160005b838110156110055781516001600160a01b031687529582019590820190600101610fe0565b509495945050505050565b60005b8381101561102b578181015183820152602001611013565b50506000910152565b6000815180845261104c816020860160208601611010565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526110c1610100840182610fcc565b905060a0840151601f198483030160e085015261093d8282611034565b6000602082840312156110f057600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561112057600080fd5b82356002811061112f57600080fd5b9150602083013567ffffffffffffffff8082111561114c57600080fd5b818501915085601f83011261116057600080fd5b813581811115611172576111726110f7565b604051601f8201601f19908116603f0116810190838211818310171561119a5761119a6110f7565b816040528281528860208487010111156111b357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156111fe57600080fd5b825161120981610e24565b6020939093015192949293505050565b8082018082111561094257610942610fa3565b60006020828403121561123e57600080fd5b8151801515811461124e57600080fd5b9392505050565b60008251611267818460208701611010565b9190910192915050565b60208152600061124e602083018461103456fea2646970667358221220d1633a258f7c4854bc66e195ca6800b787ea1feecd1590e8c7d3a0c7e0e9ef3b64736f6c634300081200334552433230546f6b656e536f757263653a207a65726f2064657374696e617469", } // ERC20TokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go index 2abd86fc0..9a3119a35 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenDestination/NativeTokenDestination.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnAddressBalance\",\"type\":\"uint256\"}],\"name\":\"ReportTotalBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToSource\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_FOR_TRANSFER_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_BURNED_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"reportTotalBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToSource\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea2646970667358221220addb1cdbc8918a5e22f56eda76207d2cd34eb3e904b14b86d918f2be05e938d064736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", + Bin: "0x6101206040527302000000000000000000000000000000000000016080523480156200002a57600080fd5b5060405162001bf138038062001bf18339810160408190526200004d9162000350565b60016000556001600160a01b038416620000d45760405162461bcd60e51b815260206004820152603860248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2054656c60448201527f65706f727465724d657373656e6765722061646472657373000000000000000060648201526084015b60405180910390fd5b6001600160a01b03841661010052826200013a5760405162461bcd60e51b8152602060048201526031602482015260008051602062001bd18339815191526044820152701c98d948189b1bd8dad8da185a5b881251607a1b6064820152608401620000cb565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000399565b8303620002295760405162461bcd60e51b815260206004820152603a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a2063616e6e6f74206260448201527f726964676520776974682073616d6520626c6f636b636861696e0000000000006064820152608401620000cb565b60a08390526001600160a01b0382166200029b5760405162461bcd60e51b8152602060048201526034602482015260008051602062001bd183398151915260448201527f72636520636f6e747261637420616464726573730000000000000000000000006064820152608401620000cb565b6001600160a01b03821660c0526000819003620003215760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000cb565b60e081905260015550620003b3915050565b80516001600160a01b03811681146200034b57600080fd5b919050565b600080600080608085870312156200036757600080fd5b620003728562000333565b935060208501519250620003896040860162000333565b6060959095015193969295505050565b600060208284031215620003ac57600080fd5b5051919050565b60805160a05160c05160e0516101005161178c62000445600039600081816102440152818161035c015281816105fe01528181610638015261084801526000818161021001526103060152600081816101b1015281816103bc01528181610698015261096b01526000818161013c015281816103960152818161067201526108e701526000610bdc015261178c6000f3fe6080604052600436106100e75760003560e01c80638ac7dd201161008a578063ab28523011610059578063ab28523014610297578063c452165e146102ae578063c868efaa146102c6578063d30951261461029757600080fd5b80638ac7dd20146101fe5780639b3e580314610232578063a2309ff814610266578063a2a950171461027c57600080fd5b80633a94fe51116100c65780633a94fe511461015e57806349e3284e146101805780635d93f9af1461019f57806375846562146101eb57600080fd5b8062d872ae146100ec57806318160ddd1461011557806329b7b3fd1461012a575b600080fd5b3480156100f857600080fd5b5061010260015481565b6040519081526020015b60405180910390f35b34801561012157600080fd5b506101026102e6565b34801561013657600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561016a57600080fd5b5061017e61017936600461130a565b610345565b005b34801561018c57600080fd5b506001546040519015815260200161010c565b3480156101ab57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b61017e6101f9366004611376565b610520565b34801561020a57600080fd5b506101027f000000000000000000000000000000000000000000000000000000000000000081565b34801561023e57600080fd5b506101d37f000000000000000000000000000000000000000000000000000000000000000081565b34801561027257600080fd5b5061010260025481565b34801561028857600080fd5b506101d36001600160981b0181565b3480156102a357600080fd5b50610102620186a081565b3480156102ba57600080fd5b506101d3600160981b81565b3480156102d257600080fd5b5061017e6102e13660046113da565b610835565b6000806103006001600160981b0131600160981b31611479565b905060007f00000000000000000000000000000000000000000000000000000000000000006002546103329190611479565b905061033e828261148c565b9250505090565b6000600160981b6001600160a01b031631905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906103fa919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208082018990528251808303820181528284019093529092019161046c91600191606001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161049a91906115d0565b6020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd919061164e565b9050807f4c37b521cdeedd09975d7697ea18c95dc3c46dea1ca09dfcdd2e17f1061915098360405161051191815260200190565b60405180910390a25050505050565b610528610c46565b6001600160a01b0384166105575760405162461bcd60e51b815260040161054e90611667565b60405180910390fd5b600154156105c45760405162461bcd60e51b815260206004820152603460248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604482015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606482015260840161054e565b6000602084013515610623576105ea6105e060208601866116b5565b8560200135610c9f565b90506106236105fc60208601866116b5565b7f000000000000000000000000000000000000000000000000000000000000000083610e09565b6106346001600160981b0134610eee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906106d6919061149f565b8152602001620186a081526020018787808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060405160209384019361074492508d913491016001600160a01b03929092168252602082015260400190565b60408051601f19818403018152908290526107629291602001611555565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161079091906115d0565b6020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d3919061164e565b905080866001600160a01b0316336001600160a01b03167f8adc7b22fb27c91bbad9f38633adae809888623a9aee14c1adec44ee7e7cf2c03460405161081b91815260200190565b60405180910390a4505061082f6001600055565b50505050565b61083d610c46565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e55760405162461bcd60e51b815260206004820152604160248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201527f697a65642054656c65706f727465724d657373656e67657220636f6e747261636064820152601d60fa1b608482015260a40161054e565b7f000000000000000000000000000000000000000000000000000000000000000084146109695760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526b39b7bab931b29031b430b4b760a11b606482015260840161054e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146109fe5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20756e617574686f7260448201526a34bd32b21039b2b73232b960a91b606482015260840161054e565b600080610a0d838501856116d9565b90925090506001600160a01b038216610a385760405162461bcd60e51b815260040161054e90611667565b80600003610a9c5760405162461bcd60e51b815260206004820152602b60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2074726160448201526a6e736665722076616c756560a81b606482015260840161054e565b600154819015610b6157600154821115610b055760015460408051918252600060208301527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600154610af9908361148c565b60006001559050610b61565b8160016000828254610b17919061148c565b90915550506001546040805184815260208101929092527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1505050610c3c565b8060026000828254610b739190611479565b90915550506040518181526001600160a01b038416907fd949ea0e9d5db53492d77f28fd5467fb2f6c4f5b88e3350e3c36729b76e99cf29060200160405180910390a26040516327ad555d60e11b81526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690634f5aaaba90604401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050505050505b61082f6001600055565b600260005403610c985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054e565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061164e565b9050610d236001600160a01b03851633308661100c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061164e565b9050818111610df45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161054e565b610dfe828261148c565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061164e565b610e889190611479565b6040516001600160a01b03851660248201526044810182905290915061082f90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611044565b80471015610f3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8b576040519150601f19603f3d011682016040523d82523d6000602084013e610f90565b606091505b50509050806110075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054e565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261082f9085906323b872dd60e01b90608401610eb7565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111169092919063ffffffff16565b80519091501561100757808060200190518101906110b79190611705565b6110075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161054e565b6060611125848460008561112d565b949350505050565b60608247101561118e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161054e565b600080866001600160a01b031685876040516111aa9190611727565b60006040518083038185875af1925050503d80600081146111e7576040519150601f19603f3d011682016040523d82523d6000602084013e6111ec565b606091505b50915091506111fd87838387611208565b979650505050505050565b60608315611277578251600003611270576001600160a01b0385163b6112705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161054e565b5081611125565b611125838381511561128c5781518083602001fd5b8060405162461bcd60e51b815260040161054e9190611743565b6000604082840312156112b857600080fd5b50919050565b60008083601f8401126112d057600080fd5b50813567ffffffffffffffff8111156112e857600080fd5b6020830191508360208260051b850101111561130357600080fd5b9250929050565b60008060006060848603121561131f57600080fd5b61132985856112a6565b9250604084013567ffffffffffffffff81111561134557600080fd5b611351868287016112be565b9497909650939450505050565b6001600160a01b038116811461137357600080fd5b50565b6000806000806080858703121561138c57600080fd5b84356113978161135e565b93506113a686602087016112a6565b9250606085013567ffffffffffffffff8111156113c257600080fd5b6113ce878288016112be565b95989497509550505050565b600080600080606085870312156113f057600080fd5b8435935060208501356114028161135e565b9250604085013567ffffffffffffffff8082111561141f57600080fd5b818701915087601f83011261143357600080fd5b81358181111561144257600080fd5b88602082850101111561145457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e0357610e03611463565b81810381811115610e0357610e03611463565b6000604082840312156114b157600080fd5b6040516040810181811067ffffffffffffffff821117156114e257634e487b7160e01b600052604160045260246000fd5b60405282356114f08161135e565b81526020928301359281019290925250919050565b60005b83811015611520578181015183820152602001611508565b50506000910152565b60008151808452611541816020860160208601611505565b601f01601f19169290920160200192915050565b60006002841061157557634e487b7160e01b600052602160045260246000fd5b838252604060208301526111256040830184611529565b600081518084526020808501945080840160005b838110156115c55781516001600160a01b0316875295820195908201906001016115a0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261163161010084018261158c565b905060a0840151601f198483030160e0850152610dfe8282611529565b60006020828403121561166057600080fd5b5051919050565b6020808252602e908201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2072656360408201526d697069656e74206164647265737360901b606082015260800190565b6000602082840312156116c757600080fd5b81356116d28161135e565b9392505050565b600080604083850312156116ec57600080fd5b82356116f78161135e565b946020939093013593505050565b60006020828403121561171757600080fd5b815180151581146116d257600080fd5b60008251611739818460208701611505565b9190910192915050565b6020815260006116d2602083018461152956fea264697066735822122007a377cc4d1cb4aea237d7dd45740faa5a4a3296e99e7ec06a1fad3e2175b4b064736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20736f75", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go index 48e2257b8..90528ef3d 100644 --- a/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/CrossChainApplications/NativeTokenBridge/NativeTokenSource/NativeTokenSource.go @@ -38,7 +38,7 @@ type TeleporterFeeInfo struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterMessengerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"nativeTokenDestinationAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferToDestination\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnlockTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_NATIVE_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"destinationBurnedTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenDestinationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"senderBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterMessenger\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"transferToDestination\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea26469706673582212203ba873b675c3df4cf176bb179bb428c81b10e00721fa3204eaf47ad7e0f8ec3b64736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", + Bin: "0x60e06040523480156200001157600080fd5b506040516200173a3803806200173a8339810160408190526200003491620002b3565b60016000556001600160a01b038316620000bb5760405162461bcd60e51b815260206004820152603360248201527f4e6174697665546f6b656e536f757263653a207a65726f2054656c65706f727460448201527f65724d657373656e67657220616464726573730000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660c05281620001205760405162461bcd60e51b815260206004820152603160248201526000805160206200171a8339815191526044820152701a5bdb88189b1bd8dad8da185a5b881251607a1b6064820152608401620000b2565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620002f4565b82036200020f5760405162461bcd60e51b815260206004820152603560248201527f4e6174697665546f6b656e536f757263653a2063616e6e6f742062726964676560448201527f20776974682073616d6520626c6f636b636861696e00000000000000000000006064820152608401620000b2565b60808290526001600160a01b038116620002815760405162461bcd60e51b815260206004820152603460248201526000805160206200171a83398151915260448201527f696f6e20636f6e747261637420616464726573730000000000000000000000006064820152608401620000b2565b6001600160a01b031660a052506200030e9050565b80516001600160a01b0381168114620002ae57600080fd5b919050565b600080600060608486031215620002c957600080fd5b620002d48462000296565b925060208401519150620002eb6040850162000296565b90509250925092565b6000602082840312156200030757600080fd5b5051919050565b60805160a05160c0516113ad6200036d6000396000818160ef015281816102320152818161025b015261044e015260008181610167015281816102bb015261056701526000818160920152818161029501526104e301526113ad6000f3fe60806040526004361061007b5760003560e01c8063b6171f731161004e578063b6171f731461013e578063b8c9091a14610155578063c452165e14610189578063c868efaa146101a157600080fd5b806341d3014d1461008057806355db3e9e146100c75780639b3e5803146100dd578063ad0aee2514610129575b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506100b460015481565b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61013c610137366004610eaa565b6101c1565b005b34801561014a57600080fd5b506100b4620186a081565b34801561016157600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b34801561019557600080fd5b50610111600160981b81565b3480156101ad57600080fd5b5061013c6101bc366004610f49565b61043b565b6101c96106ec565b6001600160a01b0384166101f85760405162461bcd60e51b81526004016101ef90610fc3565b60405180910390fd5b60006020840135156102575761021e610214602086018661100c565b8560200135610745565b9050610257610230602086018661100c565b7f0000000000000000000000000000000000000000000000000000000000000000836108af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663624488506040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001888036038101906102f99190611077565b8152602001620186a08152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250604051602091820191610368918c913491016001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506040518263ffffffff1660e01b81526004016103969190611163565b6020604051808303816000875af11580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d991906111e1565b905080866001600160a01b0316336001600160a01b03167f6cf14fdf618c440df3de7de7dcacf59541a464e55f360cbe73724c12e0c4cf993460405161042191815260200190565b60405180910390a450506104356001600055565b50505050565b6104436106ec565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e15760405162461bcd60e51b815260206004820152603c60248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201527f54656c65706f727465724d657373656e67657220636f6e74726163740000000060648201526084016101ef565b7f000000000000000000000000000000000000000000000000000000000000000084146105655760405162461bcd60e51b815260206004820152602c60248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420646573746960448201526b3730ba34b7b71031b430b4b760a11b60648201526084016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146105f55760405162461bcd60e51b815260206004820152602660248201527f4e6174697665546f6b656e536f757263653a20756e617574686f72697a65642060448201526539b2b73232b960d11b60648201526084016101ef565b600080610604838501856111fa565b9092509050600082600181111561061d5761061d6112a6565b0361064e576000808280602001905181019061063991906112bc565b915091506106478282610994565b50506106e0565b6001826001811115610662576106626112a6565b0361068e5760008180602001905181019061067d91906111e1565b905061068881610a6d565b506106e0565b60405162461bcd60e51b815260206004820152602160248201527f4e6174697665546f6b656e536f757263653a20696e76616c696420616374696f6044820152603760f91b60648201526084016101ef565b50506104356001600055565b60026000540361073e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101ef565b6002600055565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b291906111e1565b90506107c96001600160a01b038516333086610a9c565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083491906111e1565b905081811161089a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016101ef565b6108a48282611300565b925050505b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092491906111e1565b61092e9190611313565b6040516001600160a01b03851660248201526044810182905290915061043590859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ad4565b6001600160a01b0382166109ba5760405162461bcd60e51b81526004016101ef90610fc3565b80471015610a1d5760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e536f757263653a20696e73756666696369656e742060448201526918dbdb1b185d195c985b60b21b60648201526084016101ef565b604080516001600160a01b0384168152602081018390527f55aaef8fd8c07238c3618a93c8a1627194187d3b0952908e58f2ab0f944fb407910160405180910390a1610a698282610bab565b5050565b600154811115610a9957600060015482610a879190611300565b9050610a9281610cc4565b5060018190555b50565b6040516001600160a01b03808516602483015283166044820152606481018290526104359085906323b872dd60e01b9060840161095d565b6000610b29826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d059092919063ffffffff16565b805190915015610ba65780806020019051810190610b479190611326565b610ba65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ef565b505050565b80471015610bfb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016101ef565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c48576040519150601f19603f3d011682016040523d82523d6000602084013e610c4d565b606091505b5050905080610ba65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016101ef565b6040518181527f2cd3fd70cd5a5d6d805e90d22741aa1a84590ace7cf01b244719558d266143829060200160405180910390a1610a99600160981b82610bab565b6060610d148484600085610d1c565b949350505050565b606082471015610d7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ef565b600080866001600160a01b03168587604051610d999190611348565b60006040518083038185875af1925050503d8060008114610dd6576040519150601f19603f3d011682016040523d82523d6000602084013e610ddb565b606091505b5091509150610dec87838387610df7565b979650505050505050565b60608315610e66578251600003610e5f576001600160a01b0385163b610e5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b5081610d14565b610d148383815115610e7b5781518083602001fd5b8060405162461bcd60e51b81526004016101ef9190611364565b6001600160a01b0381168114610a9957600080fd5b6000806000808486036080811215610ec157600080fd5b8535610ecc81610e95565b94506040601f1982011215610ee057600080fd5b50602085019250606085013567ffffffffffffffff80821115610f0257600080fd5b818701915087601f830112610f1657600080fd5b813581811115610f2557600080fd5b8860208260051b8501011115610f3a57600080fd5b95989497505060200194505050565b60008060008060608587031215610f5f57600080fd5b843593506020850135610f7181610e95565b9250604085013567ffffffffffffffff80821115610f8e57600080fd5b818701915087601f830112610fa257600080fd5b813581811115610fb157600080fd5b886020828501011115610f3a57600080fd5b60208082526029908201527f4e6174697665546f6b656e536f757263653a207a65726f20726563697069656e60408201526874206164647265737360b81b606082015260800190565b60006020828403121561101e57600080fd5b813561102981610e95565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561106f5761106f611030565b604052919050565b60006040828403121561108957600080fd5b6040516040810181811067ffffffffffffffff821117156110ac576110ac611030565b60405282356110ba81610e95565b81526020928301359281019290925250919050565b600081518084526020808501945080840160005b838110156111085781516001600160a01b0316875295820195908201906001016110e3565b509495945050505050565b60005b8381101561112e578181015183820152602001611116565b50506000910152565b6000815180845261114f816020860160208601611113565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526111c46101008401826110cf565b905060a0840151601f198483030160e08501526108a48282611137565b6000602082840312156111f357600080fd5b5051919050565b6000806040838503121561120d57600080fd5b82356002811061121c57600080fd5b915060208381013567ffffffffffffffff8082111561123a57600080fd5b818601915086601f83011261124e57600080fd5b81358181111561126057611260611030565b611272601f8201601f19168501611046565b9150808252878482850101111561128857600080fd5b80848401858401376000848284010152508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156112cf57600080fd5b82516112da81610e95565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a9576108a96112ea565b808201808211156108a9576108a96112ea565b60006020828403121561133857600080fd5b8151801515811461102957600080fd5b6000825161135a818460208701611113565b9190910192915050565b602081526000611029602083018461113756fea2646970667358221220b20bfdccff910db5a1a66d2938406ce6d6dfafd9b33cab3303e8c01108955b8564736f6c634300081200334e6174697665546f6b656e536f757263653a207a65726f2064657374696e6174", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go index b43d51ec9..d210a60fb 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashPublisher/BlockHashPublisher.go @@ -32,7 +32,7 @@ var ( // BlockHashPublisherMetaData contains all meta data concerning the BlockHashPublisher contract. var BlockHashPublisherMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"PublishBlockHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"RECEIVE_BLOCK_HASH_REQUIRED_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"}],\"name\":\"publishLatestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea26469706673582212202f81af2513cd6a0f5ca525f61d9eacd8df5335b1bfc6be148a3633f310f2c89b64736f6c63430008120033", + Bin: "0x60a060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152603460248201527f426c6f636b486173685075626c69736865723a207a65726f2074656c65706f7260448201527f7465722072656769737472792061646472657373000000000000000000000000606482015260840160405180910390fd5b6001600160a01b03166080526100f0565b6000602082840312156100d257600080fd5b81516001600160a01b03811681146100e957600080fd5b9392505050565b6080516104be610111600039600081816068015261012701526104be6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318aef19b146100465780631a7f5bec1461006357806382ab2b86146100a2575b600080fd5b610050620249f081565b6040519081526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6100506100b03660046102d3565b6000806100be600143610303565b6040805160208101839052824081830181905282518083038401815260608301938490529281905292935083906001600160a01b0387169088907fe13623d33d18131ce960c33b1282ceac1fe7b5ccfcf7f8c0f6dad32dd61e3bdd9060800160405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a79190610324565b6001600160a01b031663624488506040518060c00160405280898152602001886001600160a01b03168152602001604051806040016040528060006001600160a01b0316815260200160008152508152602001620249f08152602001600067ffffffffffffffff81111561021d5761021d610348565b604051908082528060200260200182016040528015610246578160200160208202803683370190505b508152602001848152506040518263ffffffff1660e01b815260040161026c91906103e8565b6020604051808303816000875af115801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af919061046f565b93505050505b92915050565b6001600160a01b03811681146102d057600080fd5b50565b600080604083850312156102e657600080fd5b8235915060208301356102f8816102bb565b809150509250929050565b818103818111156102b557634e487b7160e01b600052601160045260246000fd5b60006020828403121561033657600080fd5b8151610341816102bb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156103975781516001600160a01b031687529582019590820190600101610372565b509495945050505050565b6000815180845260005b818110156103c8576020818501810151868301820152016103ac565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261044961010084018261035e565b905060a0840151601f198483030160e085015261046682826103a2565b95945050505050565b60006020828403121561048157600080fd5b505191905056fea264697066735822122016a697a976ed1f268a7677c9301ea8fd6a756dc17e861ba39c00e68b2e84186864736f6c63430008120033", } // BlockHashPublisherABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go index c1342f935..8da297675 100644 --- a/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go +++ b/abi-bindings/go/CrossChainApplications/VerifiedBlockHash/BlockHashReceiver/BlockHashReceiver.go @@ -32,7 +32,7 @@ var ( // BlockHashReceiverMetaData contains all meta data concerning the BlockHashReceiver contract. var BlockHashReceiverMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"publisherBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"publisherContractAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"ReceiveBlockHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getLatestBlockInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourcePublisherContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e060405234801561001057600080fd5b50604051610eaf380380610eaf83398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610c5d610252600039600081816101c401526109ac015260008181610143015261092a01526000818160ff015281816104c401526106e00152610c5d6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379a0710c11610097578063c868efaa11610066578063c868efaa1461024e578063d2cc7a7014610261578063f2fde38b14610269578063f3f39ee51461027c57600080fd5b806379a0710c146101bf5780638da5cb5b146101e657806397314297146101f7578063b17810be1461023357600080fd5b80634511243e116100d35780634511243e146101885780635eb995141461019b5780636c4f6ba9146101ae578063715018a6146101b757600080fd5b80631a7f5bec146100fa57806329b7b3fd1461013e5780632b0d8f1814610173575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101657f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610135565b610186610181366004610ada565b610285565b005b610186610196366004610ada565b610387565b6101866101a9366004610afc565b610484565b61016560045481565b610186610498565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610121565b610223610205366004610ada565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001610135565b60035460045460408051928352602083019190915201610135565b61018661025c366004610b15565b6104ac565b600154610165565b610186610277366004610ada565b61065e565b61016560035481565b61028d6106d4565b6001600160a01b0381166102bc5760405162461bcd60e51b81526004016102b390610b9c565b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff161561033b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102b3565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61038f6106d4565b6001600160a01b0381166103b55760405162461bcd60e51b81526004016102b390610b9c565b6001600160a01b03811660009081526020819052604090205460ff1661042f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102b3565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152602081905260409020805460ff19169055565b61048c6106d4565b610495816106dc565b50565b6104a061087c565b6104aa60006108d6565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105379190610bea565b101561059e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102b3565b3360009081526020819052604090205460ff16156106175760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102b3565b610658848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061092892505050565b50505050565b61066661087c565b6001600160a01b0381166106cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b3565b610495816108d6565b6104aa61087c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610bea565b600154909150818311156107d05760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102b3565b8083116108455760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102b3565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146104aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b3565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146109aa5760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610a455760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102b3565b60008082806020019051810190610a5c9190610c03565b91509150600354821115610ab7576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b0381168114610ad557600080fd5b919050565b600060208284031215610aec57600080fd5b610af582610abe565b9392505050565b600060208284031215610b0e57600080fd5b5035919050565b60008060008060608587031215610b2b57600080fd5b84359350610b3b60208601610abe565b9250604085013567ffffffffffffffff80821115610b5857600080fd5b818701915087601f830112610b6c57600080fd5b813581811115610b7b57600080fd5b886020828501011115610b8d57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215610bfc57600080fd5b5051919050565b60008060408385031215610c1657600080fd5b50508051602090910151909290915056fea2646970667358221220195fca89a0134729905bc60e9078d4ce7985601d7b937dd9b72fbed966f73fd064736f6c63430008120033", + Bin: "0x60e060405234801561001057600080fd5b50604051610eaf380380610eaf83398101604081905261002f916101b3565b82806001600160a01b0381166100b15760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f727465722072656769737472792061646472657373000000000000000000606482015260840160405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156100fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011f91906101ef565b6001555061012c33610145565b5060a0919091526001600160a01b031660c05250610208565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b9250602084015191506101e660408501610197565b90509250925092565b60006020828403121561020157600080fd5b5051919050565b60805160a05160c051610c5d610252600039600081816101c401526109ac015260008181610143015261092a01526000818160ff015281816104c401526106e00152610c5d6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806379a0710c11610097578063c868efaa11610066578063c868efaa1461024e578063d2cc7a7014610261578063f2fde38b14610269578063f3f39ee51461027c57600080fd5b806379a0710c146101bf5780638da5cb5b146101e657806397314297146101f7578063b17810be1461023357600080fd5b80634511243e116100d35780634511243e146101885780635eb995141461019b5780636c4f6ba9146101ae578063715018a6146101b757600080fd5b80631a7f5bec146100fa57806329b7b3fd1461013e5780632b0d8f1814610173575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101657f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610135565b610186610181366004610ada565b610285565b005b610186610196366004610ada565b610387565b6101866101a9366004610afc565b610484565b61016560045481565b610186610498565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b0316610121565b610223610205366004610ada565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001610135565b60035460045460408051928352602083019190915201610135565b61018661025c366004610b15565b6104ac565b600154610165565b610186610277366004610ada565b61065e565b61016560035481565b61028d6106d4565b6001600160a01b0381166102bc5760405162461bcd60e51b81526004016102b390610b9c565b60405180910390fd5b6001600160a01b03811660009081526020819052604090205460ff161561033b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102b3565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61038f6106d4565b6001600160a01b0381166103b55760405162461bcd60e51b81526004016102b390610b9c565b6001600160a01b03811660009081526020819052604090205460ff1661042f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102b3565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152602081905260409020805460ff19169055565b61048c6106d4565b610495816106dc565b50565b6104a061087c565b6104aa60006108d6565b565b60015460405163260f846760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634c1f08ce90602401602060405180830381865afa158015610513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105379190610bea565b101561059e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102b3565b3360009081526020819052604090205460ff16156106175760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102b3565b610658848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061092892505050565b50505050565b61066661087c565b6001600160a01b0381166106cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b3565b610495816108d6565b6104aa61087c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610bea565b600154909150818311156107d05760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102b3565b8083116108455760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102b3565b6001839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6002546001600160a01b031633146104aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b3565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146109aa5760405162461bcd60e51b815260206004820152602a60248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015269194818da185a5b88125160b21b60648201526084016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610a455760405162461bcd60e51b815260206004820152603160248201527f426c6f636b4861736852656365697665723a20696e76616c696420736f757263604482015270329031b430b4b710383ab13634b9b432b960791b60648201526084016102b3565b60008082806020019051810190610a5c9190610c03565b91509150600354821115610ab7576003829055600481905560405181815282906001600160a01b0386169087907f0bca78aa82d7575f42e4b4b2fe04765a4b2f3661786403788ce987e065ac590d9060200160405180910390a45b5050505050565b80356001600160a01b0381168114610ad557600080fd5b919050565b600060208284031215610aec57600080fd5b610af582610abe565b9392505050565b600060208284031215610b0e57600080fd5b5035919050565b60008060008060608587031215610b2b57600080fd5b84359350610b3b60208601610abe565b9250604085013567ffffffffffffffff80821115610b5857600080fd5b818701915087601f830112610b6c57600080fd5b813581811115610b7b57600080fd5b886020828501011115610b8d57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215610bfc57600080fd5b5051919050565b60008060408385031215610c1657600080fd5b50508051602090910151909290915056fea2646970667358221220ea80b3fff2aa4eab25154879488d6847897b78c7bfd439a8366aba444c00ed9464736f6c63430008120033", } // BlockHashReceiverABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go index c929d7b50..99788069e 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go @@ -37,7 +37,7 @@ type TeleporterFeeInfo struct { // TeleporterMessage is an auto generated low-level Go binding around an user-defined struct. type TeleporterMessage struct { - MessageID [32]byte + MessageNonce *big.Int SenderAddress common.Address DestinationBlockchainID [32]byte DestinationAddress common.Address @@ -65,8 +65,8 @@ type TeleporterMessageReceipt struct { // TeleporterMessengerMetaData contains all meta data concerning the TeleporterMessenger contract. var TeleporterMessengerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600160008190558055613131806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d127dc9b1161007c578063d127dc9b14610315578063d39b0c171461031e578063e6e67bd51461037e578063e8105ebc146103ba578063ecc70428146103ec578063f5590f38146103f557600080fd5b8063a9a856141461025c578063b120322a1461026f578063b771b3bc146102bb578063c473eef8146102c9578063ccb5f8091461030257600080fd5b80633b215f2c116100ff5780633b215f2c146101c05780634e985c49146101eb57806362448850146101fe578063892bf41214610211578063980a25841461023157600080fd5b806311d433e11461013c57806313e8f4bc14610164578063166a1d8f1461017957806322296c3a1461018c5780632bc8b0bf1461019f575b600080fd5b61014f61014a366004612124565b6103fd565b60405190151581526020015b60405180910390f35b610177610172366004612146565b61042c565b005b610177610187366004612146565b61068f565b61017761019a3660046121b7565b610824565b6101b26101ad3660046121d4565b610919565b60405190815260200161015b565b6101b26101ce366004612124565b600660209081526000928352604080842090915290825290205481565b6101776101f93660046121ed565b610930565b6101b261020c36600461222c565b610b6b565b61022461021f366004612124565b610bc9565b60405161015b9190612266565b6101b261023f366004612124565b600091825260056020908152604080842092845291905290205490565b6101b261026a3660046122ca565b610bf5565b6102a361027d366004612124565b60009182526007602090815260408084209284529190529020546001600160a01b031690565b6040516001600160a01b03909116815260200161015b565b6102a36005600160991b0181565b6101b26102d7366004612362565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610177610310366004612390565b610e0f565b6101b260025481565b61037061032c366004612124565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b60405161015b9291906123b7565b6103a561038c3660046121d4565b6004602052600090815260409020805460019091015482565b6040805192835260208301919091520161015b565b6103cd6103c8366004612124565b6112b4565b604080516001600160a01b03909316835260208301919091520161015b565b6101b260035481565b6101b26112fd565b60008281526007602090815260408083208484529091528120546001600160a01b031615155b90505b92915050565b60018054146104565760405162461bcd60e51b815260040161044d906123de565b60405180910390fd5b6002600155600082815260066020908152604080832084358452909152902054806104935760405162461bcd60e51b815260040161044d90612423565b80826040516020016104a591906126be565b60405160208183030381529060405280519060200120146104d85760405162461bcd60e51b815260040161044d906126d1565b60006104ea60808401606085016121b7565b6001600160a01b03163b1161055e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b606482015260840161044d565b60405182359084907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a3600083815260066020908152604080832085358452825280832083905585916105b99186019086016121b7565b6105c660e086018661271a565b6040516024016105d99493929190612760565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061062161061a60808601606087016121b7565b5a8461130c565b9050806106845760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161044d565b505060018055505050565b6001600054146106b15760405162461bcd60e51b815260040161044d9061278b565b60026000818155838152600560209081526040808320853584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845293015482820152820152805161071c5760405162461bcd60e51b815260040161044d90612423565b60008260405160200161072f91906126be565b60408051601f19818403018152919052825181516020830120919250146107685760405162461bcd60e51b815260040161044d906126d1565b8260000135847f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d10508585602001516040516107a39291906127ce565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906107d5908490600401612853565b6020604051808303816000875af11580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190612866565b50506001600055505050565b3360009081526008602090815260408083206001600160a01b0385168452909152902054806108a65760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b606482015260840161044d565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36109156001600160a01b0383163383611328565b5050565b600081815260046020526040812061042690611390565b6001600054146109525760405162461bcd60e51b815260040161044d9061278b565b6002600055806109bc5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b606482015260840161044d565b6001600160a01b0382166109e25760405162461bcd60e51b815260040161044d9061287f565b6000848152600560209081526040808320868452909152902054610a185760405162461bcd60e51b815260040161044d90612423565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610ab55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e74726163742061646472657373000000000000000000606482015260840161044d565b6000610ac183836113a3565b6000868152600560209081526040808320888452909152812060020180549293508392909190610af29084906128e9565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b8f5760405162461bcd60e51b815260040161044d9061278b565b6002600055610bbe610ba083612af9565b83356000908152600460205260409020610bb99061150b565b61161a565b600160005592915050565b604080518082019091526000808252602082015260008381526004602052604090206104239083611871565b6000600160005414610c195760405162461bcd60e51b815260040161044d9061278b565b60026000908155856001600160401b03811115610c3857610c386128fc565b604051908082528060200260200182016040528015610c7d57816020015b6040805180820190915260008082526020820152815260200190600190039081610c565790505b50905060005b86811015610d7a576000888883818110610c9f57610c9f612b9c565b60008d815260076020908152604080832093820295909501358083529290529290922054919250506001600160a01b031680610d2c5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b606482015260840161044d565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d5c57610d5c612b9c565b6020026020010181905250505080610d7390612bb2565b9050610c83565b506040805160c08101825289815260006020820152610dfe918101610da436899003890189612bcb565b8152602001600081526020018686808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250938552505060408051928352602080840190915290920152508261161a565b600160005598975050505050505050565b6001805414610e305760405162461bcd60e51b815260040161044d906123de565b60026001556001600160a01b038116610ea45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b606482015260840161044d565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ef1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f199190810190612c47565b9150915080610f7c5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161044d565b60208201516001600160a01b03163014610ff35760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161044d565b6000610ffd611936565b9050600083604001518060200190518101906110199190612de4565b9050818160400151146110885760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b606482015260840161044d565b8351815160009182526007602090815260408084209284529190529020546001600160a01b0316156111135760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b606482015260840161044d565b611121338260a001516119b7565b61117f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b606482015260840161044d565b8351600090815260076020908152604080832084518452909152902080546001600160a01b0319166001600160a01b03871617905560e081015151156111cb5783516111cb9082611a2c565b60c08101515160005b818110156112265760008360c0015182815181106111f4576111f4612b9c565b60200260200101519050611215876000015182600001518360200151611b5b565b5061121f81612bb2565b90506111d4565b5084516000908152600460209081526040918290208251808401909352845183526001600160a01b0389169183019190915290611264908290611c2b565b82518651604051339291907f7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c490968559061129e908c908990612ff4565b60405180910390a4505060018055505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000611307611c87565b905090565b60008060008084516020860160008989f19150505b9392505050565b6040516001600160a01b03831660248201526044810182905261138b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d2b565b505050565b8054600182015460009161042691613018565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190612866565b90506114276001600160a01b038516333086611dfd565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114929190612866565b90508181116114f85760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161044d565b6115028282613018565b95945050505050565b60606000611522600561151d85611390565b611e35565b905080600003611571576040805160008082526020820190925290611569565b60408051808201909152600080825260208201528152602001906001900390816115425790505b509392505050565b806001600160401b03811115611589576115896128fc565b6040519080825280602002602001820160405280156115ce57816020015b60408051808201909152600080825260208201528152602001906001900390816115a75790505b50915060005b81811015611613576115e584611e4b565b8382815181106115f7576115f7612b9c565b60200260200101819052508061160c90612bb2565b90506115d4565b5050919050565b600080611625611936565b9050806116445760405162461bcd60e51b815260040161044d9061302b565b600061164e611c87565b90506000604051806101000160405280838152602001336001600160a01b031681526020018760000151815260200187602001516001600160a01b0316815260200187606001518152602001876080015181526020018681526020018760a0015181525090506000816040516020016116c79190613074565b60405160208183030381529060405290506003600081546116e790612bb2565b9091555060408701516020015160009015611741576040880151516001600160a01b03166117275760405162461bcd60e51b815260040161044d9061287f565b6040880151805160209091015161173e91906113a3565b90505b60408051808201825289820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528d516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b031916919095161790935591015160029091015589519151909186917f7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050906117ee9088908690613087565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb90611820908690600401612853565b6020604051808303816000875af115801561183f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118639190612866565b509398975050505050505050565b604080518082019091526000808252602082015261188e83611390565b82106118e65760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b606482015260840161044d565b8260020160008385600001546118fc91906128e9565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b600254600090806119b2576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119aa9190612866565b600281905590505b919050565b600081516000036119ca57506001610426565b60005b8251811015611a2257836001600160a01b03168382815181106119f2576119f2612b9c565b60200260200101516001600160a01b031603611a12576001915050610426565b611a1b81612bb2565b90506119cd565b5060009392505050565b80608001515a1015611a8e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b606482015260840161044d565b80606001516001600160a01b03163b600003611aae576109158282611f16565b602081015160e0820151604051600092611acc92869260240161309a565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b1191908461130c565b905080611b2857611b228484611f16565b50505050565b825160405185907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a350505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611bb55750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c209084906128e9565b909155505050505050565b6001820180548291600285019160009182611c4583612bb2565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60025460009080611caa5760405162461bcd60e51b815260040161044d9061302b565b60035460408051306020820152908101839052606081019190915260029060800160408051601f1981840301815290829052611ce5916130c4565b602060405180830381855afa158015611d02573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d259190612866565b91505090565b6000611d80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f949092919063ffffffff16565b80519091501561138b5780806020019051810190611d9e91906130e0565b61138b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044d565b6040516001600160a01b0380851660248301528316604482015260648101829052611b229085906323b872dd60e01b90608401611354565b6000818310611e445781610423565b5090919050565b604080518082019091526000808252602082015281546001830154819003611eb55760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d70747920717565756500000000000000604482015260640161044d565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f0e9082906128e9565b909255919050565b80604051602001611f279190613074565b60408051601f198184030181528282528051602091820120600086815260068352838120865182529092529190205581519083907f9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d690611f88908590613074565b60405180910390a35050565b6060611fa38484600085611fab565b949350505050565b60608247101561200c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161044d565b600080866001600160a01b0316858760405161202891906130c4565b60006040518083038185875af1925050503d8060008114612065576040519150601f19603f3d011682016040523d82523d6000602084013e61206a565b606091505b509150915061207b87838387612086565b979650505050505050565b606083156120f55782516000036120ee576001600160a01b0385163b6120ee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044d565b5081611fa3565b611fa3838381511561210a5781518083602001fd5b8060405162461bcd60e51b815260040161044d9190612853565b6000806040838503121561213757600080fd5b50508035926020909101359150565b6000806040838503121561215957600080fd5b8235915060208301356001600160401b0381111561217657600080fd5b8301610100818603121561218957600080fd5b809150509250929050565b6001600160a01b03811681146121a957600080fd5b50565b80356119b281612194565b6000602082840312156121c957600080fd5b813561132181612194565b6000602082840312156121e657600080fd5b5035919050565b6000806000806080858703121561220357600080fd5b8435935060208501359250604085013561221c81612194565b9396929550929360600135925050565b60006020828403121561223e57600080fd5b81356001600160401b0381111561225457600080fd5b820160e0818503121561132157600080fd5b815181526020808301516001600160a01b03169082015260408101610426565b60008083601f84011261229857600080fd5b5081356001600160401b038111156122af57600080fd5b6020830191508360208260051b85010111156112f657600080fd5b60008060008060008086880360a08112156122e457600080fd5b8735965060208801356001600160401b038082111561230257600080fd5b61230e8b838c01612286565b90985096508691506040603f198401121561232857600080fd5b60408a01955060808a013592508083111561234257600080fd5b505061235089828a01612286565b979a9699509497509295939492505050565b6000806040838503121561237557600080fd5b823561238081612194565b9150602083013561218981612194565b600080604083850312156123a357600080fd5b823563ffffffff8116811461238057600080fd5b82815260608101611321602083018480516001600160a01b03168252602090810151910152565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e1984360301811261248057600080fd5b83016020810192503590506001600160401b0381111561249f57600080fd5b8060051b36038213156112f657600080fd5b8183526000602080850194508260005b858110156124ef5781356124d481612194565b6001600160a01b0316875295820195908201906001016124c1565b509495945050505050565b6000808335601e1984360301811261251157600080fd5b83016020810192503590506001600160401b0381111561253057600080fd5b8060061b36038213156112f657600080fd5b8183526000602080850194508260005b858110156124ef57813587528282013561256b81612194565b6001600160a01b0316878401526040968701969190910190600101612552565b6000808335601e198436030181126125a257600080fd5b83016020810192503590506001600160401b038111156125c157600080fd5b8036038213156112f657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600061010082358452602083013561261081612194565b6001600160a01b0316602085015260408381013590850152612634606084016121ac565b6001600160a01b031660608501526080838101359085015261265960a0840184612469565b8260a087015261266c83870182846124b1565b9250505061267d60c08401846124fa565b85830360c0870152612690838284612542565b925050506126a160e084018461258b565b85830360e08701526126b48382846125d0565b9695505050505050565b60208152600061042360208301846125f9565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b6000808335601e1984360301811261273157600080fd5b8301803591506001600160401b0382111561274b57600080fd5b6020019150368190038213156112f657600080fd5b8481526001600160a01b03841660208201526060604082018190526000906126b490830184866125d0565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b6060815260006127e160608301856125f9565b9050611321602083018480516001600160a01b03168252602090810151910152565b60005b8381101561281e578181015183820152602001612806565b50506000910152565b6000815180845261283f816020860160208601612803565b601f01601f19169290920160200192915050565b6020815260006104236020830184612827565b60006020828403121561287857600080fd5b5051919050565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610426576104266128d3565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612934576129346128fc565b60405290565b60405160c081016001600160401b0381118282101715612934576129346128fc565b60405161010081016001600160401b0381118282101715612934576129346128fc565b604051601f8201601f191681016001600160401b03811182821017156129a7576129a76128fc565b604052919050565b6000604082840312156129c157600080fd5b6129c9612912565b905081356129d681612194565b808252506020820135602082015292915050565b60006001600160401b03821115612a0357612a036128fc565b5060051b60200190565b600082601f830112612a1e57600080fd5b81356020612a33612a2e836129ea565b61297f565b82815260059290921b84018101918181019086841115612a5257600080fd5b8286015b84811015612a76578035612a6981612194565b8352918301918301612a56565b509695505050505050565b60006001600160401b03821115612a9a57612a9a6128fc565b50601f01601f191660200190565b600082601f830112612ab957600080fd5b8135612ac7612a2e82612a81565b818152846020838601011115612adc57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b0b57600080fd5b612b1361293a565b82358152612b23602084016121ac565b6020820152612b3536604085016129af565b60408201526080830135606082015260a08301356001600160401b0380821115612b5e57600080fd5b612b6a36838701612a0d565b608084015260c0850135915080821115612b8357600080fd5b50612b9036828601612aa8565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612bc457612bc46128d3565b5060010190565b600060408284031215612bdd57600080fd5b61042383836129af565b80516119b281612194565b600082601f830112612c0357600080fd5b8151612c11612a2e82612a81565b818152846020838601011115612c2657600080fd5b611fa3826020830160208701612803565b805180151581146119b257600080fd5b60008060408385031215612c5a57600080fd5b82516001600160401b0380821115612c7157600080fd5b9084019060608287031215612c8557600080fd5b604051606081018181108382111715612ca057612ca06128fc565b604052825181526020830151612cb581612194565b6020820152604083015182811115612ccc57600080fd5b612cd888828601612bf2565b6040830152509350612cef91505060208401612c37565b90509250929050565b600082601f830112612d0957600080fd5b81516020612d19612a2e836129ea565b82815260059290921b84018101918181019086841115612d3857600080fd5b8286015b84811015612a76578051612d4f81612194565b8352918301918301612d3c565b600082601f830112612d6d57600080fd5b81516020612d7d612a2e836129ea565b82815260069290921b84018101918181019086841115612d9c57600080fd5b8286015b84811015612a765760408189031215612db95760008081fd5b612dc1612912565b8151815284820151612dd281612194565b81860152835291830191604001612da0565b600060208284031215612df657600080fd5b81516001600160401b0380821115612e0d57600080fd5b908301906101008286031215612e2257600080fd5b612e2a61295c565b82518152612e3a60208401612be7565b602082015260408301516040820152612e5560608401612be7565b60608201526080830151608082015260a083015182811115612e7657600080fd5b612e8287828601612cf8565b60a08301525060c083015182811115612e9a57600080fd5b612ea687828601612d5c565b60c08301525060e083015182811115612ebe57600080fd5b612eca87828601612bf2565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156124ef5781516001600160a01b031687529582019590820190600101612eed565b600081518084526020808501945080840160005b838110156124ef57612f4c878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f26565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612f9e60608601826001600160a01b03169052565b506080830151608085015260a08301518160a0860152612fc082860182612ed9565b91505060c083015184820360c0860152612fda8282612f12565b91505060e083015184820360e08601526115028282612827565b6001600160a01b0383168152604060208201819052600090611fa390830184612f5f565b81810381811115610426576104266128d3565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b6020815260006104236020830184612f5f565b6060815260006127e16060830185612f5f565b8381526001600160a01b038316602082015260606040820181905260009061150290830184612827565b600082516130d6818460208701612803565b9190910192915050565b6000602082840312156130f257600080fd5b61042382612c3756fea26469706673582212205fe73e4bf635ca4fec729ac1d334a3e2bde354ea55532c6e1340fd12e5190cdb64736f6c63430008120033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50600160008190558055613126806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d39b0c171161007c578063d39b0c17146102e5578063e6e67bd514610345578063e8105ebc14610381578063ebc3b1ba146103b3578063ecc70428146103d6578063f5590f38146103df57600080fd5b8063a9a856141461026f578063b771b3bc14610282578063c473eef814610290578063ccb5f809146102c9578063d127dc9b146102dc57600080fd5b80634e985c49116100ff5780634e985c49146101de57806362448850146101f1578063860a3b0614610204578063892bf41214610224578063980a25841461024457600080fd5b80630ecc142e1461013c57806322296c3a146101515780632bc8b0bf146101645780632e27c2231461018a57806340e19cee146101cb575b600080fd5b61014f61014a366004612119565b6103e7565b005b61014f61015f36600461218a565b61059b565b6101776101723660046121a7565b610690565b6040519081526020015b60405180910390f35b6101b36101983660046121a7565b6000908152600760205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610181565b61014f6101d9366004612119565b6106ad565b61014f6101ec3660046121c0565b610902565b6101776101ff3660046121ff565b610b3d565b6101776102123660046121a7565b60066020526000908152604090205481565b610237610232366004612239565b610b9b565b604051610181919061225b565b610177610252366004612239565b600091825260056020908152604080842092845291905290205490565b61017761027d3660046122bf565b610bce565b6101b36005600160991b0181565b61017761029e366004612357565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61014f6102d7366004612385565b610dde565b61017760025481565b6103376102f3366004612239565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b6040516101819291906123ac565b61036c6103533660046121a7565b6004602052600090815260409020805460019091015482565b60408051928352602083019190915201610181565b61039461038f366004612239565b611278565b604080516001600160a01b039093168352602083019190915201610181565b6103c66103c13660046121a7565b6112c1565b6040519015158152602001610181565b61017760035481565b6101776112e0565b6001600054146104125760405162461bcd60e51b8152600401610409906123d3565b60405180910390fd5b6002600081815590546104269083356112eb565b60008481526005602090815260408083208484528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051919250906104965760405162461bcd60e51b815260040161040990612416565b6000836040516020016104a991906126b1565b60408051601f19818403018152919052825181516020830120919250146104e25760405162461bcd60e51b8152600401610409906126c4565b82857f5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e186856020015160405161051992919061270d565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061054b908490600401612792565b6020604051808303816000875af115801561056a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058e91906127a5565b5050600160005550505050565b3360009081526008602090815260408083206001600160a01b03851684529091529020548061061d5760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b6064820152608401610409565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a361068c6001600160a01b0383163383611365565b5050565b60008181526004602052604081206106a7906113cd565b92915050565b60018054146106ce5760405162461bcd60e51b8152600401610409906127be565b600260015560006106e08383356112eb565b6000818152600660205260409020549091508061070f5760405162461bcd60e51b815260040161040990612416565b808360405160200161072191906126b1565b60405160208183030381529060405280519060200120146107545760405162461bcd60e51b8152600401610409906126c4565b6000610766608085016060860161218a565b6001600160a01b03163b116107da5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b6064820152608401610409565b604051829085907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a36000828152600660209081526040808320839055869161082b91870190870161218a565b61083860e0870187612803565b60405160240161084b9493929190612849565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061089361088c608087016060880161218a565b5a846113e0565b9050806108f65760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b6064820152608401610409565b50506001805550505050565b6001600054146109245760405162461bcd60e51b8152600401610409906123d3565b60026000558061098e5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b6064820152608401610409565b6001600160a01b0382166109b45760405162461bcd60e51b815260040161040990612874565b60008481526005602090815260408083208684529091529020546109ea5760405162461bcd60e51b815260040161040990612416565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610a875760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e747261637420616464726573730000000000000000006064820152608401610409565b6000610a9383836113fa565b6000868152600560209081526040808320888452909152812060020180549293508392909190610ac49084906128de565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b615760405162461bcd60e51b8152600401610409906123d3565b6002600055610b90610b7283612aee565b83356000908152600460205260409020610b8b90611562565b611671565b600160005592915050565b60408051808201909152600080825260208201526000838152600460205260409020610bc790836118cc565b9392505050565b6000600160005414610bf25760405162461bcd60e51b8152600401610409906123d3565b60026000908155856001600160401b03811115610c1157610c116128f1565b604051908082528060200260200182016040528015610c5657816020015b6040805180820190915260008082526020820152815260200190600190039081610c2f5790505b50905060005b86811015610d49576000888883818110610c7857610c78612b91565b6020908102929092013560008181526007909352604090922054919250506001600160a01b031680610cfb5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b6064820152608401610409565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d2b57610d2b612b91565b6020026020010181905250505080610d4290612ba7565b9050610c5c565b506040805160c08101825289815260006020820152610dcd918101610d7336899003890189612bc0565b81526020016000815260200186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050604080519283526020808401909152909201525082611671565b600160005598975050505050505050565b6001805414610dff5760405162461bcd60e51b8152600401610409906127be565b60026001556001600160a01b038116610e735760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b6064820152608401610409565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ec0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ee89190810190612c3c565b9150915080610f4b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b6064820152608401610409565b60208201516001600160a01b03163014610fc25760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b6064820152608401610409565b60008260400151806020019051810190610fdc9190612dd9565b90506000610fe8611991565b9050808260400151146110575760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b6064820152608401610409565b83518251600091611067916112eb565b6000818152600760205260409020549091506001600160a01b0316156110e65760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b6064820152608401610409565b6110f4338460a00151611a12565b6111525760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b6064820152608401610409565b600081815260076020526040902080546001600160a01b0319166001600160a01b03881617905560e08301515115611191578451611191908285611a87565b60c08301515160005b818110156111ec5760008560c0015182815181106111ba576111ba612b91565b602002602001015190506111db886000015182600001518360200151611bba565b506111e581612ba7565b905061119a565b50855160009081526004602090815260409182902082518084019093528483526001600160a01b038a169183019190915290611229908290611c8a565b8651604051339185917fcbccffab32a19dfcbd50a8f0413ee54e6b23c42c0cd8dfdecdcaf9f99fc7d27090611261908d908b90612fe9565b60405180910390a450506001805550505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000818152600760205260408120546001600160a01b031615156106a7565b600080610bc7611ce6565b604080513060208201529081018390526060810182905260009060029060800160408051601f19818403018152908290526113259161300d565b602060405180830381855afa158015611342573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610bc791906127a5565b6040516001600160a01b0383166024820152604481018290526113c890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d23565b505050565b805460018201546000916106a791613029565b60008060008084516020860160008989f195945050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146791906127a5565b905061147e6001600160a01b038516333086611df5565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156114c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e991906127a5565b905081811161154f5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610409565b6115598282613029565b95945050505050565b606060006115796005611574856113cd565b611e33565b9050806000036115c85760408051600080825260208201909252906115c0565b60408051808201909152600080825260208201528152602001906001900390816115995790505b509392505050565b806001600160401b038111156115e0576115e06128f1565b60405190808252806020026020018201604052801561162557816020015b60408051808201909152600080825260208201528152602001906001900390816115fe5790505b50915060005b8181101561166a5761163c84611e49565b83828151811061164e5761164e612b91565b60200260200101819052508061166390612ba7565b905061162b565b5050919050565b60008061167c611991565b90508061169b5760405162461bcd60e51b81526004016104099061303c565b6000806116a6611ce6565b915091506000604051806101000160405280848152602001336001600160a01b031681526020018860000151815260200188602001516001600160a01b0316815260200188606001518152602001886080015181526020018781526020018860a0015181525090506000816040516020016117219190613085565b604051602081830303815290604052905060036000815461174190612ba7565b909155506040880151602001516000901561179b576040890151516001600160a01b03166117815760405162461bcd60e51b815260040161040990612874565b6040890151805160209091015161179891906113fa565b90505b6040805180820182528a820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528e516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b03191691909516179093559101516002909101558a519151909186917f5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e1906118489088908690613098565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061187a908690600401612792565b6020604051808303816000875af1158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bd91906127a5565b50939998505050505050505050565b60408051808201909152600080825260208201526118e9836113cd565b82106119415760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b6064820152608401610409565b82600201600083856000015461195791906128de565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60025460009080611a0d576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0591906127a5565b600281905590505b919050565b60008151600003611a25575060016106a7565b60005b8251811015611a7d57836001600160a01b0316838281518110611a4d57611a4d612b91565b60200260200101516001600160a01b031603611a6d5760019150506106a7565b611a7681612ba7565b9050611a28565b5060009392505050565b80608001515a1015611ae95760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b6064820152608401610409565b80606001516001600160a01b03163b600003611b0a576113c8838383611f14565b602081015160e0820151604051600092611b289287926024016130ab565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b6d9190846113e0565b905080611b8657611b7f858585611f14565b5050505050565b604051849086907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a35050505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c145750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c7f9084906128de565b909155505050505050565b6001820180548291600285019160009182611ca483612ba7565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b600254600354600091829181611d0e5760405162461bcd60e51b81526004016104099061303c565b80611d1983836112eb565b9350935050509091565b6000611d78826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f899092919063ffffffff16565b8051909150156113c85780806020019051810190611d9691906130d5565b6113c85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610409565b6040516001600160a01b0380851660248301528316604482015260648101829052611e2d9085906323b872dd60e01b90608401611391565b50505050565b6000818310611e425781610bc7565b5090919050565b604080518082019091526000808252602082015281546001830154819003611eb35760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d707479207175657565000000000000006044820152606401610409565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f0c9082906128de565b909255919050565b80604051602001611f259190613085565b60408051601f1981840301815282825280516020918201206000868152600690925291902055829084907f080c35109e3a4562b6c55ca3fa4600962ad174e7a3aaf7b7ab558a25382b446590611f7c908590613085565b60405180910390a3505050565b6060611f988484600085611fa0565b949350505050565b6060824710156120015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610409565b600080866001600160a01b0316858760405161201d919061300d565b60006040518083038185875af1925050503d806000811461205a576040519150601f19603f3d011682016040523d82523d6000602084013e61205f565b606091505b50915091506120708783838761207b565b979650505050505050565b606083156120ea5782516000036120e3576001600160a01b0385163b6120e35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610409565b5081611f98565b611f9883838151156120ff5781518083602001fd5b8060405162461bcd60e51b81526004016104099190612792565b6000806040838503121561212c57600080fd5b8235915060208301356001600160401b0381111561214957600080fd5b8301610100818603121561215c57600080fd5b809150509250929050565b6001600160a01b038116811461217c57600080fd5b50565b8035611a0d81612167565b60006020828403121561219c57600080fd5b8135610bc781612167565b6000602082840312156121b957600080fd5b5035919050565b600080600080608085870312156121d657600080fd5b843593506020850135925060408501356121ef81612167565b9396929550929360600135925050565b60006020828403121561221157600080fd5b81356001600160401b0381111561222757600080fd5b820160e08185031215610bc757600080fd5b6000806040838503121561224c57600080fd5b50508035926020909101359150565b815181526020808301516001600160a01b031690820152604081016106a7565b60008083601f84011261228d57600080fd5b5081356001600160401b038111156122a457600080fd5b6020830191508360208260051b85010111156112ba57600080fd5b60008060008060008086880360a08112156122d957600080fd5b8735965060208801356001600160401b03808211156122f757600080fd5b6123038b838c0161227b565b90985096508691506040603f198401121561231d57600080fd5b60408a01955060808a013592508083111561233757600080fd5b505061234589828a0161227b565b979a9699509497509295939492505050565b6000806040838503121561236a57600080fd5b823561237581612167565b9150602083013561215c81612167565b6000806040838503121561239857600080fd5b823563ffffffff8116811461237557600080fd5b82815260608101610bc7602083018480516001600160a01b03168252602090810151910152565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e1984360301811261247357600080fd5b83016020810192503590506001600160401b0381111561249257600080fd5b8060051b36038213156112ba57600080fd5b8183526000602080850194508260005b858110156124e25781356124c781612167565b6001600160a01b0316875295820195908201906001016124b4565b509495945050505050565b6000808335601e1984360301811261250457600080fd5b83016020810192503590506001600160401b0381111561252357600080fd5b8060061b36038213156112ba57600080fd5b8183526000602080850194508260005b858110156124e257813587528282013561255e81612167565b6001600160a01b0316878401526040968701969190910190600101612545565b6000808335601e1984360301811261259557600080fd5b83016020810192503590506001600160401b038111156125b457600080fd5b8036038213156112ba57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600061010082358452602083013561260381612167565b6001600160a01b03166020850152604083810135908501526126276060840161217f565b6001600160a01b031660608501526080838101359085015261264c60a084018461245c565b8260a087015261265f83870182846124a4565b9250505061267060c08401846124ed565b85830360c0870152612683838284612535565b9250505061269460e084018461257e565b85830360e08701526126a78382846125c3565b9695505050505050565b602081526000610bc760208301846125ec565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b60608152600061272060608301856125ec565b9050610bc7602083018480516001600160a01b03168252602090810151910152565b60005b8381101561275d578181015183820152602001612745565b50506000910152565b6000815180845261277e816020860160208601612742565b601f01601f19169290920160200192915050565b602081526000610bc76020830184612766565b6000602082840312156127b757600080fd5b5051919050565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b6000808335601e1984360301811261281a57600080fd5b8301803591506001600160401b0382111561283457600080fd5b6020019150368190038213156112ba57600080fd5b8481526001600160a01b03841660208201526060604082018190526000906126a790830184866125c3565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106a7576106a76128c8565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612929576129296128f1565b60405290565b60405160c081016001600160401b0381118282101715612929576129296128f1565b60405161010081016001600160401b0381118282101715612929576129296128f1565b604051601f8201601f191681016001600160401b038111828210171561299c5761299c6128f1565b604052919050565b6000604082840312156129b657600080fd5b6129be612907565b905081356129cb81612167565b808252506020820135602082015292915050565b60006001600160401b038211156129f8576129f86128f1565b5060051b60200190565b600082601f830112612a1357600080fd5b81356020612a28612a23836129df565b612974565b82815260059290921b84018101918181019086841115612a4757600080fd5b8286015b84811015612a6b578035612a5e81612167565b8352918301918301612a4b565b509695505050505050565b60006001600160401b03821115612a8f57612a8f6128f1565b50601f01601f191660200190565b600082601f830112612aae57600080fd5b8135612abc612a2382612a76565b818152846020838601011115612ad157600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b0057600080fd5b612b0861292f565b82358152612b186020840161217f565b6020820152612b2a36604085016129a4565b60408201526080830135606082015260a08301356001600160401b0380821115612b5357600080fd5b612b5f36838701612a02565b608084015260c0850135915080821115612b7857600080fd5b50612b8536828601612a9d565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612bb957612bb96128c8565b5060010190565b600060408284031215612bd257600080fd5b610bc783836129a4565b8051611a0d81612167565b600082601f830112612bf857600080fd5b8151612c06612a2382612a76565b818152846020838601011115612c1b57600080fd5b611f98826020830160208701612742565b80518015158114611a0d57600080fd5b60008060408385031215612c4f57600080fd5b82516001600160401b0380821115612c6657600080fd5b9084019060608287031215612c7a57600080fd5b604051606081018181108382111715612c9557612c956128f1565b604052825181526020830151612caa81612167565b6020820152604083015182811115612cc157600080fd5b612ccd88828601612be7565b6040830152509350612ce491505060208401612c2c565b90509250929050565b600082601f830112612cfe57600080fd5b81516020612d0e612a23836129df565b82815260059290921b84018101918181019086841115612d2d57600080fd5b8286015b84811015612a6b578051612d4481612167565b8352918301918301612d31565b600082601f830112612d6257600080fd5b81516020612d72612a23836129df565b82815260069290921b84018101918181019086841115612d9157600080fd5b8286015b84811015612a6b5760408189031215612dae5760008081fd5b612db6612907565b8151815284820151612dc781612167565b81860152835291830191604001612d95565b600060208284031215612deb57600080fd5b81516001600160401b0380821115612e0257600080fd5b908301906101008286031215612e1757600080fd5b612e1f612951565b82518152612e2f60208401612bdc565b602082015260408301516040820152612e4a60608401612bdc565b60608201526080830151608082015260a083015182811115612e6b57600080fd5b612e7787828601612ced565b60a08301525060c083015182811115612e8f57600080fd5b612e9b87828601612d51565b60c08301525060e083015182811115612eb357600080fd5b612ebf87828601612be7565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156124e25781516001600160a01b031687529582019590820190600101612ee2565b600081518084526020808501945080840160005b838110156124e257612f41878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f1b565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612f9360608601826001600160a01b03169052565b506080830151608085015260a08301518160a0860152612fb582860182612ece565b91505060c083015184820360c0860152612fcf8282612f07565b91505060e083015184820360e08601526115598282612766565b6001600160a01b0383168152604060208201819052600090611f9890830184612f54565b6000825161301f818460208701612742565b9190910192915050565b818103818111156106a7576106a76128c8565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b602081526000610bc76020830184612f54565b6060815260006127206060830185612f54565b8381526001600160a01b038316602082015260606040820181905260009061155990830184612766565b6000602082840312156130e757600080fd5b610bc782612c2c56fea26469706673582212204c90059a8738682272ee7bda49ec1e62cbfb80940f6076e88b3c33c9beab35a164736f6c63430008120033", } // TeleporterMessengerABI is the input ABI used to generate the binding from. @@ -485,12 +485,12 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetReceiptQueueSiz return _TeleporterMessenger.Contract.GetReceiptQueueSize(&_TeleporterMessenger.CallOpts, originBlockchainID) } -// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0xb120322a. +// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0x2e27c223. // -// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, bytes32 messageID) view returns(address) -func (_TeleporterMessenger *TeleporterMessengerCaller) GetRelayerRewardAddress(opts *bind.CallOpts, originBlockchainID [32]byte, messageID [32]byte) (common.Address, error) { +// Solidity: function getRelayerRewardAddress(bytes32 messageID) view returns(address) +func (_TeleporterMessenger *TeleporterMessengerCaller) GetRelayerRewardAddress(opts *bind.CallOpts, messageID [32]byte) (common.Address, error) { var out []interface{} - err := _TeleporterMessenger.contract.Call(opts, &out, "getRelayerRewardAddress", originBlockchainID, messageID) + err := _TeleporterMessenger.contract.Call(opts, &out, "getRelayerRewardAddress", messageID) if err != nil { return *new(common.Address), err @@ -502,18 +502,18 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) GetRelayerRewardAddress(o } -// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0xb120322a. +// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0x2e27c223. // -// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, bytes32 messageID) view returns(address) -func (_TeleporterMessenger *TeleporterMessengerSession) GetRelayerRewardAddress(originBlockchainID [32]byte, messageID [32]byte) (common.Address, error) { - return _TeleporterMessenger.Contract.GetRelayerRewardAddress(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) +// Solidity: function getRelayerRewardAddress(bytes32 messageID) view returns(address) +func (_TeleporterMessenger *TeleporterMessengerSession) GetRelayerRewardAddress(messageID [32]byte) (common.Address, error) { + return _TeleporterMessenger.Contract.GetRelayerRewardAddress(&_TeleporterMessenger.CallOpts, messageID) } -// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0xb120322a. +// GetRelayerRewardAddress is a free data retrieval call binding the contract method 0x2e27c223. // -// Solidity: function getRelayerRewardAddress(bytes32 originBlockchainID, bytes32 messageID) view returns(address) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetRelayerRewardAddress(originBlockchainID [32]byte, messageID [32]byte) (common.Address, error) { - return _TeleporterMessenger.Contract.GetRelayerRewardAddress(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) +// Solidity: function getRelayerRewardAddress(bytes32 messageID) view returns(address) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) GetRelayerRewardAddress(messageID [32]byte) (common.Address, error) { + return _TeleporterMessenger.Contract.GetRelayerRewardAddress(&_TeleporterMessenger.CallOpts, messageID) } // MessageNonce is a free data retrieval call binding the contract method 0xecc70428. @@ -547,12 +547,12 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) MessageNonce() (*b return _TeleporterMessenger.Contract.MessageNonce(&_TeleporterMessenger.CallOpts) } -// MessageReceived is a free data retrieval call binding the contract method 0x11d433e1. +// MessageReceived is a free data retrieval call binding the contract method 0xebc3b1ba. // -// Solidity: function messageReceived(bytes32 originBlockchainID, bytes32 messageID) view returns(bool) -func (_TeleporterMessenger *TeleporterMessengerCaller) MessageReceived(opts *bind.CallOpts, originBlockchainID [32]byte, messageID [32]byte) (bool, error) { +// Solidity: function messageReceived(bytes32 messageID) view returns(bool) +func (_TeleporterMessenger *TeleporterMessengerCaller) MessageReceived(opts *bind.CallOpts, messageID [32]byte) (bool, error) { var out []interface{} - err := _TeleporterMessenger.contract.Call(opts, &out, "messageReceived", originBlockchainID, messageID) + err := _TeleporterMessenger.contract.Call(opts, &out, "messageReceived", messageID) if err != nil { return *new(bool), err @@ -564,18 +564,18 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) MessageReceived(opts *bin } -// MessageReceived is a free data retrieval call binding the contract method 0x11d433e1. +// MessageReceived is a free data retrieval call binding the contract method 0xebc3b1ba. // -// Solidity: function messageReceived(bytes32 originBlockchainID, bytes32 messageID) view returns(bool) -func (_TeleporterMessenger *TeleporterMessengerSession) MessageReceived(originBlockchainID [32]byte, messageID [32]byte) (bool, error) { - return _TeleporterMessenger.Contract.MessageReceived(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) +// Solidity: function messageReceived(bytes32 messageID) view returns(bool) +func (_TeleporterMessenger *TeleporterMessengerSession) MessageReceived(messageID [32]byte) (bool, error) { + return _TeleporterMessenger.Contract.MessageReceived(&_TeleporterMessenger.CallOpts, messageID) } -// MessageReceived is a free data retrieval call binding the contract method 0x11d433e1. +// MessageReceived is a free data retrieval call binding the contract method 0xebc3b1ba. // -// Solidity: function messageReceived(bytes32 originBlockchainID, bytes32 messageID) view returns(bool) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) MessageReceived(originBlockchainID [32]byte, messageID [32]byte) (bool, error) { - return _TeleporterMessenger.Contract.MessageReceived(&_TeleporterMessenger.CallOpts, originBlockchainID, messageID) +// Solidity: function messageReceived(bytes32 messageID) view returns(bool) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) MessageReceived(messageID [32]byte) (bool, error) { + return _TeleporterMessenger.Contract.MessageReceived(&_TeleporterMessenger.CallOpts, messageID) } // ReceiptQueues is a free data retrieval call binding the contract method 0xe6e67bd5. @@ -623,12 +623,12 @@ func (_TeleporterMessenger *TeleporterMessengerCallerSession) ReceiptQueues(sour return _TeleporterMessenger.Contract.ReceiptQueues(&_TeleporterMessenger.CallOpts, sourceBlockchainID) } -// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x3b215f2c. +// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x860a3b06. // -// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, bytes32 messageID) view returns(bytes32 messageHash) -func (_TeleporterMessenger *TeleporterMessengerCaller) ReceivedFailedMessageHashes(opts *bind.CallOpts, sourceBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { +// Solidity: function receivedFailedMessageHashes(bytes32 messageID) view returns(bytes32 messageHash) +func (_TeleporterMessenger *TeleporterMessengerCaller) ReceivedFailedMessageHashes(opts *bind.CallOpts, messageID [32]byte) ([32]byte, error) { var out []interface{} - err := _TeleporterMessenger.contract.Call(opts, &out, "receivedFailedMessageHashes", sourceBlockchainID, messageID) + err := _TeleporterMessenger.contract.Call(opts, &out, "receivedFailedMessageHashes", messageID) if err != nil { return *new([32]byte), err @@ -640,18 +640,18 @@ func (_TeleporterMessenger *TeleporterMessengerCaller) ReceivedFailedMessageHash } -// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x3b215f2c. +// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x860a3b06. // -// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, bytes32 messageID) view returns(bytes32 messageHash) -func (_TeleporterMessenger *TeleporterMessengerSession) ReceivedFailedMessageHashes(sourceBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { - return _TeleporterMessenger.Contract.ReceivedFailedMessageHashes(&_TeleporterMessenger.CallOpts, sourceBlockchainID, messageID) +// Solidity: function receivedFailedMessageHashes(bytes32 messageID) view returns(bytes32 messageHash) +func (_TeleporterMessenger *TeleporterMessengerSession) ReceivedFailedMessageHashes(messageID [32]byte) ([32]byte, error) { + return _TeleporterMessenger.Contract.ReceivedFailedMessageHashes(&_TeleporterMessenger.CallOpts, messageID) } -// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x3b215f2c. +// ReceivedFailedMessageHashes is a free data retrieval call binding the contract method 0x860a3b06. // -// Solidity: function receivedFailedMessageHashes(bytes32 sourceBlockchainID, bytes32 messageID) view returns(bytes32 messageHash) -func (_TeleporterMessenger *TeleporterMessengerCallerSession) ReceivedFailedMessageHashes(sourceBlockchainID [32]byte, messageID [32]byte) ([32]byte, error) { - return _TeleporterMessenger.Contract.ReceivedFailedMessageHashes(&_TeleporterMessenger.CallOpts, sourceBlockchainID, messageID) +// Solidity: function receivedFailedMessageHashes(bytes32 messageID) view returns(bytes32 messageHash) +func (_TeleporterMessenger *TeleporterMessengerCallerSession) ReceivedFailedMessageHashes(messageID [32]byte) ([32]byte, error) { + return _TeleporterMessenger.Contract.ReceivedFailedMessageHashes(&_TeleporterMessenger.CallOpts, messageID) } // SentMessageInfo is a free data retrieval call binding the contract method 0xd39b0c17. @@ -762,44 +762,44 @@ func (_TeleporterMessenger *TeleporterMessengerTransactorSession) RedeemRelayerR return _TeleporterMessenger.Contract.RedeemRelayerRewards(&_TeleporterMessenger.TransactOpts, feeAsset) } -// RetryMessageExecution is a paid mutator transaction binding the contract method 0x13e8f4bc. +// RetryMessageExecution is a paid mutator transaction binding the contract method 0x40e19cee. // -// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() +// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactor) RetryMessageExecution(opts *bind.TransactOpts, originBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.contract.Transact(opts, "retryMessageExecution", originBlockchainID, message) } -// RetryMessageExecution is a paid mutator transaction binding the contract method 0x13e8f4bc. +// RetryMessageExecution is a paid mutator transaction binding the contract method 0x40e19cee. // -// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() +// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerSession) RetryMessageExecution(originBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetryMessageExecution(&_TeleporterMessenger.TransactOpts, originBlockchainID, message) } -// RetryMessageExecution is a paid mutator transaction binding the contract method 0x13e8f4bc. +// RetryMessageExecution is a paid mutator transaction binding the contract method 0x40e19cee. // -// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() +// Solidity: function retryMessageExecution(bytes32 originBlockchainID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactorSession) RetryMessageExecution(originBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetryMessageExecution(&_TeleporterMessenger.TransactOpts, originBlockchainID, message) } -// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x166a1d8f. +// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x0ecc142e. // -// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() +// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactor) RetrySendCrossChainMessage(opts *bind.TransactOpts, destinationBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.contract.Transact(opts, "retrySendCrossChainMessage", destinationBlockchainID, message) } -// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x166a1d8f. +// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x0ecc142e. // -// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() +// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerSession) RetrySendCrossChainMessage(destinationBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetrySendCrossChainMessage(&_TeleporterMessenger.TransactOpts, destinationBlockchainID, message) } -// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x166a1d8f. +// RetrySendCrossChainMessage is a paid mutator transaction binding the contract method 0x0ecc142e. // -// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() +// Solidity: function retrySendCrossChainMessage(bytes32 destinationBlockchainID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) returns() func (_TeleporterMessenger *TeleporterMessengerTransactorSession) RetrySendCrossChainMessage(destinationBlockchainID [32]byte, message TeleporterMessage) (*types.Transaction, error) { return _TeleporterMessenger.Contract.RetrySendCrossChainMessage(&_TeleporterMessenger.TransactOpts, destinationBlockchainID, message) } @@ -1228,9 +1228,9 @@ type TeleporterMessengerMessageExecutionFailed struct { Raw types.Log // Blockchain specific contextual infos } -// FilterMessageExecutionFailed is a free log retrieval operation binding the contract event 0x9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d6. +// FilterMessageExecutionFailed is a free log retrieval operation binding the contract event 0x080c35109e3a4562b6c55ca3fa4600962ad174e7a3aaf7b7ab558a25382b4465. // -// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecutionFailed(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID [][32]byte) (*TeleporterMessengerMessageExecutionFailedIterator, error) { var originBlockchainIDRule []interface{} @@ -1249,9 +1249,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterMessageExecutionF return &TeleporterMessengerMessageExecutionFailedIterator{contract: _TeleporterMessenger.contract, event: "MessageExecutionFailed", logs: logs, sub: sub}, nil } -// WatchMessageExecutionFailed is a free log subscription operation binding the contract event 0x9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d6. +// WatchMessageExecutionFailed is a free log subscription operation binding the contract event 0x080c35109e3a4562b6c55ca3fa4600962ad174e7a3aaf7b7ab558a25382b4465. // -// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecutionFailed(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerMessageExecutionFailed, originBlockchainID [][32]byte, messageID [][32]byte) (event.Subscription, error) { var originBlockchainIDRule []interface{} @@ -1295,9 +1295,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchMessageExecutionFa }), nil } -// ParseMessageExecutionFailed is a log parse operation binding the contract event 0x9cb4ff54116ef4abee5ecbcdd4b2310b86d7cb9fcaa0a092a8249b01fa2ee4d6. +// ParseMessageExecutionFailed is a log parse operation binding the contract event 0x080c35109e3a4562b6c55ca3fa4600962ad174e7a3aaf7b7ab558a25382b4465. // -// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +// Solidity: event MessageExecutionFailed(bytes32 indexed originBlockchainID, bytes32 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseMessageExecutionFailed(log types.Log) (*TeleporterMessengerMessageExecutionFailed, error) { event := new(TeleporterMessengerMessageExecutionFailed) if err := _TeleporterMessenger.contract.UnpackLog(event, "MessageExecutionFailed", log); err != nil { @@ -1384,9 +1384,9 @@ type TeleporterMessengerReceiveCrossChainMessage struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceiveCrossChainMessage is a free log retrieval operation binding the contract event 0x7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c49096855. +// FilterReceiveCrossChainMessage is a free log retrieval operation binding the contract event 0xcbccffab32a19dfcbd50a8f0413ee54e6b23c42c0cd8dfdecdcaf9f99fc7d270. // -// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterReceiveCrossChainMessage(opts *bind.FilterOpts, originBlockchainID [][32]byte, messageID [][32]byte, deliverer []common.Address) (*TeleporterMessengerReceiveCrossChainMessageIterator, error) { var originBlockchainIDRule []interface{} @@ -1409,9 +1409,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterReceiveCrossChain return &TeleporterMessengerReceiveCrossChainMessageIterator{contract: _TeleporterMessenger.contract, event: "ReceiveCrossChainMessage", logs: logs, sub: sub}, nil } -// WatchReceiveCrossChainMessage is a free log subscription operation binding the contract event 0x7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c49096855. +// WatchReceiveCrossChainMessage is a free log subscription operation binding the contract event 0xcbccffab32a19dfcbd50a8f0413ee54e6b23c42c0cd8dfdecdcaf9f99fc7d270. // -// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchReceiveCrossChainMessage(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerReceiveCrossChainMessage, originBlockchainID [][32]byte, messageID [][32]byte, deliverer []common.Address) (event.Subscription, error) { var originBlockchainIDRule []interface{} @@ -1459,9 +1459,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchReceiveCrossChainM }), nil } -// ParseReceiveCrossChainMessage is a log parse operation binding the contract event 0x7dd9c45186b4831e884b679a2acfac51e4053f95030d5485b82b3a3c49096855. +// ParseReceiveCrossChainMessage is a log parse operation binding the contract event 0xcbccffab32a19dfcbd50a8f0413ee54e6b23c42c0cd8dfdecdcaf9f99fc7d270. // -// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) +// Solidity: event ReceiveCrossChainMessage(bytes32 indexed originBlockchainID, bytes32 indexed messageID, address indexed deliverer, address rewardRedeemer, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseReceiveCrossChainMessage(log types.Log) (*TeleporterMessengerReceiveCrossChainMessage, error) { event := new(TeleporterMessengerReceiveCrossChainMessage) if err := _TeleporterMessenger.contract.UnpackLog(event, "ReceiveCrossChainMessage", log); err != nil { @@ -1701,9 +1701,9 @@ type TeleporterMessengerSendCrossChainMessage struct { Raw types.Log // Blockchain specific contextual infos } -// FilterSendCrossChainMessage is a free log retrieval operation binding the contract event 0x7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050. +// FilterSendCrossChainMessage is a free log retrieval operation binding the contract event 0x5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e1. // -// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) +// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterSendCrossChainMessage(opts *bind.FilterOpts, destinationBlockchainID [][32]byte, messageID [][32]byte) (*TeleporterMessengerSendCrossChainMessageIterator, error) { var destinationBlockchainIDRule []interface{} @@ -1722,9 +1722,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) FilterSendCrossChainMes return &TeleporterMessengerSendCrossChainMessageIterator{contract: _TeleporterMessenger.contract, event: "SendCrossChainMessage", logs: logs, sub: sub}, nil } -// WatchSendCrossChainMessage is a free log subscription operation binding the contract event 0x7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050. +// WatchSendCrossChainMessage is a free log subscription operation binding the contract event 0x5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e1. // -// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) +// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchSendCrossChainMessage(opts *bind.WatchOpts, sink chan<- *TeleporterMessengerSendCrossChainMessage, destinationBlockchainID [][32]byte, messageID [][32]byte) (event.Subscription, error) { var destinationBlockchainIDRule []interface{} @@ -1768,9 +1768,9 @@ func (_TeleporterMessenger *TeleporterMessengerFilterer) WatchSendCrossChainMess }), nil } -// ParseSendCrossChainMessage is a log parse operation binding the contract event 0x7cb880fe873fa1f2f1081dd7e4802dbd18ef4e8ce1e549c36c4afbf7765d1050. +// ParseSendCrossChainMessage is a log parse operation binding the contract event 0x5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e1. // -// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (bytes32,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) +// Solidity: event SendCrossChainMessage(bytes32 indexed destinationBlockchainID, bytes32 indexed messageID, (uint256,address,bytes32,address,uint256,address[],(bytes32,address)[],bytes) message, (address,uint256) feeInfo) func (_TeleporterMessenger *TeleporterMessengerFilterer) ParseSendCrossChainMessage(log types.Log) (*TeleporterMessengerSendCrossChainMessage, error) { event := new(TeleporterMessengerSendCrossChainMessage) if err := _TeleporterMessenger.contract.UnpackLog(event, "SendCrossChainMessage", log); err != nil { diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go b/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go index dd1164128..976cffd3f 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go @@ -67,8 +67,9 @@ func TestToEvent(t *testing.T) { func TestFilterTeleporterEvents(t *testing.T) { mockBlockchainID := ids.ID{1, 2, 3, 4} - messageID := ids.ID{5, 6, 7, 8} - message := createTestTeleporterMessage(messageID) + mockMessageNonce := big.NewInt(8) + mockMessageID := ids.ID{9, 10, 11, 12} + message := createTestTeleporterMessage(mockMessageNonce) feeInfo := TeleporterFeeInfo{ FeeTokenAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), Amount: big.NewInt(1), @@ -88,13 +89,13 @@ func TestFilterTeleporterEvents(t *testing.T) { event: SendCrossChainMessage, args: []interface{}{ mockBlockchainID, - messageID, + mockMessageID, message, feeInfo, }, expected: &TeleporterMessengerSendCrossChainMessage{ DestinationBlockchainID: mockBlockchainID, - MessageID: messageID, + MessageID: mockMessageID, Message: message, FeeInfo: feeInfo, }, @@ -103,14 +104,14 @@ func TestFilterTeleporterEvents(t *testing.T) { event: ReceiveCrossChainMessage, args: []interface{}{ mockBlockchainID, - messageID, + mockMessageID, deliverer, deliverer, message, }, expected: &TeleporterMessengerReceiveCrossChainMessage{ OriginBlockchainID: mockBlockchainID, - MessageID: messageID, + MessageID: mockMessageID, Deliverer: deliverer, RewardRedeemer: deliverer, Message: message, @@ -120,11 +121,11 @@ func TestFilterTeleporterEvents(t *testing.T) { event: MessageExecuted, args: []interface{}{ mockBlockchainID, - messageID, + mockMessageID, }, expected: &TeleporterMessengerMessageExecuted{ OriginBlockchainID: mockBlockchainID, - MessageID: messageID, + MessageID: mockMessageID, }, }, } diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go b/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go index 3f4fec6a3..ddefba926 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/packing.go @@ -18,7 +18,7 @@ func init() { // so we must manually keep this up-to-date with the struct defined in the contract. var err error teleporterMessageType, err = abi.NewType("tuple", "struct Overloader.F", []abi.ArgumentMarshaling{ - {Name: "messageID", Type: "bytes32"}, + {Name: "messageNonce", Type: "uint256"}, {Name: "senderAddress", Type: "address"}, {Name: "destinationBlockchainID", Type: "bytes32"}, {Name: "destinationAddress", Type: "address"}, diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go b/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go index 64054f830..c3b77e737 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/packing_test.go @@ -13,9 +13,9 @@ import ( "github.com/stretchr/testify/require" ) -func createTestTeleporterMessage(messageID ids.ID) TeleporterMessage { +func createTestTeleporterMessage(messageNonce *big.Int) TeleporterMessage { m := TeleporterMessage{ - MessageID: messageID, + MessageNonce: messageNonce, SenderAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), DestinationBlockchainID: ids.ID{1, 2, 3, 4}, DestinationAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), @@ -35,7 +35,7 @@ func createTestTeleporterMessage(messageID ids.ID) TeleporterMessage { } func TestPackUnpackTeleporterMessage(t *testing.T) { - message := createTestTeleporterMessage(ids.ID{4}) + message := createTestTeleporterMessage(big.NewInt(4)) b, err := PackTeleporterMessage(message) if err != nil { @@ -63,8 +63,9 @@ func TestPackUnpackTeleporterMessage(t *testing.T) { func TestUnpackEvent(t *testing.T) { mockBlockchainID := ids.ID{1, 2, 3, 4} - messageID := ids.ID{5} - message := createTestTeleporterMessage(messageID) + mockMessageNonce := big.NewInt(5) + mockMessageID := ids.ID{9, 10, 11, 12} + message := createTestTeleporterMessage(mockMessageNonce) feeInfo := TeleporterFeeInfo{ FeeTokenAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), Amount: big.NewInt(1), @@ -85,14 +86,14 @@ func TestUnpackEvent(t *testing.T) { event: SendCrossChainMessage, args: []interface{}{ mockBlockchainID, - messageID, + mockMessageID, message, feeInfo, }, out: new(TeleporterMessengerSendCrossChainMessage), expected: &TeleporterMessengerSendCrossChainMessage{ DestinationBlockchainID: mockBlockchainID, - MessageID: messageID, + MessageID: mockMessageID, Message: message, FeeInfo: feeInfo, }, @@ -101,7 +102,7 @@ func TestUnpackEvent(t *testing.T) { event: ReceiveCrossChainMessage, args: []interface{}{ mockBlockchainID, - messageID, + mockMessageID, deliverer, deliverer, message, @@ -109,7 +110,7 @@ func TestUnpackEvent(t *testing.T) { out: new(TeleporterMessengerReceiveCrossChainMessage), expected: &TeleporterMessengerReceiveCrossChainMessage{ OriginBlockchainID: mockBlockchainID, - MessageID: messageID, + MessageID: mockMessageID, Deliverer: deliverer, RewardRedeemer: deliverer, Message: message, @@ -119,12 +120,12 @@ func TestUnpackEvent(t *testing.T) { event: MessageExecuted, args: []interface{}{ mockBlockchainID, - messageID, + mockMessageID, }, out: new(TeleporterMessengerMessageExecuted), expected: &TeleporterMessengerMessageExecuted{ OriginBlockchainID: mockBlockchainID, - MessageID: messageID, + MessageID: mockMessageID, }, }, } diff --git a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go index 9e4cb09a3..5001ebd26 100644 --- a/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go +++ b/abi-bindings/go/Teleporter/upgrades/TeleporterRegistry/TeleporterRegistry.go @@ -38,7 +38,7 @@ type ProtocolRegistryEntry struct { // TeleporterRegistryMetaData contains all meta data concerning the TeleporterRegistry contract. var TeleporterRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"internalType\":\"structProtocolRegistryEntry[]\",\"name\":\"initialEntries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"AddProtocolVersion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newVersion\",\"type\":\"uint256\"}],\"name\":\"LatestVersionUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VERSION_INCREMENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATORS_SOURCE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"addProtocolVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getAddressFromVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestTeleporter\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"getTeleporterFromVersion\",\"outputs\":[{\"internalType\":\"contractITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolAddress\",\"type\":\"address\"}],\"name\":\"getVersionFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea264697066735822122091aff4f9dfb4f26ba1dce6706196d725f76b487475fdbb54bd66409ed9664aa264736f6c63430008120033", + Bin: "0x60a06040523480156200001157600080fd5b50604051620010a5380380620010a5833981016040819052620000349162000423565b7302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000515565b60805260005b8151811015620000ff57620000ea828281518110620000d657620000d66200052f565b60200260200101516200010760201b60201c565b80620000f6816200055b565b915050620000b3565b505062000593565b80516000036200015e5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e60448201526064015b60405180910390fd5b80516000908152600160205260409020546001600160a01b031615620001da5760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b606482015260840162000155565b60208101516001600160a01b0316620002485760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6044820152686c206164647265737360b81b606482015260840162000155565b6101f46000546200025a919062000577565b81511115620002c35760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b606482015260840162000155565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b03948516179055925190911681526002909252902054815111156200032d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a360005481511115620003ac576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620003ea57620003ea620003af565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200041b576200041b620003af565b604052919050565b600060208083850312156200043757600080fd5b82516001600160401b03808211156200044f57600080fd5b818501915085601f8301126200046457600080fd5b815181811115620004795762000479620003af565b62000489848260051b01620003f0565b818152848101925060069190911b830184019087821115620004aa57600080fd5b928401925b818410156200050a5760408489031215620004ca5760008081fd5b620004d4620003c5565b84518152858501516001600160a01b0381168114620004f35760008081fd5b8187015283526040939093019291840191620004af565b979650505050505050565b6000602082840312156200052857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000570576200057062000545565b5060010190565b808201808211156200058d576200058d62000545565b92915050565b608051610aef620005b66000396000818161014901526102640152610aef6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ac473ac311610066578063ac473ac314610124578063b771b3bc1461012d578063c07f47d41461013b578063d127dc9b14610144578063d820e64f1461016b57600080fd5b80630731775d146100a3578063215abce9146100c857806341f34ed9146100db57806346f9ef49146100f05780634c1f08ce14610103575b600080fd5b6100ab600081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046107ce565b610173565b6100ee6100e93660046107e7565b610184565b005b6100ab6100fe3660046107ce565b6103f9565b610116610111366004610829565b6104be565b6040519081526020016100bf565b6101166101f481565b6100ab6005600160991b0181565b61011660005481565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6100ab610566565b600061017e826103f9565b92915050565b6040516306f8253560e41b815263ffffffff8216600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f991908101906108cb565b91509150806102605760405162461bcd60e51b815260206004820152602860248201527f54656c65706f7274657252656769737472793a20696e76616c69642077617270604482015267206d65737361676560c01b60648201526084015b60405180910390fd5b81517f0000000000000000000000000000000000000000000000000000000000000000146102e45760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f7274657252656769737472793a20696e76616c696420736f757260448201526a18d94818da185a5b88125160aa1b6064820152608401610257565b60208201516001600160a01b0316156103595760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472793a20696e76616c6964206f726967604482015270696e2073656e646572206164647265737360781b6064820152608401610257565b600080836040015180602001905181019061037491906109d3565b90925090506001600160a01b03811630146103e95760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f7274657252656769737472793a20696e76616c6964206465737460448201526e696e6174696f6e206164647265737360881b6064820152608401610257565b6103f282610578565b5050505050565b60008160000361044b5760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b6000828152600160205260409020546001600160a01b03168061017e5760405162461bcd60e51b815260206004820152602560248201527f54656c65706f7274657252656769737472793a2076657273696f6e206e6f7420604482015264199bdd5b9960da1b6064820152608401610257565b60006001600160a01b0382166104e65760405162461bcd60e51b815260040161025790610a4f565b6001600160a01b0382166000908152600260205260408120549081900361017e5760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2070726f746f636f6c2061646460448201526d1c995cdcc81b9bdd08199bdd5b9960921b6064820152608401610257565b60006105736000546103f9565b905090565b80516000036105c95760405162461bcd60e51b815260206004820181905260248201527f54656c65706f7274657252656769737472793a207a65726f2076657273696f6e6044820152606401610257565b80516000908152600160205260409020546001600160a01b0316156106435760405162461bcd60e51b815260206004820152602a60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20616c72656044820152696164792065786973747360b01b6064820152608401610257565b60208101516001600160a01b031661066d5760405162461bcd60e51b815260040161025790610a4f565b6101f460005461067d9190610a98565b815111156106e45760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f7274657252656769737472793a2076657273696f6e20696e637260448201526d0cadacadce840e8dede40d0d2ced60931b6064820152608401610257565b602081810180518351600090815260018452604080822080546001600160a01b0319166001600160a01b039485161790559251909116815260029092529020548151111561074d5780516020808301516001600160a01b03166000908152600290915260409020555b602081015181516040516001600160a01b03909216917fa5eed93d951a9603d5f7c0a57de79a299dd3dbd5e51429be209d8053a42ab43a90600090a3600054815111156107cb576000805482518083556040519192909183917f30623e953733f6474dabdfbef1103ce15ab73cdc77c6dfad0f9874d167e8a9b091a3505b50565b6000602082840312156107e057600080fd5b5035919050565b6000602082840312156107f957600080fd5b813563ffffffff8116811461080d57600080fd5b9392505050565b6001600160a01b03811681146107cb57600080fd5b60006020828403121561083b57600080fd5b813561080d81610814565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561087f5761087f610846565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108ae576108ae610846565b604052919050565b805180151581146108c657600080fd5b919050565b600080604083850312156108de57600080fd5b825167ffffffffffffffff808211156108f657600080fd5b908401906060828703121561090a57600080fd5b61091261085c565b8251815260208084015161092581610814565b8282015260408401518381111561093b57600080fd5b80850194505087601f85011261095057600080fd5b83518381111561096257610962610846565b610974601f8201601f19168301610885565b9350808452888282870101111561098a57600080fd5b60005b818110156109a857858101830151858201840152820161098d565b506000828286010152508260408301528195506109c68188016108b6565b9450505050509250929050565b60008082840360608112156109e757600080fd5b60408112156109f557600080fd5b506040516040810181811067ffffffffffffffff82111715610a1957610a19610846565b604052835181526020840151610a2e81610814565b60208201526040840151909250610a4481610814565b809150509250929050565b60208082526029908201527f54656c65706f7274657252656769737472793a207a65726f2070726f746f636f6040820152686c206164647265737360b81b606082015260800190565b8082018082111561017e57634e487b7160e01b600052601160045260246000fdfea26469706673582212202b81ff593f22176a0d5a5bbd55d8c331677b4a97d5c998e60bb488da04bf9ef064736f6c63430008120033", } // TeleporterRegistryABI is the input ABI used to generate the binding from. diff --git a/cmd/teleporter-cli/transaction.go b/cmd/teleporter-cli/transaction.go index 69549416d..7b94bd13c 100644 --- a/cmd/teleporter-cli/transaction.go +++ b/cmd/teleporter-cli/transaction.go @@ -62,7 +62,7 @@ the command parses to log event fields to a more human readable format.`, cobra.CheckErr(err) logger.Info("Parsed Teleporter message", zap.String("warpMessageID", unsignedMsg.ID().Hex()), - zap.ByteString("teleporterMessageID", teleporterMessage.MessageID[:]), + zap.String("teleporterMessageNonce", teleporterMessage.MessageNonce.String()), zap.Any("message", teleporterMessage)) } } diff --git a/contracts/src/Teleporter/ITeleporterMessenger.sol b/contracts/src/Teleporter/ITeleporterMessenger.sol index 832dcbb0a..8b36298c7 100644 --- a/contracts/src/Teleporter/ITeleporterMessenger.sol +++ b/contracts/src/Teleporter/ITeleporterMessenger.sol @@ -28,7 +28,7 @@ struct TeleporterMessageInput { // Represents a message sent or received by an implementation of {ITeleporterMessenger}. struct TeleporterMessage { - bytes32 messageID; + uint256 messageNonce; address senderAddress; bytes32 destinationBlockchainID; address destinationAddress; @@ -197,20 +197,14 @@ interface ITeleporterMessenger { * @dev Checks whether or not the given message has been received by this chain. * @return Boolean representing if the given message has been received. */ - function messageReceived( - bytes32 originBlockchainID, - bytes32 messageID - ) external view returns (bool); + function messageReceived(bytes32 messageID) external view returns (bool); /** * @dev Returns the address the relayer reward should be sent to on the origin chain * for a given message, assuming that the message has already been delivered. * @return The relayer reward address for the given message. */ - function getRelayerRewardAddress( - bytes32 originBlockchainID, - bytes32 messageID - ) external view returns (address); + function getRelayerRewardAddress(bytes32 messageID) external view returns (address); /** * @dev Gets the current reward amount of a given fee asset that is redeemable by the given relayer. diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index 0703b56f4..dca9bb426 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -66,18 +66,16 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // Tracks the hash of messages that have been received but whose execution has never succeeded. // Enables retrying of failed messages with higher gas limits. Message execution is guaranteed to - // succeed at most once. The first key is the blockchain ID of the sending chain, the second key is the message ID, and - // the value is the hash of the uniquely identified message whose execution failed. - mapping(bytes32 sourceBlockchainID => mapping(bytes32 messageID => bytes32 messageHash)) public - receivedFailedMessageHashes; + // succeed at most once. The key is the message ID, and the value is the hash of the uniquely + // identified message whose execution failed. + mapping(bytes32 messageID => bytes32 messageHash) public receivedFailedMessageHashes; - // Tracks the relayer reward address for each message delivered from a given chain. + // Tracks the relayer reward address for each message delivered. // Note that these values are also used to determine if a given message has been delivered or not. - // The first key is the blockchain ID, the second key is the message ID, and the value is the reward address - // provided by the deliverer of the uniquely identified message. - mapping( - bytes32 sourceBlockchainID => mapping(bytes32 messageID => address relayerRewardAddress) - ) internal _relayerRewardAddresses; + // The key is the message ID, and the value is the reward address provided by the deliverer of the message. + // Note that message IDs are unique across messages received from all blockchains because they are + // calculated as a hash that includes the source blockchain ID. + mapping(bytes32 messageID => address relayerRewardAddress) internal _relayerRewardAddresses; // Tracks the reward amounts for a given asset able to be redeemed by a given relayer. // The first key is the relayer reward address, the second key is the fee token contract address, @@ -122,9 +120,12 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { bytes32 destinationBlockchainID, TeleporterMessage calldata message ) external senderNonReentrant { + // Calculate the message ID based on the message nonce. + bytes32 messageID = _calculateMessageID(blockchainID, message.messageNonce); + // Get the previously sent message hash. SentMessageInfo memory existingMessageInfo = - sentMessageInfo[destinationBlockchainID][message.messageID]; + sentMessageInfo[destinationBlockchainID][messageID]; // If the message hash is zero, the message was never sent. require( existingMessageInfo.messageHash != bytes32(0), "TeleporterMessenger: message not found" @@ -140,7 +141,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // Emit and make state variable changes before external calls when possible, // though this function is protected by sender reentrancy guard. emit SendCrossChainMessage( - destinationBlockchainID, message.messageID, message, existingMessageInfo.feeInfo + destinationBlockchainID, messageID, message, existingMessageInfo.feeInfo ); // Resubmit the message to the warp precompile now that we know @@ -244,24 +245,25 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { "TeleporterMessenger: invalid origin sender address" ); - // If the blockchain ID has yet to be initialized, do so now. - bytes32 blockchainID_ = _initializeBlockchainID(); - // Parse the payload of the message. TeleporterMessage memory teleporterMessage = abi.decode(warpMessage.payload, (TeleporterMessage)); + // If the blockchain ID has yet to be initialized, do so now. + bytes32 blockchainID_ = _initializeBlockchainID(); + // Require that the message was intended for this blockchain. require( teleporterMessage.destinationBlockchainID == blockchainID_, "TeleporterMessenger: invalid destination chain ID" ); + // Calculate the message ID of the message given the source blockchain ID and message nonce. + bytes32 messageID = + _calculateMessageID(warpMessage.sourceChainID, teleporterMessage.messageNonce); + // Require that the message has not been delivered previously. - require( - !_messageReceived(warpMessage.sourceChainID, teleporterMessage.messageID), - "TeleporterMessenger: message already delivered" - ); + require(!_messageReceived(messageID), "TeleporterMessenger: message already delivered"); // Check that the caller is allowed to deliver this message. require( @@ -270,12 +272,11 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { ); // Store the relayer reward address provided, effectively marking the message as received. - _relayerRewardAddresses[warpMessage.sourceChainID][teleporterMessage.messageID] = - relayerRewardAddress; + _relayerRewardAddresses[messageID] = relayerRewardAddress; // Execute the message. if (teleporterMessage.message.length > 0) { - _handleInitialMessageExecution(warpMessage.sourceChainID, teleporterMessage); + _handleInitialMessageExecution(warpMessage.sourceChainID, messageID, teleporterMessage); } // Process the receipts that were included in the teleporter message by paying the @@ -294,14 +295,14 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { receiptsQueue.enqueue( TeleporterMessageReceipt({ - receivedMessageID: teleporterMessage.messageID, + receivedMessageID: messageID, relayerRewardAddress: relayerRewardAddress }) ); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - teleporterMessage.messageID, + messageID, msg.sender, relayerRewardAddress, teleporterMessage @@ -327,9 +328,11 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { bytes32 originBlockchainID, TeleporterMessage calldata message ) external receiverNonReentrant { + // Calculate the message ID based on the origin blockchainID and message nonce. + bytes32 messageID = _calculateMessageID(originBlockchainID, message.messageNonce); + // Check that the hash of the payload provided matches the hash of the payload that previously failed to execute. - bytes32 failedMessageHash = - receivedFailedMessageHashes[originBlockchainID][message.messageID]; + bytes32 failedMessageHash = receivedFailedMessageHashes[messageID]; require(failedMessageHash != bytes32(0), "TeleporterMessenger: message not found"); require( keccak256(abi.encode(message)) == failedMessageHash, @@ -345,9 +348,9 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // Clear the failed message hash from state prior to retrying its execution to redundantly prevent // reentrance attacks (on top of the nonReentrant guard). - emit MessageExecuted(originBlockchainID, message.messageID); - delete receivedFailedMessageHashes[originBlockchainID][ - message.messageID + emit MessageExecuted(originBlockchainID, messageID); + delete receivedFailedMessageHashes[ + messageID ]; // Re-encode the payload by ABI encoding a call to the {receiveTeleporterMessage} function @@ -397,8 +400,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { for (uint256 i; i < messageIDs.length; ++i) { bytes32 receivedMessageID = messageIDs[i]; // Get the relayer reward address for the message. - address relayerRewardAddress = - _relayerRewardAddresses[originBlockchainID][receivedMessageID]; + address relayerRewardAddress = _relayerRewardAddresses[receivedMessageID]; require(relayerRewardAddress != address(0), "TeleporterMessenger: receipt not found"); receiptsToSend[i] = TeleporterMessageReceipt({ @@ -456,21 +458,15 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { /** * @dev See {ITeleporterMessenger-messageReceived} */ - function messageReceived( - bytes32 originBlockchainID, - bytes32 messageID - ) external view returns (bool) { - return _messageReceived(originBlockchainID, messageID); + function messageReceived(bytes32 messageID) external view returns (bool) { + return _messageReceived(messageID); } /** * @dev See {ITeleporterMessenger-getRelayerRewardAddress} */ - function getRelayerRewardAddress( - bytes32 originBlockchainID, - bytes32 messageID - ) external view returns (address) { - return _relayerRewardAddresses[originBlockchainID][messageID]; + function getRelayerRewardAddress(bytes32 messageID) external view returns (address) { + return _relayerRewardAddresses[messageID]; } /** @@ -500,7 +496,8 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { * @return The next message ID to be used for a message sent from the contract instance. */ function getNextMessageID() external view returns (bytes32) { - return _calculateNextMessageID(); + (, bytes32 messageID) = _calculateNextMessageNonceAndID(); + return messageID; } /** @@ -524,11 +521,8 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { * @dev Checks if a given message has been received. * @return A boolean representing if the given message has been received or not. */ - function _messageReceived( - bytes32 originBlockchainID, - bytes32 messageID - ) internal view returns (bool) { - return _relayerRewardAddresses[originBlockchainID][messageID] != address(0); + function _messageReceived(bytes32 messageID) internal view returns (bool) { + return _relayerRewardAddresses[messageID] != address(0); } /** @@ -582,11 +576,11 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); // Get the message ID to use for this message. - bytes32 messageID = _calculateNextMessageID(); + (uint256 messageNonce_, bytes32 messageID_) = _calculateNextMessageNonceAndID(); // Construct and serialize the message. TeleporterMessage memory teleporterMessage = TeleporterMessage({ - messageID: messageID, + messageNonce: messageNonce_, senderAddress: msg.sender, destinationBlockchainID: messageInput.destinationBlockchainID, destinationAddress: messageInput.destinationAddress, @@ -623,19 +617,19 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { feeTokenAddress: messageInput.feeInfo.feeTokenAddress, amount: adjustedFeeAmount }); - sentMessageInfo[messageInput.destinationBlockchainID][messageID] = SentMessageInfo({ + sentMessageInfo[messageInput.destinationBlockchainID][messageID_] = SentMessageInfo({ messageHash: keccak256(teleporterMessageBytes), feeInfo: adjustedFeeInfo }); emit SendCrossChainMessage( - messageInput.destinationBlockchainID, messageID, teleporterMessage, adjustedFeeInfo + messageInput.destinationBlockchainID, messageID_, teleporterMessage, adjustedFeeInfo ); // Submit the message to the AWM precompile. WARP_MESSENGER.sendWarpMessage(teleporterMessageBytes); - return messageID; + return messageID_; } /** @@ -684,6 +678,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function _handleInitialMessageExecution( bytes32 originBlockchainID, + bytes32 messageID, TeleporterMessage memory message ) private { // Check that the message delivery was provided the required gas amount as specified by the sender. @@ -698,7 +693,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // execution so that it can be retried in the future should a contract be later deployed to // the address. if (message.destinationAddress.code.length == 0) { - _storeFailedMessageExecution(originBlockchainID, message); + _storeFailedMessageExecution(originBlockchainID, messageID, message); return; } @@ -719,11 +714,11 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // retries). Either way, the message will now be considered "delivered" since the relayer // provided enough gas to meet the required gas limit. if (!success) { - _storeFailedMessageExecution(originBlockchainID, message); + _storeFailedMessageExecution(originBlockchainID, messageID, message); return; } - emit MessageExecuted(originBlockchainID, message.messageID); + emit MessageExecuted(originBlockchainID, messageID); } function _tryExecuteMessage( @@ -759,21 +754,32 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { */ function _storeFailedMessageExecution( bytes32 originBlockchainID, + bytes32 messageID, TeleporterMessage memory message ) private { - receivedFailedMessageHashes[originBlockchainID][message.messageID] = - keccak256(abi.encode(message)); + receivedFailedMessageHashes[messageID] = keccak256(abi.encode(message)); // Emit a failed execution event for anyone monitoring unsuccessful messages to retry. - emit MessageExecutionFailed(originBlockchainID, message.messageID, message); + emit MessageExecutionFailed(originBlockchainID, messageID, message); + } + + /** + * @dev Calculates the message ID for the given source blockchain ID and message nonce. + */ + function _calculateMessageID( + bytes32 sourceBlockchainID, + uint256 nonce + ) private view returns (bytes32) { + return sha256(abi.encode(address(this), sourceBlockchainID, nonce)); } /** * @dev Calculates the message ID given this contract's address and required input parameters. */ - function _calculateNextMessageID() private view returns (bytes32) { + function _calculateNextMessageNonceAndID() private view returns (uint256, bytes32) { bytes32 blockchainID_ = blockchainID; + uint256 nonce_ = messageNonce; require(blockchainID_ != bytes32(0), "TeleporterMessenger: blockchainID not set"); - return sha256(abi.encode(address(this), blockchainID_, messageNonce)); + return (nonce_, _calculateMessageID(blockchainID_, nonce_)); } } diff --git a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol index c2fc46b02..1bd124d38 100644 --- a/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol +++ b/contracts/src/Teleporter/tests/AddFeeAmountTests.t.sol @@ -83,9 +83,7 @@ contract AddFeeAmountTest is TeleporterMessengerTest { relayerRewardAddress: relayerRewardAddress }); - _receiveTestMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts - ); + _receiveTestMessage(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 0, relayerRewardAddress, receipts); // Now try to add to the fee of the message. Should revert since the message receipt was received already. uint256 additionalFeeAmount = 131313; diff --git a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol index 3010e11c7..498304748 100644 --- a/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol +++ b/contracts/src/Teleporter/tests/GetFeeInfoTests.t.sol @@ -55,9 +55,7 @@ contract GetFeeInfoTest is TeleporterMessengerTest { receivedMessageID: messageID, relayerRewardAddress: relayerRewardAddress }); - _receiveTestMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts - ); + _receiveTestMessage(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 0, relayerRewardAddress, receipts); // Now, if we get the fee info for the message it should be reported as zero since the receipt has already been received. (address actualFeeAsset, uint256 actualFeeAmount) = diff --git a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol index bce8b00aa..3660d78cc 100644 --- a/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol +++ b/contracts/src/Teleporter/tests/GetMessageHashTests.t.sol @@ -21,9 +21,8 @@ contract GetMessageHashTest is TeleporterMessengerTest { function testSuccess() public { // Submit a message - bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID); TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: messageID, + messageNonce: teleporterMessenger.messageNonce(), senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -32,6 +31,8 @@ contract GetMessageHashTest is TeleporterMessengerTest { receipts: new TeleporterMessageReceipt[](0), message: new bytes(0) }); + bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID); + bytes memory expectedMessageBytes = abi.encode(expectedMessage); bytes32 expectedMessageHash = keccak256(expectedMessageBytes); @@ -61,9 +62,7 @@ contract GetMessageHashTest is TeleporterMessengerTest { receivedMessageID: messageID, relayerRewardAddress: relayerRewardAddress }); - _receiveTestMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageID, relayerRewardAddress, receipts - ); + _receiveTestMessage(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 0, relayerRewardAddress, receipts); // Now the message hash should be cleared. assertEq( diff --git a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol index cebb0ac60..8bd33673c 100644 --- a/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol +++ b/contracts/src/Teleporter/tests/GetNextMessageIdTests.t.sol @@ -22,7 +22,8 @@ contract GetNextMessageIDTest is TeleporterMessengerTest { function testGetMessageID() public { // Generate the next expected message ID manually. - bytes32 expectedMessageID = _createMessageID(teleporterMessenger.messageNonce()); + bytes32 expectedMessageID = + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, teleporterMessenger.messageNonce()); // Check the contract reports the same as expected. assertEq(teleporterMessenger.getNextMessageID(), expectedMessageID); @@ -46,7 +47,8 @@ contract GetNextMessageIDTest is TeleporterMessengerTest { assertEq(messageID, expectedMessageID); // Generate the next expected message ID now that a message has been sent. - bytes32 secondExpectedMessageID = _createMessageID(teleporterMessenger.messageNonce()); + bytes32 secondExpectedMessageID = + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, teleporterMessenger.messageNonce()); // Check the contract reports the same as expected, and that is different than the first ID. assertEq(teleporterMessenger.getNextMessageID(), secondExpectedMessageID); diff --git a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol index ddcd01dc9..8b64811c9 100644 --- a/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol +++ b/contracts/src/Teleporter/tests/GetOutstandingReceiptsToSendTests.t.sol @@ -28,27 +28,32 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // a message that should contain the receipts. Finally, send another message that should not // have any more receipts since they were included in the previous message. function testSuccess() public { + bytes32 blockchainID = + bytes32(hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff"); + // Assemble mock receipt information that we will expect to be // included in a subsequent message sent to another chain. - TeleporterMessageReceipt[] memory expectedReceipts = new TeleporterMessageReceipt[](3); + uint256[3] memory receiptMessageNonces = [uint256(13), 42, 94]; + TeleporterMessageReceipt[] memory expectedReceipts = new TeleporterMessageReceipt[](3); expectedReceipts[0] = TeleporterMessageReceipt( - bytes32(uint256(13)), 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 + _createMessageID(blockchainID, receiptMessageNonces[0]), + 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 ); expectedReceipts[1] = TeleporterMessageReceipt( - bytes32(uint256(42)), 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 + _createMessageID(blockchainID, receiptMessageNonces[1]), + 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 ); expectedReceipts[2] = TeleporterMessageReceipt( - bytes32(uint256(94)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + _createMessageID(blockchainID, receiptMessageNonces[2]), + 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); // Mock receiving each of the messages corresponding to the receipts. - bytes32 blockchainID = - bytes32(hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff"); for (uint256 i = 0; i < expectedReceipts.length; i++) { _receiveTestMessage( blockchainID, - expectedReceipts[i].receivedMessageID, + receiptMessageNonces[i], expectedReceipts[i].relayerRewardAddress, new TeleporterMessageReceipt[](0) ); @@ -56,9 +61,10 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Now that we have "received" 3 mock messages, when we send a message back to the // other chain, we should expect to see the 3 receipts included in the message metadata. - bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory expectedMessage = - _createMockTeleporterMessage(expectedMessageID, hex"deadbeef"); + _createMockTeleporterMessage(teleporterMessenger.messageNonce(), hex"deadbeef"); + bytes32 expectedMessageID = + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessage.messageNonce); expectedMessage.receipts = expectedReceipts; expectedMessage.destinationBlockchainID = blockchainID; TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); @@ -86,19 +92,15 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Expect the SendCrossChainMessage event to be emitted. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( - messageInput.destinationBlockchainID, - expectedMessage.messageID, - expectedMessage, - feeInfo + messageInput.destinationBlockchainID, expectedMessageID, expectedMessage, feeInfo ); // Submit the message. teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it does not contain any more receipts. - bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory nextExpectedMessage = - _createMockTeleporterMessage(nextExpectedMessageID, hex"deadbeef"); + _createMockTeleporterMessage(teleporterMessenger.messageNonce(), hex"deadbeef"); nextExpectedMessage.destinationBlockchainID = blockchainID; vm.expectCall( WARP_PRECOMPILE_ADDRESS, @@ -107,7 +109,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( messageInput.destinationBlockchainID, - nextExpectedMessage.messageID, + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, nextExpectedMessage.messageNonce), nextExpectedMessage, feeInfo ); @@ -120,40 +122,50 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // the first batch of receipts on the first outbound message has the maximum batch size, and // next contains the remaining receipts. function testExceedsLimit() public { + bytes32 blockchainID = + bytes32(hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff"); + // Assemble mock receipt information that we will expect to be // included in a subsequent message sent to another chain. + uint256[5] memory receiptMessageNonces1 = [uint256(13), 42, 94, 3, 53]; TeleporterMessageReceipt[] memory expectedReceiptsBatch1 = new TeleporterMessageReceipt[](5); // the limit of receipts per message is 5. expectedReceiptsBatch1[0] = TeleporterMessageReceipt( - bytes32(uint256(13)), 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 + _createMessageID(blockchainID, receiptMessageNonces1[0]), + 0xF1DFE63909C027Ed814Dd92C5a3644590abf4850 ); expectedReceiptsBatch1[1] = TeleporterMessageReceipt( - bytes32(uint256(42)), 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 + _createMessageID(blockchainID, receiptMessageNonces1[1]), + 0x52A258ED593C793251a89bfd36caE158EE9fC4F8 ); expectedReceiptsBatch1[2] = TeleporterMessageReceipt( - bytes32(uint256(94)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + _createMessageID(blockchainID, receiptMessageNonces1[2]), + 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch1[3] = TeleporterMessageReceipt( - bytes32(uint256(3)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + _createMessageID(blockchainID, receiptMessageNonces1[3]), + 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch1[4] = TeleporterMessageReceipt( - bytes32(uint256(53)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + _createMessageID(blockchainID, receiptMessageNonces1[4]), + 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); + uint256[2] memory receiptMessageNonces2 = [uint256(75), 80]; TeleporterMessageReceipt[] memory expectedReceiptsBatch2 = new TeleporterMessageReceipt[](2); // the limit of receipts per message is 5. expectedReceiptsBatch2[0] = TeleporterMessageReceipt( - bytes32(uint256(75)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + _createMessageID(blockchainID, receiptMessageNonces2[0]), + 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); expectedReceiptsBatch2[1] = TeleporterMessageReceipt( - bytes32(uint256(80)), 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 + _createMessageID(blockchainID, receiptMessageNonces2[1]), + 0xdc00AB1cF6942cE0891eF1AC5ff686833Fa0C542 ); // Mock receiving each of the messages corresponding to the receipts. - bytes32 blockchainID = - bytes32(hex"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff"); for (uint256 i = 0; i < expectedReceiptsBatch1.length; i++) { _receiveTestMessage( blockchainID, - expectedReceiptsBatch1[i].receivedMessageID, + receiptMessageNonces1[i], expectedReceiptsBatch1[i].relayerRewardAddress, new TeleporterMessageReceipt[](0) ); @@ -161,7 +173,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { for (uint256 i = 0; i < expectedReceiptsBatch2.length; i++) { _receiveTestMessage( blockchainID, - expectedReceiptsBatch2[i].receivedMessageID, + receiptMessageNonces2[i], expectedReceiptsBatch2[i].relayerRewardAddress, new TeleporterMessageReceipt[](0) ); @@ -170,9 +182,8 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { // Now that we have "received" 7 mock messages, when we send a message back to the // other chain, we should expect to see the 5 receipts included in the message metadata because // that is the max receipt batch size limit. - bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory expectedMessage = - _createMockTeleporterMessage(expectedMessageID, hex"deadbeef"); + _createMockTeleporterMessage(teleporterMessenger.messageNonce(), hex"deadbeef"); expectedMessage.receipts = expectedReceiptsBatch1; expectedMessage.destinationBlockchainID = blockchainID; TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); @@ -201,7 +212,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( messageInput.destinationBlockchainID, - expectedMessage.messageID, + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessage.messageNonce), expectedMessage, feeInfo ); @@ -210,9 +221,8 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { teleporterMessenger.sendCrossChainMessage(messageInput); // Submit another message to be sent to check that it contains the remaining 2 receipts to be sent. - bytes32 nextExpectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory nextExpectedMessage = - _createMockTeleporterMessage(nextExpectedMessageID, hex"deadbeef"); + _createMockTeleporterMessage(teleporterMessenger.messageNonce(), hex"deadbeef"); nextExpectedMessage.receipts = expectedReceiptsBatch2; nextExpectedMessage.destinationBlockchainID = blockchainID; vm.expectCall( @@ -222,7 +232,7 @@ contract GetOutstandingReceiptsToSendTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( messageInput.destinationBlockchainID, - nextExpectedMessage.messageID, + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, nextExpectedMessage.messageNonce), nextExpectedMessage, feeInfo ); diff --git a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol index aa11f4ed4..1eeca849d 100644 --- a/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol +++ b/contracts/src/Teleporter/tests/GetRelayerRewardAddressTests.t.sol @@ -17,29 +17,20 @@ contract GetRelayerRewardAddressTest is TeleporterMessengerTest { function testSuccess() public { // Before receiving the message, it returns the 0 address. - bytes32 mockMessageID = bytes32(uint256(8)); - assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockMessageID - ), - address(0) - ); + uint256 mockNonce = 8; + bytes32 mockMessageID = _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockNonce); + assertEq(teleporterMessenger.getRelayerRewardAddress(mockMessageID), address(0)); // Mock receiving the message address relayerRewardAddress = 0xCAFebAbeDc0D4D7B7EEdCf61eb863fF413BB6234; _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - mockMessageID, + mockNonce, relayerRewardAddress, new TeleporterMessageReceipt[](0) ); // Now it has the relayer reward address. - assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, mockMessageID - ), - relayerRewardAddress - ); + assertEq(teleporterMessenger.getRelayerRewardAddress(mockMessageID), relayerRewardAddress); } } diff --git a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol index d3f3309f9..a785aad41 100644 --- a/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/HandleInitialMessageExecutionTests.t.sol @@ -95,7 +95,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: bytes32(uint256(42)), + messageNonce: 42, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), @@ -111,12 +111,14 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); // Receive the message and check that message execution was successful. + bytes32 expectedMessageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageNonce); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); - emit MessageExecuted(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID); + emit MessageExecuted(DEFAULT_ORIGIN_BLOCKCHAIN_ID, expectedMessageID); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + expectedMessageID, address(this), DEFAULT_RELAYER_REWARD_ADDRESS, messageToReceive @@ -128,9 +130,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderSubnetID(), DEFAULT_ORIGIN_BLOCKCHAIN_ID); assertEq(destinationContract.latestMessageSenderAddress(), address(this)); assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID - ), + teleporterMessenger.getRelayerRewardAddress(expectedMessageID), DEFAULT_RELAYER_REWARD_ADDRESS ); } @@ -139,7 +139,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: bytes32(uint256(42)), + messageNonce: 42, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), @@ -165,7 +165,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: bytes32(uint256(42)), + messageNonce: 42, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), @@ -176,6 +176,8 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { }); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); + bytes32 messageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageNonce); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -184,13 +186,11 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // is considered a failed message execution, but the message itself is // still successfully delivered. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); - emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive - ); + emit MessageExecutionFailed(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID, messageToReceive); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + messageID, address(this), DEFAULT_RELAYER_REWARD_ADDRESS, messageToReceive @@ -202,10 +202,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderSubnetID(), bytes32(0)); assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID - ), - DEFAULT_RELAYER_REWARD_ADDRESS + teleporterMessenger.getRelayerRewardAddress(messageID), DEFAULT_RELAYER_REWARD_ADDRESS ); vm.expectRevert(_formatTeleporterErrorMessage("retry execution failed")); teleporterMessenger.retryMessageExecution(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive); @@ -215,7 +212,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { // Construct the mock message to be received. string memory messageString = "Testing successful message"; TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: bytes32(uint256(42)), + messageNonce: 42, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), @@ -226,19 +223,19 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { }); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); + bytes32 messageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageNonce); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); // Receive the message. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); - emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive - ); + emit MessageExecutionFailed(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID, messageToReceive); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + messageID, address(this), DEFAULT_RELAYER_REWARD_ADDRESS, messageToReceive @@ -250,10 +247,7 @@ contract HandleInitialMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderSubnetID(), bytes32(0)); assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID - ), - DEFAULT_RELAYER_REWARD_ADDRESS + teleporterMessenger.getRelayerRewardAddress(messageID), DEFAULT_RELAYER_REWARD_ADDRESS ); vm.expectRevert(_formatTeleporterErrorMessage("retry execution failed")); teleporterMessenger.retryMessageExecution(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive); diff --git a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol index 340dbf9cd..41a2758ff 100644 --- a/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol +++ b/contracts/src/Teleporter/tests/MarkReceiptTests.t.sol @@ -52,8 +52,9 @@ contract MarkReceiptTest is TeleporterMessengerTest { relayerRewardAddress: feeRewardInfos[i].relayerRewardAddress }); } + uint256 messageNonce = 1; TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); + _createMockTeleporterMessage(messageNonce, new bytes(0)); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); @@ -75,15 +76,12 @@ contract MarkReceiptTest is TeleporterMessengerTest { } // Check that the message received is considered delivered, and that the relayer reward address is stored. + bytes32 expectedMessageID = _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageNonce); assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1) - ), + teleporterMessenger.getRelayerRewardAddress(expectedMessageID), expectedRelayerRewardAddress ); - assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1)) - ); + assertTrue(teleporterMessenger.messageReceived(expectedMessageID)); // Check that the message hashes for the message receipts we received have been cleared. for (uint256 i = 0; i < receipts.length; i++) { @@ -96,20 +94,22 @@ contract MarkReceiptTest is TeleporterMessengerTest { function testReceiptForNoFeeMessage() public { // Submit a a mock message with no fee. - bytes32 messageID = _sendTestMessageWithNoFee(DEFAULT_ORIGIN_BLOCKCHAIN_ID); + bytes32 sentMessageID = _sendTestMessageWithNoFee(DEFAULT_ORIGIN_BLOCKCHAIN_ID); // Mock receiving a message with the a receipts of the mock message sent above. TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](1); receipts[0] = TeleporterMessageReceipt({ - receivedMessageID: messageID, + receivedMessageID: sentMessageID, relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS }); + uint256 receivedMessageNonce = 42; + bytes32 receivedMessageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageNonce); TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(messageID, new bytes(0)); + _createMockTeleporterMessage(receivedMessageNonce, new bytes(0)); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); - _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); // Receive the mock message. @@ -118,29 +118,32 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( - teleporterMessenger.getRelayerRewardAddress(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID), + teleporterMessenger.getRelayerRewardAddress(receivedMessageID), expectedRelayerRewardAddress ); - assertTrue(teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID)); + assertTrue(teleporterMessenger.messageReceived(receivedMessageID)); } function testDuplicateReceiptAllowed() public { // Submit a mock message to be sent. FeeRewardInfo memory feeRewardInfo = FeeRewardInfo(1111111111111111, 0x52A258ED593C793251a89bfd36caE158EE9fC4F8); - bytes32 receivedMessageID = + bytes32 sentMessageID = _sendTestMessageWithFee(DEFAULT_ORIGIN_BLOCKCHAIN_ID, feeRewardInfo.feeAmount); // Mock receiving a message with the 2 receipts for the same mock message above. TeleporterMessageReceipt[] memory receipts = new TeleporterMessageReceipt[](2); TeleporterMessageReceipt memory receipt = TeleporterMessageReceipt({ - receivedMessageID: receivedMessageID, + receivedMessageID: sentMessageID, relayerRewardAddress: feeRewardInfo.relayerRewardAddress }); receipts[0] = receipt; receipts[1] = receipt; + uint256 receivedMessageNonce = 12; + bytes32 receivedMessageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageNonce); TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(receivedMessageID, new bytes(0)); + _createMockTeleporterMessage(receivedMessageNonce, new bytes(0)); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); @@ -161,14 +164,10 @@ contract MarkReceiptTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID - ), + teleporterMessenger.getRelayerRewardAddress(receivedMessageID), expectedRelayerRewardAddress ); - assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, receivedMessageID) - ); + assertTrue(teleporterMessenger.messageReceived(receivedMessageID)); // Check that the message hashes for the message receipts we received have been cleared. assertEq( diff --git a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol index bfba2bf96..320adcfb1 100644 --- a/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol +++ b/contracts/src/Teleporter/tests/MessageReceivedTests.t.sol @@ -18,25 +18,22 @@ contract MessageReceivedTest is TeleporterMessengerTest { function testReceivedMessage() public { // Mock receiving a message from another subnet. address relayerRewardAddress = 0xA66884fAdC0D4d7B7eedcF61Eb863Ff413bB6234; + uint256 messageNonce = 1; + bytes32 messageID = _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageNonce); _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - _createMessageID(1), + messageNonce, relayerRewardAddress, new TeleporterMessageReceipt[](0) ); - assertEq( - teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, _createMessageID(1) - ), - true - ); + assertEq(teleporterMessenger.messageReceived(messageID), true); } function testUnreceivedMessage() public { assertEq( teleporterMessenger.messageReceived( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, _createMessageID(1) + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 1) ), false ); diff --git a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol index 7d8a4eb5b..7135868a1 100644 --- a/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/ReceiveCrossChainMessageTests.t.sol @@ -36,7 +36,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Construct the test message to be received. TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: _createMessageID(1), + messageNonce: 1, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -47,6 +47,8 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { }); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); + bytes32 messageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageNonce); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -58,7 +60,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + messageID, address(this), DEFAULT_RELAYER_REWARD_ADDRESS, messageToReceive @@ -71,11 +73,12 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Check receipt queue contents TeleporterMessageReceipt memory receipt = teleporterMessenger.getReceiptAtIndex(DEFAULT_ORIGIN_BLOCKCHAIN_ID, 0); - assertEq(receipt.receivedMessageID, _createMessageID(1)); + assertEq(receipt.receivedMessageID, messageID); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); // Receive at a different index - messageToReceive.messageID = bytes32(uint256(2)); + messageToReceive.messageNonce = 2; + messageID = _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageNonce); warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); _setUpSuccessGetVerifiedWarpMessageMock(3, warpMessage); @@ -84,7 +87,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + messageID, address(this), DEFAULT_RELAYER_REWARD_ADDRESS, messageToReceive @@ -96,7 +99,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Check receipt queue contents receipt = teleporterMessenger.getReceiptAtIndex(DEFAULT_ORIGIN_BLOCKCHAIN_ID, 1); - assertEq(receipt.receivedMessageID, bytes32(uint256(2))); + assertEq(receipt.receivedMessageID, messageID); assertEq(receipt.relayerRewardAddress, DEFAULT_RELAYER_REWARD_ADDRESS); } @@ -132,8 +135,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { function testInvalidOriginSenderAddress() public { // Construct the test message to be received. - TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); + TeleporterMessage memory messageToReceive = _createMockTeleporterMessage(1, new bytes(0)); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); @@ -149,8 +151,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { function testInvalidDestinationBlockchainID() public { // Construct the test message to be received. - TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); + TeleporterMessage memory messageToReceive = _createMockTeleporterMessage(1, new bytes(0)); bytes32 invalidDestinationBlockchainID = bytes32(hex"deadbeefcafebabedeadbeefcafebabedeadbeefcafebabedeadbeefcafebabe"); messageToReceive.destinationBlockchainID = invalidDestinationBlockchainID; @@ -187,7 +188,7 @@ contract ReceiveCrossChainMessagedTest is TeleporterMessengerTest { // Construct the test message to be received. TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: bytes32(uint256(42)), + messageNonce: 42, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, diff --git a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol index fadc6f975..fd6e155f4 100644 --- a/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol +++ b/contracts/src/Teleporter/tests/RedeemRelayerRewardsTests.t.sol @@ -108,8 +108,9 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { receivedMessageID: messageID, relayerRewardAddress: feeRewardInfo.relayerRewardAddress }); - TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(_createMessageID(1), new bytes(0)); + TeleporterMessage memory messageToReceive = _createMockTeleporterMessage(1, new bytes(0)); + bytes32 receivedMessageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageNonce); messageToReceive.receipts = receipts; WarpMessage memory warpMessage = @@ -122,7 +123,7 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + receivedMessageID, address(this), expectedRelayerRewardAddress, messageToReceive @@ -139,13 +140,9 @@ contract RedeemRelayerRewardsTest is TeleporterMessengerTest { // Check that the message received is considered delivered, and that the relayer reward address is stored. assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1) - ), + teleporterMessenger.getRelayerRewardAddress(receivedMessageID), expectedRelayerRewardAddress ); - assertTrue( - teleporterMessenger.messageReceived(DEFAULT_ORIGIN_BLOCKCHAIN_ID, _createMessageID(1)) - ); + assertTrue(teleporterMessenger.messageReceived(receivedMessageID)); } } diff --git a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol index 5ae91daf4..aa6d8f5c2 100644 --- a/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol +++ b/contracts/src/Teleporter/tests/RetryMessageExecutionTests.t.sol @@ -112,7 +112,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { function testMessageHashNotFound() public { // Retrying a message that never was delivered should always fail. TeleporterMessage memory fakeMessage = TeleporterMessage({ - messageID: bytes32(uint256(12345)), + messageNonce: 12345, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), @@ -191,7 +191,7 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { action = FlakyMessageReceiverAction.ReceiveMessage; } TeleporterMessage memory messageToReceive = TeleporterMessage({ - messageID: bytes32(uint256(42)), + messageNonce: 42, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(destinationContract), @@ -202,6 +202,8 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { }); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); + bytes32 messageID = + _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageNonce); // Mock the call to the warp precompile to get the message. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -210,13 +212,11 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { // The message should be successfully received, but its execution should fail. vm.roll(12); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); - emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive - ); + emit MessageExecutionFailed(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID, messageToReceive); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + messageID, address(this), DEFAULT_RELAYER_REWARD_ADDRESS, messageToReceive @@ -229,16 +229,9 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { assertEq(destinationContract.latestMessageSenderSubnetID(), bytes32(0)); assertEq(destinationContract.latestMessageSenderAddress(), address(0)); assertEq( - teleporterMessenger.getRelayerRewardAddress( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID - ), - DEFAULT_RELAYER_REWARD_ADDRESS - ); - assertTrue( - teleporterMessenger.messageReceived( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID - ) + teleporterMessenger.getRelayerRewardAddress(messageID), DEFAULT_RELAYER_REWARD_ADDRESS ); + assertTrue(teleporterMessenger.messageReceived(messageID)); return (DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive, messageString); } @@ -251,7 +244,9 @@ contract RetryMessageExecutionTest is TeleporterMessengerTest { // Now retry the message execution in a block with an odd height, which should succeed. vm.roll(13); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); - emit MessageExecuted(originBlockchainID, message.messageID); + emit MessageExecuted( + originBlockchainID, _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, message.messageNonce) + ); teleporterMessenger.retryMessageExecution(originBlockchainID, message); // Check that the message had the proper affect on the destination contract. diff --git a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol index db5711224..38073d513 100644 --- a/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/RetrySendCrossChainMessageTests.t.sol @@ -21,9 +21,10 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testSuccess() public { // Send a message - bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456); + uint256 expectedNonce = teleporterMessenger.messageNonce(); + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456); TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: messageID, + messageNonce: expectedNonce, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -41,7 +42,7 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testMessageNotFound() public { TeleporterMessage memory fakeMessage = TeleporterMessage({ - messageID: bytes32(uint256(345)), + messageNonce: 345, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -58,9 +59,10 @@ contract RetrySendCrossChainMessageTest is TeleporterMessengerTest { function testInvalidMessageHash() public { // Send a message, then try to alter it's contents. - bytes32 messageID = _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456); + uint256 expectedNonce = teleporterMessenger.messageNonce(); + _sendTestMessageWithFee(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 654456); TeleporterMessage memory alteredMessage = TeleporterMessage({ - messageID: messageID, + messageNonce: expectedNonce, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, diff --git a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol index c4f08ee20..8ac6964c6 100644 --- a/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol +++ b/contracts/src/Teleporter/tests/SendCrossChainMessageTests.t.sol @@ -24,8 +24,11 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testSendMessageNoFee() public { // Arrange + uint256 expectedMessageNonce = teleporterMessenger.messageNonce(); + bytes32 expectedMessageID = + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessageNonce); TeleporterMessage memory expectedMessage = - _createMockTeleporterMessage(teleporterMessenger.getNextMessageID(), hex"deadbeef"); + _createMockTeleporterMessage(expectedMessageNonce, hex"deadbeef"); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, @@ -52,10 +55,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { // Expect the SendCrossChainMessage event to be emitted. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( - messageInput.destinationBlockchainID, - expectedMessage.messageID, - expectedMessage, - feeInfo + messageInput.destinationBlockchainID, expectedMessageID, expectedMessage, feeInfo ); // Act @@ -70,8 +70,9 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { function testSendMessageWithFee() public { // Arrange // Construct the message to submit. + uint256 expectedMessageNonce = teleporterMessenger.messageNonce(); TeleporterMessage memory expectedMessage = - _createMockTeleporterMessage(teleporterMessenger.getNextMessageID(), hex"deadbeef"); + _createMockTeleporterMessage(expectedMessageNonce, hex"deadbeef"); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(_mockFeeAsset), 13131313131313131313); TeleporterMessageInput memory messageInput = TeleporterMessageInput({ @@ -100,7 +101,7 @@ contract SendCrossChainMessageTest is TeleporterMessengerTest { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( messageInput.destinationBlockchainID, - expectedMessage.messageID, + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessageNonce), expectedMessage, feeInfo ); diff --git a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol index c848274f0..6830f02fa 100644 --- a/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol +++ b/contracts/src/Teleporter/tests/SendSpecifiedReceiptsTests.t.sol @@ -34,20 +34,20 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { for (uint256 i = 0; i < relayerRewardAddresses.length; i++) { _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - _createMessageID(i + 1), + i + 1, relayerRewardAddresses[i], new TeleporterMessageReceipt[](0) ); expectedReceipts[i] = TeleporterMessageReceipt({ - receivedMessageID: _createMessageID(i + 1), + receivedMessageID: _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, i + 1), relayerRewardAddress: relayerRewardAddresses[i] }); } // Mock sending a message back to that chain, which should include the 3 receipts. - bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); + uint256 expectedMessageNonce = teleporterMessenger.messageNonce(); TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: expectedMessageID, + messageNonce: expectedMessageNonce, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, @@ -56,6 +56,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { receipts: expectedReceipts, message: new bytes(0) }); + bytes32 expectedMessageID = + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, expectedMessageNonce); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); TeleporterFeeInfo memory feeInfo = TeleporterFeeInfo(address(0), 0); emit SendCrossChainMessage( @@ -65,24 +67,25 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { assertEq(outboundMessageID, expectedMessageID); assertEq( teleporterMessenger.getRelayerRewardAddress( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, _createMessageID(1) + _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 1) ), relayerRewardAddresses[0] ); TeleporterMessageReceipt[] memory newExpectedReceipts = new TeleporterMessageReceipt[](2); newExpectedReceipts[0] = TeleporterMessageReceipt({ - receivedMessageID: _createMessageID(3), + receivedMessageID: _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 3), relayerRewardAddress: relayerRewardAddresses[2] }); newExpectedReceipts[1] = TeleporterMessageReceipt({ - receivedMessageID: _createMessageID(1), + receivedMessageID: _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 1), relayerRewardAddress: relayerRewardAddresses[0] }); + uint256 newExpectedMessageNonce = teleporterMessenger.messageNonce(); bytes32 newExpectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory newExpectedMessage = TeleporterMessage({ - messageID: newExpectedMessageID, + messageNonce: newExpectedMessageNonce, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(0), @@ -94,8 +97,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Retry sending two of the receipts with {sendSpecifiedReceipts}. bytes32[] memory receiptIDs = new bytes32[](2); - receiptIDs[0] = _createMessageID(3); - receiptIDs[1] = _createMessageID(1); + receiptIDs[0] = _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 3); + receiptIDs[1] = _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 1); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit SendCrossChainMessage( @@ -112,22 +115,23 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Mock receiving a message from another chain _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - _createMessageID(1), + 1, DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) ); // Mock sending a message to that chain, which should include the 2 copies of the same receipt. TeleporterMessageReceipt memory expectedReceipt = TeleporterMessageReceipt({ - receivedMessageID: _createMessageID(1), + receivedMessageID: _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 1), relayerRewardAddress: DEFAULT_RELAYER_REWARD_ADDRESS }); TeleporterMessageReceipt[] memory expectedReceipts = new TeleporterMessageReceipt[](2); expectedReceipts[0] = expectedReceipt; expectedReceipts[1] = expectedReceipt; + uint256 expectedMessageNonce = teleporterMessenger.messageNonce(); bytes32 expectedMessageID = teleporterMessenger.getNextMessageID(); TeleporterMessage memory expectedMessage = TeleporterMessage({ - messageID: expectedMessageID, + messageNonce: expectedMessageNonce, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: address(0), @@ -138,8 +142,8 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { }); bytes32[] memory messageIDs = new bytes32[](2); - messageIDs[0] = _createMessageID(1); - messageIDs[1] = _createMessageID(1); + messageIDs[0] = _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 1); + messageIDs[1] = _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 1); // Test sendSpecifiedReceipts when there are duplicate message IDs in the input. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); @@ -159,13 +163,13 @@ contract SendSpecifiedReceiptsTest is TeleporterMessengerTest { // Mock receiving a message from another chain _receiveTestMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, - _createMessageID(1), + 1, DEFAULT_RELAYER_REWARD_ADDRESS, new TeleporterMessageReceipt[](0) ); bytes32[] memory missingIDs = new bytes32[](1); - missingIDs[0] = _createMessageID(21); + missingIDs[0] = _createMessageID(DEFAULT_DESTINATION_BLOCKCHAIN_ID, 21); // Try to send a receipt for an unreceived message from that chain - should fail. vm.expectRevert(_formatTeleporterErrorMessage("receipt not found")); diff --git a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol index 5453e6dd2..704212bd3 100644 --- a/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol +++ b/contracts/src/Teleporter/tests/TeleporterMessengerTest.t.sol @@ -165,13 +165,13 @@ contract TeleporterMessengerTest is Test { function _receiveTestMessage( bytes32 originBlockchainID, - bytes32 messageID, + uint256 messageNonce, address relayerRewardAddress, TeleporterMessageReceipt[] memory receipts ) internal { // Construct the test message to be received. TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(messageID, new bytes(0)); + _createMockTeleporterMessage(messageNonce, new bytes(0)); messageToReceive.receipts = receipts; // Both the sender and destination address should be the teleporter contract address, @@ -186,7 +186,7 @@ contract TeleporterMessengerTest is Test { vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + _createMessageID(originBlockchainID, messageNonce), address(this), relayerRewardAddress, messageToReceive @@ -204,10 +204,12 @@ contract TeleporterMessengerTest is Test { // Construct the test message to be received. By default, the destination // address will be the DEFAULT_DESTINATION_ADDRESS. + uint256 messageNonce = 9; TeleporterMessage memory messageToReceive = - _createMockTeleporterMessage(_createMessageID(9), messageData); + _createMockTeleporterMessage(messageNonce, messageData); WarpMessage memory warpMessage = _createDefaultWarpMessage(DEFAULT_ORIGIN_BLOCKCHAIN_ID, abi.encode(messageToReceive)); + bytes32 messageID = _createMessageID(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageNonce); // We have to mock the precompile call so that it doesn't revert in the tests. _setUpSuccessGetVerifiedWarpMessageMock(0, warpMessage); @@ -218,13 +220,11 @@ contract TeleporterMessengerTest is Test { // Receive the message - which should fail execution. vm.expectEmit(true, true, true, true, address(teleporterMessenger)); - emit MessageExecutionFailed( - DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageToReceive.messageID, messageToReceive - ); + emit MessageExecutionFailed(DEFAULT_ORIGIN_BLOCKCHAIN_ID, messageID, messageToReceive); vm.expectEmit(true, true, true, true, address(teleporterMessenger)); emit ReceiveCrossChainMessage( warpMessage.sourceChainID, - messageToReceive.messageID, + messageID, address(this), DEFAULT_RELAYER_REWARD_ADDRESS, messageToReceive @@ -234,23 +234,22 @@ contract TeleporterMessengerTest is Test { return (DEFAULT_ORIGIN_BLOCKCHAIN_ID, DEFAULT_DESTINATION_ADDRESS, messageToReceive); } - function _createMessageID(uint256 messageNonce) internal view returns (bytes32) { - return sha256( - abi.encode( - address(teleporterMessenger), DEFAULT_DESTINATION_BLOCKCHAIN_ID, messageNonce - ) - ); + function _createMessageID( + bytes32 sourceBlockchainID, + uint256 messageNonce + ) internal view returns (bytes32) { + return sha256(abi.encode(address(teleporterMessenger), sourceBlockchainID, messageNonce)); } // Create a mock message to be used in tests. It should include no receipts // because receipts are only valid if they refer to messages previously send // to the origin chain. function _createMockTeleporterMessage( - bytes32 messageID, + uint256 messageNonce, bytes memory message ) internal view returns (TeleporterMessage memory) { return TeleporterMessage({ - messageID: messageID, + messageNonce: messageNonce, senderAddress: address(this), destinationBlockchainID: DEFAULT_DESTINATION_BLOCKCHAIN_ID, destinationAddress: DEFAULT_DESTINATION_ADDRESS, diff --git a/tests/flows/add_fee_amount.go b/tests/flows/add_fee_amount.go index 303d378c3..92c8b93f6 100644 --- a/tests/flows/add_fee_amount.go +++ b/tests/flows/add_fee_amount.go @@ -72,7 +72,7 @@ func AddFeeAmount(network interfaces.Network) { // Check Teleporter message received on the destination (SubnetB) delivered, err := - subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID) + subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -94,7 +94,7 @@ func AddFeeAmount(network interfaces.Network) { network.RelayMessage(ctx, sendCrossChainMsgReceipt, subnetBInfo, subnetAInfo, true) // Check message delivered - delivered, err = subnetAInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetBInfo.BlockchainID, messageID) + delivered, err = subnetAInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/basic_send_receive.go b/tests/flows/basic_send_receive.go index f45313303..92f8915fb 100644 --- a/tests/flows/basic_send_receive.go +++ b/tests/flows/basic_send_receive.go @@ -72,7 +72,7 @@ func BasicSendReceive(network interfaces.Network) { // Check Teleporter message received on the destination // delivered, err := subnetBInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -99,7 +99,7 @@ func BasicSendReceive(network interfaces.Network) { // Check Teleporter message received on the destination // delivered, err = subnetAInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetBInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/deliver_to_nonexistent_contract.go b/tests/flows/deliver_to_nonexistent_contract.go index 2be592475..bd60c4505 100644 --- a/tests/flows/deliver_to_nonexistent_contract.go +++ b/tests/flows/deliver_to_nonexistent_contract.go @@ -74,7 +74,7 @@ func DeliverToNonExistentContract(network interfaces.Network) { Expect(err).Should(BeNil()) Expect(sendEvent.DestinationBlockchainID[:]).Should(Equal(subnetBInfo.BlockchainID[:])) - teleporterMessageID := sendEvent.Message.MessageID + teleporterMessageID := sendEvent.MessageID // // Relay the message to the destination @@ -84,7 +84,6 @@ func DeliverToNonExistentContract(network interfaces.Network) { receiveEvent, err := utils.GetEventFromLogs(receipt.Logs, subnetAInfo.TeleporterMessenger.ParseReceiveCrossChainMessage) Expect(err).Should(BeNil()) - deliveredTeleporterMessage := receiveEvent.Message // // Check that the message was successfully relayed @@ -92,7 +91,6 @@ func DeliverToNonExistentContract(network interfaces.Network) { log.Info("Checking the message was successfully relayed") delivered, err := subnetBInfo.TeleporterMessenger.MessageReceived( &bind.CallOpts{}, - subnetAInfo.BlockchainID, teleporterMessageID, ) Expect(err).Should(BeNil()) @@ -107,7 +105,7 @@ func DeliverToNonExistentContract(network interfaces.Network) { subnetBInfo.TeleporterMessenger.ParseMessageExecutionFailed, ) Expect(err).Should(BeNil()) - Expect(executionFailedEvent.Message.MessageID).Should(Equal(deliveredTeleporterMessage.MessageID)) + Expect(executionFailedEvent.MessageID).Should(Equal(receiveEvent.MessageID)) // // Deploy the contract on Subnet B @@ -127,7 +125,7 @@ func DeliverToNonExistentContract(network interfaces.Network) { ctx, subnetAInfo.BlockchainID, subnetBInfo, - deliveredTeleporterMessage, + receiveEvent.Message, fundedKey, ) diff --git a/tests/flows/deliver_to_wrong_chain.go b/tests/flows/deliver_to_wrong_chain.go index 282b86e9d..f57c14fc1 100644 --- a/tests/flows/deliver_to_wrong_chain.go +++ b/tests/flows/deliver_to_wrong_chain.go @@ -81,7 +81,7 @@ func DeliverToWrongChain(network interfaces.Network) { // Check that the message was not received on the Subnet C // delivered, err := subnetCInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, expectedAtoCMessageID, + &bind.CallOpts{}, expectedAtoCMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeFalse()) diff --git a/tests/flows/erc20_bridge_multihop.go b/tests/flows/erc20_bridge_multihop.go index 6f6eba40b..74a9e8d49 100644 --- a/tests/flows/erc20_bridge_multihop.go +++ b/tests/flows/erc20_bridge_multihop.go @@ -85,7 +85,6 @@ func ERC20BridgeMultihop(network interfaces.Network) { // Check Teleporter message received on the destination delivered, err := subnetBTeleporterMessenger.MessageReceived( &bind.CallOpts{}, - subnetAInfo.BlockchainID, messageID, ) Expect(err).Should(BeNil()) @@ -149,7 +148,6 @@ func ERC20BridgeMultihop(network interfaces.Network) { // Check Teleporter message received on the destination delivered, err = subnetCTeleporterMessenger.MessageReceived( &bind.CallOpts{}, - subnetAInfo.BlockchainID, messageID, ) Expect(err).Should(BeNil()) @@ -196,7 +194,7 @@ func ERC20BridgeMultihop(network interfaces.Network) { Expect(err).Should(BeNil()) // Check Teleporter message received on the destination - delivered, err = subnetBTeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID) + delivered, err = subnetBTeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -253,7 +251,6 @@ func ERC20BridgeMultihop(network interfaces.Network) { // Check Teleporter message received on the destination delivered, err = subnetATeleporterMessenger.MessageReceived( &bind.CallOpts{}, - subnetBInfo.BlockchainID, messageID, ) Expect(err).Should(BeNil()) @@ -264,7 +261,7 @@ func ERC20BridgeMultihop(network interfaces.Network) { event, err := utils.GetEventFromLogs(receipt.Logs, subnetATeleporterMessenger.ParseSendCrossChainMessage) Expect(err).Should(BeNil()) Expect(event.DestinationBlockchainID[:]).Should(Equal(subnetCInfo.BlockchainID[:])) - messageID = event.Message.MessageID + messageID = event.MessageID // Check the redeemable reward balance of the relayer if the relayer address was set updatedRewardAmount, err := subnetATeleporterMessenger.CheckRelayerRewardAmount( @@ -283,7 +280,7 @@ func ERC20BridgeMultihop(network interfaces.Network) { Expect(err).Should(BeNil()) // Check Teleporter message received on the destination - delivered, err = subnetCTeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID) + delivered, err = subnetCTeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -334,7 +331,7 @@ func ERC20BridgeMultihop(network interfaces.Network) { network.RelayMessage(ctx, receipt, subnetCInfo, subnetAInfo, true) // Check Teleporter message received on the destination - delivered, err = subnetATeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetCInfo.BlockchainID, messageID) + delivered, err = subnetATeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -389,9 +386,9 @@ func submitCreateBridgeToken( log.Info("Successfully SubmitCreateBridgeToken", "txHash", tx.Hash().Hex(), - "messageID", event.Message.MessageID) + "messageID", event.MessageID) - return receipt, event.Message.MessageID + return receipt, event.MessageID } func bridgeToken( @@ -437,7 +434,7 @@ func bridgeToken( Expect(event.DestinationBlockchainID[:]).Should(Equal(nativeTokenChainID[:])) } - return receipt, event.Message.MessageID + return receipt, event.MessageID } func approveBridgeToken( diff --git a/tests/flows/example_messenger.go b/tests/flows/example_messenger.go index 5c3f2c2e1..de1ce2409 100644 --- a/tests/flows/example_messenger.go +++ b/tests/flows/example_messenger.go @@ -50,7 +50,7 @@ func ExampleMessenger(network interfaces.Network) { Expect(err).Should(BeNil()) Expect(event.DestinationBlockchainID[:]).Should(Equal(subnetBInfo.BlockchainID[:])) - teleporterMessageID := event.Message.MessageID + teleporterMessageID := event.MessageID // // Relay the message to the destination @@ -61,7 +61,7 @@ func ExampleMessenger(network interfaces.Network) { // Check Teleporter message received on the destination // delivered, err := subnetBInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/insufficient_gas.go b/tests/flows/insufficient_gas.go index 40d43de57..2ff579dbc 100644 --- a/tests/flows/insufficient_gas.go +++ b/tests/flows/insufficient_gas.go @@ -39,14 +39,14 @@ func InsufficientGas(network interfaces.Network) { Expect(err).Should(BeNil()) Expect(event.DestinationBlockchainID[:]).Should(Equal(subnetBInfo.BlockchainID[:])) - messageID := event.Message.MessageID + messageID := event.MessageID // Relay message from SubnetA to SubnetB receipt = network.RelayMessage(ctx, receipt, subnetAInfo, subnetBInfo, true) // Check Teleporter message received on the destination delivered, err := - subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID) + subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/relay_message_twice.go b/tests/flows/relay_message_twice.go index 73d306cca..91b26d5dc 100644 --- a/tests/flows/relay_message_twice.go +++ b/tests/flows/relay_message_twice.go @@ -53,7 +53,7 @@ func RelayMessageTwice(network interfaces.Network) { // log.Info("Checking the message was received on the destination") delivered, err := subnetBInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/relayer_modifies_message.go b/tests/flows/relayer_modifies_message.go index 1179f15ec..b831ef91a 100644 --- a/tests/flows/relayer_modifies_message.go +++ b/tests/flows/relayer_modifies_message.go @@ -55,7 +55,7 @@ func RelayerModifiesMessage(network interfaces.LocalNetwork) { // Check Teleporter message was not received on the destination delivered, err := - subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID) + subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeFalse()) } diff --git a/tests/flows/resubmit_altered_message.go b/tests/flows/resubmit_altered_message.go index 77facf22b..431c19641 100644 --- a/tests/flows/resubmit_altered_message.go +++ b/tests/flows/resubmit_altered_message.go @@ -40,7 +40,7 @@ func ResubmitAlteredMessage(network interfaces.Network) { log.Info("Checking the message was received on the destination") delivered, err := - subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID) + subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/retry_successful_execution.go b/tests/flows/retry_successful_execution.go index ea745a3f5..253a486fb 100644 --- a/tests/flows/retry_successful_execution.go +++ b/tests/flows/retry_successful_execution.go @@ -49,7 +49,7 @@ func RetrySuccessfulExecution(network interfaces.Network) { Expect(err).Should(BeNil()) Expect(event.DestinationBlockchainID[:]).Should(Equal(subnetBInfo.BlockchainID[:])) - teleporterMessageID := event.Message.MessageID + teleporterMessageID := event.MessageID // // Relay the message to the destination @@ -64,7 +64,7 @@ func RetrySuccessfulExecution(network interfaces.Network) { // Check Teleporter message received on the destination // delivered, err := subnetBInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/send_specific_receipts.go b/tests/flows/send_specific_receipts.go index 20515465d..28b5034d0 100644 --- a/tests/flows/send_specific_receipts.go +++ b/tests/flows/send_specific_receipts.go @@ -71,7 +71,7 @@ func SendSpecificReceipts(network interfaces.Network) { // Check that the first message was delivered delivered, err := - subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID1) + subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID1) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -88,7 +88,7 @@ func SendSpecificReceipts(network interfaces.Network) { // Check that the second message was delivered delivered, err = - subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetAInfo.BlockchainID, messageID2) + subnetBInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID2) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -110,7 +110,7 @@ func SendSpecificReceipts(network interfaces.Network) { network.RelayMessage(ctx, receipt, subnetBInfo, subnetAInfo, true) // Check that the message back to Subnet A was delivered - delivered, err = subnetAInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, subnetBInfo.BlockchainID, messageID) + delivered, err = subnetAInfo.TeleporterMessenger.MessageReceived(&bind.CallOpts{}, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) @@ -146,7 +146,6 @@ func SendSpecificReceipts(network interfaces.Network) { // Check delivered delivered, err = subnetAInfo.TeleporterMessenger.MessageReceived( &bind.CallOpts{}, - subnetBInfo.BlockchainID, messageID) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/flows/unallowed_relayer.go b/tests/flows/unallowed_relayer.go index 131b9e1ad..5088e7ce6 100644 --- a/tests/flows/unallowed_relayer.go +++ b/tests/flows/unallowed_relayer.go @@ -54,7 +54,7 @@ func UnallowedRelayer(network interfaces.Network) { // Check Teleporter message was not received on the destination // delivered, err := subnetBInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeFalse()) diff --git a/tests/flows/validator_churn.go b/tests/flows/validator_churn.go index 5ed3a7199..3a7b285ff 100644 --- a/tests/flows/validator_churn.go +++ b/tests/flows/validator_churn.go @@ -96,7 +96,7 @@ func ValidatorChurn(network interfaces.LocalNetwork) { // Verify the message was not delivered delivered, err := subnetBInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeFalse()) @@ -119,7 +119,7 @@ func ValidatorChurn(network interfaces.LocalNetwork) { // Verify the message was delivered delivered, err = subnetBInfo.TeleporterMessenger.MessageReceived( - &bind.CallOpts{}, subnetAInfo.BlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) Expect(err).Should(BeNil()) Expect(delivered).Should(BeTrue()) diff --git a/tests/testnet/network.go b/tests/testnet/network.go index 153f1de51..1690b7980 100644 --- a/tests/testnet/network.go +++ b/tests/testnet/network.go @@ -199,7 +199,7 @@ func (n *testNetwork) RelayMessage(ctx context.Context, ) Expect(err).Should(BeNil()) - teleporterMessageID := sendEvent.Message.MessageID + teleporterMessageID := sendEvent.MessageID receipt, err := n.getMessageDeliveryTransactionReceipt(cctx, source.BlockchainID, destination, teleporterMessageID) Expect(err).Should(BeNil()) @@ -220,7 +220,7 @@ func (n *testNetwork) checkMessageDelivered( } return destinationTeleporterMessenger.MessageReceived( - &bind.CallOpts{}, sourceBlockchainID, teleporterMessageID, + &bind.CallOpts{}, teleporterMessageID, ) } diff --git a/tests/utils/utils.go b/tests/utils/utils.go index 3089974a6..b9f80c19d 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -175,7 +175,7 @@ func SendSpecifiedReceiptsAndWaitForAcceptance( "originChainID", originChainID, "txHash", tx.Hash()) - return receipt, event.Message.MessageID + return receipt, event.MessageID } func HttpToWebsocketURI(uri string, blockchainID string) string { @@ -402,7 +402,7 @@ func SendCrossChainMessageAndWaitForAcceptance( "destinationChainID", destination.BlockchainID, "txHash", tx.Hash()) - return receipt, event.Message.MessageID + return receipt, event.MessageID } // Waits for a transaction to be mined. From 8e780bf422fcc0ea501876783d84c7250a406aca Mon Sep 17 00:00:00 2001 From: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> Date: Tue, 19 Dec 2023 15:25:26 -0500 Subject: [PATCH 15/16] Update contracts/src/Teleporter/TeleporterMessenger.sol Co-authored-by: Geoff Stuart Signed-off-by: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> --- contracts/src/Teleporter/TeleporterMessenger.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index dca9bb426..642bb70ac 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -46,7 +46,7 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { // The blockchain ID of the chain the contract is deployed on. Initialized lazily on the first call of `receiveCrossChainMessage` bytes32 public blockchainID; - // A monotonically incremented integer tracking the total number of message sent by this TeleporterMessenger contract. + // A monotonically incremented integer tracking the total number of messages sent by this TeleporterMessenger contract. // Used to provide uniqueness when generating message IDs for new messages. uint256 public messageNonce; From 74548debade1b0d6fdb19db3f07e853223325c47 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Tue, 19 Dec 2023 16:51:23 -0500 Subject: [PATCH 16/16] Fix abi bindings --- .../go/Teleporter/TeleporterMessenger/TeleporterMessenger.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go index 99788069e..f6127aac3 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go @@ -66,7 +66,7 @@ type TeleporterMessageReceipt struct { // TeleporterMessengerMetaData contains all meta data concerning the TeleporterMessenger contract. var TeleporterMessengerMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"receivedMessageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600160008190558055613126806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d39b0c171161007c578063d39b0c17146102e5578063e6e67bd514610345578063e8105ebc14610381578063ebc3b1ba146103b3578063ecc70428146103d6578063f5590f38146103df57600080fd5b8063a9a856141461026f578063b771b3bc14610282578063c473eef814610290578063ccb5f809146102c9578063d127dc9b146102dc57600080fd5b80634e985c49116100ff5780634e985c49146101de57806362448850146101f1578063860a3b0614610204578063892bf41214610224578063980a25841461024457600080fd5b80630ecc142e1461013c57806322296c3a146101515780632bc8b0bf146101645780632e27c2231461018a57806340e19cee146101cb575b600080fd5b61014f61014a366004612119565b6103e7565b005b61014f61015f36600461218a565b61059b565b6101776101723660046121a7565b610690565b6040519081526020015b60405180910390f35b6101b36101983660046121a7565b6000908152600760205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610181565b61014f6101d9366004612119565b6106ad565b61014f6101ec3660046121c0565b610902565b6101776101ff3660046121ff565b610b3d565b6101776102123660046121a7565b60066020526000908152604090205481565b610237610232366004612239565b610b9b565b604051610181919061225b565b610177610252366004612239565b600091825260056020908152604080842092845291905290205490565b61017761027d3660046122bf565b610bce565b6101b36005600160991b0181565b61017761029e366004612357565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61014f6102d7366004612385565b610dde565b61017760025481565b6103376102f3366004612239565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b6040516101819291906123ac565b61036c6103533660046121a7565b6004602052600090815260409020805460019091015482565b60408051928352602083019190915201610181565b61039461038f366004612239565b611278565b604080516001600160a01b039093168352602083019190915201610181565b6103c66103c13660046121a7565b6112c1565b6040519015158152602001610181565b61017760035481565b6101776112e0565b6001600054146104125760405162461bcd60e51b8152600401610409906123d3565b60405180910390fd5b6002600081815590546104269083356112eb565b60008481526005602090815260408083208484528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051919250906104965760405162461bcd60e51b815260040161040990612416565b6000836040516020016104a991906126b1565b60408051601f19818403018152919052825181516020830120919250146104e25760405162461bcd60e51b8152600401610409906126c4565b82857f5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e186856020015160405161051992919061270d565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061054b908490600401612792565b6020604051808303816000875af115801561056a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058e91906127a5565b5050600160005550505050565b3360009081526008602090815260408083206001600160a01b03851684529091529020548061061d5760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b6064820152608401610409565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a361068c6001600160a01b0383163383611365565b5050565b60008181526004602052604081206106a7906113cd565b92915050565b60018054146106ce5760405162461bcd60e51b8152600401610409906127be565b600260015560006106e08383356112eb565b6000818152600660205260409020549091508061070f5760405162461bcd60e51b815260040161040990612416565b808360405160200161072191906126b1565b60405160208183030381529060405280519060200120146107545760405162461bcd60e51b8152600401610409906126c4565b6000610766608085016060860161218a565b6001600160a01b03163b116107da5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b6064820152608401610409565b604051829085907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a36000828152600660209081526040808320839055869161082b91870190870161218a565b61083860e0870187612803565b60405160240161084b9493929190612849565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061089361088c608087016060880161218a565b5a846113e0565b9050806108f65760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b6064820152608401610409565b50506001805550505050565b6001600054146109245760405162461bcd60e51b8152600401610409906123d3565b60026000558061098e5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b6064820152608401610409565b6001600160a01b0382166109b45760405162461bcd60e51b815260040161040990612874565b60008481526005602090815260408083208684529091529020546109ea5760405162461bcd60e51b815260040161040990612416565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610a875760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e747261637420616464726573730000000000000000006064820152608401610409565b6000610a9383836113fa565b6000868152600560209081526040808320888452909152812060020180549293508392909190610ac49084906128de565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b615760405162461bcd60e51b8152600401610409906123d3565b6002600055610b90610b7283612aee565b83356000908152600460205260409020610b8b90611562565b611671565b600160005592915050565b60408051808201909152600080825260208201526000838152600460205260409020610bc790836118cc565b9392505050565b6000600160005414610bf25760405162461bcd60e51b8152600401610409906123d3565b60026000908155856001600160401b03811115610c1157610c116128f1565b604051908082528060200260200182016040528015610c5657816020015b6040805180820190915260008082526020820152815260200190600190039081610c2f5790505b50905060005b86811015610d49576000888883818110610c7857610c78612b91565b6020908102929092013560008181526007909352604090922054919250506001600160a01b031680610cfb5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b6064820152608401610409565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d2b57610d2b612b91565b6020026020010181905250505080610d4290612ba7565b9050610c5c565b506040805160c08101825289815260006020820152610dcd918101610d7336899003890189612bc0565b81526020016000815260200186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050604080519283526020808401909152909201525082611671565b600160005598975050505050505050565b6001805414610dff5760405162461bcd60e51b8152600401610409906127be565b60026001556001600160a01b038116610e735760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b6064820152608401610409565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ec0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ee89190810190612c3c565b9150915080610f4b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b6064820152608401610409565b60208201516001600160a01b03163014610fc25760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b6064820152608401610409565b60008260400151806020019051810190610fdc9190612dd9565b90506000610fe8611991565b9050808260400151146110575760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b6064820152608401610409565b83518251600091611067916112eb565b6000818152600760205260409020549091506001600160a01b0316156110e65760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b6064820152608401610409565b6110f4338460a00151611a12565b6111525760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b6064820152608401610409565b600081815260076020526040902080546001600160a01b0319166001600160a01b03881617905560e08301515115611191578451611191908285611a87565b60c08301515160005b818110156111ec5760008560c0015182815181106111ba576111ba612b91565b602002602001015190506111db886000015182600001518360200151611bba565b506111e581612ba7565b905061119a565b50855160009081526004602090815260409182902082518084019093528483526001600160a01b038a169183019190915290611229908290611c8a565b8651604051339185917fcbccffab32a19dfcbd50a8f0413ee54e6b23c42c0cd8dfdecdcaf9f99fc7d27090611261908d908b90612fe9565b60405180910390a450506001805550505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000818152600760205260408120546001600160a01b031615156106a7565b600080610bc7611ce6565b604080513060208201529081018390526060810182905260009060029060800160408051601f19818403018152908290526113259161300d565b602060405180830381855afa158015611342573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610bc791906127a5565b6040516001600160a01b0383166024820152604481018290526113c890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d23565b505050565b805460018201546000916106a791613029565b60008060008084516020860160008989f195945050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146791906127a5565b905061147e6001600160a01b038516333086611df5565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156114c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e991906127a5565b905081811161154f5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610409565b6115598282613029565b95945050505050565b606060006115796005611574856113cd565b611e33565b9050806000036115c85760408051600080825260208201909252906115c0565b60408051808201909152600080825260208201528152602001906001900390816115995790505b509392505050565b806001600160401b038111156115e0576115e06128f1565b60405190808252806020026020018201604052801561162557816020015b60408051808201909152600080825260208201528152602001906001900390816115fe5790505b50915060005b8181101561166a5761163c84611e49565b83828151811061164e5761164e612b91565b60200260200101819052508061166390612ba7565b905061162b565b5050919050565b60008061167c611991565b90508061169b5760405162461bcd60e51b81526004016104099061303c565b6000806116a6611ce6565b915091506000604051806101000160405280848152602001336001600160a01b031681526020018860000151815260200188602001516001600160a01b0316815260200188606001518152602001886080015181526020018781526020018860a0015181525090506000816040516020016117219190613085565b604051602081830303815290604052905060036000815461174190612ba7565b909155506040880151602001516000901561179b576040890151516001600160a01b03166117815760405162461bcd60e51b815260040161040990612874565b6040890151805160209091015161179891906113fa565b90505b6040805180820182528a820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528e516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b03191691909516179093559101516002909101558a519151909186917f5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e1906118489088908690613098565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061187a908690600401612792565b6020604051808303816000875af1158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bd91906127a5565b50939998505050505050505050565b60408051808201909152600080825260208201526118e9836113cd565b82106119415760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b6064820152608401610409565b82600201600083856000015461195791906128de565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60025460009080611a0d576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0591906127a5565b600281905590505b919050565b60008151600003611a25575060016106a7565b60005b8251811015611a7d57836001600160a01b0316838281518110611a4d57611a4d612b91565b60200260200101516001600160a01b031603611a6d5760019150506106a7565b611a7681612ba7565b9050611a28565b5060009392505050565b80608001515a1015611ae95760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b6064820152608401610409565b80606001516001600160a01b03163b600003611b0a576113c8838383611f14565b602081015160e0820151604051600092611b289287926024016130ab565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b6d9190846113e0565b905080611b8657611b7f858585611f14565b5050505050565b604051849086907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a35050505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c145750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c7f9084906128de565b909155505050505050565b6001820180548291600285019160009182611ca483612ba7565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b600254600354600091829181611d0e5760405162461bcd60e51b81526004016104099061303c565b80611d1983836112eb565b9350935050509091565b6000611d78826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f899092919063ffffffff16565b8051909150156113c85780806020019051810190611d9691906130d5565b6113c85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610409565b6040516001600160a01b0380851660248301528316604482015260648101829052611e2d9085906323b872dd60e01b90608401611391565b50505050565b6000818310611e425781610bc7565b5090919050565b604080518082019091526000808252602082015281546001830154819003611eb35760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d707479207175657565000000000000006044820152606401610409565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f0c9082906128de565b909255919050565b80604051602001611f259190613085565b60408051601f1981840301815282825280516020918201206000868152600690925291902055829084907f080c35109e3a4562b6c55ca3fa4600962ad174e7a3aaf7b7ab558a25382b446590611f7c908590613085565b60405180910390a3505050565b6060611f988484600085611fa0565b949350505050565b6060824710156120015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610409565b600080866001600160a01b0316858760405161201d919061300d565b60006040518083038185875af1925050503d806000811461205a576040519150601f19603f3d011682016040523d82523d6000602084013e61205f565b606091505b50915091506120708783838761207b565b979650505050505050565b606083156120ea5782516000036120e3576001600160a01b0385163b6120e35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610409565b5081611f98565b611f9883838151156120ff5781518083602001fd5b8060405162461bcd60e51b81526004016104099190612792565b6000806040838503121561212c57600080fd5b8235915060208301356001600160401b0381111561214957600080fd5b8301610100818603121561215c57600080fd5b809150509250929050565b6001600160a01b038116811461217c57600080fd5b50565b8035611a0d81612167565b60006020828403121561219c57600080fd5b8135610bc781612167565b6000602082840312156121b957600080fd5b5035919050565b600080600080608085870312156121d657600080fd5b843593506020850135925060408501356121ef81612167565b9396929550929360600135925050565b60006020828403121561221157600080fd5b81356001600160401b0381111561222757600080fd5b820160e08185031215610bc757600080fd5b6000806040838503121561224c57600080fd5b50508035926020909101359150565b815181526020808301516001600160a01b031690820152604081016106a7565b60008083601f84011261228d57600080fd5b5081356001600160401b038111156122a457600080fd5b6020830191508360208260051b85010111156112ba57600080fd5b60008060008060008086880360a08112156122d957600080fd5b8735965060208801356001600160401b03808211156122f757600080fd5b6123038b838c0161227b565b90985096508691506040603f198401121561231d57600080fd5b60408a01955060808a013592508083111561233757600080fd5b505061234589828a0161227b565b979a9699509497509295939492505050565b6000806040838503121561236a57600080fd5b823561237581612167565b9150602083013561215c81612167565b6000806040838503121561239857600080fd5b823563ffffffff8116811461237557600080fd5b82815260608101610bc7602083018480516001600160a01b03168252602090810151910152565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e1984360301811261247357600080fd5b83016020810192503590506001600160401b0381111561249257600080fd5b8060051b36038213156112ba57600080fd5b8183526000602080850194508260005b858110156124e25781356124c781612167565b6001600160a01b0316875295820195908201906001016124b4565b509495945050505050565b6000808335601e1984360301811261250457600080fd5b83016020810192503590506001600160401b0381111561252357600080fd5b8060061b36038213156112ba57600080fd5b8183526000602080850194508260005b858110156124e257813587528282013561255e81612167565b6001600160a01b0316878401526040968701969190910190600101612545565b6000808335601e1984360301811261259557600080fd5b83016020810192503590506001600160401b038111156125b457600080fd5b8036038213156112ba57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600061010082358452602083013561260381612167565b6001600160a01b03166020850152604083810135908501526126276060840161217f565b6001600160a01b031660608501526080838101359085015261264c60a084018461245c565b8260a087015261265f83870182846124a4565b9250505061267060c08401846124ed565b85830360c0870152612683838284612535565b9250505061269460e084018461257e565b85830360e08701526126a78382846125c3565b9695505050505050565b602081526000610bc760208301846125ec565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b60608152600061272060608301856125ec565b9050610bc7602083018480516001600160a01b03168252602090810151910152565b60005b8381101561275d578181015183820152602001612745565b50506000910152565b6000815180845261277e816020860160208601612742565b601f01601f19169290920160200192915050565b602081526000610bc76020830184612766565b6000602082840312156127b757600080fd5b5051919050565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b6000808335601e1984360301811261281a57600080fd5b8301803591506001600160401b0382111561283457600080fd5b6020019150368190038213156112ba57600080fd5b8481526001600160a01b03841660208201526060604082018190526000906126a790830184866125c3565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106a7576106a76128c8565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612929576129296128f1565b60405290565b60405160c081016001600160401b0381118282101715612929576129296128f1565b60405161010081016001600160401b0381118282101715612929576129296128f1565b604051601f8201601f191681016001600160401b038111828210171561299c5761299c6128f1565b604052919050565b6000604082840312156129b657600080fd5b6129be612907565b905081356129cb81612167565b808252506020820135602082015292915050565b60006001600160401b038211156129f8576129f86128f1565b5060051b60200190565b600082601f830112612a1357600080fd5b81356020612a28612a23836129df565b612974565b82815260059290921b84018101918181019086841115612a4757600080fd5b8286015b84811015612a6b578035612a5e81612167565b8352918301918301612a4b565b509695505050505050565b60006001600160401b03821115612a8f57612a8f6128f1565b50601f01601f191660200190565b600082601f830112612aae57600080fd5b8135612abc612a2382612a76565b818152846020838601011115612ad157600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b0057600080fd5b612b0861292f565b82358152612b186020840161217f565b6020820152612b2a36604085016129a4565b60408201526080830135606082015260a08301356001600160401b0380821115612b5357600080fd5b612b5f36838701612a02565b608084015260c0850135915080821115612b7857600080fd5b50612b8536828601612a9d565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612bb957612bb96128c8565b5060010190565b600060408284031215612bd257600080fd5b610bc783836129a4565b8051611a0d81612167565b600082601f830112612bf857600080fd5b8151612c06612a2382612a76565b818152846020838601011115612c1b57600080fd5b611f98826020830160208701612742565b80518015158114611a0d57600080fd5b60008060408385031215612c4f57600080fd5b82516001600160401b0380821115612c6657600080fd5b9084019060608287031215612c7a57600080fd5b604051606081018181108382111715612c9557612c956128f1565b604052825181526020830151612caa81612167565b6020820152604083015182811115612cc157600080fd5b612ccd88828601612be7565b6040830152509350612ce491505060208401612c2c565b90509250929050565b600082601f830112612cfe57600080fd5b81516020612d0e612a23836129df565b82815260059290921b84018101918181019086841115612d2d57600080fd5b8286015b84811015612a6b578051612d4481612167565b8352918301918301612d31565b600082601f830112612d6257600080fd5b81516020612d72612a23836129df565b82815260069290921b84018101918181019086841115612d9157600080fd5b8286015b84811015612a6b5760408189031215612dae5760008081fd5b612db6612907565b8151815284820151612dc781612167565b81860152835291830191604001612d95565b600060208284031215612deb57600080fd5b81516001600160401b0380821115612e0257600080fd5b908301906101008286031215612e1757600080fd5b612e1f612951565b82518152612e2f60208401612bdc565b602082015260408301516040820152612e4a60608401612bdc565b60608201526080830151608082015260a083015182811115612e6b57600080fd5b612e7787828601612ced565b60a08301525060c083015182811115612e8f57600080fd5b612e9b87828601612d51565b60c08301525060e083015182811115612eb357600080fd5b612ebf87828601612be7565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156124e25781516001600160a01b031687529582019590820190600101612ee2565b600081518084526020808501945080840160005b838110156124e257612f41878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f1b565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612f9360608601826001600160a01b03169052565b506080830151608085015260a08301518160a0860152612fb582860182612ece565b91505060c083015184820360c0860152612fcf8282612f07565b91505060e083015184820360e08601526115598282612766565b6001600160a01b0383168152604060208201819052600090611f9890830184612f54565b6000825161301f818460208701612742565b9190910192915050565b818103818111156106a7576106a76128c8565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b602081526000610bc76020830184612f54565b6060815260006127206060830185612f54565b8381526001600160a01b038316602082015260606040820181905260009061155990830184612766565b6000602082840312156130e757600080fd5b610bc782612c2c56fea26469706673582212204c90059a8738682272ee7bda49ec1e62cbfb80940f6076e88b3c33c9beab35a164736f6c63430008120033", + Bin: "0x608060405234801561001057600080fd5b50600160008190558055613126806100296000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063a9a85614116100b8578063d39b0c171161007c578063d39b0c17146102e5578063e6e67bd514610345578063e8105ebc14610381578063ebc3b1ba146103b3578063ecc70428146103d6578063f5590f38146103df57600080fd5b8063a9a856141461026f578063b771b3bc14610282578063c473eef814610290578063ccb5f809146102c9578063d127dc9b146102dc57600080fd5b80634e985c49116100ff5780634e985c49146101de57806362448850146101f1578063860a3b0614610204578063892bf41214610224578063980a25841461024457600080fd5b80630ecc142e1461013c57806322296c3a146101515780632bc8b0bf146101645780632e27c2231461018a57806340e19cee146101cb575b600080fd5b61014f61014a366004612119565b6103e7565b005b61014f61015f36600461218a565b61059b565b6101776101723660046121a7565b610690565b6040519081526020015b60405180910390f35b6101b36101983660046121a7565b6000908152600760205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610181565b61014f6101d9366004612119565b6106ad565b61014f6101ec3660046121c0565b610902565b6101776101ff3660046121ff565b610b3d565b6101776102123660046121a7565b60066020526000908152604090205481565b610237610232366004612239565b610b9b565b604051610181919061225b565b610177610252366004612239565b600091825260056020908152604080842092845291905290205490565b61017761027d3660046122bf565b610bce565b6101b36005600160991b0181565b61017761029e366004612357565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61014f6102d7366004612385565b610dde565b61017760025481565b6103376102f3366004612239565b60056020908152600092835260408084208252918352918190208054825180840190935260018201546001600160a01b031683526002909101549282019290925282565b6040516101819291906123ac565b61036c6103533660046121a7565b6004602052600090815260409020805460019091015482565b60408051928352602083019190915201610181565b61039461038f366004612239565b611278565b604080516001600160a01b039093168352602083019190915201610181565b6103c66103c13660046121a7565b6112c1565b6040519015158152602001610181565b61017760035481565b6101776112e0565b6001600054146104125760405162461bcd60e51b8152600401610409906123d3565b60405180910390fd5b6002600081815590546104269083356112eb565b60008481526005602090815260408083208484528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051919250906104965760405162461bcd60e51b815260040161040990612416565b6000836040516020016104a991906126b1565b60408051601f19818403018152919052825181516020830120919250146104e25760405162461bcd60e51b8152600401610409906126c4565b82857f5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e186856020015160405161051992919061270d565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061054b908490600401612792565b6020604051808303816000875af115801561056a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058e91906127a5565b5050600160005550505050565b3360009081526008602090815260408083206001600160a01b03851684529091529020548061061d5760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b6064820152608401610409565b3360008181526008602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a361068c6001600160a01b0383163383611365565b5050565b60008181526004602052604081206106a7906113cd565b92915050565b60018054146106ce5760405162461bcd60e51b8152600401610409906127be565b600260015560006106e08383356112eb565b6000818152600660205260409020549091508061070f5760405162461bcd60e51b815260040161040990612416565b808360405160200161072191906126b1565b60405160208183030381529060405280519060200120146107545760405162461bcd60e51b8152600401610409906126c4565b6000610766608085016060860161218a565b6001600160a01b03163b116107da5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b6064820152608401610409565b604051829085907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a36000828152600660209081526040808320839055869161082b91870190870161218a565b61083860e0870187612803565b60405160240161084b9493929190612849565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b1790529050600061089361088c608087016060880161218a565b5a846113e0565b9050806108f65760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b6064820152608401610409565b50506001805550505050565b6001600054146109245760405162461bcd60e51b8152600401610409906123d3565b60026000558061098e5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b6064820152608401610409565b6001600160a01b0382166109b45760405162461bcd60e51b815260040161040990612874565b60008481526005602090815260408083208684529091529020546109ea5760405162461bcd60e51b815260040161040990612416565b60008481526005602090815260408083208684529091529020600101546001600160a01b03838116911614610a875760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e747261637420616464726573730000000000000000006064820152608401610409565b6000610a9383836113fa565b6000868152600560209081526040808320888452909152812060020180549293508392909190610ac49084906128de565b90915550506000858152600560209081526040808320878452825291829020825160018201546001600160a01b0316815260029091015491810191909152859187917f1b4c7df71bd1bb001f3b086bd30b701add4879deb19a176bc254eef33dca54cd910160405180910390a350506001600055505050565b6000600160005414610b615760405162461bcd60e51b8152600401610409906123d3565b6002600055610b90610b7283612aee565b83356000908152600460205260409020610b8b90611562565b611671565b600160005592915050565b60408051808201909152600080825260208201526000838152600460205260409020610bc790836118cc565b9392505050565b6000600160005414610bf25760405162461bcd60e51b8152600401610409906123d3565b60026000908155856001600160401b03811115610c1157610c116128f1565b604051908082528060200260200182016040528015610c5657816020015b6040805180820190915260008082526020820152815260200190600190039081610c2f5790505b50905060005b86811015610d49576000888883818110610c7857610c78612b91565b6020908102929092013560008181526007909352604090922054919250506001600160a01b031680610cfb5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b6064820152608401610409565b6040518060400160405280838152602001826001600160a01b0316815250848481518110610d2b57610d2b612b91565b6020026020010181905250505080610d4290612ba7565b9050610c5c565b506040805160c08101825289815260006020820152610dcd918101610d7336899003890189612bc0565b81526020016000815260200186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050604080519283526020808401909152909201525082611671565b600160005598975050505050505050565b6001805414610dff5760405162461bcd60e51b8152600401610409906127be565b60026001556001600160a01b038116610e735760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465724d657373656e6765723a207a65726f2072656c61796560448201526f7220726577617264206164647265737360801b6064820152608401610409565b6040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610ec0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ee89190810190612c3c565b9150915080610f4b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b6064820152608401610409565b60208201516001600160a01b03163014610fc25760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b6064820152608401610409565b60008260400151806020019051810190610fdc9190612dd9565b90506000610fe8611991565b9050808260400151146110575760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b6064820152608401610409565b83518251600091611067916112eb565b6000818152600760205260409020549091506001600160a01b0316156110e65760405162461bcd60e51b815260206004820152602e60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526d1958591e4819195b1a5d995c995960921b6064820152608401610409565b6110f4338460a00151611a12565b6111525760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b6064820152608401610409565b600081815260076020526040902080546001600160a01b0319166001600160a01b03881617905560e08301515115611191578451611191908285611a87565b60c08301515160005b818110156111ec5760008560c0015182815181106111ba576111ba612b91565b602002602001015190506111db886000015182600001518360200151611bba565b506111e581612ba7565b905061119a565b50855160009081526004602090815260409182902082518084019093528483526001600160a01b038a169183019190915290611229908290611c8a565b8651604051339185917fcbccffab32a19dfcbd50a8f0413ee54e6b23c42c0cd8dfdecdcaf9f99fc7d27090611261908d908b90612fe9565b60405180910390a450506001805550505050505050565b6000828152600560209081526040808320848452825291829020825180840190935260018101546001600160a01b031680845260029091015492909101829052905b9250929050565b6000818152600760205260408120546001600160a01b031615156106a7565b600080610bc7611ce6565b604080513060208201529081018390526060810182905260009060029060800160408051601f19818403018152908290526113259161300d565b602060405180830381855afa158015611342573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610bc791906127a5565b6040516001600160a01b0383166024820152604481018290526113c890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d23565b505050565b805460018201546000916106a791613029565b60008060008084516020860160008989f195945050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146791906127a5565b905061147e6001600160a01b038516333086611df5565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156114c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e991906127a5565b905081811161154f5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610409565b6115598282613029565b95945050505050565b606060006115796005611574856113cd565b611e33565b9050806000036115c85760408051600080825260208201909252906115c0565b60408051808201909152600080825260208201528152602001906001900390816115995790505b509392505050565b806001600160401b038111156115e0576115e06128f1565b60405190808252806020026020018201604052801561162557816020015b60408051808201909152600080825260208201528152602001906001900390816115fe5790505b50915060005b8181101561166a5761163c84611e49565b83828151811061164e5761164e612b91565b60200260200101819052508061166390612ba7565b905061162b565b5050919050565b60008061167c611991565b90508061169b5760405162461bcd60e51b81526004016104099061303c565b6000806116a6611ce6565b915091506000604051806101000160405280848152602001336001600160a01b031681526020018860000151815260200188602001516001600160a01b0316815260200188606001518152602001886080015181526020018781526020018860a0015181525090506000816040516020016117219190613085565b604051602081830303815290604052905060036000815461174190612ba7565b909155506040880151602001516000901561179b576040890151516001600160a01b03166117815760405162461bcd60e51b815260040161040990612874565b6040890151805160209091015161179891906113fa565b90505b6040805180820182528a820151516001600160a01b03908116825260208083018590528351808501855286518783012081528082018481528e516000908152600584528681208b82528452869020915182555180516001830180546001600160a01b03191691909516179093559101516002909101558a519151909186917f5e9fe03872c33b6415afc2021cd99c325d9760f0972ec9a48a21d77bd72d26e1906118489088908690613098565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb9061187a908690600401612792565b6020604051808303816000875af1158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bd91906127a5565b50939998505050505050505050565b60408051808201909152600080825260208201526118e9836113cd565b82106119415760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b6064820152608401610409565b82600201600083856000015461195791906128de565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b60025460009080611a0d576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0591906127a5565b600281905590505b919050565b60008151600003611a25575060016106a7565b60005b8251811015611a7d57836001600160a01b0316838281518110611a4d57611a4d612b91565b60200260200101516001600160a01b031603611a6d5760019150506106a7565b611a7681612ba7565b9050611a28565b5060009392505050565b80608001515a1015611ae95760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b6064820152608401610409565b80606001516001600160a01b03163b600003611b0a576113c8838383611f14565b602081015160e0820151604051600092611b289287926024016130ab565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611b6d9190846113e0565b905080611b8657611b7f858585611f14565b5050505050565b604051849086907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a35050505050565b60008381526005602090815260408083208584528252918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051611c145750505050565b600084815260056020908152604080832086845282528083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0387811686526008855283862092515116855292528220805491929091611c7f9084906128de565b909155505050505050565b6001820180548291600285019160009182611ca483612ba7565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b600254600354600091829181611d0e5760405162461bcd60e51b81526004016104099061303c565b80611d1983836112eb565b9350935050509091565b6000611d78826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f899092919063ffffffff16565b8051909150156113c85780806020019051810190611d9691906130d5565b6113c85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610409565b6040516001600160a01b0380851660248301528316604482015260648101829052611e2d9085906323b872dd60e01b90608401611391565b50505050565b6000818310611e425781610bc7565b5090919050565b604080518082019091526000808252602082015281546001830154819003611eb35760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d707479207175657565000000000000006044820152606401610409565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f0c9082906128de565b909255919050565b80604051602001611f259190613085565b60408051601f1981840301815282825280516020918201206000868152600690925291902055829084907f080c35109e3a4562b6c55ca3fa4600962ad174e7a3aaf7b7ab558a25382b446590611f7c908590613085565b60405180910390a3505050565b6060611f988484600085611fa0565b949350505050565b6060824710156120015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610409565b600080866001600160a01b0316858760405161201d919061300d565b60006040518083038185875af1925050503d806000811461205a576040519150601f19603f3d011682016040523d82523d6000602084013e61205f565b606091505b50915091506120708783838761207b565b979650505050505050565b606083156120ea5782516000036120e3576001600160a01b0385163b6120e35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610409565b5081611f98565b611f9883838151156120ff5781518083602001fd5b8060405162461bcd60e51b81526004016104099190612792565b6000806040838503121561212c57600080fd5b8235915060208301356001600160401b0381111561214957600080fd5b8301610100818603121561215c57600080fd5b809150509250929050565b6001600160a01b038116811461217c57600080fd5b50565b8035611a0d81612167565b60006020828403121561219c57600080fd5b8135610bc781612167565b6000602082840312156121b957600080fd5b5035919050565b600080600080608085870312156121d657600080fd5b843593506020850135925060408501356121ef81612167565b9396929550929360600135925050565b60006020828403121561221157600080fd5b81356001600160401b0381111561222757600080fd5b820160e08185031215610bc757600080fd5b6000806040838503121561224c57600080fd5b50508035926020909101359150565b815181526020808301516001600160a01b031690820152604081016106a7565b60008083601f84011261228d57600080fd5b5081356001600160401b038111156122a457600080fd5b6020830191508360208260051b85010111156112ba57600080fd5b60008060008060008086880360a08112156122d957600080fd5b8735965060208801356001600160401b03808211156122f757600080fd5b6123038b838c0161227b565b90985096508691506040603f198401121561231d57600080fd5b60408a01955060808a013592508083111561233757600080fd5b505061234589828a0161227b565b979a9699509497509295939492505050565b6000806040838503121561236a57600080fd5b823561237581612167565b9150602083013561215c81612167565b6000806040838503121561239857600080fd5b823563ffffffff8116811461237557600080fd5b82815260608101610bc7602083018480516001600160a01b03168252602090810151910152565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e1984360301811261247357600080fd5b83016020810192503590506001600160401b0381111561249257600080fd5b8060051b36038213156112ba57600080fd5b8183526000602080850194508260005b858110156124e25781356124c781612167565b6001600160a01b0316875295820195908201906001016124b4565b509495945050505050565b6000808335601e1984360301811261250457600080fd5b83016020810192503590506001600160401b0381111561252357600080fd5b8060061b36038213156112ba57600080fd5b8183526000602080850194508260005b858110156124e257813587528282013561255e81612167565b6001600160a01b0316878401526040968701969190910190600101612545565b6000808335601e1984360301811261259557600080fd5b83016020810192503590506001600160401b038111156125b457600080fd5b8036038213156112ba57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600061010082358452602083013561260381612167565b6001600160a01b03166020850152604083810135908501526126276060840161217f565b6001600160a01b031660608501526080838101359085015261264c60a084018461245c565b8260a087015261265f83870182846124a4565b9250505061267060c08401846124ed565b85830360c0870152612683838284612535565b9250505061269460e084018461257e565b85830360e08701526126a78382846125c3565b9695505050505050565b602081526000610bc760208301846125ec565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b60608152600061272060608301856125ec565b9050610bc7602083018480516001600160a01b03168252602090810151910152565b60005b8381101561275d578181015183820152602001612745565b50506000910152565b6000815180845261277e816020860160208601612742565b601f01601f19169290920160200192915050565b602081526000610bc76020830184612766565b6000602082840312156127b757600080fd5b5051919050565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b6000808335601e1984360301811261281a57600080fd5b8301803591506001600160401b0382111561283457600080fd5b6020019150368190038213156112ba57600080fd5b8481526001600160a01b03841660208201526060604082018190526000906126a790830184866125c3565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106a7576106a76128c8565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612929576129296128f1565b60405290565b60405160c081016001600160401b0381118282101715612929576129296128f1565b60405161010081016001600160401b0381118282101715612929576129296128f1565b604051601f8201601f191681016001600160401b038111828210171561299c5761299c6128f1565b604052919050565b6000604082840312156129b657600080fd5b6129be612907565b905081356129cb81612167565b808252506020820135602082015292915050565b60006001600160401b038211156129f8576129f86128f1565b5060051b60200190565b600082601f830112612a1357600080fd5b81356020612a28612a23836129df565b612974565b82815260059290921b84018101918181019086841115612a4757600080fd5b8286015b84811015612a6b578035612a5e81612167565b8352918301918301612a4b565b509695505050505050565b60006001600160401b03821115612a8f57612a8f6128f1565b50601f01601f191660200190565b600082601f830112612aae57600080fd5b8135612abc612a2382612a76565b818152846020838601011115612ad157600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08236031215612b0057600080fd5b612b0861292f565b82358152612b186020840161217f565b6020820152612b2a36604085016129a4565b60408201526080830135606082015260a08301356001600160401b0380821115612b5357600080fd5b612b5f36838701612a02565b608084015260c0850135915080821115612b7857600080fd5b50612b8536828601612a9d565b60a08301525092915050565b634e487b7160e01b600052603260045260246000fd5b600060018201612bb957612bb96128c8565b5060010190565b600060408284031215612bd257600080fd5b610bc783836129a4565b8051611a0d81612167565b600082601f830112612bf857600080fd5b8151612c06612a2382612a76565b818152846020838601011115612c1b57600080fd5b611f98826020830160208701612742565b80518015158114611a0d57600080fd5b60008060408385031215612c4f57600080fd5b82516001600160401b0380821115612c6657600080fd5b9084019060608287031215612c7a57600080fd5b604051606081018181108382111715612c9557612c956128f1565b604052825181526020830151612caa81612167565b6020820152604083015182811115612cc157600080fd5b612ccd88828601612be7565b6040830152509350612ce491505060208401612c2c565b90509250929050565b600082601f830112612cfe57600080fd5b81516020612d0e612a23836129df565b82815260059290921b84018101918181019086841115612d2d57600080fd5b8286015b84811015612a6b578051612d4481612167565b8352918301918301612d31565b600082601f830112612d6257600080fd5b81516020612d72612a23836129df565b82815260069290921b84018101918181019086841115612d9157600080fd5b8286015b84811015612a6b5760408189031215612dae5760008081fd5b612db6612907565b8151815284820151612dc781612167565b81860152835291830191604001612d95565b600060208284031215612deb57600080fd5b81516001600160401b0380821115612e0257600080fd5b908301906101008286031215612e1757600080fd5b612e1f612951565b82518152612e2f60208401612bdc565b602082015260408301516040820152612e4a60608401612bdc565b60608201526080830151608082015260a083015182811115612e6b57600080fd5b612e7787828601612ced565b60a08301525060c083015182811115612e8f57600080fd5b612e9b87828601612d51565b60c08301525060e083015182811115612eb357600080fd5b612ebf87828601612be7565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156124e25781516001600160a01b031687529582019590820190600101612ee2565b600081518084526020808501945080840160005b838110156124e257612f41878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612f1b565b60006101008251845260018060a01b036020840151166020850152604083015160408501526060830151612f9360608601826001600160a01b03169052565b506080830151608085015260a08301518160a0860152612fb582860182612ece565b91505060c083015184820360c0860152612fcf8282612f07565b91505060e083015184820360e08601526115598282612766565b6001600160a01b0383168152604060208201819052600090611f9890830184612f54565b6000825161301f818460208701612742565b9190910192915050565b818103818111156106a7576106a76128c8565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20626c6f636b636861696e4960408201526811081b9bdd081cd95d60ba1b606082015260800190565b602081526000610bc76020830184612f54565b6060815260006127206060830185612f54565b8381526001600160a01b038316602082015260606040820181905260009061155990830184612766565b6000602082840312156130e757600080fd5b610bc782612c2c56fea2646970667358221220c48a26cfff08c466d527d45dabf0ccaa438ea144e144a455424438e443c1c87a64736f6c63430008120033", } // TeleporterMessengerABI is the input ABI used to generate the binding from.