From a7c7155a3f22e5178bdcd163e846f16ffdecce68 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Wed, 27 Mar 2024 08:10:31 -0700 Subject: [PATCH 01/11] required gas and events --- contracts/src/TeleporterTokenDestination.sol | 9 +++-- contracts/src/TeleporterTokenSource.sol | 9 +++-- .../src/interfaces/ITeleporterTokenBridge.sol | 13 +++++-- contracts/test/ERC20DestinationTests.t.sol | 36 +++++++++---------- .../test/ITeleporterTokenBridgeTests.t.sol | 11 ++++-- .../TeleporterTokenDestinationTests.t.sol | 2 ++ .../test/TeleporterTokenSourceTests.t.sol | 6 +++- 7 files changed, 53 insertions(+), 33 deletions(-) diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index 1281751f..6107dc2e 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -34,9 +34,8 @@ abstract contract TeleporterTokenDestination is /// @notice The ERC20 token this contract uses to pay for Teleporter fees. address public immutable feeTokenAddress; - // TODO: these are values brought from the example ERC20Bridge contract. - // Need to figure out appropriate values. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 300_000; + /// @notice Required gas limit for sending tokens to another chain. + uint256 public constant SEND_TOKENS_REQUIRED_GAS = 100_000; /** * @notice Initializes this destination token bridge instance to receive @@ -120,7 +119,6 @@ abstract contract TeleporterTokenDestination is destinationBlockchainID: sourceBlockchainID, destinationAddress: tokenSourceAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: input.primaryFee}), - // TODO: placeholder value requiredGasLimit: SEND_TOKENS_REQUIRED_GAS, allowedRelayerAddresses: input.allowedRelayerAddresses, message: abi.encode( @@ -138,7 +136,7 @@ abstract contract TeleporterTokenDestination is }) ); - emit SendTokens(messageID, msg.sender, amount); + emit SendTokens(messageID, msg.sender, input, amount); } /** @@ -161,6 +159,7 @@ abstract contract TeleporterTokenDestination is ); (address recipient, uint256 amount) = abi.decode(message, (address, uint256)); + emit WithdrawTokens(recipient, amount); _withdraw(recipient, amount); } diff --git a/contracts/src/TeleporterTokenSource.sol b/contracts/src/TeleporterTokenSource.sol index d9c6f631..9173d321 100644 --- a/contracts/src/TeleporterTokenSource.sol +++ b/contracts/src/TeleporterTokenSource.sol @@ -40,9 +40,8 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn => mapping(address destinationBridgeAddress => uint256 balance) ) public bridgedBalances; - // TODO: these are values brought from the example ERC20Bridge contract. - // Need to figure out appropriate values. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 300_000; + /// @notice Required gas limit for sending tokens to another chain. + uint256 public constant SEND_TOKENS_REQUIRED_GAS = 70_000; /** * @notice Initializes this source token bridge instance to send @@ -106,14 +105,13 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn destinationBlockchainID: input.destinationBlockchainID, destinationAddress: input.destinationBridgeAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: input.primaryFee}), - // TODO: Set requiredGasLimit requiredGasLimit: SEND_TOKENS_REQUIRED_GAS, allowedRelayerAddresses: input.allowedRelayerAddresses, message: abi.encode(input.recipient, amount) }) ); - emit SendTokens(messageID, msg.sender, amount); + emit SendTokens(messageID, msg.sender, input, amount); } /** @@ -150,6 +148,7 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn input.destinationBridgeAddress == address(this), "TeleporterTokenSource: invalid bridge address" ); + emit WithdrawTokens(input.recipient, amount); _withdraw(input.recipient, amount); return; } diff --git a/contracts/src/interfaces/ITeleporterTokenBridge.sol b/contracts/src/interfaces/ITeleporterTokenBridge.sol index 7187e3fd..3ca156e8 100644 --- a/contracts/src/interfaces/ITeleporterTokenBridge.sol +++ b/contracts/src/interfaces/ITeleporterTokenBridge.sol @@ -36,7 +36,16 @@ struct SendTokensInput { interface ITeleporterTokenBridge is ITeleporterReceiver { /** * @notice Emitted when tokens are sent to another chain. - * TODO: might want to add SendTokensInput as a parameter */ - event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount); + event SendTokens( + bytes32 indexed teleporterMessageID, + address indexed sender, + SendTokensInput input, + uint256 amount + ); + + /** + * @notice Emitted when tokens are withdrawn from the token bridge contract. + */ + event WithdrawTokens(address indexed recipient, uint256 amount); } diff --git a/contracts/test/ERC20DestinationTests.t.sol b/contracts/test/ERC20DestinationTests.t.sol index c35e67c1..2b9414cb 100644 --- a/contracts/test/ERC20DestinationTests.t.sol +++ b/contracts/test/ERC20DestinationTests.t.sol @@ -24,15 +24,15 @@ contract ERC20DestinationTest is IERC20BridgeTest, TeleporterTokenDestinationTes function setUp() public virtual override { TeleporterTokenDestinationTest.setUp(); - app = new ERC20Destination( - MOCK_TELEPORTER_REGISTRY_ADDRESS, - address(this), - DEFAULT_SOURCE_BLOCKCHAIN_ID, - TOKEN_SOURCE_ADDRESS, - MOCK_TOKEN_NAME, - MOCK_TOKEN_SYMBOL, - MOCK_TOKEN_DECIMALS - ); + app = new ERC20Destination({ + teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, + teleporterManager: address(this), + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + tokenName: MOCK_TOKEN_NAME, + tokenSymbol: MOCK_TOKEN_SYMBOL, + tokenDecimals: MOCK_TOKEN_DECIMALS + }); erc20Bridge = app; tokenDestination = app; @@ -53,15 +53,15 @@ contract ERC20DestinationTest is IERC20BridgeTest, TeleporterTokenDestinationTes */ function testZeroTeleporterRegistryAddress() public { vm.expectRevert("TeleporterUpgradeable: zero teleporter registry address"); - new ERC20Destination( - address(0), - address(this), - DEFAULT_SOURCE_BLOCKCHAIN_ID, - TOKEN_SOURCE_ADDRESS, - MOCK_TOKEN_NAME, - MOCK_TOKEN_SYMBOL, - MOCK_TOKEN_DECIMALS - ); + new ERC20Destination({ + teleporterRegistryAddress: address(0), + teleporterManager: address(this), + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + tokenName: MOCK_TOKEN_NAME, + tokenSymbol: MOCK_TOKEN_SYMBOL, + tokenDecimals: MOCK_TOKEN_DECIMALS + }); } function testZeroTeleporterManagerAddress() public { diff --git a/contracts/test/ITeleporterTokenBridgeTests.t.sol b/contracts/test/ITeleporterTokenBridgeTests.t.sol index fa03f9a4..31553908 100644 --- a/contracts/test/ITeleporterTokenBridgeTests.t.sol +++ b/contracts/test/ITeleporterTokenBridgeTests.t.sol @@ -41,7 +41,14 @@ abstract contract ITeleporterTokenBridgeTest is Test { ITeleporterTokenBridge public tokenBridge; IERC20 public feeToken; - event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount); + event SendTokens( + bytes32 indexed teleporterMessageID, + address indexed sender, + SendTokensInput input, + uint256 amount + ); + + event WithdrawTokens(address indexed recipient, uint256 amount); event Transfer(address indexed from, address indexed to, uint256 value); @@ -121,7 +128,7 @@ abstract contract ITeleporterTokenBridgeTest is Test { _checkExpectedTeleporterCalls(input, bridgedAmount); vm.expectEmit(true, true, true, true, address(tokenBridge)); - emit SendTokens(_MOCK_MESSAGE_ID, address(this), bridgedAmount); + emit SendTokens(_MOCK_MESSAGE_ID, address(this), input, bridgedAmount); _send(input, amount); } diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index f078722f..5610272b 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -85,6 +85,8 @@ abstract contract TeleporterTokenDestinationTest is ITeleporterTokenBridgeTest { function testReceiveWithdrawSuccess() public { uint256 amount = 2; vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); + vm.expectEmit(true, true, true, true, address(tokenDestination)); + emit WithdrawTokens(DEFAULT_RECIPIENT_ADDRESS, amount); _checkWithdrawal(DEFAULT_RECIPIENT_ADDRESS, amount); tokenDestination.receiveTeleporterMessage( DEFAULT_SOURCE_BLOCKCHAIN_ID, diff --git a/contracts/test/TeleporterTokenSourceTests.t.sol b/contracts/test/TeleporterTokenSourceTests.t.sol index 55f94052..665649e3 100644 --- a/contracts/test/TeleporterTokenSourceTests.t.sol +++ b/contracts/test/TeleporterTokenSourceTests.t.sol @@ -106,6 +106,8 @@ abstract contract TeleporterTokenSourceTest is ITeleporterTokenBridgeTest { }); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); + vm.expectEmit(true, true, true, true, address(tokenSource)); + emit WithdrawTokens(DEFAULT_RECIPIENT_ADDRESS, bridgedAmount); _checkWithdrawal(DEFAULT_RECIPIENT_ADDRESS, bridgedAmount); tokenSource.receiveTeleporterMessage( DEFAULT_DESTINATION_BLOCKCHAIN_ID, @@ -141,7 +143,9 @@ abstract contract TeleporterTokenSourceTest is ITeleporterTokenBridgeTest { _checkExpectedTeleporterCalls(input, bridgedAmount); vm.expectEmit(true, true, true, true, address(tokenSource)); - emit SendTokens(_MOCK_MESSAGE_ID, address(MOCK_TELEPORTER_MESSENGER_ADDRESS), bridgedAmount); + emit SendTokens( + _MOCK_MESSAGE_ID, address(MOCK_TELEPORTER_MESSENGER_ADDRESS), input, bridgedAmount + ); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); tokenSource.receiveTeleporterMessage( From 1d149b8d9b515c706fd8159fb8bf5b3e21e19bf1 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Wed, 27 Mar 2024 11:04:02 -0700 Subject: [PATCH 02/11] reentrancy guards --- contracts/src/ERC20Destination.sol | 2 +- contracts/src/ERC20Source.sol | 2 +- contracts/src/NativeTokenSource.sol | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/src/ERC20Destination.sol b/contracts/src/ERC20Destination.sol index bc26f74c..b44e689e 100644 --- a/contracts/src/ERC20Destination.sol +++ b/contracts/src/ERC20Destination.sol @@ -60,7 +60,7 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { * * @dev See {IERC20Bridge-send} */ - function send(SendTokensInput calldata input, uint256 amount) external { + function send(SendTokensInput calldata input, uint256 amount) external nonReentrant { _send(input, amount); } diff --git a/contracts/src/ERC20Source.sol b/contracts/src/ERC20Source.sol index 7b702998..aa67c114 100644 --- a/contracts/src/ERC20Source.sol +++ b/contracts/src/ERC20Source.sol @@ -46,7 +46,7 @@ contract ERC20Source is IERC20Bridge, TeleporterTokenSource { /** * @dev See {IERC20Bridge-send} */ - function send(SendTokensInput calldata input, uint256 amount) external { + function send(SendTokensInput calldata input, uint256 amount) external nonReentrant { _send(input, amount, false); } diff --git a/contracts/src/NativeTokenSource.sol b/contracts/src/NativeTokenSource.sol index 157de91c..fc1bfa35 100644 --- a/contracts/src/NativeTokenSource.sol +++ b/contracts/src/NativeTokenSource.sol @@ -51,7 +51,7 @@ contract NativeTokenSource is INativeTokenBridge, TeleporterTokenSource { /** * @dev See {INativeTokenBridge-send} */ - function send(SendTokensInput calldata input) external payable { + function send(SendTokensInput calldata input) external payable nonReentrant { _send(input, msg.value, false); } From 1050d935f7da11783078486f0268c3be1aa63e79 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Wed, 27 Mar 2024 11:10:45 -0700 Subject: [PATCH 03/11] add go linter --- .golangci.yml | 31 +++++++++++++++++++++++++++++++ scripts/lint.sh | 3 +-- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 .golangci.yml diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..b8eaf0c9 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,31 @@ +# This file configures github.com/golangci/golangci-lint. + +run: + timeout: 3m + tests: true + # skip auto-generated files. + skip-dirs: + - "abi-bindings/go" + skip-files: + - ".*mock.*" + +issues: + # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-same-issues: 0 + +linters: + disable-all: true + enable: + - goimports + - gosimple + - govet + - ineffassign + - misspell + - unconvert + - unused + - whitespace + - lll + +linters-settings: + gofmt: + simplify: true diff --git a/scripts/lint.sh b/scripts/lint.sh index 0ff63289..3ac60c53 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -44,8 +44,7 @@ function golangLinter() { function runAll() { solFormat solLinter - # TODO: add back in when we have golang tests - # golangLinter + golangLinter } function printHelp() { From 6c8f6e22881d0c8c032dafabc16c08273ef67c7c Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Fri, 29 Mar 2024 13:12:52 -0700 Subject: [PATCH 04/11] update required gas and bindings --- .../go/ERC20Destination/ERC20Destination.go | 162 +++++++++++++++++- abi-bindings/go/ERC20Source/ERC20Source.go | 162 +++++++++++++++++- .../go/NativeTokenSource/NativeTokenSource.go | 162 +++++++++++++++++- contracts/src/TeleporterTokenDestination.sol | 6 +- contracts/src/TeleporterTokenSource.sol | 6 +- .../test/TeleporterTokenBridgeTests.t.sol | 7 + 6 files changed, 479 insertions(+), 26 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index 38db6e44..6c01f13e 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -41,8 +41,8 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b5060405162002e4338038062002e438339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002e2383398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002e2383398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002e238339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161255e620008c560003960006102a40152600081816103a801526114fe01526000818161044a015281816111140152818161132801526114c40152600081816102660152818161108c015281816112f8015261149e0152600081816103e201526113850152600081816102140152818161083501528181610de90152611b3e015261255e6000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063c868efaa11610097578063dd62ed3e11610071578063dd62ed3e1461040c578063e8535e931461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063c868efaa146103ca578063d127dc9b146103dd578063d2cc7a701461040457600080fd5b806397314297116100d35780639731429714610351578063a457c2d71461037d578063a9059cbb14610390578063b8df0dea146103a357600080fd5b8063715018a6146103305780638da5cb5b1461033857806395d89b411461034957600080fd5b806329b7b3fd11610166578063395093511161014057806339509351146102ce5780634511243e146102e15780635eb99514146102f457806370a082311461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c3919061201c565b60405180910390f35b6101df6101da366004612044565b6104fe565b60405190151581526020016101c3565b6101f9620493e081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c366004612070565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b6102963660046120b1565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b6101df6102dc366004612044565b610641565b61029b6102ef3660046120b1565b610663565b61029b6103023660046120ce565b610760565b6101f96103153660046120b1565b6001600160a01b031660009081526004602052604090205490565b61029b610774565b6003546001600160a01b0316610236565b6101b6610788565b6101df61035f3660046120b1565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61038b366004612044565b610797565b6101df61039e366004612044565b610812565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d83660046120e7565b610820565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961041a366004612170565b6109ea565b61029b61042d3660046121a9565b610a15565b61029b6104403660046120b1565b610a23565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b906121e5565b80601f01602080910402602001604051908101604052809291908181526020018280546104a7906121e5565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610a99565b60019150505b92915050565b600033610526858285610bbe565b610531858585610c32565b506001949350505050565b610544610ddd565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a9061221f565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60003361050c81858561065483836109ea565b61065e9190612283565b610a99565b61066b610ddd565b6001600160a01b0381166106915760405162461bcd60e51b815260040161056a9061221f565b6001600160a01b03811660009081526001602052604090205460ff1661070b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610768610ddd565b61077181610de5565b50565b61077c610f85565b6107866000610fdf565b565b60606008805461047b906121e5565b600033816107a582866109ea565b9050838110156108055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610a99565b60003361050c818585610c32565b610828611031565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c39190612296565b101561092a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b6109333361035f565b156109995760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109da848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061108a92505050565b6109e46001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a1f82826111e5565b5050565b610a2b610f85565b6001600160a01b038116610a905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61077181610fdf565b6001600160a01b038316610afb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b5c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bca84846109ea565b905060001981146109e45781811015610c255760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b6109e48484848403610a99565b6001600160a01b038316610c965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610cf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dd09086815260200190565b60405180910390a36109e4565b610786610f85565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e699190612296565b60025490915081831115610ed95760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b808311610f4e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036110835760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b7f000000000000000000000000000000000000000000000000000000000000000083146111125760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146111b95760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906111d091906122af565b915091506111de8282611696565b5050505050565b60006111f760408401602085016120b1565b6001600160a01b0316036112735760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b600061128560608401604085016120b1565b6001600160a01b0316036112f65760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f0000000000000000000000000000000000000000000000000000000000000000823503611383576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661135860408401602085016120b1565b6001600160a01b03161461137e5760405162461bcd60e51b815260040161056a906122dd565b6113e2565b7f00000000000000000000000000000000000000000000000000000000000000008235036113e257306113bc60408401602085016120b1565b6001600160a01b0316036113e25760405162461bcd60e51b815260040161056a906122dd565b6113eb816116a0565b90506113ff60808301356060840135612283565b81116114735760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b61148160608301358261233a565b905061148c816116ac565b60006116536040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200187606001358152508152602001620493e08152602001858060a00190611551919061234d565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160c081018252873581526020928301929091828201916115ad918a01908a016120b1565b6001600160a01b031681526020016115cb6060890160408a016120b1565b6001600160a01b0316815260808801356020820152600060408201526060016115f760a089018961234d565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505091525060405161163c919087906020016123e2565b6040516020818303038152906040528152506116b6565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386584604051610bb191815260200190565b505050565b610a1f82826117dc565b6000610512308361189d565b6107713082611a05565b6000806116c1611b39565b60408401516020015190915015611766576040830151516001600160a01b03166117435760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b604083015160208101519051611766916001600160a01b03909116908390611c4d565b604051630624488560e41b81526001600160a01b0382169063624488509061179290869060040161244f565b6020604051808303816000875af11580156117b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d59190612296565b9392505050565b6001600160a01b0382166118325760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b80600660008282546118449190612283565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156118e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190a9190612296565b90506119216001600160a01b038516333086611d32565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c9190612296565b90508181116119f25760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b6119fc828261233a565b95945050505050565b6001600160a01b038216611a655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611ad95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe91906124cd565b9050611be2816001600160a01b031660009081526001602052604090205460ff1690565b15611c485760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc29190612296565b611ccc9190612283565b6040516001600160a01b0385166024820152604481018290529091506109e490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d6a565b6040516001600160a01b03808516602483015283166044820152606481018290526109e49085906323b872dd60e01b90608401611cfb565b6000611dbf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e3c9092919063ffffffff16565b8051909150156116915780806020019051810190611ddd91906124ea565b6116915760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b6060611e4b8484600085611e53565b949350505050565b606082471015611eb45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b03168587604051611ed0919061250c565b60006040518083038185875af1925050503d8060008114611f0d576040519150601f19603f3d011682016040523d82523d6000602084013e611f12565b606091505b5091509150611f2387838387611f2e565b979650505050505050565b60608315611f9d578251600003611f96576001600160a01b0385163b611f965760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081611e4b565b611e4b8383815115611fb25781518083602001fd5b8060405162461bcd60e51b815260040161056a919061201c565b60005b83811015611fe7578181015183820152602001611fcf565b50506000910152565b60008151808452612008816020860160208601611fcc565b601f01601f19169290920160200192915050565b6020815260006117d56020830184611ff0565b6001600160a01b038116811461077157600080fd5b6000806040838503121561205757600080fd5b82356120628161202f565b946020939093013593505050565b60008060006060848603121561208557600080fd5b83356120908161202f565b925060208401356120a08161202f565b929592945050506040919091013590565b6000602082840312156120c357600080fd5b81356117d58161202f565b6000602082840312156120e057600080fd5b5035919050565b600080600080606085870312156120fd57600080fd5b84359350602085013561210f8161202f565b9250604085013567ffffffffffffffff8082111561212c57600080fd5b818701915087601f83011261214057600080fd5b81358181111561214f57600080fd5b88602082850101111561216157600080fd5b95989497505060200194505050565b6000806040838503121561218357600080fd5b823561218e8161202f565b9150602083013561219e8161202f565b809150509250929050565b600080604083850312156121bc57600080fd5b823567ffffffffffffffff8111156121d357600080fd5b830160c0818603121561206257600080fd5b600181811c908216806121f957607f821691505b60208210810361221957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105125761051261226d565b6000602082840312156122a857600080fd5b5051919050565b600080604083850312156122c257600080fd5b82516122cd8161202f565b6020939093015192949293505050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b818103818111156105125761051261226d565b6000808335601e1984360301811261236457600080fd5b83018035915067ffffffffffffffff82111561237f57600080fd5b6020019150600581901b360382131561239757600080fd5b9250929050565b600081518084526020808501945080840160005b838110156123d75781516001600160a01b0316875295820195908201906001016123b2565b509495945050505050565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e084015261243f61010084018261239e565b9150508260208301529392505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526124b061010084018261239e565b905060a0840151601f198483030160e08501526119fc8282611ff0565b6000602082840312156124df57600080fd5b81516117d58161202f565b6000602082840312156124fc57600080fd5b815180151581146117d557600080fd5b6000825161251e818460208701611fcc565b919091019291505056fea264697066735822122086dc1beeb10221ccf0553e3b2b91804fa9073aa6dc426f0975f036c87b8cc1d964736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b506040516200300f3803806200300f8339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002fef83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002fef83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002fef8339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161272a620008c560003960006102a40152600081816103a801526115c701526000818161044a01528181611126015281816113f1015261158d0152600081816102660152818161109e015281816113c101526115670152600081816103e2015261144e0152600081816102140152818161083501528181610dfb0152611c07015261272a6000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063c868efaa11610097578063dd62ed3e11610071578063dd62ed3e1461040c578063e8535e931461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063c868efaa146103ca578063d127dc9b146103dd578063d2cc7a701461040457600080fd5b806397314297116100d35780639731429714610351578063a457c2d71461037d578063a9059cbb14610390578063b8df0dea146103a357600080fd5b8063715018a6146103305780638da5cb5b1461033857806395d89b411461034957600080fd5b806329b7b3fd11610166578063395093511161014057806339509351146102ce5780634511243e146102e15780635eb99514146102f457806370a082311461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c391906120e5565b60405180910390f35b6101df6101da36600461210d565b6104fe565b60405190151581526020016101c3565b6101f962035b6081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c366004612139565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b61029636600461217a565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b6101df6102dc36600461210d565b610641565b61029b6102ef36600461217a565b610663565b61029b610302366004612197565b610760565b6101f961031536600461217a565b6001600160a01b031660009081526004602052604090205490565b61029b610774565b6003546001600160a01b0316610236565b6101b6610788565b6101df61035f36600461217a565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61038b36600461210d565b610797565b6101df61039e36600461210d565b610812565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d83660046121b0565b610820565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961041a366004612239565b6109ea565b61029b61042d366004612272565b610a15565b61029b61044036600461217a565b610a35565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b906122ae565b80601f01602080910402602001604051908101604052809291908181526020018280546104a7906122ae565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610aab565b60019150505b92915050565b600033610526858285610bd0565b610531858585610c44565b506001949350505050565b610544610def565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a906122e8565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60003361050c81858561065483836109ea565b61065e919061234c565b610aab565b61066b610def565b6001600160a01b0381166106915760405162461bcd60e51b815260040161056a906122e8565b6001600160a01b03811660009081526001602052604090205460ff1661070b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610768610def565b61077181610df7565b50565b61077c610f97565b6107866000610ff1565b565b60606008805461047b906122ae565b600033816107a582866109ea565b9050838110156108055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610aab565b60003361050c818585610c44565b610828611043565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c3919061235f565b101561092a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b6109333361035f565b156109995760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109da848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109c92505050565b6109e46001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a1d611043565b610a27828261123a565b610a316001600055565b5050565b610a3d610f97565b6001600160a01b038116610aa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61077181610ff1565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bdc84846109ea565b905060001981146109e45781811015610c375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b6109e48484848403610aab565b6001600160a01b038316610ca85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610de29086815260200190565b60405180910390a36109e4565b610786610f97565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b919061235f565b60025490915081831115610eeb5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b808311610f605760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036110955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b7f000000000000000000000000000000000000000000000000000000000000000083146111245760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146111cb5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906111e29190612378565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8260405161122191815260200190565b60405180910390a2611233828261175f565b5050505050565b81356112ae5760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161056a565b60006112c0604084016020850161217a565b6001600160a01b03160361133c5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b600061134e606084016040850161217a565b6001600160a01b0316036113bf5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f000000000000000000000000000000000000000000000000000000000000000082350361144c576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611421604084016020850161217a565b6001600160a01b0316146114475760405162461bcd60e51b815260040161056a906123a6565b6114ab565b7f00000000000000000000000000000000000000000000000000000000000000008235036114ab5730611485604084016020850161217a565b6001600160a01b0316036114ab5760405162461bcd60e51b815260040161056a906123a6565b6114b481611769565b90506114c86080830135606084013561234c565b811161153c5760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b61154a606083013582612403565b905061155581611775565b600061171c6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018760600135815250815260200162035b608152602001858060a0019061161a9190612416565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160c08101825287358152602092830192909182820191611676918a01908a0161217a565b6001600160a01b031681526020016116946060890160408a0161217a565b6001600160a01b0316815260808801356020820152600060408201526060016116c060a0890189612416565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050915250604051611705919087906020016124ab565b60405160208183030381529060405281525061177f565b9050336001600160a01b0316817ff1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c8585604051610bc3929190612556565b505050565b610a3182826118a5565b60006105123083611966565b6107713082611ace565b60008061178a611c02565b6040840151602001519091501561182f576040830151516001600160a01b031661180c5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b60408301516020810151905161182f916001600160a01b03909116908390611d16565b604051630624488560e41b81526001600160a01b0382169063624488509061185b90869060040161261b565b6020604051808303816000875af115801561187a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189e919061235f565b9392505050565b6001600160a01b0382166118fb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b806006600082825461190d919061234c565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d3919061235f565b90506119ea6001600160a01b038516333086611dfb565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a55919061235f565b9050818111611abb5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611ac58282612403565b95945050505050565b6001600160a01b038216611b2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611ba25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c879190612699565b9050611cab816001600160a01b031660009081526001602052604090205460ff1690565b15611d115760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8b919061235f565b611d95919061234c565b6040516001600160a01b0385166024820152604481018290529091506109e490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611e33565b6040516001600160a01b03808516602483015283166044820152606481018290526109e49085906323b872dd60e01b90608401611dc4565b6000611e88826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f059092919063ffffffff16565b80519091501561175a5780806020019051810190611ea691906126b6565b61175a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b6060611f148484600085611f1c565b949350505050565b606082471015611f7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b03168587604051611f9991906126d8565b60006040518083038185875af1925050503d8060008114611fd6576040519150601f19603f3d011682016040523d82523d6000602084013e611fdb565b606091505b5091509150611fec87838387611ff7565b979650505050505050565b6060831561206657825160000361205f576001600160a01b0385163b61205f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081611f14565b611f14838381511561207b5781518083602001fd5b8060405162461bcd60e51b815260040161056a91906120e5565b60005b838110156120b0578181015183820152602001612098565b50506000910152565b600081518084526120d1816020860160208601612095565b601f01601f19169290920160200192915050565b60208152600061189e60208301846120b9565b6001600160a01b038116811461077157600080fd5b6000806040838503121561212057600080fd5b823561212b816120f8565b946020939093013593505050565b60008060006060848603121561214e57600080fd5b8335612159816120f8565b92506020840135612169816120f8565b929592945050506040919091013590565b60006020828403121561218c57600080fd5b813561189e816120f8565b6000602082840312156121a957600080fd5b5035919050565b600080600080606085870312156121c657600080fd5b8435935060208501356121d8816120f8565b9250604085013567ffffffffffffffff808211156121f557600080fd5b818701915087601f83011261220957600080fd5b81358181111561221857600080fd5b88602082850101111561222a57600080fd5b95989497505060200194505050565b6000806040838503121561224c57600080fd5b8235612257816120f8565b91506020830135612267816120f8565b809150509250929050565b6000806040838503121561228557600080fd5b823567ffffffffffffffff81111561229c57600080fd5b830160c0818603121561212b57600080fd5b600181811c908216806122c257607f821691505b6020821081036122e257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561051257610512612336565b60006020828403121561237157600080fd5b5051919050565b6000806040838503121561238b57600080fd5b8251612396816120f8565b6020939093015192949293505050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561051257610512612336565b6000808335601e1984360301811261242d57600080fd5b83018035915067ffffffffffffffff82111561244857600080fd5b6020019150600581901b360382131561246057600080fd5b9250929050565b600081518084526020808501945080840160005b838110156124a05781516001600160a01b03168752958201959082019060010161247b565b509495945050505050565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e0840152612508610100840182612467565b9150508260208301529392505050565b8183526000602080850194508260005b858110156124a057813561253b816120f8565b6001600160a01b031687529582019590820190600101612528565b604081528235604082015260006020840135612571816120f8565b6001600160a01b039081166060840152604085013590612590826120f8565b80821660808501525050606084013560a0830152608084013560c083015260a0840135601e198536030181126125c557600080fd5b840160208101903567ffffffffffffffff8111156125e257600080fd5b8060051b36038213156125f457600080fd5b60c060e085015261260a61010085018284612518565b925050508260208301529392505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261267c610100840182612467565b905060a0840151601f198483030160e0850152611ac582826120b9565b6000602082840312156126ab57600080fd5b815161189e816120f8565b6000602082840312156126c857600080fd5b8151801515811461189e57600080fd5b600082516126ea818460208701612095565b919091019291505056fea264697066735822122051f1da28b4d279afb6fc2c641a5e9c64cda33d29be996b8faeb3b960777b0f8464736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. @@ -1460,13 +1460,14 @@ func (it *ERC20DestinationSendTokensIterator) Close() error { type ERC20DestinationSendTokens struct { TeleporterMessageID [32]byte Sender common.Address + Input SendTokensInput Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterSendTokens is a free log retrieval operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// FilterSendTokens is a free log retrieval operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_ERC20Destination *ERC20DestinationFilterer) FilterSendTokens(opts *bind.FilterOpts, teleporterMessageID [][32]byte, sender []common.Address) (*ERC20DestinationSendTokensIterator, error) { var teleporterMessageIDRule []interface{} @@ -1485,9 +1486,9 @@ func (_ERC20Destination *ERC20DestinationFilterer) FilterSendTokens(opts *bind.F return &ERC20DestinationSendTokensIterator{contract: _ERC20Destination.contract, event: "SendTokens", logs: logs, sub: sub}, nil } -// WatchSendTokens is a free log subscription operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// WatchSendTokens is a free log subscription operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_ERC20Destination *ERC20DestinationFilterer) WatchSendTokens(opts *bind.WatchOpts, sink chan<- *ERC20DestinationSendTokens, teleporterMessageID [][32]byte, sender []common.Address) (event.Subscription, error) { var teleporterMessageIDRule []interface{} @@ -1531,9 +1532,9 @@ func (_ERC20Destination *ERC20DestinationFilterer) WatchSendTokens(opts *bind.Wa }), nil } -// ParseSendTokens is a log parse operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// ParseSendTokens is a log parse operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_ERC20Destination *ERC20DestinationFilterer) ParseSendTokens(log types.Log) (*ERC20DestinationSendTokens, error) { event := new(ERC20DestinationSendTokens) if err := _ERC20Destination.contract.UnpackLog(event, "SendTokens", log); err != nil { @@ -1984,3 +1985,148 @@ func (_ERC20Destination *ERC20DestinationFilterer) ParseTransfer(log types.Log) event.Raw = log return event, nil } + +// ERC20DestinationWithdrawTokensIterator is returned from FilterWithdrawTokens and is used to iterate over the raw logs and unpacked data for WithdrawTokens events raised by the ERC20Destination contract. +type ERC20DestinationWithdrawTokensIterator struct { + Event *ERC20DestinationWithdrawTokens // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20DestinationWithdrawTokensIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20DestinationWithdrawTokens) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20DestinationWithdrawTokens) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20DestinationWithdrawTokensIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20DestinationWithdrawTokensIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20DestinationWithdrawTokens represents a WithdrawTokens event raised by the ERC20Destination contract. +type ERC20DestinationWithdrawTokens struct { + Recipient common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawTokens is a free log retrieval operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_ERC20Destination *ERC20DestinationFilterer) FilterWithdrawTokens(opts *bind.FilterOpts, recipient []common.Address) (*ERC20DestinationWithdrawTokensIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ERC20Destination.contract.FilterLogs(opts, "WithdrawTokens", recipientRule) + if err != nil { + return nil, err + } + return &ERC20DestinationWithdrawTokensIterator{contract: _ERC20Destination.contract, event: "WithdrawTokens", logs: logs, sub: sub}, nil +} + +// WatchWithdrawTokens is a free log subscription operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_ERC20Destination *ERC20DestinationFilterer) WatchWithdrawTokens(opts *bind.WatchOpts, sink chan<- *ERC20DestinationWithdrawTokens, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ERC20Destination.contract.WatchLogs(opts, "WithdrawTokens", recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20DestinationWithdrawTokens) + if err := _ERC20Destination.contract.UnpackLog(event, "WithdrawTokens", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawTokens is a log parse operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_ERC20Destination *ERC20DestinationFilterer) ParseWithdrawTokens(log types.Log) (*ERC20DestinationWithdrawTokens, error) { + event := new(ERC20DestinationWithdrawTokens) + if err := _ERC20Destination.contract.UnpackLog(event, "WithdrawTokens", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/abi-bindings/go/ERC20Source/ERC20Source.go b/abi-bindings/go/ERC20Source/ERC20Source.go index bd679748..87e46d8e 100644 --- a/abi-bindings/go/ERC20Source/ERC20Source.go +++ b/abi-bindings/go/ERC20Source/ERC20Source.go @@ -41,8 +41,8 @@ type SendTokensInput struct { // ERC20SourceMetaData contains all meta data concerning the ERC20Source contract. var ERC20SourceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"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: "0x6101006040523480156200001257600080fd5b5060405162002171380380620021718339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611cf66200047b600039600081816102b001528181610f040152610f320152600081816102210152610e1c01526000818161025b01528181610adc0152610b95015260008181610152015281816105110152818161076001526112580152611cf66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d2cc7a7011610066578063d2cc7a701461027d578063e8535e9314610285578063f2fde38b14610298578063fc0c546a146102ab57600080fd5b806397314297146101e0578063b8df0dea1461021c578063c868efaa14610243578063d127dc9b1461025657600080fd5b80634511243e116100d35780634511243e146101a15780635eb99514146101b4578063715018a6146101c75780638da5cb5b146101cf57600080fd5b806302ee3e9c1461010557806310397b01146101435780631a7f5bec1461014d5780632b0d8f181461018c575b600080fd5b6101306101133660046116c8565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b610130620493e081565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019f61019a3660046116f8565b6102d2565b005b61019f6101af3660046116f8565b6103d7565b61019f6101c2366004611715565b6104d4565b61019f6104e8565b6003546001600160a01b0316610174565b61020c6101ee3660046116f8565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b61019f61025136600461172e565b6104fc565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b61019f6102933660046117b7565b6106c6565b61019f6102a63660046116f8565b6106de565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6102da610754565b6001600160a01b0381166103095760405162461bcd60e51b815260040161030090611801565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103885760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610300565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103df610754565b6001600160a01b0381166104055760405162461bcd60e51b815260040161030090611801565b6001600160a01b03811660009081526001602052604090205460ff1661047f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610300565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104dc610754565b6104e58161075c565b50565b6104f06108fc565b6104fa6000610956565b565b6105046109a8565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f919061184f565b10156106065760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610300565b61060f336101ee565b156106755760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610300565b6106b6848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a0192505050565b6106c06001600055565b50505050565b6106da6106d2836118fc565b826000610b91565b5050565b6106e66108fc565b6001600160a01b03811661074b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b6104e581610956565b6104fa6108fc565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e0919061184f565b600254909150818311156108505760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610300565b8083116108c55760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610300565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146104fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036109fa5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610300565b6002600055565b60008082806020019051810190610a1891906119ea565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610aab5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610300565b610ab58282611b1a565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610b895760208301516001600160a01b03163014610b735760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b6064820152608401610300565b610b81836040015183610ef7565b505050505050565b610b81838360015b82517f00000000000000000000000000000000000000000000000000000000000000009003610c1d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610300565b60208301516001600160a01b0316610c965760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610300565b60408301516001600160a01b0316610d065760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610300565b80610d1757610d1482610f2b565b91505b82606001518211610d905760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610300565b6060830151610d9f9083611b1a565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610ddb908490611b2d565b925050819055506000610eab6040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200188606001518152508152602001620493e081526020018660a001518152602001866040015186604051602001610e949291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250610f5d565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd6386585604051610ee991815260200190565b60405180910390a350505050565b6106da6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611083565b6000610f577f0000000000000000000000000000000000000000000000000000000000000000836110eb565b92915050565b600080610f68611253565b6040840151602001519091501561100d576040830151516001600160a01b0316610fea5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610300565b60408301516020810151905161100d916001600160a01b03909116908390611367565b604051630624488560e41b81526001600160a01b03821690636244885090611039908690600401611bd4565b6020604051808303816000875af1158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c919061184f565b9392505050565b6040516001600160a01b0383166024820152604481018290526110e690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611419565b505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061184f565b905061116f6001600160a01b0385163330866114eb565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061184f565b90508181116112405760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610300565b61124a8282611b1a565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d89190611c52565b90506112fc816001600160a01b031660009081526001602052604090205460ff1690565b156113625760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610300565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156113b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dc919061184f565b6113e69190611b2d565b6040516001600160a01b0385166024820152604481018290529091506106c090859063095ea7b360e01b906064016110af565b600061146e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115239092919063ffffffff16565b8051909150156110e6578080602001905181019061148c9190611c6f565b6110e65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610300565b6040516001600160a01b03808516602483015283166044820152606481018290526106c09085906323b872dd60e01b906084016110af565b6060611532848460008561153a565b949350505050565b60608247101561159b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610300565b600080866001600160a01b031685876040516115b79190611c91565b60006040518083038185875af1925050503d80600081146115f4576040519150601f19603f3d011682016040523d82523d6000602084013e6115f9565b606091505b509150915061160a87838387611615565b979650505050505050565b6060831561168457825160000361167d576001600160a01b0385163b61167d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610300565b5081611532565b61153283838151156116995781518083602001fd5b8060405162461bcd60e51b81526004016103009190611cad565b6001600160a01b03811681146104e557600080fd5b600080604083850312156116db57600080fd5b8235915060208301356116ed816116b3565b809150509250929050565b60006020828403121561170a57600080fd5b813561107c816116b3565b60006020828403121561172757600080fd5b5035919050565b6000806000806060858703121561174457600080fd5b843593506020850135611756816116b3565b9250604085013567ffffffffffffffff8082111561177357600080fd5b818701915087601f83011261178757600080fd5b81358181111561179657600080fd5b8860208285010111156117a857600080fd5b95989497505060200194505050565b600080604083850312156117ca57600080fd5b823567ffffffffffffffff8111156117e157600080fd5b830160c081860312156117f357600080fd5b946020939093013593505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006020828403121561186157600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156118a1576118a1611868565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118d0576118d0611868565b604052919050565b600067ffffffffffffffff8211156118f2576118f2611868565b5060051b60200190565b600060c0823603121561190e57600080fd5b61191661187e565b82358152602080840135611929816116b3565b82820152604084013561193b816116b3565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff81111561197057600080fd5b840136601f82011261198157600080fd5b803561199461198f826118d8565b6118a7565b81815260059190911b820183019083810190368311156119b357600080fd5b928401925b828410156119da5783356119cb816116b3565b825292840192908401906119b8565b60a0860152509295945050505050565b600080604083850312156119fd57600080fd5b825167ffffffffffffffff80821115611a1557600080fd5b9084019060c08287031215611a2957600080fd5b611a3161187e565b82518152602080840151611a44816116b3565b828201526040840151611a56816116b3565b80604084015250606084015160608301526080840151608083015260a084015183811115611a8357600080fd5b80850194505087601f850112611a9857600080fd5b83519250611aa861198f846118d8565b83815260059390931b84018101928181019089851115611ac757600080fd5b948201945b84861015611aee578551611adf816116b3565b82529482019490820190611acc565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f5757610f57611b04565b80820180821115610f5757610f57611b04565b600081518084526020808501945080840160005b83811015611b795781516001600160a01b031687529582019590820190600101611b54565b509495945050505050565b60005b83811015611b9f578181015183820152602001611b87565b50506000910152565b60008151808452611bc0816020860160208601611b84565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c35610100840182611b40565b905060a0840151601f198483030160e085015261124a8282611ba8565b600060208284031215611c6457600080fd5b815161107c816116b3565b600060208284031215611c8157600080fd5b8151801515811461107c57600080fd5b60008251611ca3818460208701611b84565b9190910192915050565b60208152600061107c6020830184611ba856fea26469706673582212201cc883bc77c9c8835ad56790655691304cf4a302670086be64751733499b939864736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"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: "0x6101006040523480156200001257600080fd5b50604051620022a3380380620022a38339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611e286200047b600039600081816102b001528181610fc90152610ff70152600081816102210152610ee101526000818161025b01528181610aee0152610c5a0152600081816101520152818161051101528181610772015261131d0152611e286000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d2cc7a7011610066578063d2cc7a701461027d578063e8535e9314610285578063f2fde38b14610298578063fc0c546a146102ab57600080fd5b806397314297146101e0578063b8df0dea1461021c578063c868efaa14610243578063d127dc9b1461025657600080fd5b80634511243e116100d35780634511243e146101a15780635eb99514146101b4578063715018a6146101c75780638da5cb5b146101cf57600080fd5b806302ee3e9c1461010557806310397b01146101435780631a7f5bec1461014d5780632b0d8f181461018c575b600080fd5b61013061011336600461178d565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101306201388081565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019f61019a3660046117bd565b6102d2565b005b61019f6101af3660046117bd565b6103d7565b61019f6101c23660046117da565b6104d4565b61019f6104e8565b6003546001600160a01b0316610174565b61020c6101ee3660046117bd565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b61019f6102513660046117f3565b6104fc565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b61019f61029336600461187c565b6106c6565b61019f6102a63660046117bd565b6106f0565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6102da610766565b6001600160a01b0381166103095760405162461bcd60e51b8152600401610300906118c6565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103885760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610300565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103df610766565b6001600160a01b0381166104055760405162461bcd60e51b8152600401610300906118c6565b6001600160a01b03811660009081526001602052604090205460ff1661047f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610300565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104dc610766565b6104e58161076e565b50565b6104f061090e565b6104fa6000610968565b565b6105046109ba565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f9190611914565b10156106065760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610300565b61060f336101ee565b156106755760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610300565b6106b6848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a1392505050565b6106c06001600055565b50505050565b6106ce6109ba565b6106e26106da836119c1565b826000610bea565b6106ec6001600055565b5050565b6106f861090e565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b6104e581610968565b6104fa61090e565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190611914565b600254909150818311156108625760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610300565b8083116108d75760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610300565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146104fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403610a0c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610300565b6002600055565b60008082806020019051810190610a2a9190611aaf565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610abd5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610300565b610ac78282611bdf565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610be25760208301516001600160a01b03163014610b855760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b6064820152608401610300565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c83604051610bc491815260200190565b60405180910390a2610bda836040015183610fbc565b505050505050565b610bda838360015b8251610c565760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610300565b82517f00000000000000000000000000000000000000000000000000000000000000009003610ce25760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610300565b60208301516001600160a01b0316610d5b5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610300565b60408301516001600160a01b0316610dcb5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610300565b80610ddc57610dd982610ff0565b91505b82606001518211610e555760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610300565b6060830151610e649083611bdf565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610ea0908490611bf2565b925050819055506000610f706040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020016201388081526020018660a001518152602001866040015186604051602001610f599291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250611022565b9050336001600160a01b0316817ff1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c8686604051610fae929190611c49565b60405180910390a350505050565b6106ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611148565b600061101c7f0000000000000000000000000000000000000000000000000000000000000000836111b0565b92915050565b60008061102d611318565b604084015160200151909150156110d2576040830151516001600160a01b03166110af5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610300565b6040830151602081015190516110d2916001600160a01b0390911690839061142c565b604051630624488560e41b81526001600160a01b038216906362448850906110fe908690600401611d06565b6020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190611914565b9392505050565b6040516001600160a01b0383166024820152604481018290526111ab90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526114de565b505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190611914565b90506112346001600160a01b0385163330866115b0565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f9190611914565b90508181116113055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610300565b61130f8282611bdf565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139d9190611d84565b90506113c1816001600160a01b031660009081526001602052604090205460ff1690565b156114275760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610300565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a19190611914565b6114ab9190611bf2565b6040516001600160a01b0385166024820152604481018290529091506106c090859063095ea7b360e01b90606401611174565b6000611533826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115e89092919063ffffffff16565b8051909150156111ab57808060200190518101906115519190611da1565b6111ab5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610300565b6040516001600160a01b03808516602483015283166044820152606481018290526106c09085906323b872dd60e01b90608401611174565b60606115f784846000856115ff565b949350505050565b6060824710156116605760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610300565b600080866001600160a01b0316858760405161167c9190611dc3565b60006040518083038185875af1925050503d80600081146116b9576040519150601f19603f3d011682016040523d82523d6000602084013e6116be565b606091505b50915091506116cf878383876116da565b979650505050505050565b60608315611749578251600003611742576001600160a01b0385163b6117425760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610300565b50816115f7565b6115f7838381511561175e5781518083602001fd5b8060405162461bcd60e51b81526004016103009190611ddf565b6001600160a01b03811681146104e557600080fd5b600080604083850312156117a057600080fd5b8235915060208301356117b281611778565b809150509250929050565b6000602082840312156117cf57600080fd5b813561114181611778565b6000602082840312156117ec57600080fd5b5035919050565b6000806000806060858703121561180957600080fd5b84359350602085013561181b81611778565b9250604085013567ffffffffffffffff8082111561183857600080fd5b818701915087601f83011261184c57600080fd5b81358181111561185b57600080fd5b88602082850101111561186d57600080fd5b95989497505060200194505050565b6000806040838503121561188f57600080fd5b823567ffffffffffffffff8111156118a657600080fd5b830160c081860312156118b857600080fd5b946020939093013593505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006020828403121561192657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156119665761196661192d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119955761199561192d565b604052919050565b600067ffffffffffffffff8211156119b7576119b761192d565b5060051b60200190565b600060c082360312156119d357600080fd5b6119db611943565b823581526020808401356119ee81611778565b828201526040840135611a0081611778565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff811115611a3557600080fd5b840136601f820112611a4657600080fd5b8035611a59611a548261199d565b61196c565b81815260059190911b82018301908381019036831115611a7857600080fd5b928401925b82841015611a9f578335611a9081611778565b82529284019290840190611a7d565b60a0860152509295945050505050565b60008060408385031215611ac257600080fd5b825167ffffffffffffffff80821115611ada57600080fd5b9084019060c08287031215611aee57600080fd5b611af6611943565b82518152602080840151611b0981611778565b828201526040840151611b1b81611778565b80604084015250606084015160608301526080840151608083015260a084015183811115611b4857600080fd5b80850194505087601f850112611b5d57600080fd5b83519250611b6d611a548461199d565b83815260059390931b84018101928181019089851115611b8c57600080fd5b948201945b84861015611bb3578551611ba481611778565b82529482019490820190611b91565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561101c5761101c611bc9565b8082018082111561101c5761101c611bc9565b600081518084526020808501945080840160005b83811015611c3e5781516001600160a01b031687529582019590820190600101611c19565b509495945050505050565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e0840152611ca6610100840182611c05565b9150508260208301529392505050565b60005b83811015611cd1578181015183820152602001611cb9565b50506000910152565b60008151808452611cf2816020860160208601611cb6565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611d67610100840182611c05565b905060a0840151601f198483030160e085015261130f8282611cda565b600060208284031215611d9657600080fd5b815161114181611778565b600060208284031215611db357600080fd5b8151801515811461114157600080fd5b60008251611dd5818460208701611cb6565b9190910192915050565b6020815260006111416020830184611cda56fea264697066735822122066a7f2f7ef9459cffc36d358fefd2848610ef1859f983959950602cd16c8aa6f64736f6c63430008120033", } // ERC20SourceABI is the input ABI used to generate the binding from. @@ -1015,13 +1015,14 @@ func (it *ERC20SourceSendTokensIterator) Close() error { type ERC20SourceSendTokens struct { TeleporterMessageID [32]byte Sender common.Address + Input SendTokensInput Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterSendTokens is a free log retrieval operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// FilterSendTokens is a free log retrieval operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_ERC20Source *ERC20SourceFilterer) FilterSendTokens(opts *bind.FilterOpts, teleporterMessageID [][32]byte, sender []common.Address) (*ERC20SourceSendTokensIterator, error) { var teleporterMessageIDRule []interface{} @@ -1040,9 +1041,9 @@ func (_ERC20Source *ERC20SourceFilterer) FilterSendTokens(opts *bind.FilterOpts, return &ERC20SourceSendTokensIterator{contract: _ERC20Source.contract, event: "SendTokens", logs: logs, sub: sub}, nil } -// WatchSendTokens is a free log subscription operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// WatchSendTokens is a free log subscription operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_ERC20Source *ERC20SourceFilterer) WatchSendTokens(opts *bind.WatchOpts, sink chan<- *ERC20SourceSendTokens, teleporterMessageID [][32]byte, sender []common.Address) (event.Subscription, error) { var teleporterMessageIDRule []interface{} @@ -1086,9 +1087,9 @@ func (_ERC20Source *ERC20SourceFilterer) WatchSendTokens(opts *bind.WatchOpts, s }), nil } -// ParseSendTokens is a log parse operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// ParseSendTokens is a log parse operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_ERC20Source *ERC20SourceFilterer) ParseSendTokens(log types.Log) (*ERC20SourceSendTokens, error) { event := new(ERC20SourceSendTokens) if err := _ERC20Source.contract.UnpackLog(event, "SendTokens", log); err != nil { @@ -1385,3 +1386,148 @@ func (_ERC20Source *ERC20SourceFilterer) ParseTeleporterAddressUnpaused(log type event.Raw = log return event, nil } + +// ERC20SourceWithdrawTokensIterator is returned from FilterWithdrawTokens and is used to iterate over the raw logs and unpacked data for WithdrawTokens events raised by the ERC20Source contract. +type ERC20SourceWithdrawTokensIterator struct { + Event *ERC20SourceWithdrawTokens // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20SourceWithdrawTokensIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20SourceWithdrawTokens) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20SourceWithdrawTokens) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20SourceWithdrawTokensIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20SourceWithdrawTokensIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20SourceWithdrawTokens represents a WithdrawTokens event raised by the ERC20Source contract. +type ERC20SourceWithdrawTokens struct { + Recipient common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawTokens is a free log retrieval operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_ERC20Source *ERC20SourceFilterer) FilterWithdrawTokens(opts *bind.FilterOpts, recipient []common.Address) (*ERC20SourceWithdrawTokensIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ERC20Source.contract.FilterLogs(opts, "WithdrawTokens", recipientRule) + if err != nil { + return nil, err + } + return &ERC20SourceWithdrawTokensIterator{contract: _ERC20Source.contract, event: "WithdrawTokens", logs: logs, sub: sub}, nil +} + +// WatchWithdrawTokens is a free log subscription operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_ERC20Source *ERC20SourceFilterer) WatchWithdrawTokens(opts *bind.WatchOpts, sink chan<- *ERC20SourceWithdrawTokens, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ERC20Source.contract.WatchLogs(opts, "WithdrawTokens", recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20SourceWithdrawTokens) + if err := _ERC20Source.contract.UnpackLog(event, "WithdrawTokens", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawTokens is a log parse operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_ERC20Source *ERC20SourceFilterer) ParseWithdrawTokens(log types.Log) (*ERC20SourceWithdrawTokens, error) { + event := new(ERC20SourceWithdrawTokens) + if err := _ERC20Source.contract.UnpackLog(event, "WithdrawTokens", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go index d25d2c7a..7917ecc5 100644 --- a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go @@ -41,8 +41,8 @@ type SendTokensInput struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162002184380380620021848339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611d0262000482600039600081816104060152818161105601526110f9015260008181610107015281816103360152610f6501526000818161038a01528181610c250152610cde01526000818161020e0152818161065e015281816108a9015261129c0152611d026000f3fe6080604052600436106100f75760003560e01c8063973142971161008a578063d2cc7a7011610059578063d2cc7a70146103ac578063e30fd71d146103c1578063f2fde38b146103d4578063fc0c546a146103f457600080fd5b806397314297146102db578063b8df0dea14610324578063c868efaa14610358578063d127dc9b1461037857600080fd5b80634511243e116100c65780634511243e146102685780635eb9951414610288578063715018a6146102a85780638da5cb5b146102bd57600080fd5b806302ee3e9c1461019a57806310397b01146101e55780631a7f5bec146101fc5780632b0d8f181461024857600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046116df565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101f157600080fd5b506101d2620493e081565b34801561020857600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025457600080fd5b5061019361026336600461170f565b610428565b34801561027457600080fd5b5061019361028336600461170f565b610524565b34801561029457600080fd5b506101936102a336600461172c565b610621565b3480156102b457600080fd5b50610193610635565b3480156102c957600080fd5b506003546001600160a01b0316610230565b3480156102e757600080fd5b506103146102f636600461170f565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033057600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561036457600080fd5b50610193610373366004611745565b610649565b34801561038457600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b857600080fd5b506002546101d2565b6101936103cf3660046117ce565b610813565b3480156103e057600080fd5b506101936103ef36600461170f565b610827565b34801561040057600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b61043061089d565b6001600160a01b0381166104565760405162461bcd60e51b815260040161018a90611809565b6001600160a01b03811660009081526001602052604090205460ff16156104d55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61052c61089d565b6001600160a01b0381166105525760405162461bcd60e51b815260040161018a90611809565b6001600160a01b03811660009081526001602052604090205460ff166105cc5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b61062961089d565b610632816108a5565b50565b61063d610a45565b6106476000610a9f565b565b610651610af1565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190611857565b10156107535760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61075c336102f6565b156107c25760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b610803848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b4a92505050565b61080d6001600055565b50505050565b61063261081f82611904565b346000610cda565b61082f610a45565b6001600160a01b0381166108945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61063281610a9f565b610647610a45565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109299190611857565b600254909150818311156109995760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b808311610a0e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403610b435760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b60008082806020019051810190610b6191906119f2565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610bf45760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b610bfe8282611b22565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610cd25760208301516001600160a01b03163014610cbc5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b606482015260840161018a565b610cca836040015183611040565b505050505050565b610cca838360015b82517f00000000000000000000000000000000000000000000000000000000000000009003610d665760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b60208301516001600160a01b0316610ddf5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b60408301516001600160a01b0316610e4f5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b80610e6057610e5d826110f5565b91505b82606001518211610ed95760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b6060830151610ee89083611b22565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610f24908490611b3b565b925050819055506000610ff46040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200188606001518152508152602001620493e081526020018660a001518152602001866040015186604051602001610fdd9291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250611171565b9050336001600160a01b0316817f35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd638658560405161103291815260200190565b60405180910390a350505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f193505050501580156110f0573d6000803e3d6000fd5b505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561115257600080fd5b505af1158015611166573d6000803e3d6000fd5b509495945050505050565b60008061117c611297565b60408401516020015190915015611221576040830151516001600160a01b03166111fe5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b604083015160208101519051611221916001600160a01b039091169083906113ab565b604051630624488560e41b81526001600160a01b0382169063624488509061124d908690600401611bd7565b6020604051808303816000875af115801561126c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112909190611857565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131c9190611c5e565b9050611340816001600160a01b031660009081526001602052604090205460ff1690565b156113a65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114209190611857565b61142a9190611b3b565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015292935061080d9287926000916114bd9190851690849061153a565b8051909150156110f057808060200190518101906114db9190611c7b565b6110f05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b60606115498484600085611551565b949350505050565b6060824710156115b25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161018a565b600080866001600160a01b031685876040516115ce9190611c9d565b60006040518083038185875af1925050503d806000811461160b576040519150601f19603f3d011682016040523d82523d6000602084013e611610565b606091505b50915091506116218783838761162c565b979650505050505050565b6060831561169b578251600003611694576001600160a01b0385163b6116945760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611549565b61154983838151156116b05781518083602001fd5b8060405162461bcd60e51b815260040161018a9190611cb9565b6001600160a01b038116811461063257600080fd5b600080604083850312156116f257600080fd5b823591506020830135611704816116ca565b809150509250929050565b60006020828403121561172157600080fd5b8135611290816116ca565b60006020828403121561173e57600080fd5b5035919050565b6000806000806060858703121561175b57600080fd5b84359350602085013561176d816116ca565b9250604085013567ffffffffffffffff8082111561178a57600080fd5b818701915087601f83011261179e57600080fd5b8135818111156117ad57600080fd5b8860208285010111156117bf57600080fd5b95989497505060200194505050565b6000602082840312156117e057600080fd5b813567ffffffffffffffff8111156117f757600080fd5b820160c0818503121561129057600080fd5b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006020828403121561186957600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156118a9576118a9611870565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118d8576118d8611870565b604052919050565b600067ffffffffffffffff8211156118fa576118fa611870565b5060051b60200190565b600060c0823603121561191657600080fd5b61191e611886565b82358152602080840135611931816116ca565b828201526040840135611943816116ca565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff81111561197857600080fd5b840136601f82011261198957600080fd5b803561199c611997826118e0565b6118af565b81815260059190911b820183019083810190368311156119bb57600080fd5b928401925b828410156119e25783356119d3816116ca565b825292840192908401906119c0565b60a0860152509295945050505050565b60008060408385031215611a0557600080fd5b825167ffffffffffffffff80821115611a1d57600080fd5b9084019060c08287031215611a3157600080fd5b611a39611886565b82518152602080840151611a4c816116ca565b828201526040840151611a5e816116ca565b80604084015250606084015160608301526080840151608083015260a084015183811115611a8b57600080fd5b80850194505087601f850112611aa057600080fd5b83519250611ab0611997846118e0565b83815260059390931b84018101928181019089851115611acf57600080fd5b948201945b84861015611af6578551611ae7816116ca565b82529482019490820190611ad4565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b3557611b35611b0c565b92915050565b80820180821115611b3557611b35611b0c565b600081518084526020808501945080840160005b838110156111665781516001600160a01b031687529582019590820190600101611b62565b60005b83811015611ba2578181015183820152602001611b8a565b50506000910152565b60008151808452611bc3816020860160208601611b87565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c38610100840182611b4e565b905060a0840151601f198483030160e0850152611c558282611bab565b95945050505050565b600060208284031215611c7057600080fd5b8151611290816116ca565b600060208284031215611c8d57600080fd5b8151801515811461129057600080fd5b60008251611caf818460208701611b87565b9190910192915050565b6020815260006112906020830184611bab56fea26469706673582212202b40608db57dfb2423963dd84c83d6a92caf0529f60f8f8140617dd0179a207164736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101006040523480156200001257600080fd5b50604051620022b6380380620022b68339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611e3462000482600039600081816104060152818161111b01526111be01526000818161010701528181610336015261102a01526000818161038a01528181610c370152610da301526000818161020e0152818161065e015281816108bb01526113610152611e346000f3fe6080604052600436106100f75760003560e01c8063973142971161008a578063d2cc7a7011610059578063d2cc7a70146103ac578063e30fd71d146103c1578063f2fde38b146103d4578063fc0c546a146103f457600080fd5b806397314297146102db578063b8df0dea14610324578063c868efaa14610358578063d127dc9b1461037857600080fd5b80634511243e116100c65780634511243e146102685780635eb9951414610288578063715018a6146102a85780638da5cb5b146102bd57600080fd5b806302ee3e9c1461019a57806310397b01146101e55780631a7f5bec146101fc5780632b0d8f181461024857600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046117a4565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101f157600080fd5b506101d26201388081565b34801561020857600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025457600080fd5b506101936102633660046117d4565b610428565b34801561027457600080fd5b506101936102833660046117d4565b610524565b34801561029457600080fd5b506101936102a33660046117f1565b610621565b3480156102b457600080fd5b50610193610635565b3480156102c957600080fd5b506003546001600160a01b0316610230565b3480156102e757600080fd5b506103146102f63660046117d4565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033057600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561036457600080fd5b5061019361037336600461180a565b610649565b34801561038457600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b857600080fd5b506002546101d2565b6101936103cf366004611893565b610813565b3480156103e057600080fd5b506101936103ef3660046117d4565b610839565b34801561040057600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b6104306108af565b6001600160a01b0381166104565760405162461bcd60e51b815260040161018a906118ce565b6001600160a01b03811660009081526001602052604090205460ff16156104d55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61052c6108af565b6001600160a01b0381166105525760405162461bcd60e51b815260040161018a906118ce565b6001600160a01b03811660009081526001602052604090205460ff166105cc5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6106296108af565b610632816108b7565b50565b61063d610a57565b6106476000610ab1565b565b610651610b03565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061191c565b10156107535760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61075c336102f6565b156107c25760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b610803848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b5c92505050565b61080d6001600055565b50505050565b61081b610b03565b61082f610827826119c9565b346000610d33565b6106326001600055565b610841610a57565b6001600160a01b0381166108a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61063281610ab1565b610647610a57565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b919061191c565b600254909150818311156109ab5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b808311610a205760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403610b555760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b60008082806020019051810190610b739190611ab7565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610c065760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b610c108282611be7565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610d2b5760208301516001600160a01b03163014610cce5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b606482015260840161018a565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c83604051610d0d91815260200190565b60405180910390a2610d23836040015183611105565b505050505050565b610d23838360015b8251610d9f5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b82517f00000000000000000000000000000000000000000000000000000000000000009003610e2b5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b60208301516001600160a01b0316610ea45760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b60408301516001600160a01b0316610f145760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b80610f2557610f22826111ba565b91505b82606001518211610f9e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b6060830151610fad9083611be7565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610fe9908490611c00565b9250508190555060006110b96040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020016201388081526020018660a0015181526020018660400151866040516020016110a29291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250611236565b9050336001600160a01b0316817ff1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c86866040516110f7929190611c4c565b60405180910390a350505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561116757600080fd5b505af115801561117b573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f193505050501580156111b5573d6000803e3d6000fd5b505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561121757600080fd5b505af115801561122b573d6000803e3d6000fd5b509495945050505050565b60008061124161135c565b604084015160200151909150156112e6576040830151516001600160a01b03166112c35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b6040830151602081015190516112e6916001600160a01b03909116908390611470565b604051630624488560e41b81526001600160a01b03821690636244885090611312908690600401611d09565b6020604051808303816000875af1158015611331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611355919061191c565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e19190611d90565b9050611405816001600160a01b031660009081526001602052604090205460ff1690565b1561146b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061191c565b6114ef9190611c00565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015292935061080d928792600091611582919085169084906115ff565b8051909150156111b557808060200190518101906115a09190611dad565b6111b55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b606061160e8484600085611616565b949350505050565b6060824710156116775760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161018a565b600080866001600160a01b031685876040516116939190611dcf565b60006040518083038185875af1925050503d80600081146116d0576040519150601f19603f3d011682016040523d82523d6000602084013e6116d5565b606091505b50915091506116e6878383876116f1565b979650505050505050565b60608315611760578251600003611759576001600160a01b0385163b6117595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b508161160e565b61160e83838151156117755781518083602001fd5b8060405162461bcd60e51b815260040161018a9190611deb565b6001600160a01b038116811461063257600080fd5b600080604083850312156117b757600080fd5b8235915060208301356117c98161178f565b809150509250929050565b6000602082840312156117e657600080fd5b81356113558161178f565b60006020828403121561180357600080fd5b5035919050565b6000806000806060858703121561182057600080fd5b8435935060208501356118328161178f565b9250604085013567ffffffffffffffff8082111561184f57600080fd5b818701915087601f83011261186357600080fd5b81358181111561187257600080fd5b88602082850101111561188457600080fd5b95989497505060200194505050565b6000602082840312156118a557600080fd5b813567ffffffffffffffff8111156118bc57600080fd5b820160c0818503121561135557600080fd5b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006020828403121561192e57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561196e5761196e611935565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561199d5761199d611935565b604052919050565b600067ffffffffffffffff8211156119bf576119bf611935565b5060051b60200190565b600060c082360312156119db57600080fd5b6119e361194b565b823581526020808401356119f68161178f565b828201526040840135611a088161178f565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff811115611a3d57600080fd5b840136601f820112611a4e57600080fd5b8035611a61611a5c826119a5565b611974565b81815260059190911b82018301908381019036831115611a8057600080fd5b928401925b82841015611aa7578335611a988161178f565b82529284019290840190611a85565b60a0860152509295945050505050565b60008060408385031215611aca57600080fd5b825167ffffffffffffffff80821115611ae257600080fd5b9084019060c08287031215611af657600080fd5b611afe61194b565b82518152602080840151611b118161178f565b828201526040840151611b238161178f565b80604084015250606084015160608301526080840151608083015260a084015183811115611b5057600080fd5b80850194505087601f850112611b6557600080fd5b83519250611b75611a5c846119a5565b83815260059390931b84018101928181019089851115611b9457600080fd5b948201945b84861015611bbb578551611bac8161178f565b82529482019490820190611b99565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611bfa57611bfa611bd1565b92915050565b80820180821115611bfa57611bfa611bd1565b600081518084526020808501945080840160005b8381101561122b5781516001600160a01b031687529582019590820190600101611c27565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e0840152611ca9610100840182611c13565b9150508260208301529392505050565b60005b83811015611cd4578181015183820152602001611cbc565b50506000910152565b60008151808452611cf5816020860160208601611cb9565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611d6a610100840182611c13565b905060a0840151601f198483030160e0850152611d878282611cdd565b95945050505050565b600060208284031215611da257600080fd5b81516113558161178f565b600060208284031215611dbf57600080fd5b8151801515811461135557600080fd5b60008251611de1818460208701611cb9565b9190910192915050565b6020815260006113556020830184611cdd56fea26469706673582212200ecbfda118a1060b7a036433f9d89515e9802e4bb147810ea9b081bc447c4dc364736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from. @@ -1036,13 +1036,14 @@ func (it *NativeTokenSourceSendTokensIterator) Close() error { type NativeTokenSourceSendTokens struct { TeleporterMessageID [32]byte Sender common.Address + Input SendTokensInput Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterSendTokens is a free log retrieval operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// FilterSendTokens is a free log retrieval operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_NativeTokenSource *NativeTokenSourceFilterer) FilterSendTokens(opts *bind.FilterOpts, teleporterMessageID [][32]byte, sender []common.Address) (*NativeTokenSourceSendTokensIterator, error) { var teleporterMessageIDRule []interface{} @@ -1061,9 +1062,9 @@ func (_NativeTokenSource *NativeTokenSourceFilterer) FilterSendTokens(opts *bind return &NativeTokenSourceSendTokensIterator{contract: _NativeTokenSource.contract, event: "SendTokens", logs: logs, sub: sub}, nil } -// WatchSendTokens is a free log subscription operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// WatchSendTokens is a free log subscription operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_NativeTokenSource *NativeTokenSourceFilterer) WatchSendTokens(opts *bind.WatchOpts, sink chan<- *NativeTokenSourceSendTokens, teleporterMessageID [][32]byte, sender []common.Address) (event.Subscription, error) { var teleporterMessageIDRule []interface{} @@ -1107,9 +1108,9 @@ func (_NativeTokenSource *NativeTokenSourceFilterer) WatchSendTokens(opts *bind. }), nil } -// ParseSendTokens is a log parse operation binding the contract event 0x35971507d5275c40cb225115b67b12c9e28b4bb02e60366a5863d8320bd63865. +// ParseSendTokens is a log parse operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) func (_NativeTokenSource *NativeTokenSourceFilterer) ParseSendTokens(log types.Log) (*NativeTokenSourceSendTokens, error) { event := new(NativeTokenSourceSendTokens) if err := _NativeTokenSource.contract.UnpackLog(event, "SendTokens", log); err != nil { @@ -1406,3 +1407,148 @@ func (_NativeTokenSource *NativeTokenSourceFilterer) ParseTeleporterAddressUnpau event.Raw = log return event, nil } + +// NativeTokenSourceWithdrawTokensIterator is returned from FilterWithdrawTokens and is used to iterate over the raw logs and unpacked data for WithdrawTokens events raised by the NativeTokenSource contract. +type NativeTokenSourceWithdrawTokensIterator struct { + Event *NativeTokenSourceWithdrawTokens // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NativeTokenSourceWithdrawTokensIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NativeTokenSourceWithdrawTokens) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NativeTokenSourceWithdrawTokens) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NativeTokenSourceWithdrawTokensIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenSourceWithdrawTokensIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenSourceWithdrawTokens represents a WithdrawTokens event raised by the NativeTokenSource contract. +type NativeTokenSourceWithdrawTokens struct { + Recipient common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawTokens is a free log retrieval operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_NativeTokenSource *NativeTokenSourceFilterer) FilterWithdrawTokens(opts *bind.FilterOpts, recipient []common.Address) (*NativeTokenSourceWithdrawTokensIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _NativeTokenSource.contract.FilterLogs(opts, "WithdrawTokens", recipientRule) + if err != nil { + return nil, err + } + return &NativeTokenSourceWithdrawTokensIterator{contract: _NativeTokenSource.contract, event: "WithdrawTokens", logs: logs, sub: sub}, nil +} + +// WatchWithdrawTokens is a free log subscription operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_NativeTokenSource *NativeTokenSourceFilterer) WatchWithdrawTokens(opts *bind.WatchOpts, sink chan<- *NativeTokenSourceWithdrawTokens, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _NativeTokenSource.contract.WatchLogs(opts, "WithdrawTokens", recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NativeTokenSourceWithdrawTokens) + if err := _NativeTokenSource.contract.UnpackLog(event, "WithdrawTokens", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawTokens is a log parse operation binding the contract event 0x680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c. +// +// Solidity: event WithdrawTokens(address indexed recipient, uint256 amount) +func (_NativeTokenSource *NativeTokenSourceFilterer) ParseWithdrawTokens(log types.Log) (*NativeTokenSourceWithdrawTokens, error) { + event := new(NativeTokenSourceWithdrawTokens) + if err := _NativeTokenSource.contract.UnpackLog(event, "WithdrawTokens", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index 6107dc2e..0160695d 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -35,7 +35,7 @@ abstract contract TeleporterTokenDestination is address public immutable feeTokenAddress; /// @notice Required gas limit for sending tokens to another chain. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 100_000; + uint256 public constant SEND_TOKENS_REQUIRED_GAS = 220_000; /** * @notice Initializes this destination token bridge instance to receive @@ -83,6 +83,10 @@ abstract contract TeleporterTokenDestination is * - `amount` must be greater than `input.primaryFee` */ function _send(SendTokensInput calldata input, uint256 amount) internal virtual { + require( + input.destinationBlockchainID != bytes32(0), + "TeleporterTokenDestination: zero destination blockchain ID" + ); require( input.destinationBridgeAddress != address(0), "TeleporterTokenDestination: zero destination bridge address" diff --git a/contracts/src/TeleporterTokenSource.sol b/contracts/src/TeleporterTokenSource.sol index 9173d321..9e90963c 100644 --- a/contracts/src/TeleporterTokenSource.sol +++ b/contracts/src/TeleporterTokenSource.sol @@ -41,7 +41,7 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn ) public bridgedBalances; /// @notice Required gas limit for sending tokens to another chain. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 70_000; + uint256 public constant SEND_TOKENS_REQUIRED_GAS = 80_000; /** * @notice Initializes this source token bridge instance to send @@ -75,6 +75,10 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn uint256 amount, bool isMultihop ) internal virtual { + require( + input.destinationBlockchainID != bytes32(0), + "TeleporterTokenSource: zero destination blockchain ID" + ); require( input.destinationBlockchainID != blockchainID, "TeleporterTokenSource: cannot bridge to same chain" diff --git a/contracts/test/TeleporterTokenBridgeTests.t.sol b/contracts/test/TeleporterTokenBridgeTests.t.sol index c3d7873f..4a92796a 100644 --- a/contracts/test/TeleporterTokenBridgeTests.t.sol +++ b/contracts/test/TeleporterTokenBridgeTests.t.sol @@ -51,6 +51,13 @@ abstract contract TeleporterTokenBridgeTest is Test { event Transfer(address indexed from, address indexed to, uint256 value); + function testZeroDestinationBlockchainID() public { + SendTokensInput memory input = _createDefaultSendTokensInput(); + input.destinationBlockchainID = bytes32(0); + vm.expectRevert(_formatErrorMessage("zero destination blockchain ID")); + _send(input, 0); + } + function testZeroDestinationBridge() public { SendTokensInput memory input = _createDefaultSendTokensInput(); input.destinationBridgeAddress = address(0); From a155e4f01db01b35b5d883d32ba8914fd90addb7 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Wed, 3 Apr 2024 08:38:18 -0700 Subject: [PATCH 05/11] passing in required gas --- contracts/src/TeleporterTokenDestination.sol | 7 +++---- contracts/src/TeleporterTokenSource.sol | 7 ++----- .../src/interfaces/ITeleporterTokenBridge.sol | 2 +- .../test/TeleporterTokenBridgeTests.t.sol | 2 +- .../test/TeleporterTokenDestinationTests.t.sol | 6 ++---- .../test/TeleporterTokenSourceTests.t.sol | 18 ++++++------------ 6 files changed, 15 insertions(+), 27 deletions(-) diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index 0160695d..3cee7c18 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -35,7 +35,7 @@ abstract contract TeleporterTokenDestination is address public immutable feeTokenAddress; /// @notice Required gas limit for sending tokens to another chain. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 220_000; + uint256 public constant SEND_TOKENS_REQUIRED_GAS = 100_000; /** * @notice Initializes this destination token bridge instance to receive @@ -124,7 +124,7 @@ abstract contract TeleporterTokenDestination is destinationAddress: tokenSourceAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: input.primaryFee}), requiredGasLimit: SEND_TOKENS_REQUIRED_GAS, - allowedRelayerAddresses: input.allowedRelayerAddresses, + allowedRelayerAddresses: new address[](0), message: abi.encode( SendTokensInput({ destinationBlockchainID: input.destinationBlockchainID, @@ -132,8 +132,7 @@ abstract contract TeleporterTokenDestination is recipient: input.recipient, primaryFee: input.secondaryFee, secondaryFee: 0, - // TODO: Does multihop allowed relayer need to be separate parameter? - allowedRelayerAddresses: input.allowedRelayerAddresses + requiredGasLimit: input.requiredGasLimit }), amount ) diff --git a/contracts/src/TeleporterTokenSource.sol b/contracts/src/TeleporterTokenSource.sol index 9e90963c..062f16e3 100644 --- a/contracts/src/TeleporterTokenSource.sol +++ b/contracts/src/TeleporterTokenSource.sol @@ -40,9 +40,6 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn => mapping(address destinationBridgeAddress => uint256 balance) ) public bridgedBalances; - /// @notice Required gas limit for sending tokens to another chain. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 80_000; - /** * @notice Initializes this source token bridge instance to send * tokens to the specified destination chain and token bridge instance. @@ -109,8 +106,8 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn destinationBlockchainID: input.destinationBlockchainID, destinationAddress: input.destinationBridgeAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: input.primaryFee}), - requiredGasLimit: SEND_TOKENS_REQUIRED_GAS, - allowedRelayerAddresses: input.allowedRelayerAddresses, + requiredGasLimit: input.requiredGasLimit, + allowedRelayerAddresses: new address[](0), message: abi.encode(input.recipient, amount) }) ); diff --git a/contracts/src/interfaces/ITeleporterTokenBridge.sol b/contracts/src/interfaces/ITeleporterTokenBridge.sol index 3ca156e8..13eb6052 100644 --- a/contracts/src/interfaces/ITeleporterTokenBridge.sol +++ b/contracts/src/interfaces/ITeleporterTokenBridge.sol @@ -27,7 +27,7 @@ struct SendTokensInput { address recipient; uint256 primaryFee; uint256 secondaryFee; - address[] allowedRelayerAddresses; + uint256 requiredGasLimit; } /** diff --git a/contracts/test/TeleporterTokenBridgeTests.t.sol b/contracts/test/TeleporterTokenBridgeTests.t.sol index 4a92796a..2154d514 100644 --- a/contracts/test/TeleporterTokenBridgeTests.t.sol +++ b/contracts/test/TeleporterTokenBridgeTests.t.sol @@ -151,7 +151,7 @@ abstract contract TeleporterTokenBridgeTest is Test { destinationAddress: input.destinationBridgeAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: address(feeToken), amount: input.primaryFee}), requiredGasLimit: _requiredGasLimit(), - allowedRelayerAddresses: input.allowedRelayerAddresses, + allowedRelayerAddresses: new address[](0), message: _encodeMessage(input, bridgeAmount) }); diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index d4a45666..e9abe4e7 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -110,8 +110,7 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { destinationBridgeAddress: TOKEN_SOURCE_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: 0, - secondaryFee: 0, - allowedRelayerAddresses: new address[](0) + secondaryFee: 0 }); } @@ -134,8 +133,7 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { destinationBridgeAddress: input.destinationBridgeAddress, recipient: input.recipient, primaryFee: input.secondaryFee, - secondaryFee: 0, - allowedRelayerAddresses: input.allowedRelayerAddresses + secondaryFee: 0 }), amount ); diff --git a/contracts/test/TeleporterTokenSourceTests.t.sol b/contracts/test/TeleporterTokenSourceTests.t.sol index e7a5c024..9d83955e 100644 --- a/contracts/test/TeleporterTokenSourceTests.t.sol +++ b/contracts/test/TeleporterTokenSourceTests.t.sol @@ -60,8 +60,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: address(this), recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: 0, - secondaryFee: 0, - allowedRelayerAddresses: new address[](0) + secondaryFee: 0 }), 1 ) @@ -82,8 +81,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: address(0), recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: 0, - secondaryFee: 0, - allowedRelayerAddresses: new address[](0) + secondaryFee: 0 }), 1 ) @@ -101,8 +99,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: address(tokenSource), recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: feeAmount, - secondaryFee: 0, - allowedRelayerAddresses: new address[](0) + secondaryFee: 0 }); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); @@ -136,8 +133,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: DEFAULT_DESTINATION_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: feeAmount, - secondaryFee: 0, - allowedRelayerAddresses: new address[](0) + secondaryFee: 0 }); _checkExpectedTeleporterCalls(input, bridgedAmount); @@ -171,8 +167,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: DEFAULT_DESTINATION_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: feeAmount, - secondaryFee: 0, - allowedRelayerAddresses: new address[](0) + secondaryFee: 0 }); vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); @@ -207,8 +202,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: DEFAULT_DESTINATION_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: 0, - secondaryFee: 0, - allowedRelayerAddresses: new address[](0) + secondaryFee: 0 }); } From 49de7b2807f5fedd742ae1abdd0878990289d2ef Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Wed, 3 Apr 2024 12:52:47 -0700 Subject: [PATCH 06/11] passing in required gas limit --- contracts/src/TeleporterTokenDestination.sol | 7 +- contracts/src/TeleporterTokenSource.sol | 1 + .../src/interfaces/ITeleporterTokenBridge.sol | 4 +- .../test/TeleporterTokenBridgeTests.t.sol | 9 ++- .../TeleporterTokenDestinationTests.t.sol | 30 ++++++-- .../test/TeleporterTokenSourceTests.t.sol | 76 +++++++++---------- 6 files changed, 74 insertions(+), 53 deletions(-) diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index 3cee7c18..10952a23 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -34,7 +34,7 @@ abstract contract TeleporterTokenDestination is /// @notice The ERC20 token this contract uses to pay for Teleporter fees. address public immutable feeTokenAddress; - /// @notice Required gas limit for sending tokens to another chain. + /// @notice Required gas limit for sending tokens back to the source blockchain. uint256 public constant SEND_TOKENS_REQUIRED_GAS = 100_000; /** @@ -100,6 +100,11 @@ abstract contract TeleporterTokenDestination is input.destinationBridgeAddress == tokenSourceAddress, "TeleporterTokenDestination: invalid destination bridge address" ); + require( + input.requiredGasLimit == 0, + "TeleporterTokenDestination: non-zero required gas limit" + ); + require(input.secondaryFee == 0, "TeleporterTokenDestination: non-zero secondary fee"); } else if (input.destinationBlockchainID == blockchainID) { require( input.destinationBridgeAddress != address(this), diff --git a/contracts/src/TeleporterTokenSource.sol b/contracts/src/TeleporterTokenSource.sol index 062f16e3..59ff82e5 100644 --- a/contracts/src/TeleporterTokenSource.sol +++ b/contracts/src/TeleporterTokenSource.sol @@ -85,6 +85,7 @@ abstract contract TeleporterTokenSource is ITeleporterTokenBridge, TeleporterOwn "TeleporterTokenSource: zero destination bridge address" ); require(input.recipient != address(0), "TeleporterTokenSource: zero recipient address"); + require(input.secondaryFee == 0, "TeleporterTokenSource: non-zero secondary fee"); // If this send is not a multihop, deposit the funds sent from the user to the bridge, // and set to adjusted amount after deposit. If it is a multihop, the amount is already diff --git a/contracts/src/interfaces/ITeleporterTokenBridge.sol b/contracts/src/interfaces/ITeleporterTokenBridge.sol index 13eb6052..7d4e27ba 100644 --- a/contracts/src/interfaces/ITeleporterTokenBridge.sol +++ b/contracts/src/interfaces/ITeleporterTokenBridge.sol @@ -18,8 +18,8 @@ import {ITeleporterReceiver} from "@teleporter/ITeleporterReceiver.sol"; * @param destinationBridgeAddress address of the destination token bridge instance * @param recipient address of the recipient on the destination chain * @param primaryFee amount of tokens to pay for Teleporter fee on the source chain - * @param secondaryFee amount of tokens to pay for Teleporter fee if a multihop is needed. - * @param allowedRelayerAddresses addresses of relayers allowed to send the message + * @param secondaryFee amount of tokens to pay for Teleporter fee if a multihop is needed + * @param requiredGasLimit gas limit requirement for sending to a destination token bridge */ struct SendTokensInput { bytes32 destinationBlockchainID; diff --git a/contracts/test/TeleporterTokenBridgeTests.t.sol b/contracts/test/TeleporterTokenBridgeTests.t.sol index 2154d514..dcd4bc7c 100644 --- a/contracts/test/TeleporterTokenBridgeTests.t.sol +++ b/contracts/test/TeleporterTokenBridgeTests.t.sol @@ -29,6 +29,7 @@ abstract contract TeleporterTokenBridgeTest is Test { address public constant TOKEN_SOURCE_ADDRESS = 0xd54e3E251b9b0EEd3ed70A858e927bbC2659587d; address public constant DEFAULT_RECIPIENT_ADDRESS = 0xABCDabcdABcDabcDaBCDAbcdABcdAbCdABcDABCd; address public constant WARP_PRECOMPILE_ADDRESS = 0x0200000000000000000000000000000000000005; + uint256 public constant DEFAULT_REQUIRED_GAS_LIMIT = 100_000; address public constant MOCK_TELEPORTER_MESSENGER_ADDRESS = 0x644E5b7c5D4Bc8073732CEa72c66e0BB90dFC00f; @@ -150,7 +151,7 @@ abstract contract TeleporterTokenBridgeTest is Test { destinationBlockchainID: input.destinationBlockchainID, destinationAddress: input.destinationBridgeAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: address(feeToken), amount: input.primaryFee}), - requiredGasLimit: _requiredGasLimit(), + requiredGasLimit: _expectedRequiredGasLimit(), allowedRelayerAddresses: new address[](0), message: _encodeMessage(input, bridgeAmount) }); @@ -175,14 +176,14 @@ abstract contract TeleporterTokenBridgeTest is Test { ); } - function _requiredGasLimit() internal view virtual returns (uint256); - function _createDefaultSendTokensInput() internal - pure + view virtual returns (SendTokensInput memory); + function _expectedRequiredGasLimit() internal view virtual returns (uint256); + function _formatErrorMessage(string memory message) internal pure diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index e9abe4e7..cd51dbc2 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -33,13 +33,27 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { ); } - function testInvalidSendingBackToSourceBlockchain() public { + function testInvalidSourceBlockchainBridgeAddress() public { SendTokensInput memory input = _createDefaultSendTokensInput(); input.destinationBridgeAddress = address(this); vm.expectRevert(_formatErrorMessage("invalid destination bridge address")); _send(input, 0); } + function testNonZeroSecondaryFeeToSourceBlockchain() public { + SendTokensInput memory input = _createDefaultSendTokensInput(); + input.secondaryFee = 1; + vm.expectRevert(_formatErrorMessage("non-zero secondary fee")); + _send(input, 0); + } + + function testNonZeroRequiredGasLimitToSourceBlockchain() public { + SendTokensInput memory input = _createDefaultSendTokensInput(); + input.requiredGasLimit = DEFAULT_REQUIRED_GAS_LIMIT; + vm.expectRevert(_formatErrorMessage("non-zero required gas limit")); + _send(input, 0); + } + function testSendingToSameInstance() public { SendTokensInput memory input = _createDefaultSendTokensInput(); input.destinationBlockchainID = tokenDestination.blockchainID(); @@ -95,10 +109,6 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { ); } - function _requiredGasLimit() internal view virtual override returns (uint256) { - return tokenDestination.SEND_TOKENS_REQUIRED_GAS(); - } - function _createDefaultSendTokensInput() internal pure @@ -110,10 +120,15 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { destinationBridgeAddress: TOKEN_SOURCE_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: 0, - secondaryFee: 0 + secondaryFee: 0, + requiredGasLimit: 0 }); } + function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { + return tokenDestination.SEND_TOKENS_REQUIRED_GAS(); + } + function _formatErrorMessage(string memory message) internal pure @@ -133,7 +148,8 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { destinationBridgeAddress: input.destinationBridgeAddress, recipient: input.recipient, primaryFee: input.secondaryFee, - secondaryFee: 0 + secondaryFee: 0, + requiredGasLimit: input.requiredGasLimit }), amount ); diff --git a/contracts/test/TeleporterTokenSourceTests.t.sol b/contracts/test/TeleporterTokenSourceTests.t.sol index 9d83955e..9a880853 100644 --- a/contracts/test/TeleporterTokenSourceTests.t.sol +++ b/contracts/test/TeleporterTokenSourceTests.t.sol @@ -40,6 +40,13 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { _send(input, 0); } + function testNonZeroSecondaryFee() public { + SendTokensInput memory input = _createDefaultSendTokensInput(); + input.secondaryFee = 1; + vm.expectRevert(_formatErrorMessage("non-zero secondary fee")); + _send(input, 0); + } + function testReceiveInvalidMessage() public { vm.expectRevert(); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); @@ -49,42 +56,24 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { } function testReceiveInsufficientBridgeBalance() public { + SendTokensInput memory input = _createDefaultReceiveTokensInput(); vm.expectRevert(_formatErrorMessage("insufficient bridge balance")); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); tokenSource.receiveTeleporterMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - DEFAULT_DESTINATION_ADDRESS, - abi.encode( - SendTokensInput({ - destinationBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, - destinationBridgeAddress: address(this), - recipient: DEFAULT_RECIPIENT_ADDRESS, - primaryFee: 0, - secondaryFee: 0 - }), - 1 - ) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, DEFAULT_DESTINATION_ADDRESS, abi.encode(input, 1) ); } function testReceiveInvalidDestinationBridgeAddress() public { // First send to destination blockchain to increase the bridge balance _sendSuccess(2, 0); + + SendTokensInput memory input = _createDefaultReceiveTokensInput(); + input.destinationBridgeAddress = address(0); vm.expectRevert(_formatErrorMessage("invalid bridge address")); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); tokenSource.receiveTeleporterMessage( - DEFAULT_DESTINATION_BLOCKCHAIN_ID, - DEFAULT_DESTINATION_ADDRESS, - abi.encode( - SendTokensInput({ - destinationBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, - destinationBridgeAddress: address(0), - recipient: DEFAULT_RECIPIENT_ADDRESS, - primaryFee: 0, - secondaryFee: 0 - }), - 1 - ) + DEFAULT_DESTINATION_BLOCKCHAIN_ID, DEFAULT_DESTINATION_ADDRESS, abi.encode(input, 1) ); } @@ -94,13 +83,8 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { uint256 feeAmount = 1; uint256 bridgedAmount = amount - feeAmount; - SendTokensInput memory input = SendTokensInput({ - destinationBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, - destinationBridgeAddress: address(tokenSource), - recipient: DEFAULT_RECIPIENT_ADDRESS, - primaryFee: feeAmount, - secondaryFee: 0 - }); + SendTokensInput memory input = _createDefaultReceiveTokensInput(); + input.primaryFee = feeAmount; vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); vm.expectEmit(true, true, true, true, address(tokenSource)); @@ -133,7 +117,8 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: DEFAULT_DESTINATION_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: feeAmount, - secondaryFee: 0 + secondaryFee: 0, + requiredGasLimit: _expectedRequiredGasLimit() }); _checkExpectedTeleporterCalls(input, bridgedAmount); @@ -167,7 +152,8 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: DEFAULT_DESTINATION_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: feeAmount, - secondaryFee: 0 + secondaryFee: 0, + requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT }); vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); @@ -187,13 +173,9 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { ); } - function _requiredGasLimit() internal view virtual override returns (uint256) { - return tokenSource.SEND_TOKENS_REQUIRED_GAS(); - } - function _createDefaultSendTokensInput() internal - pure + view override returns (SendTokensInput memory) { @@ -202,10 +184,26 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { destinationBridgeAddress: DEFAULT_DESTINATION_ADDRESS, recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: 0, - secondaryFee: 0 + secondaryFee: 0, + requiredGasLimit: _expectedRequiredGasLimit() }); } + function _createDefaultReceiveTokensInput() internal view returns (SendTokensInput memory) { + return SendTokensInput({ + destinationBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + destinationBridgeAddress: address(tokenSource), + recipient: DEFAULT_RECIPIENT_ADDRESS, + primaryFee: 0, + secondaryFee: 0, + requiredGasLimit: 0 + }); + } + + function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { + return DEFAULT_REQUIRED_GAS_LIMIT; + } + function _formatErrorMessage(string memory message) internal pure From 48123973ba418bb286ebc044a51490fb2553318d Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Wed, 3 Apr 2024 12:57:18 -0700 Subject: [PATCH 07/11] lint and bindings update --- .../go/ERC20Destination/ERC20Destination.go | 30 ++++----- abi-bindings/go/ERC20Source/ERC20Source.go | 61 +++++-------------- .../go/NativeTokenSource/NativeTokenSource.go | 61 +++++-------------- .../test/TeleporterTokenBridgeTests.t.sol | 4 +- .../TeleporterTokenDestinationTests.t.sol | 8 +-- .../test/TeleporterTokenSourceTests.t.sol | 8 +-- 6 files changed, 55 insertions(+), 117 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index 6c01f13e..f2fec4e4 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -36,13 +36,13 @@ type SendTokensInput struct { Recipient common.Address PrimaryFee *big.Int SecondaryFee *big.Int - AllowedRelayerAddresses []common.Address + RequiredGasLimit *big.Int } // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b506040516200300f3803806200300f8339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002fef83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002fef83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002fef8339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161272a620008c560003960006102a40152600081816103a801526115c701526000818161044a01528181611126015281816113f1015261158d0152600081816102660152818161109e015281816113c101526115670152600081816103e2015261144e0152600081816102140152818161083501528181610dfb0152611c07015261272a6000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063c868efaa11610097578063dd62ed3e11610071578063dd62ed3e1461040c578063e8535e931461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063c868efaa146103ca578063d127dc9b146103dd578063d2cc7a701461040457600080fd5b806397314297116100d35780639731429714610351578063a457c2d71461037d578063a9059cbb14610390578063b8df0dea146103a357600080fd5b8063715018a6146103305780638da5cb5b1461033857806395d89b411461034957600080fd5b806329b7b3fd11610166578063395093511161014057806339509351146102ce5780634511243e146102e15780635eb99514146102f457806370a082311461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c391906120e5565b60405180910390f35b6101df6101da36600461210d565b6104fe565b60405190151581526020016101c3565b6101f962035b6081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c366004612139565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b61029636600461217a565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b6101df6102dc36600461210d565b610641565b61029b6102ef36600461217a565b610663565b61029b610302366004612197565b610760565b6101f961031536600461217a565b6001600160a01b031660009081526004602052604090205490565b61029b610774565b6003546001600160a01b0316610236565b6101b6610788565b6101df61035f36600461217a565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61038b36600461210d565b610797565b6101df61039e36600461210d565b610812565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d83660046121b0565b610820565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961041a366004612239565b6109ea565b61029b61042d366004612272565b610a15565b61029b61044036600461217a565b610a35565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b906122ae565b80601f01602080910402602001604051908101604052809291908181526020018280546104a7906122ae565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610aab565b60019150505b92915050565b600033610526858285610bd0565b610531858585610c44565b506001949350505050565b610544610def565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a906122e8565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60003361050c81858561065483836109ea565b61065e919061234c565b610aab565b61066b610def565b6001600160a01b0381166106915760405162461bcd60e51b815260040161056a906122e8565b6001600160a01b03811660009081526001602052604090205460ff1661070b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610768610def565b61077181610df7565b50565b61077c610f97565b6107866000610ff1565b565b60606008805461047b906122ae565b600033816107a582866109ea565b9050838110156108055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610aab565b60003361050c818585610c44565b610828611043565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c3919061235f565b101561092a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b6109333361035f565b156109995760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109da848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109c92505050565b6109e46001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a1d611043565b610a27828261123a565b610a316001600055565b5050565b610a3d610f97565b6001600160a01b038116610aa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61077181610ff1565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bdc84846109ea565b905060001981146109e45781811015610c375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b6109e48484848403610aab565b6001600160a01b038316610ca85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610de29086815260200190565b60405180910390a36109e4565b610786610f97565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b919061235f565b60025490915081831115610eeb5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b808311610f605760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036110955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b7f000000000000000000000000000000000000000000000000000000000000000083146111245760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146111cb5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906111e29190612378565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8260405161122191815260200190565b60405180910390a2611233828261175f565b5050505050565b81356112ae5760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161056a565b60006112c0604084016020850161217a565b6001600160a01b03160361133c5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b600061134e606084016040850161217a565b6001600160a01b0316036113bf5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f000000000000000000000000000000000000000000000000000000000000000082350361144c576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611421604084016020850161217a565b6001600160a01b0316146114475760405162461bcd60e51b815260040161056a906123a6565b6114ab565b7f00000000000000000000000000000000000000000000000000000000000000008235036114ab5730611485604084016020850161217a565b6001600160a01b0316036114ab5760405162461bcd60e51b815260040161056a906123a6565b6114b481611769565b90506114c86080830135606084013561234c565b811161153c5760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b61154a606083013582612403565b905061155581611775565b600061171c6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018760600135815250815260200162035b608152602001858060a0019061161a9190612416565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160c08101825287358152602092830192909182820191611676918a01908a0161217a565b6001600160a01b031681526020016116946060890160408a0161217a565b6001600160a01b0316815260808801356020820152600060408201526060016116c060a0890189612416565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050915250604051611705919087906020016124ab565b60405160208183030381529060405281525061177f565b9050336001600160a01b0316817ff1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c8585604051610bc3929190612556565b505050565b610a3182826118a5565b60006105123083611966565b6107713082611ace565b60008061178a611c02565b6040840151602001519091501561182f576040830151516001600160a01b031661180c5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b60408301516020810151905161182f916001600160a01b03909116908390611d16565b604051630624488560e41b81526001600160a01b0382169063624488509061185b90869060040161261b565b6020604051808303816000875af115801561187a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189e919061235f565b9392505050565b6001600160a01b0382166118fb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b806006600082825461190d919061234c565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d3919061235f565b90506119ea6001600160a01b038516333086611dfb565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a55919061235f565b9050818111611abb5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611ac58282612403565b95945050505050565b6001600160a01b038216611b2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611ba25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c879190612699565b9050611cab816001600160a01b031660009081526001602052604090205460ff1690565b15611d115760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8b919061235f565b611d95919061234c565b6040516001600160a01b0385166024820152604481018290529091506109e490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611e33565b6040516001600160a01b03808516602483015283166044820152606481018290526109e49085906323b872dd60e01b90608401611dc4565b6000611e88826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f059092919063ffffffff16565b80519091501561175a5780806020019051810190611ea691906126b6565b61175a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b6060611f148484600085611f1c565b949350505050565b606082471015611f7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b03168587604051611f9991906126d8565b60006040518083038185875af1925050503d8060008114611fd6576040519150601f19603f3d011682016040523d82523d6000602084013e611fdb565b606091505b5091509150611fec87838387611ff7565b979650505050505050565b6060831561206657825160000361205f576001600160a01b0385163b61205f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081611f14565b611f14838381511561207b5781518083602001fd5b8060405162461bcd60e51b815260040161056a91906120e5565b60005b838110156120b0578181015183820152602001612098565b50506000910152565b600081518084526120d1816020860160208601612095565b601f01601f19169290920160200192915050565b60208152600061189e60208301846120b9565b6001600160a01b038116811461077157600080fd5b6000806040838503121561212057600080fd5b823561212b816120f8565b946020939093013593505050565b60008060006060848603121561214e57600080fd5b8335612159816120f8565b92506020840135612169816120f8565b929592945050506040919091013590565b60006020828403121561218c57600080fd5b813561189e816120f8565b6000602082840312156121a957600080fd5b5035919050565b600080600080606085870312156121c657600080fd5b8435935060208501356121d8816120f8565b9250604085013567ffffffffffffffff808211156121f557600080fd5b818701915087601f83011261220957600080fd5b81358181111561221857600080fd5b88602082850101111561222a57600080fd5b95989497505060200194505050565b6000806040838503121561224c57600080fd5b8235612257816120f8565b91506020830135612267816120f8565b809150509250929050565b6000806040838503121561228557600080fd5b823567ffffffffffffffff81111561229c57600080fd5b830160c0818603121561212b57600080fd5b600181811c908216806122c257607f821691505b6020821081036122e257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561051257610512612336565b60006020828403121561237157600080fd5b5051919050565b6000806040838503121561238b57600080fd5b8251612396816120f8565b6020939093015192949293505050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561051257610512612336565b6000808335601e1984360301811261242d57600080fd5b83018035915067ffffffffffffffff82111561244857600080fd5b6020019150600581901b360382131561246057600080fd5b9250929050565b600081518084526020808501945080840160005b838110156124a05781516001600160a01b03168752958201959082019060010161247b565b509495945050505050565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e0840152612508610100840182612467565b9150508260208301529392505050565b8183526000602080850194508260005b858110156124a057813561253b816120f8565b6001600160a01b031687529582019590820190600101612528565b604081528235604082015260006020840135612571816120f8565b6001600160a01b039081166060840152604085013590612590826120f8565b80821660808501525050606084013560a0830152608084013560c083015260a0840135601e198536030181126125c557600080fd5b840160208101903567ffffffffffffffff8111156125e257600080fd5b8060051b36038213156125f457600080fd5b60c060e085015261260a61010085018284612518565b925050508260208301529392505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261267c610100840182612467565b905060a0840151601f198483030160e0850152611ac582826120b9565b6000602082840312156126ab57600080fd5b815161189e816120f8565b6000602082840312156126c857600080fd5b8151801515811461189e57600080fd5b600082516126ea818460208701612095565b919091019291505056fea264697066735822122051f1da28b4d279afb6fc2c641a5e9c64cda33d29be996b8faeb3b960777b0f8464736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b5060405162002fa938038062002fa98339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002f898339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516126c4620008c560003960006102a40152600081816103bb01526112c201526000818161044a0152818161100701528181611288015261173301526000818161026601528181610fd70152818161126201526116ab0152600081816103f5015261114901526000818161021401528181610855015281816114610152611c3301526126c46000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b8df0dea11610097578063d2cc7a7011610071578063d2cc7a7014610417578063dd62ed3e1461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063b8df0dea146103b6578063c868efaa146103dd578063d127dc9b146103f057600080fd5b806395d89b41116100d357806395d89b411461035c5780639731429714610364578063a457c2d714610390578063a9059cbb146103a357600080fd5b806370a082311461031a578063715018a6146103435780638da5cb5b1461034b57600080fd5b806329b7b3fd1161016657806332709bc11161014057806332709bc1146102ce57806339509351146102e15780634511243e146102f45780635eb995141461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c391906121d2565b60405180910390f35b6101df6101da3660046121fa565b6104fe565b60405190151581526020016101c3565b6101f9620186a081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c366004612226565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b610296366004612267565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b61029b6102dc366004612284565b610641565b6101df6102ef3660046121fa565b610661565b61029b610302366004612267565b610683565b61029b6103153660046122b5565b610780565b6101f9610328366004612267565b6001600160a01b031660009081526004602052604090205490565b61029b610794565b6003546001600160a01b0316610236565b6101b66107a8565b6101df610372366004612267565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61039e3660046121fa565b6107b7565b6101df6103b13660046121fa565b610832565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103eb3660046122ce565b610840565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961042d366004612357565b610a0a565b61029b610440366004612267565b610a35565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b90612390565b80601f01602080910402602001604051908101604052809291908181526020018280546104a790612390565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610aab565b60019150505b92915050565b600033610526858285610bd0565b610531858585610c44565b506001949350505050565b610544610def565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a906123ca565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610649610df7565b6106538282610e50565b61065d6001600055565b5050565b60003361050c8185856106748383610a0a565b61067e919061242e565b610aab565b61068b610def565b6001600160a01b0381166106b15760405162461bcd60e51b815260040161056a906123ca565b6001600160a01b03811660009081526001602052604090205460ff1661072b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610788610def565b6107918161145d565b50565b61079c6115fd565b6107a66000611657565b565b60606008805461047b90612390565b600033816107c58286610a0a565b9050838110156108255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610aab565b60003361050c818585610c44565b610848610df7565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190612441565b101561094a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b61095333610372565b156109b95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109fa848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116a992505050565b610a046001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a3d6115fd565b6001600160a01b038116610aa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61079181611657565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bdc8484610a0a565b90506000198114610a045781811015610c375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b610a048484848403610aab565b6001600160a01b038316610ca85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610de29086815260200190565b60405180910390a3610a04565b6107a66115fd565b600260005403610e495760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b8135610ec45760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161056a565b6000610ed66040840160208501612267565b6001600160a01b031603610f525760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b6000610f646060840160408501612267565b6001600160a01b031603610fd55760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f0000000000000000000000000000000000000000000000000000000000000000823503611147576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110376040840160208501612267565b6001600160a01b03161461105d5760405162461bcd60e51b815260040161056a9061245a565b60a0820135156110d55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d60448201527f7a65726f20726571756972656420676173206c696d6974000000000000000000606482015260840161056a565b6080820135156111425760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161056a565b6111a6565b7f00000000000000000000000000000000000000000000000000000000000000008235036111a657306111806040840160208501612267565b6001600160a01b0316036111a65760405162461bcd60e51b815260040161056a9061245a565b6111af8161184c565b90506111c36080830135606084013561242e565b81116112375760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b6112456060830135826124b7565b905061125081611858565b600061141f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200187606001358152508152602001620186a08152602001600067ffffffffffffffff81111561131f5761131f6124ca565b604051908082528060200260200182016040528015611348578160200160208202803683370190505b5081526020016040518060c00160405280876000013581526020018760200160208101906113769190612267565b6001600160a01b031681526020016113946060890160408a01612267565b6001600160a01b0390811682526080808a0135602080850191909152600060408086019190915260a0808d01356060968701528151875181850152928701518516838301529086015190931681850152928401518382015283015182820152919091015160c082015260e0810186905261010001604051602081830303815290604052815250611862565b9050336001600160a01b0316817fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a08585604051610bc39291906124e0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e19190612441565b600254909150818311156115515760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b8083116115c65760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146117315760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146117d85760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906117ef9190612543565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8260405161182e91815260200190565b60405180910390a26118408282611988565b5050505050565b505050565b60006105123083611992565b6107913082611afa565b60008061186d611c2e565b60408401516020015190915015611912576040830151516001600160a01b03166118ef5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b604083015160208101519051611912916001600160a01b03909116908390611d42565b604051630624488560e41b81526001600160a01b0382169063624488509061193e9086906004016125b5565b6020604051808303816000875af115801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190612441565b9392505050565b61065d8282611e27565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff9190612441565b9050611a166001600160a01b038516333086611ee8565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190612441565b9050818111611ae75760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611af182826124b7565b95945050505050565b6001600160a01b038216611b5a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611bce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb39190612633565b9050611cd7816001600160a01b031660009081526001602052604090205460ff1690565b15611d3d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db79190612441565b611dc1919061242e565b6040516001600160a01b038516602482015260448101829052909150610a0490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f20565b6001600160a01b038216611e7d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b8060066000828254611e8f919061242e565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a049085906323b872dd60e01b90608401611df0565b6000611f75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff29092919063ffffffff16565b8051909150156118475780806020019051810190611f939190612650565b6118475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b60606120018484600085612009565b949350505050565b60608247101561206a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b031685876040516120869190612672565b60006040518083038185875af1925050503d80600081146120c3576040519150601f19603f3d011682016040523d82523d6000602084013e6120c8565b606091505b50915091506120d9878383876120e4565b979650505050505050565b6060831561215357825160000361214c576001600160a01b0385163b61214c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081612001565b61200183838151156121685781518083602001fd5b8060405162461bcd60e51b815260040161056a91906121d2565b60005b8381101561219d578181015183820152602001612185565b50506000910152565b600081518084526121be816020860160208601612182565b601f01601f19169290920160200192915050565b60208152600061198160208301846121a6565b6001600160a01b038116811461079157600080fd5b6000806040838503121561220d57600080fd5b8235612218816121e5565b946020939093013593505050565b60008060006060848603121561223b57600080fd5b8335612246816121e5565b92506020840135612256816121e5565b929592945050506040919091013590565b60006020828403121561227957600080fd5b8135611981816121e5565b60008082840360e081121561229857600080fd5b60c08112156122a657600080fd5b50919360c08501359350915050565b6000602082840312156122c757600080fd5b5035919050565b600080600080606085870312156122e457600080fd5b8435935060208501356122f6816121e5565b9250604085013567ffffffffffffffff8082111561231357600080fd5b818701915087601f83011261232757600080fd5b81358181111561233657600080fd5b88602082850101111561234857600080fd5b95989497505060200194505050565b6000806040838503121561236a57600080fd5b8235612375816121e5565b91506020830135612385816121e5565b809150509250929050565b600181811c908216806123a457607f821691505b6020821081036123c457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561051257610512612418565b60006020828403121561245357600080fd5b5051919050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561051257610512612418565b634e487b7160e01b600052604160045260246000fd5b8235815260e0810160208401356124f6816121e5565b6001600160a01b039081166020840152604085013590612515826121e5565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b6000806040838503121561255657600080fd5b8251612561816121e5565b6020939093015192949293505050565b600081518084526020808501945080840160005b838110156125aa5781516001600160a01b031687529582019590820190600101612585565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612616610100840182612571565b905060a0840151601f198483030160e0850152611af182826121a6565b60006020828403121561264557600080fd5b8151611981816121e5565b60006020828403121561266257600080fd5b8151801515811461198157600080fd5b60008251612684818460208701612182565b919091019291505056fea2646970667358221220fdfbae980852d028221a299ec3a58aa40daf2830f966adb498e2e41a510b98bc64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. @@ -803,23 +803,23 @@ func (_ERC20Destination *ERC20DestinationTransactorSession) RenounceOwnership() return _ERC20Destination.Contract.RenounceOwnership(&_ERC20Destination.TransactOpts) } -// Send is a paid mutator transaction binding the contract method 0xe8535e93. +// Send is a paid mutator transaction binding the contract method 0x32709bc1. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) returns() func (_ERC20Destination *ERC20DestinationTransactor) Send(opts *bind.TransactOpts, input SendTokensInput, amount *big.Int) (*types.Transaction, error) { return _ERC20Destination.contract.Transact(opts, "send", input, amount) } -// Send is a paid mutator transaction binding the contract method 0xe8535e93. +// Send is a paid mutator transaction binding the contract method 0x32709bc1. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) returns() func (_ERC20Destination *ERC20DestinationSession) Send(input SendTokensInput, amount *big.Int) (*types.Transaction, error) { return _ERC20Destination.Contract.Send(&_ERC20Destination.TransactOpts, input, amount) } -// Send is a paid mutator transaction binding the contract method 0xe8535e93. +// Send is a paid mutator transaction binding the contract method 0x32709bc1. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) returns() func (_ERC20Destination *ERC20DestinationTransactorSession) Send(input SendTokensInput, amount *big.Int) (*types.Transaction, error) { return _ERC20Destination.Contract.Send(&_ERC20Destination.TransactOpts, input, amount) } @@ -1465,9 +1465,9 @@ type ERC20DestinationSendTokens struct { Raw types.Log // Blockchain specific contextual infos } -// FilterSendTokens is a free log retrieval operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// FilterSendTokens is a free log retrieval operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_ERC20Destination *ERC20DestinationFilterer) FilterSendTokens(opts *bind.FilterOpts, teleporterMessageID [][32]byte, sender []common.Address) (*ERC20DestinationSendTokensIterator, error) { var teleporterMessageIDRule []interface{} @@ -1486,9 +1486,9 @@ func (_ERC20Destination *ERC20DestinationFilterer) FilterSendTokens(opts *bind.F return &ERC20DestinationSendTokensIterator{contract: _ERC20Destination.contract, event: "SendTokens", logs: logs, sub: sub}, nil } -// WatchSendTokens is a free log subscription operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// WatchSendTokens is a free log subscription operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_ERC20Destination *ERC20DestinationFilterer) WatchSendTokens(opts *bind.WatchOpts, sink chan<- *ERC20DestinationSendTokens, teleporterMessageID [][32]byte, sender []common.Address) (event.Subscription, error) { var teleporterMessageIDRule []interface{} @@ -1532,9 +1532,9 @@ func (_ERC20Destination *ERC20DestinationFilterer) WatchSendTokens(opts *bind.Wa }), nil } -// ParseSendTokens is a log parse operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// ParseSendTokens is a log parse operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_ERC20Destination *ERC20DestinationFilterer) ParseSendTokens(log types.Log) (*ERC20DestinationSendTokens, error) { event := new(ERC20DestinationSendTokens) if err := _ERC20Destination.contract.UnpackLog(event, "SendTokens", log); err != nil { diff --git a/abi-bindings/go/ERC20Source/ERC20Source.go b/abi-bindings/go/ERC20Source/ERC20Source.go index 87e46d8e..0d453fa4 100644 --- a/abi-bindings/go/ERC20Source/ERC20Source.go +++ b/abi-bindings/go/ERC20Source/ERC20Source.go @@ -36,13 +36,13 @@ type SendTokensInput struct { Recipient common.Address PrimaryFee *big.Int SecondaryFee *big.Int - AllowedRelayerAddresses []common.Address + RequiredGasLimit *big.Int } // ERC20SourceMetaData contains all meta data concerning the ERC20Source contract. var ERC20SourceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"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: "0x6101006040523480156200001257600080fd5b50604051620022a3380380620022a38339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611e286200047b600039600081816102b001528181610fc90152610ff70152600081816102210152610ee101526000818161025b01528181610aee0152610c5a0152600081816101520152818161051101528181610772015261131d0152611e286000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d2cc7a7011610066578063d2cc7a701461027d578063e8535e9314610285578063f2fde38b14610298578063fc0c546a146102ab57600080fd5b806397314297146101e0578063b8df0dea1461021c578063c868efaa14610243578063d127dc9b1461025657600080fd5b80634511243e116100d35780634511243e146101a15780635eb99514146101b4578063715018a6146101c75780638da5cb5b146101cf57600080fd5b806302ee3e9c1461010557806310397b01146101435780631a7f5bec1461014d5780632b0d8f181461018c575b600080fd5b61013061011336600461178d565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101306201388081565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019f61019a3660046117bd565b6102d2565b005b61019f6101af3660046117bd565b6103d7565b61019f6101c23660046117da565b6104d4565b61019f6104e8565b6003546001600160a01b0316610174565b61020c6101ee3660046117bd565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b61019f6102513660046117f3565b6104fc565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b61019f61029336600461187c565b6106c6565b61019f6102a63660046117bd565b6106f0565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6102da610766565b6001600160a01b0381166103095760405162461bcd60e51b8152600401610300906118c6565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103885760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610300565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103df610766565b6001600160a01b0381166104055760405162461bcd60e51b8152600401610300906118c6565b6001600160a01b03811660009081526001602052604090205460ff1661047f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610300565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104dc610766565b6104e58161076e565b50565b6104f061090e565b6104fa6000610968565b565b6105046109ba565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f9190611914565b10156106065760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610300565b61060f336101ee565b156106755760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610300565b6106b6848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a1392505050565b6106c06001600055565b50505050565b6106ce6109ba565b6106e26106da836119c1565b826000610bea565b6106ec6001600055565b5050565b6106f861090e565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b6104e581610968565b6104fa61090e565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190611914565b600254909150818311156108625760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610300565b8083116108d75760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610300565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146104fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403610a0c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610300565b6002600055565b60008082806020019051810190610a2a9190611aaf565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610abd5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610300565b610ac78282611bdf565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610be25760208301516001600160a01b03163014610b855760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b6064820152608401610300565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c83604051610bc491815260200190565b60405180910390a2610bda836040015183610fbc565b505050505050565b610bda838360015b8251610c565760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610300565b82517f00000000000000000000000000000000000000000000000000000000000000009003610ce25760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610300565b60208301516001600160a01b0316610d5b5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610300565b60408301516001600160a01b0316610dcb5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610300565b80610ddc57610dd982610ff0565b91505b82606001518211610e555760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610300565b6060830151610e649083611bdf565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610ea0908490611bf2565b925050819055506000610f706040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020016201388081526020018660a001518152602001866040015186604051602001610f599291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250611022565b9050336001600160a01b0316817ff1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c8686604051610fae929190611c49565b60405180910390a350505050565b6106ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611148565b600061101c7f0000000000000000000000000000000000000000000000000000000000000000836111b0565b92915050565b60008061102d611318565b604084015160200151909150156110d2576040830151516001600160a01b03166110af5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610300565b6040830151602081015190516110d2916001600160a01b0390911690839061142c565b604051630624488560e41b81526001600160a01b038216906362448850906110fe908690600401611d06565b6020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190611914565b9392505050565b6040516001600160a01b0383166024820152604481018290526111ab90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526114de565b505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190611914565b90506112346001600160a01b0385163330866115b0565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f9190611914565b90508181116113055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610300565b61130f8282611bdf565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139d9190611d84565b90506113c1816001600160a01b031660009081526001602052604090205460ff1690565b156114275760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610300565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a19190611914565b6114ab9190611bf2565b6040516001600160a01b0385166024820152604481018290529091506106c090859063095ea7b360e01b90606401611174565b6000611533826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115e89092919063ffffffff16565b8051909150156111ab57808060200190518101906115519190611da1565b6111ab5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610300565b6040516001600160a01b03808516602483015283166044820152606481018290526106c09085906323b872dd60e01b90608401611174565b60606115f784846000856115ff565b949350505050565b6060824710156116605760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610300565b600080866001600160a01b0316858760405161167c9190611dc3565b60006040518083038185875af1925050503d80600081146116b9576040519150601f19603f3d011682016040523d82523d6000602084013e6116be565b606091505b50915091506116cf878383876116da565b979650505050505050565b60608315611749578251600003611742576001600160a01b0385163b6117425760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610300565b50816115f7565b6115f7838381511561175e5781518083602001fd5b8060405162461bcd60e51b81526004016103009190611ddf565b6001600160a01b03811681146104e557600080fd5b600080604083850312156117a057600080fd5b8235915060208301356117b281611778565b809150509250929050565b6000602082840312156117cf57600080fd5b813561114181611778565b6000602082840312156117ec57600080fd5b5035919050565b6000806000806060858703121561180957600080fd5b84359350602085013561181b81611778565b9250604085013567ffffffffffffffff8082111561183857600080fd5b818701915087601f83011261184c57600080fd5b81358181111561185b57600080fd5b88602082850101111561186d57600080fd5b95989497505060200194505050565b6000806040838503121561188f57600080fd5b823567ffffffffffffffff8111156118a657600080fd5b830160c081860312156118b857600080fd5b946020939093013593505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006020828403121561192657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156119665761196661192d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119955761199561192d565b604052919050565b600067ffffffffffffffff8211156119b7576119b761192d565b5060051b60200190565b600060c082360312156119d357600080fd5b6119db611943565b823581526020808401356119ee81611778565b828201526040840135611a0081611778565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff811115611a3557600080fd5b840136601f820112611a4657600080fd5b8035611a59611a548261199d565b61196c565b81815260059190911b82018301908381019036831115611a7857600080fd5b928401925b82841015611a9f578335611a9081611778565b82529284019290840190611a7d565b60a0860152509295945050505050565b60008060408385031215611ac257600080fd5b825167ffffffffffffffff80821115611ada57600080fd5b9084019060c08287031215611aee57600080fd5b611af6611943565b82518152602080840151611b0981611778565b828201526040840151611b1b81611778565b80604084015250606084015160608301526080840151608083015260a084015183811115611b4857600080fd5b80850194505087601f850112611b5d57600080fd5b83519250611b6d611a548461199d565b83815260059390931b84018101928181019089851115611b8c57600080fd5b948201945b84861015611bb3578551611ba481611778565b82529482019490820190611b91565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561101c5761101c611bc9565b8082018082111561101c5761101c611bc9565b600081518084526020808501945080840160005b83811015611c3e5781516001600160a01b031687529582019590820190600101611c19565b509495945050505050565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e0840152611ca6610100840182611c05565b9150508260208301529392505050565b60005b83811015611cd1578181015183820152602001611cb9565b50506000910152565b60008151808452611cf2816020860160208601611cb6565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611d67610100840182611c05565b905060a0840151601f198483030160e085015261130f8282611cda565b600060208284031215611d9657600080fd5b815161114181611778565b600060208284031215611db357600080fd5b8151801515811461114157600080fd5b60008251611dd5818460208701611cb6565b9190910192915050565b6020815260006111416020830184611cda56fea264697066735822122066a7f2f7ef9459cffc36d358fefd2848610ef1859f983959950602cd16c8aa6f64736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"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: "0x6101006040523480156200001257600080fd5b5060405162002197380380620021978339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611d1c6200047b6000396000818161029b0152818161109c01526111fa01526000818161021f0152610b17015260008181610259015281816108280152610f9501526000818161013d0152818161052c01528181610c72015261138e0152611d1c6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d127dc9b11610066578063d127dc9b14610254578063d2cc7a701461027b578063f2fde38b14610283578063fc0c546a1461029657600080fd5b80638da5cb5b146101cd57806397314297146101de578063b8df0dea1461021a578063c868efaa1461024157600080fd5b806332709bc1116100d357806332709bc11461018c5780634511243e1461019f5780635eb99514146101b2578063715018a6146101c557600080fd5b806302ee3e9c146100fa5780631a7f5bec146101385780632b0d8f1814610177575b600080fd5b610125610108366004611866565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012f565b61018a610185366004611896565b6102bd565b005b61018a61019a3660046118b3565b6103c2565b61018a6101ad366004611896565b6103f2565b61018a6101c03660046118e4565b6104ef565b61018a610503565b6003546001600160a01b031661015f565b61020a6101ec366004611896565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161012f565b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b61018a61024f3660046118fd565b610517565b6101257f000000000000000000000000000000000000000000000000000000000000000081565b600254610125565b61018a610291366004611896565b6106e1565b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b6102c5610757565b6001600160a01b0381166102f45760405162461bcd60e51b81526004016102eb90611986565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103735760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102eb565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103ca61075f565b6103e46103dc36849003840184611a21565b8260006107b8565b6103ee6001600055565b5050565b6103fa610757565b6001600160a01b0381166104205760405162461bcd60e51b81526004016102eb90611986565b6001600160a01b03811660009081526001602052604090205460ff1661049a5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102eb565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104f7610757565b61050081610c6e565b50565b61050b610e0e565b6105156000610e68565b565b61051f61075f565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ba9190611a8f565b10156106215760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102eb565b61062a336101ec565b156106905760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102eb565b6106d1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610eba92505050565b6106db6001600055565b50505050565b6106e9610e0e565b6001600160a01b03811661074e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102eb565b61050081610e68565b610515610e0e565b6002600054036107b15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102eb565b6002600055565b82516108245760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b60648201526084016102eb565b82517f000000000000000000000000000000000000000000000000000000000000000090036108b05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b60648201526084016102eb565b60208301516001600160a01b03166109295760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b60648201526084016102eb565b60408301516001600160a01b03166109995760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b60648201526084016102eb565b608083015115610a015760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b60648201526084016102eb565b80610a1257610a0f82611095565b91505b82606001518211610a8b5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f7665722066656573000000000000000060648201526084016102eb565b6060830151610a9a9083611abe565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610ad6908490611ad1565b925050819055506000610be66040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020018660a001518152602001600067ffffffffffffffff811115610b7557610b756119d4565b604051908082528060200260200182016040528015610b9e578160200160208202803683370190505b508152602001866040015186604051602001610bcf9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506110c7565b60408051865181526020808801516001600160a01b0390811691830191909152878301511681830152606080880151908201526080808801519082015260a0808801519082015260c081018690529051919250339183917fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0919081900360e00190a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190611a8f565b60025490915081831115610d625760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102eb565b808311610dd75760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102eb565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102eb565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008082806020019051810190610ed19190611ae4565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610f645760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b60648201526084016102eb565b610f6e8282611abe565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f000000000000000000000000000000000000000000000000000000000000000090036110895760208301516001600160a01b0316301461102c5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b60648201526084016102eb565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8360405161106b91815260200190565b60405180910390a26110818360400151836111ed565b505050505050565b611081838360016107b8565b60006110c17f000000000000000000000000000000000000000000000000000000000000000083611221565b92915050565b6000806110d2611389565b60408401516020015190915015611177576040830151516001600160a01b03166111545760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016102eb565b604083015160208101519051611177916001600160a01b0390911690839061149d565b604051630624488560e41b81526001600160a01b038216906362448850906111a3908690600401611bfa565b6020604051808303816000875af11580156111c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e69190611a8f565b9392505050565b6103ee6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611582565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e9190611a8f565b90506112a56001600160a01b0385163330866115b7565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190611a8f565b90508181116113765760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016102eb565b6113808282611abe565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e9190611c78565b9050611432816001600160a01b031660009081526001602052604090205460ff1690565b156114985760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016102eb565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190611a8f565b61151c9190611ad1565b6040516001600160a01b0385166024820152604481018290529091506106db90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115ef565b6040516001600160a01b0383166024820152604481018290526115b290849063a9059cbb60e01b9060640161154b565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106db9085906323b872dd60e01b9060840161154b565b6000611644826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116c19092919063ffffffff16565b8051909150156115b257808060200190518101906116629190611c95565b6115b25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102eb565b60606116d084846000856116d8565b949350505050565b6060824710156117395760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102eb565b600080866001600160a01b031685876040516117559190611cb7565b60006040518083038185875af1925050503d8060008114611792576040519150601f19603f3d011682016040523d82523d6000602084013e611797565b606091505b50915091506117a8878383876117b3565b979650505050505050565b6060831561182257825160000361181b576001600160a01b0385163b61181b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102eb565b50816116d0565b6116d083838151156118375781518083602001fd5b8060405162461bcd60e51b81526004016102eb9190611cd3565b6001600160a01b038116811461050057600080fd5b6000806040838503121561187957600080fd5b82359150602083013561188b81611851565b809150509250929050565b6000602082840312156118a857600080fd5b81356111e681611851565b60008082840360e08112156118c757600080fd5b60c08112156118d557600080fd5b50919360c08501359350915050565b6000602082840312156118f657600080fd5b5035919050565b6000806000806060858703121561191357600080fd5b84359350602085013561192581611851565b9250604085013567ffffffffffffffff8082111561194257600080fd5b818701915087601f83011261195657600080fd5b81358181111561196557600080fd5b88602082850101111561197757600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715611a1b57634e487b7160e01b600052604160045260246000fd5b60405290565b600060c08284031215611a3357600080fd5b611a3b6119ea565b823581526020830135611a4d81611851565b60208201526040830135611a6081611851565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b600060208284031215611aa157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156110c1576110c1611aa8565b808201808211156110c1576110c1611aa8565b60008082840360e0811215611af857600080fd5b60c0811215611b0657600080fd5b50611b0f6119ea565b835181526020840151611b2181611851565b60208201526040840151611b3481611851565b6040820152606084810151908201526080808501519082015260a0808501519082015260c09093015192949293505050565b600081518084526020808501945080840160005b83811015611b9f5781516001600160a01b031687529582019590820190600101611b7a565b509495945050505050565b60005b83811015611bc5578181015183820152602001611bad565b50506000910152565b60008151808452611be6816020860160208601611baa565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c5b610100840182611b66565b905060a0840151601f198483030160e08501526113808282611bce565b600060208284031215611c8a57600080fd5b81516111e681611851565b600060208284031215611ca757600080fd5b815180151581146111e657600080fd5b60008251611cc9818460208701611baa565b9190910192915050565b6020815260006111e66020830184611bce56fea2646970667358221220dc16a6759a0a1a4fe3d7d0b11109a294b9fa8664196e767645d5eee1d809e30564736f6c63430008120033", } // ERC20SourceABI is the input ABI used to generate the binding from. @@ -212,37 +212,6 @@ func (_ERC20Source *ERC20SourceTransactorRaw) Transact(opts *bind.TransactOpts, return _ERC20Source.Contract.contract.Transact(opts, method, params...) } -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. -// -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_ERC20Source *ERC20SourceCaller) SENDTOKENSREQUIREDGAS(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _ERC20Source.contract.Call(opts, &out, "SEND_TOKENS_REQUIRED_GAS") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. -// -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_ERC20Source *ERC20SourceSession) SENDTOKENSREQUIREDGAS() (*big.Int, error) { - return _ERC20Source.Contract.SENDTOKENSREQUIREDGAS(&_ERC20Source.CallOpts) -} - -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. -// -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_ERC20Source *ERC20SourceCallerSession) SENDTOKENSREQUIREDGAS() (*big.Int, error) { - return _ERC20Source.Contract.SENDTOKENSREQUIREDGAS(&_ERC20Source.CallOpts) -} - // BlockchainID is a free data retrieval call binding the contract method 0xd127dc9b. // // Solidity: function blockchainID() view returns(bytes32) @@ -554,23 +523,23 @@ func (_ERC20Source *ERC20SourceTransactorSession) RenounceOwnership() (*types.Tr return _ERC20Source.Contract.RenounceOwnership(&_ERC20Source.TransactOpts) } -// Send is a paid mutator transaction binding the contract method 0xe8535e93. +// Send is a paid mutator transaction binding the contract method 0x32709bc1. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) returns() func (_ERC20Source *ERC20SourceTransactor) Send(opts *bind.TransactOpts, input SendTokensInput, amount *big.Int) (*types.Transaction, error) { return _ERC20Source.contract.Transact(opts, "send", input, amount) } -// Send is a paid mutator transaction binding the contract method 0xe8535e93. +// Send is a paid mutator transaction binding the contract method 0x32709bc1. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) returns() func (_ERC20Source *ERC20SourceSession) Send(input SendTokensInput, amount *big.Int) (*types.Transaction, error) { return _ERC20Source.Contract.Send(&_ERC20Source.TransactOpts, input, amount) } -// Send is a paid mutator transaction binding the contract method 0xe8535e93. +// Send is a paid mutator transaction binding the contract method 0x32709bc1. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) returns() func (_ERC20Source *ERC20SourceTransactorSession) Send(input SendTokensInput, amount *big.Int) (*types.Transaction, error) { return _ERC20Source.Contract.Send(&_ERC20Source.TransactOpts, input, amount) } @@ -1020,9 +989,9 @@ type ERC20SourceSendTokens struct { Raw types.Log // Blockchain specific contextual infos } -// FilterSendTokens is a free log retrieval operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// FilterSendTokens is a free log retrieval operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_ERC20Source *ERC20SourceFilterer) FilterSendTokens(opts *bind.FilterOpts, teleporterMessageID [][32]byte, sender []common.Address) (*ERC20SourceSendTokensIterator, error) { var teleporterMessageIDRule []interface{} @@ -1041,9 +1010,9 @@ func (_ERC20Source *ERC20SourceFilterer) FilterSendTokens(opts *bind.FilterOpts, return &ERC20SourceSendTokensIterator{contract: _ERC20Source.contract, event: "SendTokens", logs: logs, sub: sub}, nil } -// WatchSendTokens is a free log subscription operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// WatchSendTokens is a free log subscription operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_ERC20Source *ERC20SourceFilterer) WatchSendTokens(opts *bind.WatchOpts, sink chan<- *ERC20SourceSendTokens, teleporterMessageID [][32]byte, sender []common.Address) (event.Subscription, error) { var teleporterMessageIDRule []interface{} @@ -1087,9 +1056,9 @@ func (_ERC20Source *ERC20SourceFilterer) WatchSendTokens(opts *bind.WatchOpts, s }), nil } -// ParseSendTokens is a log parse operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// ParseSendTokens is a log parse operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_ERC20Source *ERC20SourceFilterer) ParseSendTokens(log types.Log) (*ERC20SourceSendTokens, error) { event := new(ERC20SourceSendTokens) if err := _ERC20Source.contract.UnpackLog(event, "SendTokens", log); err != nil { diff --git a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go index 7917ecc5..528043c8 100644 --- a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go @@ -36,13 +36,13 @@ type SendTokensInput struct { Recipient common.Address PrimaryFee *big.Int SecondaryFee *big.Int - AllowedRelayerAddresses []common.Address + RequiredGasLimit *big.Int } // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620022b6380380620022b68339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611e3462000482600039600081816104060152818161111b01526111be01526000818161010701528181610336015261102a01526000818161038a01528181610c370152610da301526000818161020e0152818161065e015281816108bb01526113610152611e346000f3fe6080604052600436106100f75760003560e01c8063973142971161008a578063d2cc7a7011610059578063d2cc7a70146103ac578063e30fd71d146103c1578063f2fde38b146103d4578063fc0c546a146103f457600080fd5b806397314297146102db578063b8df0dea14610324578063c868efaa14610358578063d127dc9b1461037857600080fd5b80634511243e116100c65780634511243e146102685780635eb9951414610288578063715018a6146102a85780638da5cb5b146102bd57600080fd5b806302ee3e9c1461019a57806310397b01146101e55780631a7f5bec146101fc5780632b0d8f181461024857600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046117a4565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101f157600080fd5b506101d26201388081565b34801561020857600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025457600080fd5b506101936102633660046117d4565b610428565b34801561027457600080fd5b506101936102833660046117d4565b610524565b34801561029457600080fd5b506101936102a33660046117f1565b610621565b3480156102b457600080fd5b50610193610635565b3480156102c957600080fd5b506003546001600160a01b0316610230565b3480156102e757600080fd5b506103146102f63660046117d4565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033057600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561036457600080fd5b5061019361037336600461180a565b610649565b34801561038457600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b857600080fd5b506002546101d2565b6101936103cf366004611893565b610813565b3480156103e057600080fd5b506101936103ef3660046117d4565b610839565b34801561040057600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b6104306108af565b6001600160a01b0381166104565760405162461bcd60e51b815260040161018a906118ce565b6001600160a01b03811660009081526001602052604090205460ff16156104d55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61052c6108af565b6001600160a01b0381166105525760405162461bcd60e51b815260040161018a906118ce565b6001600160a01b03811660009081526001602052604090205460ff166105cc5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6106296108af565b610632816108b7565b50565b61063d610a57565b6106476000610ab1565b565b610651610b03565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061191c565b10156107535760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61075c336102f6565b156107c25760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b610803848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b5c92505050565b61080d6001600055565b50505050565b61081b610b03565b61082f610827826119c9565b346000610d33565b6106326001600055565b610841610a57565b6001600160a01b0381166108a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61063281610ab1565b610647610a57565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b919061191c565b600254909150818311156109ab5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b808311610a205760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403610b555760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b60008082806020019051810190610b739190611ab7565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610c065760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b610c108282611be7565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f00000000000000000000000000000000000000000000000000000000000000009003610d2b5760208301516001600160a01b03163014610cce5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b606482015260840161018a565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c83604051610d0d91815260200190565b60405180910390a2610d23836040015183611105565b505050505050565b610d23838360015b8251610d9f5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b82517f00000000000000000000000000000000000000000000000000000000000000009003610e2b5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b60208301516001600160a01b0316610ea45760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b60408301516001600160a01b0316610f145760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b80610f2557610f22826111ba565b91505b82606001518211610f9e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b6060830151610fad9083611be7565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610fe9908490611c00565b9250508190555060006110b96040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020016201388081526020018660a0015181526020018660400151866040516020016110a29291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052815250611236565b9050336001600160a01b0316817ff1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c86866040516110f7929190611c4c565b60405180910390a350505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561116757600080fd5b505af115801561117b573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f193505050501580156111b5573d6000803e3d6000fd5b505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561121757600080fd5b505af115801561122b573d6000803e3d6000fd5b509495945050505050565b60008061124161135c565b604084015160200151909150156112e6576040830151516001600160a01b03166112c35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b6040830151602081015190516112e6916001600160a01b03909116908390611470565b604051630624488560e41b81526001600160a01b03821690636244885090611312908690600401611d09565b6020604051808303816000875af1158015611331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611355919061191c565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e19190611d90565b9050611405816001600160a01b031660009081526001602052604090205460ff1690565b1561146b5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061191c565b6114ef9190611c00565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015292935061080d928792600091611582919085169084906115ff565b8051909150156111b557808060200190518101906115a09190611dad565b6111b55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b606061160e8484600085611616565b949350505050565b6060824710156116775760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161018a565b600080866001600160a01b031685876040516116939190611dcf565b60006040518083038185875af1925050503d80600081146116d0576040519150601f19603f3d011682016040523d82523d6000602084013e6116d5565b606091505b50915091506116e6878383876116f1565b979650505050505050565b60608315611760578251600003611759576001600160a01b0385163b6117595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b508161160e565b61160e83838151156117755781518083602001fd5b8060405162461bcd60e51b815260040161018a9190611deb565b6001600160a01b038116811461063257600080fd5b600080604083850312156117b757600080fd5b8235915060208301356117c98161178f565b809150509250929050565b6000602082840312156117e657600080fd5b81356113558161178f565b60006020828403121561180357600080fd5b5035919050565b6000806000806060858703121561182057600080fd5b8435935060208501356118328161178f565b9250604085013567ffffffffffffffff8082111561184f57600080fd5b818701915087601f83011261186357600080fd5b81358181111561187257600080fd5b88602082850101111561188457600080fd5b95989497505060200194505050565b6000602082840312156118a557600080fd5b813567ffffffffffffffff8111156118bc57600080fd5b820160c0818503121561135557600080fd5b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006020828403121561192e57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561196e5761196e611935565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561199d5761199d611935565b604052919050565b600067ffffffffffffffff8211156119bf576119bf611935565b5060051b60200190565b600060c082360312156119db57600080fd5b6119e361194b565b823581526020808401356119f68161178f565b828201526040840135611a088161178f565b80604084015250606084013560608301526080840135608083015260a084013567ffffffffffffffff811115611a3d57600080fd5b840136601f820112611a4e57600080fd5b8035611a61611a5c826119a5565b611974565b81815260059190911b82018301908381019036831115611a8057600080fd5b928401925b82841015611aa7578335611a988161178f565b82529284019290840190611a85565b60a0860152509295945050505050565b60008060408385031215611aca57600080fd5b825167ffffffffffffffff80821115611ae257600080fd5b9084019060c08287031215611af657600080fd5b611afe61194b565b82518152602080840151611b118161178f565b828201526040840151611b238161178f565b80604084015250606084015160608301526080840151608083015260a084015183811115611b5057600080fd5b80850194505087601f850112611b6557600080fd5b83519250611b75611a5c846119a5565b83815260059390931b84018101928181019089851115611b9457600080fd5b948201945b84861015611bbb578551611bac8161178f565b82529482019490820190611b99565b60a0840152509590950151949694955050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611bfa57611bfa611bd1565b92915050565b80820180821115611bfa57611bfa611bd1565b600081518084526020808501945080840160005b8381101561122b5781516001600160a01b031687529582019590820190600101611c27565b60408152825160408201526000602084015160018060a01b0380821660608501528060408701511660808501525050606084015160a0830152608084015160c083015260a084015160c060e0840152611ca9610100840182611c13565b9150508260208301529392505050565b60005b83811015611cd4578181015183820152602001611cbc565b50506000910152565b60008151808452611cf5816020860160208601611cb9565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611d6a610100840182611c13565b905060a0840151601f198483030160e0850152611d878282611cdd565b95945050505050565b600060208284031215611da257600080fd5b81516113558161178f565b600060208284031215611dbf57600080fd5b8151801515811461135557600080fd5b60008251611de1818460208701611cb9565b9190910192915050565b6020815260006113556020830184611cdd56fea26469706673582212200ecbfda118a1060b7a036433f9d89515e9802e4bb147810ea9b081bc447c4dc364736f6c63430008120033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162002192380380620021928339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611d1162000481600039600081816103e4015281816111d5015261138901526000818160fc015281816103270152610c4b01526000818161037b0152818161095c01526110d10152600081816101ff0152818161066801528181610dae015261142d0152611d116000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610369578063d2cc7a701461039d578063f2fde38b146103b2578063fc0c546a146103d257600080fd5b80638da5cb5b146102ae57806397314297146102cc578063b8df0dea14610315578063c868efaa1461034957600080fd5b80632b0d8f18116100c65780632b0d8f18146102395780634511243e146102595780635eb9951414610279578063715018a61461029957600080fd5b806302ee3e9c1461018f578063146dfd3c146101da5780631a7f5bec146101ed57600080fd5b3661018a57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101885760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b34801561019b57600080fd5b506101c76101aa366004611870565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101886101e83660046118a0565b610406565b3480156101f957600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d1565b34801561024557600080fd5b506101886102543660046118b8565b610435565b34801561026557600080fd5b506101886102743660046118b8565b610531565b34801561028557600080fd5b506101886102943660046118d5565b61062e565b3480156102a557600080fd5b5061018861063f565b3480156102ba57600080fd5b506003546001600160a01b0316610221565b3480156102d857600080fd5b506103056102e73660046118b8565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101d1565b34801561032157600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b506101886103643660046118ee565b610653565b34801561037557600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a957600080fd5b506002546101c7565b3480156103be57600080fd5b506101886103cd3660046118b8565b61081d565b3480156103de57600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b61040e610893565b610428610420368390038301836119c4565b3460006108ec565b6104326001600055565b50565b61043d610da2565b6001600160a01b0381166104635760405162461bcd60e51b815260040161017f90611a32565b6001600160a01b03811660009081526001602052604090205460ff16156104e25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161017f565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610539610da2565b6001600160a01b03811661055f5760405162461bcd60e51b815260040161017f90611a32565b6001600160a01b03811660009081526001602052604090205460ff166105d95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161017f565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610636610da2565b61043281610daa565b610647610f4a565b6106516000610fa4565b565b61065b610893565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190611a80565b101561075d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161017f565b610766336102e7565b156107cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161017f565b61080d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ff692505050565b6108176001600055565b50505050565b610825610f4a565b6001600160a01b03811661088a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161017f565b61043281610fa4565b6002600054036108e55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161017f565b6002600055565b82516109585760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161017f565b82517f000000000000000000000000000000000000000000000000000000000000000090036109e45760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161017f565b60208301516001600160a01b0316610a5d5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161017f565b60408301516001600160a01b0316610acd5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161017f565b608083015115610b355760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161017f565b80610b4657610b43826111d1565b91505b82606001518211610bbf5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161017f565b6060830151610bce9083611aaf565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610c0a908490611ac8565b925050819055506000610d1a6040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020018660a001518152602001600067ffffffffffffffff811115610ca957610ca9611977565b604051908082528060200260200182016040528015610cd2578160200160208202803683370190505b508152602001866040015186604051602001610d039291906001600160a01b03929092168252602082015260400190565b60405160208183030381529060405281525061124d565b60408051865181526020808801516001600160a01b0390811691830191909152878301511681830152606080880151908201526080808801519082015260a0808801519082015260c081018690529051919250339183917fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0919081900360e00190a350505050565b610651610f4a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e9190611a80565b60025490915081831115610e9e5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161017f565b808311610f135760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161017f565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017f565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000808280602001905181019061100d9190611adb565b60008781526004602090815260408083206001600160a01b038a1684529091529020549193509150818110156110a05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161017f565b6110aa8282611aaf565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f000000000000000000000000000000000000000000000000000000000000000090036111c55760208301516001600160a01b031630146111685760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b606482015260840161017f565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c836040516111a791815260200190565b60405180910390a26111bd836040015183611373565b505050505050565b6111bd838360016108ec565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561122e57600080fd5b505af1158015611242573d6000803e3d6000fd5b509495945050505050565b600080611258611428565b604084015160200151909150156112fd576040830151516001600160a01b03166112da5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161017f565b6040830151602081015190516112fd916001600160a01b0390911690839061153c565b604051630624488560e41b81526001600160a01b03821690636244885090611329908690600401611be6565b6020604051808303816000875af1158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a80565b9392505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156113d557600080fd5b505af11580156113e9573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611423573d6000803e3d6000fd5b505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ad9190611c6d565b90506114d1816001600160a01b031660009081526001602052604090205460ff1690565b156115375760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161017f565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190611a80565b6115bb9190611ac8565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015292935061081792879260009161164e919085169084906116cb565b805190915015611423578080602001905181019061166c9190611c8a565b6114235760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161017f565b60606116da84846000856116e2565b949350505050565b6060824710156117435760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161017f565b600080866001600160a01b0316858760405161175f9190611cac565b60006040518083038185875af1925050503d806000811461179c576040519150601f19603f3d011682016040523d82523d6000602084013e6117a1565b606091505b50915091506117b2878383876117bd565b979650505050505050565b6060831561182c578251600003611825576001600160a01b0385163b6118255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161017f565b50816116da565b6116da83838151156118415781518083602001fd5b8060405162461bcd60e51b815260040161017f9190611cc8565b6001600160a01b038116811461043257600080fd5b6000806040838503121561188357600080fd5b8235915060208301356118958161185b565b809150509250929050565b600060c082840312156118b257600080fd5b50919050565b6000602082840312156118ca57600080fd5b813561136c8161185b565b6000602082840312156118e757600080fd5b5035919050565b6000806000806060858703121561190457600080fd5b8435935060208501356119168161185b565b9250604085013567ffffffffffffffff8082111561193357600080fd5b818701915087601f83011261194757600080fd5b81358181111561195657600080fd5b88602082850101111561196857600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156119be57634e487b7160e01b600052604160045260246000fd5b60405290565b600060c082840312156119d657600080fd5b6119de61198d565b8235815260208301356119f08161185b565b60208201526040830135611a038161185b565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215611a9257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611ac257611ac2611a99565b92915050565b80820180821115611ac257611ac2611a99565b60008082840360e0811215611aef57600080fd5b60c0811215611afd57600080fd5b50611b0661198d565b835181526020840151611b188161185b565b60208201526040840151611b2b8161185b565b6040820152606084810151908201526080808501519082015260a0808501519082015260c09093015192949293505050565b600081518084526020808501945080840160005b838110156112425781516001600160a01b031687529582019590820190600101611b71565b60005b83811015611bb1578181015183820152602001611b99565b50506000910152565b60008151808452611bd2816020860160208601611b96565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c47610100840182611b5d565b905060a0840151601f198483030160e0850152611c648282611bba565b95945050505050565b600060208284031215611c7f57600080fd5b815161136c8161185b565b600060208284031215611c9c57600080fd5b8151801515811461136c57600080fd5b60008251611cbe818460208701611b96565b9190910192915050565b60208152600061136c6020830184611bba56fea2646970667358221220d0b0f6b8fa06a618213d1cd58119428b84fc5fb43a7c932d1438be21a19b48b064736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from. @@ -212,37 +212,6 @@ func (_NativeTokenSource *NativeTokenSourceTransactorRaw) Transact(opts *bind.Tr return _NativeTokenSource.Contract.contract.Transact(opts, method, params...) } -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. -// -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_NativeTokenSource *NativeTokenSourceCaller) SENDTOKENSREQUIREDGAS(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _NativeTokenSource.contract.Call(opts, &out, "SEND_TOKENS_REQUIRED_GAS") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. -// -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_NativeTokenSource *NativeTokenSourceSession) SENDTOKENSREQUIREDGAS() (*big.Int, error) { - return _NativeTokenSource.Contract.SENDTOKENSREQUIREDGAS(&_NativeTokenSource.CallOpts) -} - -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. -// -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_NativeTokenSource *NativeTokenSourceCallerSession) SENDTOKENSREQUIREDGAS() (*big.Int, error) { - return _NativeTokenSource.Contract.SENDTOKENSREQUIREDGAS(&_NativeTokenSource.CallOpts) -} - // BlockchainID is a free data retrieval call binding the contract method 0xd127dc9b. // // Solidity: function blockchainID() view returns(bytes32) @@ -554,23 +523,23 @@ func (_NativeTokenSource *NativeTokenSourceTransactorSession) RenounceOwnership( return _NativeTokenSource.Contract.RenounceOwnership(&_NativeTokenSource.TransactOpts) } -// Send is a paid mutator transaction binding the contract method 0xe30fd71d. +// Send is a paid mutator transaction binding the contract method 0x146dfd3c. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input) payable returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input) payable returns() func (_NativeTokenSource *NativeTokenSourceTransactor) Send(opts *bind.TransactOpts, input SendTokensInput) (*types.Transaction, error) { return _NativeTokenSource.contract.Transact(opts, "send", input) } -// Send is a paid mutator transaction binding the contract method 0xe30fd71d. +// Send is a paid mutator transaction binding the contract method 0x146dfd3c. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input) payable returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input) payable returns() func (_NativeTokenSource *NativeTokenSourceSession) Send(input SendTokensInput) (*types.Transaction, error) { return _NativeTokenSource.Contract.Send(&_NativeTokenSource.TransactOpts, input) } -// Send is a paid mutator transaction binding the contract method 0xe30fd71d. +// Send is a paid mutator transaction binding the contract method 0x146dfd3c. // -// Solidity: function send((bytes32,address,address,uint256,uint256,address[]) input) payable returns() +// Solidity: function send((bytes32,address,address,uint256,uint256,uint256) input) payable returns() func (_NativeTokenSource *NativeTokenSourceTransactorSession) Send(input SendTokensInput) (*types.Transaction, error) { return _NativeTokenSource.Contract.Send(&_NativeTokenSource.TransactOpts, input) } @@ -1041,9 +1010,9 @@ type NativeTokenSourceSendTokens struct { Raw types.Log // Blockchain specific contextual infos } -// FilterSendTokens is a free log retrieval operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// FilterSendTokens is a free log retrieval operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_NativeTokenSource *NativeTokenSourceFilterer) FilterSendTokens(opts *bind.FilterOpts, teleporterMessageID [][32]byte, sender []common.Address) (*NativeTokenSourceSendTokensIterator, error) { var teleporterMessageIDRule []interface{} @@ -1062,9 +1031,9 @@ func (_NativeTokenSource *NativeTokenSourceFilterer) FilterSendTokens(opts *bind return &NativeTokenSourceSendTokensIterator{contract: _NativeTokenSource.contract, event: "SendTokens", logs: logs, sub: sub}, nil } -// WatchSendTokens is a free log subscription operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// WatchSendTokens is a free log subscription operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_NativeTokenSource *NativeTokenSourceFilterer) WatchSendTokens(opts *bind.WatchOpts, sink chan<- *NativeTokenSourceSendTokens, teleporterMessageID [][32]byte, sender []common.Address) (event.Subscription, error) { var teleporterMessageIDRule []interface{} @@ -1108,9 +1077,9 @@ func (_NativeTokenSource *NativeTokenSourceFilterer) WatchSendTokens(opts *bind. }), nil } -// ParseSendTokens is a log parse operation binding the contract event 0xf1c190e587ba285074a78f1c2b6547881bf9a4774176e3d3c7baef73aca6bd1c. +// ParseSendTokens is a log parse operation binding the contract event 0xdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0. // -// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,address[]) input, uint256 amount) +// Solidity: event SendTokens(bytes32 indexed teleporterMessageID, address indexed sender, (bytes32,address,address,uint256,uint256,uint256) input, uint256 amount) func (_NativeTokenSource *NativeTokenSourceFilterer) ParseSendTokens(log types.Log) (*NativeTokenSourceSendTokens, error) { event := new(NativeTokenSourceSendTokens) if err := _NativeTokenSource.contract.UnpackLog(event, "SendTokens", log); err != nil { diff --git a/contracts/test/TeleporterTokenBridgeTests.t.sol b/contracts/test/TeleporterTokenBridgeTests.t.sol index dcd4bc7c..7990f840 100644 --- a/contracts/test/TeleporterTokenBridgeTests.t.sol +++ b/contracts/test/TeleporterTokenBridgeTests.t.sol @@ -176,14 +176,14 @@ abstract contract TeleporterTokenBridgeTest is Test { ); } + function _expectedRequiredGasLimit() internal view virtual returns (uint256); + function _createDefaultSendTokensInput() internal view virtual returns (SendTokensInput memory); - function _expectedRequiredGasLimit() internal view virtual returns (uint256); - function _formatErrorMessage(string memory message) internal pure diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index cd51dbc2..b5b4f38b 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -109,6 +109,10 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { ); } + function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { + return tokenDestination.SEND_TOKENS_REQUIRED_GAS(); + } + function _createDefaultSendTokensInput() internal pure @@ -125,10 +129,6 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { }); } - function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { - return tokenDestination.SEND_TOKENS_REQUIRED_GAS(); - } - function _formatErrorMessage(string memory message) internal pure diff --git a/contracts/test/TeleporterTokenSourceTests.t.sol b/contracts/test/TeleporterTokenSourceTests.t.sol index 9a880853..98f02362 100644 --- a/contracts/test/TeleporterTokenSourceTests.t.sol +++ b/contracts/test/TeleporterTokenSourceTests.t.sol @@ -173,6 +173,10 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { ); } + function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { + return DEFAULT_REQUIRED_GAS_LIMIT; + } + function _createDefaultSendTokensInput() internal view @@ -200,10 +204,6 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { }); } - function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { - return DEFAULT_REQUIRED_GAS_LIMIT; - } - function _formatErrorMessage(string memory message) internal pure From 833219c009e29762e059dba85fd7c6481629aa02 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Thu, 4 Apr 2024 13:14:32 -0700 Subject: [PATCH 08/11] fixing e2e tests --- abi-bindings/go/ERC20Destination/ERC20Destination.go | 2 +- contracts/src/TeleporterTokenDestination.sol | 2 +- tests/flows/basic_erc20_send_receive.go | 5 ++--- tests/flows/erc20_source_multihop.go | 3 +-- tests/flows/native_source_erc20_destination.go | 5 ++--- tests/flows/native_source_multihop.go | 5 ++--- tests/utils/utils.go | 2 +- 7 files changed, 10 insertions(+), 14 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index f2fec4e4..4839dd89 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -42,7 +42,7 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b5060405162002fa938038062002fa98339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002f898339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516126c4620008c560003960006102a40152600081816103bb01526112c201526000818161044a0152818161100701528181611288015261173301526000818161026601528181610fd70152818161126201526116ab0152600081816103f5015261114901526000818161021401528181610855015281816114610152611c3301526126c46000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b8df0dea11610097578063d2cc7a7011610071578063d2cc7a7014610417578063dd62ed3e1461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063b8df0dea146103b6578063c868efaa146103dd578063d127dc9b146103f057600080fd5b806395d89b41116100d357806395d89b411461035c5780639731429714610364578063a457c2d714610390578063a9059cbb146103a357600080fd5b806370a082311461031a578063715018a6146103435780638da5cb5b1461034b57600080fd5b806329b7b3fd1161016657806332709bc11161014057806332709bc1146102ce57806339509351146102e15780634511243e146102f45780635eb995141461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c391906121d2565b60405180910390f35b6101df6101da3660046121fa565b6104fe565b60405190151581526020016101c3565b6101f9620186a081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c366004612226565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b610296366004612267565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b61029b6102dc366004612284565b610641565b6101df6102ef3660046121fa565b610661565b61029b610302366004612267565b610683565b61029b6103153660046122b5565b610780565b6101f9610328366004612267565b6001600160a01b031660009081526004602052604090205490565b61029b610794565b6003546001600160a01b0316610236565b6101b66107a8565b6101df610372366004612267565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61039e3660046121fa565b6107b7565b6101df6103b13660046121fa565b610832565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103eb3660046122ce565b610840565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961042d366004612357565b610a0a565b61029b610440366004612267565b610a35565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b90612390565b80601f01602080910402602001604051908101604052809291908181526020018280546104a790612390565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610aab565b60019150505b92915050565b600033610526858285610bd0565b610531858585610c44565b506001949350505050565b610544610def565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a906123ca565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610649610df7565b6106538282610e50565b61065d6001600055565b5050565b60003361050c8185856106748383610a0a565b61067e919061242e565b610aab565b61068b610def565b6001600160a01b0381166106b15760405162461bcd60e51b815260040161056a906123ca565b6001600160a01b03811660009081526001602052604090205460ff1661072b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610788610def565b6107918161145d565b50565b61079c6115fd565b6107a66000611657565b565b60606008805461047b90612390565b600033816107c58286610a0a565b9050838110156108255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610aab565b60003361050c818585610c44565b610848610df7565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190612441565b101561094a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b61095333610372565b156109b95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109fa848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116a992505050565b610a046001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a3d6115fd565b6001600160a01b038116610aa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61079181611657565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bdc8484610a0a565b90506000198114610a045781811015610c375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b610a048484848403610aab565b6001600160a01b038316610ca85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610de29086815260200190565b60405180910390a3610a04565b6107a66115fd565b600260005403610e495760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b8135610ec45760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161056a565b6000610ed66040840160208501612267565b6001600160a01b031603610f525760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b6000610f646060840160408501612267565b6001600160a01b031603610fd55760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f0000000000000000000000000000000000000000000000000000000000000000823503611147576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110376040840160208501612267565b6001600160a01b03161461105d5760405162461bcd60e51b815260040161056a9061245a565b60a0820135156110d55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d60448201527f7a65726f20726571756972656420676173206c696d6974000000000000000000606482015260840161056a565b6080820135156111425760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161056a565b6111a6565b7f00000000000000000000000000000000000000000000000000000000000000008235036111a657306111806040840160208501612267565b6001600160a01b0316036111a65760405162461bcd60e51b815260040161056a9061245a565b6111af8161184c565b90506111c36080830135606084013561242e565b81116112375760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b6112456060830135826124b7565b905061125081611858565b600061141f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200187606001358152508152602001620186a08152602001600067ffffffffffffffff81111561131f5761131f6124ca565b604051908082528060200260200182016040528015611348578160200160208202803683370190505b5081526020016040518060c00160405280876000013581526020018760200160208101906113769190612267565b6001600160a01b031681526020016113946060890160408a01612267565b6001600160a01b0390811682526080808a0135602080850191909152600060408086019190915260a0808d01356060968701528151875181850152928701518516838301529086015190931681850152928401518382015283015182820152919091015160c082015260e0810186905261010001604051602081830303815290604052815250611862565b9050336001600160a01b0316817fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a08585604051610bc39291906124e0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e19190612441565b600254909150818311156115515760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b8083116115c65760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146117315760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146117d85760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906117ef9190612543565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8260405161182e91815260200190565b60405180910390a26118408282611988565b5050505050565b505050565b60006105123083611992565b6107913082611afa565b60008061186d611c2e565b60408401516020015190915015611912576040830151516001600160a01b03166118ef5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b604083015160208101519051611912916001600160a01b03909116908390611d42565b604051630624488560e41b81526001600160a01b0382169063624488509061193e9086906004016125b5565b6020604051808303816000875af115801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190612441565b9392505050565b61065d8282611e27565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff9190612441565b9050611a166001600160a01b038516333086611ee8565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190612441565b9050818111611ae75760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611af182826124b7565b95945050505050565b6001600160a01b038216611b5a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611bce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb39190612633565b9050611cd7816001600160a01b031660009081526001602052604090205460ff1690565b15611d3d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db79190612441565b611dc1919061242e565b6040516001600160a01b038516602482015260448101829052909150610a0490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f20565b6001600160a01b038216611e7d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b8060066000828254611e8f919061242e565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a049085906323b872dd60e01b90608401611df0565b6000611f75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff29092919063ffffffff16565b8051909150156118475780806020019051810190611f939190612650565b6118475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b60606120018484600085612009565b949350505050565b60608247101561206a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b031685876040516120869190612672565b60006040518083038185875af1925050503d80600081146120c3576040519150601f19603f3d011682016040523d82523d6000602084013e6120c8565b606091505b50915091506120d9878383876120e4565b979650505050505050565b6060831561215357825160000361214c576001600160a01b0385163b61214c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081612001565b61200183838151156121685781518083602001fd5b8060405162461bcd60e51b815260040161056a91906121d2565b60005b8381101561219d578181015183820152602001612185565b50506000910152565b600081518084526121be816020860160208601612182565b601f01601f19169290920160200192915050565b60208152600061198160208301846121a6565b6001600160a01b038116811461079157600080fd5b6000806040838503121561220d57600080fd5b8235612218816121e5565b946020939093013593505050565b60008060006060848603121561223b57600080fd5b8335612246816121e5565b92506020840135612256816121e5565b929592945050506040919091013590565b60006020828403121561227957600080fd5b8135611981816121e5565b60008082840360e081121561229857600080fd5b60c08112156122a657600080fd5b50919360c08501359350915050565b6000602082840312156122c757600080fd5b5035919050565b600080600080606085870312156122e457600080fd5b8435935060208501356122f6816121e5565b9250604085013567ffffffffffffffff8082111561231357600080fd5b818701915087601f83011261232757600080fd5b81358181111561233657600080fd5b88602082850101111561234857600080fd5b95989497505060200194505050565b6000806040838503121561236a57600080fd5b8235612375816121e5565b91506020830135612385816121e5565b809150509250929050565b600181811c908216806123a457607f821691505b6020821081036123c457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561051257610512612418565b60006020828403121561245357600080fd5b5051919050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561051257610512612418565b634e487b7160e01b600052604160045260246000fd5b8235815260e0810160208401356124f6816121e5565b6001600160a01b039081166020840152604085013590612515826121e5565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b6000806040838503121561255657600080fd5b8251612561816121e5565b6020939093015192949293505050565b600081518084526020808501945080840160005b838110156125aa5781516001600160a01b031687529582019590820190600101612585565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612616610100840182612571565b905060a0840151601f198483030160e0850152611af182826121a6565b60006020828403121561264557600080fd5b8151611981816121e5565b60006020828403121561266257600080fd5b8151801515811461198157600080fd5b60008251612684818460208701612182565b919091019291505056fea2646970667358221220fdfbae980852d028221a299ec3a58aa40daf2830f966adb498e2e41a510b98bc64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101406040523480156200001257600080fd5b5060405162002fa938038062002fa98339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002f898339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516126c4620008c560003960006102a40152600081816103bb01526112c201526000818161044a0152818161100701528181611288015261173301526000818161026601528181610fd70152818161126201526116ab0152600081816103f5015261114901526000818161021401528181610855015281816114610152611c3301526126c46000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b8df0dea11610097578063d2cc7a7011610071578063d2cc7a7014610417578063dd62ed3e1461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063b8df0dea146103b6578063c868efaa146103dd578063d127dc9b146103f057600080fd5b806395d89b41116100d357806395d89b411461035c5780639731429714610364578063a457c2d714610390578063a9059cbb146103a357600080fd5b806370a082311461031a578063715018a6146103435780638da5cb5b1461034b57600080fd5b806329b7b3fd1161016657806332709bc11161014057806332709bc1146102ce57806339509351146102e15780634511243e146102f45780635eb995141461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c391906121d2565b60405180910390f35b6101df6101da3660046121fa565b6104fe565b60405190151581526020016101c3565b6101f962035b6081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c366004612226565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b610296366004612267565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b61029b6102dc366004612284565b610641565b6101df6102ef3660046121fa565b610661565b61029b610302366004612267565b610683565b61029b6103153660046122b5565b610780565b6101f9610328366004612267565b6001600160a01b031660009081526004602052604090205490565b61029b610794565b6003546001600160a01b0316610236565b6101b66107a8565b6101df610372366004612267565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61039e3660046121fa565b6107b7565b6101df6103b13660046121fa565b610832565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103eb3660046122ce565b610840565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961042d366004612357565b610a0a565b61029b610440366004612267565b610a35565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b90612390565b80601f01602080910402602001604051908101604052809291908181526020018280546104a790612390565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610aab565b60019150505b92915050565b600033610526858285610bd0565b610531858585610c44565b506001949350505050565b610544610def565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a906123ca565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610649610df7565b6106538282610e50565b61065d6001600055565b5050565b60003361050c8185856106748383610a0a565b61067e919061242e565b610aab565b61068b610def565b6001600160a01b0381166106b15760405162461bcd60e51b815260040161056a906123ca565b6001600160a01b03811660009081526001602052604090205460ff1661072b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610788610def565b6107918161145d565b50565b61079c6115fd565b6107a66000611657565b565b60606008805461047b90612390565b600033816107c58286610a0a565b9050838110156108255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610aab565b60003361050c818585610c44565b610848610df7565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190612441565b101561094a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b61095333610372565b156109b95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109fa848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116a992505050565b610a046001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a3d6115fd565b6001600160a01b038116610aa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61079181611657565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bdc8484610a0a565b90506000198114610a045781811015610c375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b610a048484848403610aab565b6001600160a01b038316610ca85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610de29086815260200190565b60405180910390a3610a04565b6107a66115fd565b600260005403610e495760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b8135610ec45760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161056a565b6000610ed66040840160208501612267565b6001600160a01b031603610f525760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b6000610f646060840160408501612267565b6001600160a01b031603610fd55760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f0000000000000000000000000000000000000000000000000000000000000000823503611147576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110376040840160208501612267565b6001600160a01b03161461105d5760405162461bcd60e51b815260040161056a9061245a565b60a0820135156110d55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d60448201527f7a65726f20726571756972656420676173206c696d6974000000000000000000606482015260840161056a565b6080820135156111425760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161056a565b6111a6565b7f00000000000000000000000000000000000000000000000000000000000000008235036111a657306111806040840160208501612267565b6001600160a01b0316036111a65760405162461bcd60e51b815260040161056a9061245a565b6111af8161184c565b90506111c36080830135606084013561242e565b81116112375760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b6112456060830135826124b7565b905061125081611858565b600061141f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018760600135815250815260200162035b608152602001600067ffffffffffffffff81111561131f5761131f6124ca565b604051908082528060200260200182016040528015611348578160200160208202803683370190505b5081526020016040518060c00160405280876000013581526020018760200160208101906113769190612267565b6001600160a01b031681526020016113946060890160408a01612267565b6001600160a01b0390811682526080808a0135602080850191909152600060408086019190915260a0808d01356060968701528151875181850152928701518516838301529086015190931681850152928401518382015283015182820152919091015160c082015260e0810186905261010001604051602081830303815290604052815250611862565b9050336001600160a01b0316817fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a08585604051610bc39291906124e0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e19190612441565b600254909150818311156115515760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b8083116115c65760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146117315760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146117d85760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906117ef9190612543565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8260405161182e91815260200190565b60405180910390a26118408282611988565b5050505050565b505050565b60006105123083611992565b6107913082611afa565b60008061186d611c2e565b60408401516020015190915015611912576040830151516001600160a01b03166118ef5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b604083015160208101519051611912916001600160a01b03909116908390611d42565b604051630624488560e41b81526001600160a01b0382169063624488509061193e9086906004016125b5565b6020604051808303816000875af115801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190612441565b9392505050565b61065d8282611e27565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff9190612441565b9050611a166001600160a01b038516333086611ee8565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190612441565b9050818111611ae75760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611af182826124b7565b95945050505050565b6001600160a01b038216611b5a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611bce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb39190612633565b9050611cd7816001600160a01b031660009081526001602052604090205460ff1690565b15611d3d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db79190612441565b611dc1919061242e565b6040516001600160a01b038516602482015260448101829052909150610a0490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f20565b6001600160a01b038216611e7d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b8060066000828254611e8f919061242e565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a049085906323b872dd60e01b90608401611df0565b6000611f75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff29092919063ffffffff16565b8051909150156118475780806020019051810190611f939190612650565b6118475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b60606120018484600085612009565b949350505050565b60608247101561206a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b031685876040516120869190612672565b60006040518083038185875af1925050503d80600081146120c3576040519150601f19603f3d011682016040523d82523d6000602084013e6120c8565b606091505b50915091506120d9878383876120e4565b979650505050505050565b6060831561215357825160000361214c576001600160a01b0385163b61214c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081612001565b61200183838151156121685781518083602001fd5b8060405162461bcd60e51b815260040161056a91906121d2565b60005b8381101561219d578181015183820152602001612185565b50506000910152565b600081518084526121be816020860160208601612182565b601f01601f19169290920160200192915050565b60208152600061198160208301846121a6565b6001600160a01b038116811461079157600080fd5b6000806040838503121561220d57600080fd5b8235612218816121e5565b946020939093013593505050565b60008060006060848603121561223b57600080fd5b8335612246816121e5565b92506020840135612256816121e5565b929592945050506040919091013590565b60006020828403121561227957600080fd5b8135611981816121e5565b60008082840360e081121561229857600080fd5b60c08112156122a657600080fd5b50919360c08501359350915050565b6000602082840312156122c757600080fd5b5035919050565b600080600080606085870312156122e457600080fd5b8435935060208501356122f6816121e5565b9250604085013567ffffffffffffffff8082111561231357600080fd5b818701915087601f83011261232757600080fd5b81358181111561233657600080fd5b88602082850101111561234857600080fd5b95989497505060200194505050565b6000806040838503121561236a57600080fd5b8235612375816121e5565b91506020830135612385816121e5565b809150509250929050565b600181811c908216806123a457607f821691505b6020821081036123c457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561051257610512612418565b60006020828403121561245357600080fd5b5051919050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561051257610512612418565b634e487b7160e01b600052604160045260246000fd5b8235815260e0810160208401356124f6816121e5565b6001600160a01b039081166020840152604085013590612515826121e5565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b6000806040838503121561255657600080fd5b8251612561816121e5565b6020939093015192949293505050565b600081518084526020808501945080840160005b838110156125aa5781516001600160a01b031687529582019590820190600101612585565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612616610100840182612571565b905060a0840151601f198483030160e0850152611af182826121a6565b60006020828403121561264557600080fd5b8151611981816121e5565b60006020828403121561266257600080fd5b8151801515811461198157600080fd5b60008251612684818460208701612182565b919091019291505056fea264697066735822122034201eeb5aed2cce6c261c7de40bff96f17f2ef71539dd8a3c08aaadc78ba7ca64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index 10952a23..4010fb6a 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -35,7 +35,7 @@ abstract contract TeleporterTokenDestination is address public immutable feeTokenAddress; /// @notice Required gas limit for sending tokens back to the source blockchain. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 100_000; + uint256 public constant SEND_TOKENS_REQUIRED_GAS = 220_000; /** * @notice Initializes this destination token bridge instance to receive diff --git a/tests/flows/basic_erc20_send_receive.go b/tests/flows/basic_erc20_send_receive.go index 3f8b3fa1..82ed2cad 100644 --- a/tests/flows/basic_erc20_send_receive.go +++ b/tests/flows/basic_erc20_send_receive.go @@ -10,7 +10,6 @@ import ( "github.com/ava-labs/teleporter-token-bridge/tests/utils" "github.com/ava-labs/teleporter/tests/interfaces" teleporterUtils "github.com/ava-labs/teleporter/tests/utils" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" . "github.com/onsi/gomega" ) @@ -77,7 +76,7 @@ func BasicERC20SendReceive(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(1e18), SecondaryFee: big.NewInt(0), - AllowedRelayerAddresses: []common.Address{}, + RequiredGasLimit: big.NewInt(70_000), } amount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(13)) @@ -129,7 +128,7 @@ func BasicERC20SendReceive(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - AllowedRelayerAddresses: []common.Address{}, + RequiredGasLimit: big.NewInt(0), } receipt, bridgedAmount = utils.SendERC20Destination( diff --git a/tests/flows/erc20_source_multihop.go b/tests/flows/erc20_source_multihop.go index 5fde32d0..ca153b47 100644 --- a/tests/flows/erc20_source_multihop.go +++ b/tests/flows/erc20_source_multihop.go @@ -9,7 +9,6 @@ import ( "github.com/ava-labs/teleporter-token-bridge/tests/utils" "github.com/ava-labs/teleporter/tests/interfaces" teleporterUtils "github.com/ava-labs/teleporter/tests/utils" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" . "github.com/onsi/gomega" ) @@ -90,7 +89,7 @@ func ERC20SourceMultihop(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(1e18), SecondaryFee: big.NewInt(0), - AllowedRelayerAddresses: []common.Address{}, + RequiredGasLimit: big.NewInt(100_000), } amount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(13)) diff --git a/tests/flows/native_source_erc20_destination.go b/tests/flows/native_source_erc20_destination.go index 738a0b15..77e34edb 100644 --- a/tests/flows/native_source_erc20_destination.go +++ b/tests/flows/native_source_erc20_destination.go @@ -10,7 +10,6 @@ import ( "github.com/ava-labs/teleporter-token-bridge/tests/utils" "github.com/ava-labs/teleporter/tests/interfaces" teleporterUtils "github.com/ava-labs/teleporter/tests/utils" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" . "github.com/onsi/gomega" ) @@ -77,7 +76,7 @@ func NativeSourceERC20Destination(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - AllowedRelayerAddresses: []common.Address{}, + RequiredGasLimit: big.NewInt(70_000), } // Send the tokens and verify expected events @@ -128,7 +127,7 @@ func NativeSourceERC20Destination(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - AllowedRelayerAddresses: []common.Address{}, + RequiredGasLimit: big.NewInt(0), } // Send tokens on Subnet A back for native tokens on C-Chain diff --git a/tests/flows/native_source_multihop.go b/tests/flows/native_source_multihop.go index 60f39708..ee111804 100644 --- a/tests/flows/native_source_multihop.go +++ b/tests/flows/native_source_multihop.go @@ -9,7 +9,6 @@ import ( "github.com/ava-labs/teleporter-token-bridge/tests/utils" "github.com/ava-labs/teleporter/tests/interfaces" teleporterUtils "github.com/ava-labs/teleporter/tests/utils" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" . "github.com/onsi/gomega" @@ -83,14 +82,14 @@ func NativeTokenSourceMultihop(network interfaces.Network) { Expect(err).Should(BeNil()) recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey) - // Send tokens from subnet A to recipient on subnet B + // Send tokens from C-Chain to recipient on subnet A input := nativetokensource.SendTokensInput{ DestinationBlockchainID: subnetAInfo.BlockchainID, DestinationBridgeAddress: erc20DestinationAddress_A, Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - AllowedRelayerAddresses: []common.Address{}, + RequiredGasLimit: big.NewInt(100_000), } // Send the tokens and verify expected events diff --git a/tests/utils/utils.go b/tests/utils/utils.go index fc52a40a..112c3816 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -265,7 +265,7 @@ func SendERC20MultihopAndVerify( Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - AllowedRelayerAddresses: []common.Address{}, + RequiredGasLimit: big.NewInt(80_000), } // Send tokens through a multihop transfer From eda66325342d20e9bf626e4ce360103edff45f49 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Thu, 4 Apr 2024 14:52:32 -0700 Subject: [PATCH 09/11] use input.requiredGasLimit for source as well --- .../go/ERC20Destination/ERC20Destination.go | 28 +++++++------- contracts/src/TeleporterTokenDestination.sol | 38 ++++++++++++------- .../test/TeleporterTokenBridgeTests.t.sol | 6 +-- .../TeleporterTokenDestinationTests.t.sol | 11 ------ .../test/TeleporterTokenSourceTests.t.sol | 28 ++++++-------- tests/flows/basic_erc20_send_receive.go | 4 +- tests/flows/erc20_source_multihop.go | 2 +- .../flows/native_source_erc20_destination.go | 4 +- tests/flows/native_source_multihop.go | 2 +- tests/local/e2e_test.go | 5 ++- tests/utils/constants.go | 8 ++++ tests/utils/utils.go | 2 +- 12 files changed, 70 insertions(+), 68 deletions(-) create mode 100644 tests/utils/constants.go diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index 4839dd89..f44d53af 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -41,8 +41,8 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND_TOKENS_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b5060405162002fa938038062002fa98339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002f8983398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002f898339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516126c4620008c560003960006102a40152600081816103bb01526112c201526000818161044a0152818161100701528181611288015261173301526000818161026601528181610fd70152818161126201526116ab0152600081816103f5015261114901526000818161021401528181610855015281816114610152611c3301526126c46000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b8df0dea11610097578063d2cc7a7011610071578063d2cc7a7014610417578063dd62ed3e1461041f578063f2fde38b14610432578063f5ea06031461044557600080fd5b8063b8df0dea146103b6578063c868efaa146103dd578063d127dc9b146103f057600080fd5b806395d89b41116100d357806395d89b411461035c5780639731429714610364578063a457c2d714610390578063a9059cbb146103a357600080fd5b806370a082311461031a578063715018a6146103435780638da5cb5b1461034b57600080fd5b806329b7b3fd1161016657806332709bc11161014057806332709bc1146102ce57806339509351146102e15780634511243e146102f45780635eb995141461030757600080fd5b806329b7b3fd146102615780632b0d8f1814610288578063313ce5671461029d57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806310397b01146101ef57806318160ddd146102075780631a7f5bec1461020f57806323b872dd1461024e575b600080fd5b6101b661046c565b6040516101c391906121d2565b60405180910390f35b6101df6101da3660046121fa565b6104fe565b60405190151581526020016101c3565b6101f962035b6081565b6040519081526020016101c3565b6006546101f9565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61025c366004612226565b610518565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b61029b610296366004612267565b61053c565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b61029b6102dc366004612284565b610641565b6101df6102ef3660046121fa565b610661565b61029b610302366004612267565b610683565b61029b6103153660046122b5565b610780565b6101f9610328366004612267565b6001600160a01b031660009081526004602052604090205490565b61029b610794565b6003546001600160a01b0316610236565b6101b66107a8565b6101df610372366004612267565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61039e3660046121fa565b6107b7565b6101df6103b13660046121fa565b610832565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103eb3660046122ce565b610840565b6101f97f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f9565b6101f961042d366004612357565b610a0a565b61029b610440366004612267565b610a35565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047b90612390565b80601f01602080910402602001604051908101604052809291908181526020018280546104a790612390565b80156104f45780601f106104c9576101008083540402835291602001916104f4565b820191906000526020600020905b8154815290600101906020018083116104d757829003601f168201915b5050505050905090565b60003361050c818585610aab565b60019150505b92915050565b600033610526858285610bd0565b610531858585610c44565b506001949350505050565b610544610def565b6001600160a01b0381166105735760405162461bcd60e51b815260040161056a906123ca565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105f25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161056a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610649610df7565b6106538282610e50565b61065d6001600055565b5050565b60003361050c8185856106748383610a0a565b61067e919061242e565b610aab565b61068b610def565b6001600160a01b0381166106b15760405162461bcd60e51b815260040161056a906123ca565b6001600160a01b03811660009081526001602052604090205460ff1661072b5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161056a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610788610def565b6107918161145d565b50565b61079c6115fd565b6107a66000611657565b565b60606008805461047b90612390565b600033816107c58286610a0a565b9050838110156108255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161056a565b6105318286868403610aab565b60003361050c818585610c44565b610848610df7565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190612441565b101561094a5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161056a565b61095333610372565b156109b95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161056a565b6109fa848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116a992505050565b610a046001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a3d6115fd565b6001600160a01b038116610aa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b61079181611657565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056a565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610bdc8484610a0a565b90506000198114610a045781811015610c375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056a565b610a048484848403610aab565b6001600160a01b038316610ca85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056a565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056a565b6001600160a01b03831660009081526004602052604090205481811015610d825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056a565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610de29086815260200190565b60405180910390a3610a04565b6107a66115fd565b600260005403610e495760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161056a565b6002600055565b8135610ec45760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161056a565b6000610ed66040840160208501612267565b6001600160a01b031603610f525760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161056a565b6000610f646060840160408501612267565b6001600160a01b031603610fd55760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b606482015260840161056a565b7f0000000000000000000000000000000000000000000000000000000000000000823503611147576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110376040840160208501612267565b6001600160a01b03161461105d5760405162461bcd60e51b815260040161056a9061245a565b60a0820135156110d55760405162461bcd60e51b815260206004820152603760248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d60448201527f7a65726f20726571756972656420676173206c696d6974000000000000000000606482015260840161056a565b6080820135156111425760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161056a565b6111a6565b7f00000000000000000000000000000000000000000000000000000000000000008235036111a657306111806040840160208501612267565b6001600160a01b0316036111a65760405162461bcd60e51b815260040161056a9061245a565b6111af8161184c565b90506111c36080830135606084013561242e565b81116112375760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161056a565b6112456060830135826124b7565b905061125081611858565b600061141f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018760600135815250815260200162035b608152602001600067ffffffffffffffff81111561131f5761131f6124ca565b604051908082528060200260200182016040528015611348578160200160208202803683370190505b5081526020016040518060c00160405280876000013581526020018760200160208101906113769190612267565b6001600160a01b031681526020016113946060890160408a01612267565b6001600160a01b0390811682526080808a0135602080850191909152600060408086019190915260a0808d01356060968701528151875181850152928701518516838301529086015190931681850152928401518382015283015182820152919091015160c082015260e0810186905261010001604051602081830303815290604052815250611862565b9050336001600160a01b0316817fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a08585604051610bc39291906124e0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e19190612441565b600254909150818311156115515760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161056a565b8083116115c65760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161056a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146117315760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161056a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146117d85760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161056a565b600080828060200190518101906117ef9190612543565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8260405161182e91815260200190565b60405180910390a26118408282611988565b5050505050565b505050565b60006105123083611992565b6107913082611afa565b60008061186d611c2e565b60408401516020015190915015611912576040830151516001600160a01b03166118ef5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161056a565b604083015160208101519051611912916001600160a01b03909116908390611d42565b604051630624488560e41b81526001600160a01b0382169063624488509061193e9086906004016125b5565b6020604051808303816000875af115801561195d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119819190612441565b9392505050565b61065d8282611e27565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff9190612441565b9050611a166001600160a01b038516333086611ee8565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190612441565b9050818111611ae75760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161056a565b611af182826124b7565b95945050505050565b6001600160a01b038216611b5a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056a565b6001600160a01b03821660009081526004602052604090205481811015611bce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056a565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb39190612633565b9050611cd7816001600160a01b031660009081526001602052604090205460ff1690565b15611d3d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161056a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db79190612441565b611dc1919061242e565b6040516001600160a01b038516602482015260448101829052909150610a0490859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f20565b6001600160a01b038216611e7d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056a565b8060066000828254611e8f919061242e565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a049085906323b872dd60e01b90608401611df0565b6000611f75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ff29092919063ffffffff16565b8051909150156118475780806020019051810190611f939190612650565b6118475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161056a565b60606120018484600085612009565b949350505050565b60608247101561206a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161056a565b600080866001600160a01b031685876040516120869190612672565b60006040518083038185875af1925050503d80600081146120c3576040519150601f19603f3d011682016040523d82523d6000602084013e6120c8565b606091505b50915091506120d9878383876120e4565b979650505050505050565b6060831561215357825160000361214c576001600160a01b0385163b61214c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056a565b5081612001565b61200183838151156121685781518083602001fd5b8060405162461bcd60e51b815260040161056a91906121d2565b60005b8381101561219d578181015183820152602001612185565b50506000910152565b600081518084526121be816020860160208601612182565b601f01601f19169290920160200192915050565b60208152600061198160208301846121a6565b6001600160a01b038116811461079157600080fd5b6000806040838503121561220d57600080fd5b8235612218816121e5565b946020939093013593505050565b60008060006060848603121561223b57600080fd5b8335612246816121e5565b92506020840135612256816121e5565b929592945050506040919091013590565b60006020828403121561227957600080fd5b8135611981816121e5565b60008082840360e081121561229857600080fd5b60c08112156122a657600080fd5b50919360c08501359350915050565b6000602082840312156122c757600080fd5b5035919050565b600080600080606085870312156122e457600080fd5b8435935060208501356122f6816121e5565b9250604085013567ffffffffffffffff8082111561231357600080fd5b818701915087601f83011261232757600080fd5b81358181111561233657600080fd5b88602082850101111561234857600080fd5b95989497505060200194505050565b6000806040838503121561236a57600080fd5b8235612375816121e5565b91506020830135612385816121e5565b809150509250929050565b600181811c908216806123a457607f821691505b6020821081036123c457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561051257610512612418565b60006020828403121561245357600080fd5b5051919050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561051257610512612418565b634e487b7160e01b600052604160045260246000fd5b8235815260e0810160208401356124f6816121e5565b6001600160a01b039081166020840152604085013590612515826121e5565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b6000806040838503121561255657600080fd5b8251612561816121e5565b6020939093015192949293505050565b600081518084526020808501945080840160005b838110156125aa5781516001600160a01b031687529582019590820190600101612585565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612616610100840182612571565b905060a0840151601f198483030160e0850152611af182826121a6565b60006020828403121561264557600080fd5b8151611981816121e5565b60006020828403121561266257600080fd5b8151801515811461198157600080fd5b60008251612684818460208701612182565b919091019291505056fea264697066735822122034201eeb5aed2cce6c261c7de40bff96f17f2ef71539dd8a3c08aaadc78ba7ca64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b5060405162002f4c38038062002f4c8339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002f2c83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002f2c83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002f2c8339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051612667620008c560003960006102960152600081816103b70152611259015260008181610446015281816110090152818161121f01526116d601526000818161025801528181610fd9015281816111f9015261164e0152600081816103f101526110d301526000818161020601528181610851015281816114040152611bd601526126676000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063b8df0dea11610097578063d2cc7a7011610071578063d2cc7a7014610413578063dd62ed3e1461041b578063f2fde38b1461042e578063f5ea06031461044157600080fd5b8063b8df0dea146103b2578063c868efaa146103d9578063d127dc9b146103ec57600080fd5b806397314297116100d35780639731429714610356578063a457c2d714610382578063a9059cbb14610395578063b6580b69146103a857600080fd5b8063715018a6146103355780638da5cb5b1461033d57806395d89b411461034e57600080fd5b80632b0d8f1811610166578063395093511161014057806339509351146102d35780634511243e146102e65780635eb99514146102f957806370a082311461030c57600080fd5b80632b0d8f181461027a578063313ce5671461028f57806332709bc1146102c057600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101ef5780631a7f5bec1461020157806323b872dd1461024057806329b7b3fd14610253575b600080fd5b6101b6610468565b6040516101c39190612175565b60405180910390f35b6101df6101da36600461219d565b6104fa565b60405190151581526020016101c3565b6006545b6040519081526020016101c3565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61024e3660046121c9565b610514565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61028d61028836600461220a565b610538565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b61028d6102ce366004612227565b61063d565b6101df6102e136600461219d565b61065d565b61028d6102f436600461220a565b61067f565b61028d610307366004612258565b61077c565b6101f361031a36600461220a565b6001600160a01b031660009081526004602052604090205490565b61028d610790565b6003546001600160a01b0316610228565b6101b66107a4565b6101df61036436600461220a565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61039036600461219d565b6107b3565b6101df6103a336600461219d565b61082e565b6101f362035b6081565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b61028d6103e7366004612271565b61083c565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f3565b6101f36104293660046122fa565b610a06565b61028d61043c36600461220a565b610a31565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047790612333565b80601f01602080910402602001604051908101604052809291908181526020018280546104a390612333565b80156104f05780601f106104c5576101008083540402835291602001916104f0565b820191906000526020600020905b8154815290600101906020018083116104d357829003601f168201915b5050505050905090565b600033610508818585610aa7565b60019150505b92915050565b600033610522858285610bcb565b61052d858585610c3f565b506001949350505050565b610540610dea565b6001600160a01b03811661056f5760405162461bcd60e51b81526004016105669061236d565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610566565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610645610df2565b61064f8282610e4b565b6106596001600055565b5050565b6000336105088185856106708383610a06565b61067a91906123d1565b610aa7565b610687610dea565b6001600160a01b0381166106ad5760405162461bcd60e51b81526004016105669061236d565b6001600160a01b03811660009081526001602052604090205460ff166107275760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610566565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610784610dea565b61078d81611400565b50565b6107986115a0565b6107a260006115fa565b565b60606008805461047790612333565b600033816107c18286610a06565b9050838110156108215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610566565b61052d8286868403610aa7565b600033610508818585610c3f565b610844610df2565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df91906123e4565b10156109465760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610566565b61094f33610364565b156109b55760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610566565b6109f6848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164c92505050565b610a006001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a396115a0565b6001600160a01b038116610a9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610566565b61078d816115fa565b6001600160a01b038316610b095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610566565b6001600160a01b038216610b6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610566565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610bd78484610a06565b90506000198114610a005781811015610c325760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610566565b610a008484848403610aa7565b6001600160a01b038316610ca35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610566565b6001600160a01b038216610d055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610566565b6001600160a01b03831660009081526004602052604090205481811015610d7d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610566565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ddd9086815260200190565b60405180910390a3610a00565b6107a26115a0565b600260005403610e445760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610566565b6002600055565b8135610ebf5760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610566565b6000610ed1604084016020850161220a565b6001600160a01b031603610f4d5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610566565b6000610f5f606084016040850161220a565b6001600160a01b031603610fd05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b6064820152608401610566565b60a082013560007f00000000000000000000000000000000000000000000000000000000000000008435036110d1576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611039604086016020870161220a565b6001600160a01b03161461105f5760405162461bcd60e51b8152600401610566906123fd565b6080840135156110cc5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610566565b61113d565b7f0000000000000000000000000000000000000000000000000000000000000000843503611130573061110a604086016020870161220a565b6001600160a01b0316036111305760405162461bcd60e51b8152600401610566906123fd565b5062035b60905060a08301355b611146836117ef565b925061115a608085013560608601356123d1565b83116111ce5760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610566565b6111dc60608501358461245a565b92506111e7836117fb565b60006113b36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200189606001358152508152602001858152602001600067ffffffffffffffff8111156112b3576112b361246d565b6040519080825280602002602001820160405280156112dc578160200160208202803683370190505b5081526020016040518060c001604052808960000135815260200189602001602081019061130a919061220a565b6001600160a01b0316815260200161132860608b0160408c0161220a565b6001600160a01b0390811682526080808c0135602080850191909152600060408086019190915260609485018b90528051865181840152918601518416828201528501519092168284015291830151818301529082015160a0808301919091529091015160c082015260e0810188905261010001604051602081830303815290604052815250611805565b9050336001600160a01b0316817fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a087876040516113f1929190612483565b60405180910390a35050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611460573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148491906123e4565b600254909150818311156114f45760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610566565b8083116115695760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610566565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107a25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610566565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146116d45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610566565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461177b5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610566565b6000808280602001905181019061179291906124e6565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c826040516117d191815260200190565b60405180910390a26117e3828261192b565b5050505050565b505050565b600061050e3083611935565b61078d3082611a9d565b600080611810611bd1565b604084015160200151909150156118b5576040830151516001600160a01b03166118925760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610566565b6040830151602081015190516118b5916001600160a01b03909116908390611ce5565b604051630624488560e41b81526001600160a01b038216906362448850906118e1908690600401612558565b6020604051808303816000875af1158015611900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192491906123e4565b9392505050565b6106598282611dca565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a291906123e4565b90506119b96001600160a01b038516333086611e8b565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2491906123e4565b9050818111611a8a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610566565b611a94828261245a565b95945050505050565b6001600160a01b038216611afd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610566565b6001600160a01b03821660009081526004602052604090205481811015611b715760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610566565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5691906125d6565b9050611c7a816001600160a01b031660009081526001602052604090205460ff1690565b15611ce05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610566565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5a91906123e4565b611d6491906123d1565b6040516001600160a01b038516602482015260448101829052909150610a0090859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ec3565b6001600160a01b038216611e205760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610566565b8060066000828254611e3291906123d1565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a009085906323b872dd60e01b90608401611d93565b6000611f18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f959092919063ffffffff16565b8051909150156117ea5780806020019051810190611f3691906125f3565b6117ea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610566565b6060611fa48484600085611fac565b949350505050565b60608247101561200d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610566565b600080866001600160a01b031685876040516120299190612615565b60006040518083038185875af1925050503d8060008114612066576040519150601f19603f3d011682016040523d82523d6000602084013e61206b565b606091505b509150915061207c87838387612087565b979650505050505050565b606083156120f65782516000036120ef576001600160a01b0385163b6120ef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610566565b5081611fa4565b611fa4838381511561210b5781518083602001fd5b8060405162461bcd60e51b81526004016105669190612175565b60005b83811015612140578181015183820152602001612128565b50506000910152565b60008151808452612161816020860160208601612125565b601f01601f19169290920160200192915050565b6020815260006119246020830184612149565b6001600160a01b038116811461078d57600080fd5b600080604083850312156121b057600080fd5b82356121bb81612188565b946020939093013593505050565b6000806000606084860312156121de57600080fd5b83356121e981612188565b925060208401356121f981612188565b929592945050506040919091013590565b60006020828403121561221c57600080fd5b813561192481612188565b60008082840360e081121561223b57600080fd5b60c081121561224957600080fd5b50919360c08501359350915050565b60006020828403121561226a57600080fd5b5035919050565b6000806000806060858703121561228757600080fd5b84359350602085013561229981612188565b9250604085013567ffffffffffffffff808211156122b657600080fd5b818701915087601f8301126122ca57600080fd5b8135818111156122d957600080fd5b8860208285010111156122eb57600080fd5b95989497505060200194505050565b6000806040838503121561230d57600080fd5b823561231881612188565b9150602083013561232881612188565b809150509250929050565b600181811c9082168061234757607f821691505b60208210810361236757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561050e5761050e6123bb565b6000602082840312156123f657600080fd5b5051919050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561050e5761050e6123bb565b634e487b7160e01b600052604160045260246000fd5b8235815260e08101602084013561249981612188565b6001600160a01b0390811660208401526040850135906124b882612188565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b600080604083850312156124f957600080fd5b825161250481612188565b6020939093015192949293505050565b600081518084526020808501945080840160005b8381101561254d5781516001600160a01b031687529582019590820190600101612528565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526125b9610100840182612514565b905060a0840151601f198483030160e0850152611a948282612149565b6000602082840312156125e857600080fd5b815161192481612188565b60006020828403121561260557600080fd5b8151801515811461192457600080fd5b60008251612627818460208701612125565b919091019291505056fea2646970667358221220188df3da2ea254fb9e3e151b5b735c466760c4a6e1f3843cc1548080e9d2fc1a64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. @@ -212,12 +212,12 @@ func (_ERC20Destination *ERC20DestinationTransactorRaw) Transact(opts *bind.Tran return _ERC20Destination.Contract.contract.Transact(opts, method, params...) } -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. // -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_ERC20Destination *ERC20DestinationCaller) SENDTOKENSREQUIREDGAS(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +func (_ERC20Destination *ERC20DestinationCaller) MULTIHOPREQUIREDGAS(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _ERC20Destination.contract.Call(opts, &out, "SEND_TOKENS_REQUIRED_GAS") + err := _ERC20Destination.contract.Call(opts, &out, "MULTIHOP_REQUIRED_GAS") if err != nil { return *new(*big.Int), err @@ -229,18 +229,18 @@ func (_ERC20Destination *ERC20DestinationCaller) SENDTOKENSREQUIREDGAS(opts *bin } -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. // -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_ERC20Destination *ERC20DestinationSession) SENDTOKENSREQUIREDGAS() (*big.Int, error) { - return _ERC20Destination.Contract.SENDTOKENSREQUIREDGAS(&_ERC20Destination.CallOpts) +// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +func (_ERC20Destination *ERC20DestinationSession) MULTIHOPREQUIREDGAS() (*big.Int, error) { + return _ERC20Destination.Contract.MULTIHOPREQUIREDGAS(&_ERC20Destination.CallOpts) } -// SENDTOKENSREQUIREDGAS is a free data retrieval call binding the contract method 0x10397b01. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. // -// Solidity: function SEND_TOKENS_REQUIRED_GAS() view returns(uint256) -func (_ERC20Destination *ERC20DestinationCallerSession) SENDTOKENSREQUIREDGAS() (*big.Int, error) { - return _ERC20Destination.Contract.SENDTOKENSREQUIREDGAS(&_ERC20Destination.CallOpts) +// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +func (_ERC20Destination *ERC20DestinationCallerSession) MULTIHOPREQUIREDGAS() (*big.Int, error) { + return _ERC20Destination.Contract.MULTIHOPREQUIREDGAS(&_ERC20Destination.CallOpts) } // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index 4010fb6a..eda61c76 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -35,7 +35,7 @@ abstract contract TeleporterTokenDestination is address public immutable feeTokenAddress; /// @notice Required gas limit for sending tokens back to the source blockchain. - uint256 public constant SEND_TOKENS_REQUIRED_GAS = 220_000; + uint256 public constant MULTIHOP_REQUIRED_GAS = 220_000; /** * @notice Initializes this destination token bridge instance to receive @@ -93,23 +93,33 @@ abstract contract TeleporterTokenDestination is ); require(input.recipient != address(0), "TeleporterTokenDestination: zero recipient address"); - // If the destination blockchain is the source bridge instance's blockchain, - // the destination bridge address must match the token source address. + // If the destination blockchain is the source blockchain, + // no multihop is needed. Only the required gas limit for the Teleporter message back to + // `sourceBlockchainID` is needed, which is provided by `input.requiredGasLimit`. + // Else, there will be a multihop transfer to the final destination. + // The first hop back to `sourceBlockchainID` requires `MULTIHOP_REQUIRED_GAS`, + // and the second hop to the final destination requires `input.requiredGasLimit`. + uint256 firstHopRequiredGas = input.requiredGasLimit; + uint256 secondHopRequiredGas; if (input.destinationBlockchainID == sourceBlockchainID) { + // If the destination blockchain is the source bridge instance's blockchain, + // the destination bridge address must match the token source address, + // and no secondary fee is needed. require( input.destinationBridgeAddress == tokenSourceAddress, "TeleporterTokenDestination: invalid destination bridge address" ); - require( - input.requiredGasLimit == 0, - "TeleporterTokenDestination: non-zero required gas limit" - ); require(input.secondaryFee == 0, "TeleporterTokenDestination: non-zero secondary fee"); - } else if (input.destinationBlockchainID == blockchainID) { - require( - input.destinationBridgeAddress != address(this), - "TeleporterTokenDestination: invalid destination bridge address" - ); + } else { + // Do not allow bridging to the same token bridge instance. + if (input.destinationBlockchainID == blockchainID) { + require( + input.destinationBridgeAddress != address(this), + "TeleporterTokenDestination: invalid destination bridge address" + ); + } + firstHopRequiredGas = MULTIHOP_REQUIRED_GAS; + secondHopRequiredGas = input.requiredGasLimit; } // Deposit the funds sent from the user to the bridge, @@ -128,7 +138,7 @@ abstract contract TeleporterTokenDestination is destinationBlockchainID: sourceBlockchainID, destinationAddress: tokenSourceAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: input.primaryFee}), - requiredGasLimit: SEND_TOKENS_REQUIRED_GAS, + requiredGasLimit: firstHopRequiredGas, allowedRelayerAddresses: new address[](0), message: abi.encode( SendTokensInput({ @@ -137,7 +147,7 @@ abstract contract TeleporterTokenDestination is recipient: input.recipient, primaryFee: input.secondaryFee, secondaryFee: 0, - requiredGasLimit: input.requiredGasLimit + requiredGasLimit: secondHopRequiredGas }), amount ) diff --git a/contracts/test/TeleporterTokenBridgeTests.t.sol b/contracts/test/TeleporterTokenBridgeTests.t.sol index 7990f840..c32b6e64 100644 --- a/contracts/test/TeleporterTokenBridgeTests.t.sol +++ b/contracts/test/TeleporterTokenBridgeTests.t.sol @@ -151,7 +151,7 @@ abstract contract TeleporterTokenBridgeTest is Test { destinationBlockchainID: input.destinationBlockchainID, destinationAddress: input.destinationBridgeAddress, feeInfo: TeleporterFeeInfo({feeTokenAddress: address(feeToken), amount: input.primaryFee}), - requiredGasLimit: _expectedRequiredGasLimit(), + requiredGasLimit: input.requiredGasLimit, allowedRelayerAddresses: new address[](0), message: _encodeMessage(input, bridgeAmount) }); @@ -176,11 +176,9 @@ abstract contract TeleporterTokenBridgeTest is Test { ); } - function _expectedRequiredGasLimit() internal view virtual returns (uint256); - function _createDefaultSendTokensInput() internal - view + pure virtual returns (SendTokensInput memory); diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index b5b4f38b..47e4bb5a 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -47,13 +47,6 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { _send(input, 0); } - function testNonZeroRequiredGasLimitToSourceBlockchain() public { - SendTokensInput memory input = _createDefaultSendTokensInput(); - input.requiredGasLimit = DEFAULT_REQUIRED_GAS_LIMIT; - vm.expectRevert(_formatErrorMessage("non-zero required gas limit")); - _send(input, 0); - } - function testSendingToSameInstance() public { SendTokensInput memory input = _createDefaultSendTokensInput(); input.destinationBlockchainID = tokenDestination.blockchainID(); @@ -109,10 +102,6 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { ); } - function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { - return tokenDestination.SEND_TOKENS_REQUIRED_GAS(); - } - function _createDefaultSendTokensInput() internal pure diff --git a/contracts/test/TeleporterTokenSourceTests.t.sol b/contracts/test/TeleporterTokenSourceTests.t.sol index 98f02362..50da5670 100644 --- a/contracts/test/TeleporterTokenSourceTests.t.sol +++ b/contracts/test/TeleporterTokenSourceTests.t.sol @@ -118,7 +118,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: feeAmount, secondaryFee: 0, - requiredGasLimit: _expectedRequiredGasLimit() + requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT }); _checkExpectedTeleporterCalls(input, bridgedAmount); @@ -173,13 +173,20 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { ); } - function _expectedRequiredGasLimit() internal view virtual override returns (uint256) { - return DEFAULT_REQUIRED_GAS_LIMIT; + function _createDefaultReceiveTokensInput() internal view returns (SendTokensInput memory) { + return SendTokensInput({ + destinationBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + destinationBridgeAddress: address(tokenSource), + recipient: DEFAULT_RECIPIENT_ADDRESS, + primaryFee: 0, + secondaryFee: 0, + requiredGasLimit: 0 + }); } function _createDefaultSendTokensInput() internal - view + pure override returns (SendTokensInput memory) { @@ -189,18 +196,7 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { recipient: DEFAULT_RECIPIENT_ADDRESS, primaryFee: 0, secondaryFee: 0, - requiredGasLimit: _expectedRequiredGasLimit() - }); - } - - function _createDefaultReceiveTokensInput() internal view returns (SendTokensInput memory) { - return SendTokensInput({ - destinationBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, - destinationBridgeAddress: address(tokenSource), - recipient: DEFAULT_RECIPIENT_ADDRESS, - primaryFee: 0, - secondaryFee: 0, - requiredGasLimit: 0 + requiredGasLimit: DEFAULT_REQUIRED_GAS_LIMIT }); } diff --git a/tests/flows/basic_erc20_send_receive.go b/tests/flows/basic_erc20_send_receive.go index 82ed2cad..81fd78cf 100644 --- a/tests/flows/basic_erc20_send_receive.go +++ b/tests/flows/basic_erc20_send_receive.go @@ -76,7 +76,7 @@ func BasicERC20SendReceive(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(1e18), SecondaryFee: big.NewInt(0), - RequiredGasLimit: big.NewInt(70_000), + RequiredGasLimit: utils.DefaultERC20RequiredGasLimit, } amount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(13)) @@ -128,7 +128,7 @@ func BasicERC20SendReceive(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - RequiredGasLimit: big.NewInt(0), + RequiredGasLimit: utils.DefaultERC20RequiredGasLimit, } receipt, bridgedAmount = utils.SendERC20Destination( diff --git a/tests/flows/erc20_source_multihop.go b/tests/flows/erc20_source_multihop.go index ca153b47..0138dca0 100644 --- a/tests/flows/erc20_source_multihop.go +++ b/tests/flows/erc20_source_multihop.go @@ -89,7 +89,7 @@ func ERC20SourceMultihop(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(1e18), SecondaryFee: big.NewInt(0), - RequiredGasLimit: big.NewInt(100_000), + RequiredGasLimit: utils.DefaultERC20RequiredGasLimit, } amount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(13)) diff --git a/tests/flows/native_source_erc20_destination.go b/tests/flows/native_source_erc20_destination.go index 77e34edb..2a1a42dc 100644 --- a/tests/flows/native_source_erc20_destination.go +++ b/tests/flows/native_source_erc20_destination.go @@ -76,7 +76,7 @@ func NativeSourceERC20Destination(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - RequiredGasLimit: big.NewInt(70_000), + RequiredGasLimit: utils.DefaultERC20RequiredGasLimit, } // Send the tokens and verify expected events @@ -127,7 +127,7 @@ func NativeSourceERC20Destination(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - RequiredGasLimit: big.NewInt(0), + RequiredGasLimit: utils.DefaultNativeTokenRequiredGasLimit, } // Send tokens on Subnet A back for native tokens on C-Chain diff --git a/tests/flows/native_source_multihop.go b/tests/flows/native_source_multihop.go index ee111804..da8d785b 100644 --- a/tests/flows/native_source_multihop.go +++ b/tests/flows/native_source_multihop.go @@ -89,7 +89,7 @@ func NativeTokenSourceMultihop(network interfaces.Network) { Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - RequiredGasLimit: big.NewInt(100_000), + RequiredGasLimit: utils.DefaultERC20RequiredGasLimit, } // Send the tokens and verify expected events diff --git a/tests/local/e2e_test.go b/tests/local/e2e_test.go index 67f95f15..c53d9a48 100644 --- a/tests/local/e2e_test.go +++ b/tests/local/e2e_test.go @@ -22,6 +22,7 @@ const ( erc20SourceLabel = "ERC20Source" erc20DestinationLabel = "ERC20Destination" nativeTokenSourceLabel = "NativeTokenSource" + multiHopLabel = "MultiHop" ) var ( @@ -80,12 +81,12 @@ var _ = ginkgo.Describe("[Teleporter Token Bridge integration tests]", func() { flows.NativeSourceERC20Destination(LocalNetworkInstance) }) ginkgo.It("Bridge an ERC20 token with ERC20Source multihop", - ginkgo.Label(erc20SourceLabel, erc20DestinationLabel), + ginkgo.Label(erc20SourceLabel, erc20DestinationLabel, multiHopLabel), func() { flows.ERC20SourceMultihop(LocalNetworkInstance) }) ginkgo.It("Bridge an ERC20 token with NativeTokenSource multihop", - ginkgo.Label(nativeTokenSourceLabel, erc20DestinationLabel), + ginkgo.Label(nativeTokenSourceLabel, erc20DestinationLabel, multiHopLabel), func() { flows.NativeTokenSourceMultihop(LocalNetworkInstance) }) diff --git a/tests/utils/constants.go b/tests/utils/constants.go new file mode 100644 index 00000000..4cee2e66 --- /dev/null +++ b/tests/utils/constants.go @@ -0,0 +1,8 @@ +package utils + +import "math/big" + +var ( + DefaultERC20RequiredGasLimit = big.NewInt(70_000) + DefaultNativeTokenRequiredGasLimit = big.NewInt(90_000) +) diff --git a/tests/utils/utils.go b/tests/utils/utils.go index 112c3816..fdc4f343 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -265,7 +265,7 @@ func SendERC20MultihopAndVerify( Recipient: recipientAddress, PrimaryFee: big.NewInt(0), SecondaryFee: big.NewInt(0), - RequiredGasLimit: big.NewInt(80_000), + RequiredGasLimit: DefaultERC20RequiredGasLimit, } // Send tokens through a multihop transfer From 7b5879d583c6753d47a56a7b2d9a22f35a780ba9 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Fri, 5 Apr 2024 12:29:31 -0700 Subject: [PATCH 10/11] comment updates --- contracts/src/TeleporterTokenDestination.sol | 5 ++++- contracts/src/interfaces/ITeleporterTokenBridge.sol | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index eda61c76..fa634514 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -34,7 +34,10 @@ abstract contract TeleporterTokenDestination is /// @notice The ERC20 token this contract uses to pay for Teleporter fees. address public immutable feeTokenAddress; - /// @notice Required gas limit for sending tokens back to the source blockchain. + /** + * @notice Fixed gas cost for performing a multihop transfer on the `sourceBlockchainID` + * , before forwarding to the final destination bridge instance. + */ uint256 public constant MULTIHOP_REQUIRED_GAS = 220_000; /** diff --git a/contracts/src/interfaces/ITeleporterTokenBridge.sol b/contracts/src/interfaces/ITeleporterTokenBridge.sol index 7d4e27ba..4812cda2 100644 --- a/contracts/src/interfaces/ITeleporterTokenBridge.sol +++ b/contracts/src/interfaces/ITeleporterTokenBridge.sol @@ -19,7 +19,9 @@ import {ITeleporterReceiver} from "@teleporter/ITeleporterReceiver.sol"; * @param recipient address of the recipient on the destination chain * @param primaryFee amount of tokens to pay for Teleporter fee on the source chain * @param secondaryFee amount of tokens to pay for Teleporter fee if a multihop is needed - * @param requiredGasLimit gas limit requirement for sending to a destination token bridge + * @param requiredGasLimit gas limit requirement for sending to a token bridge. + * This is required because the gas requirement varies based on the token bridge instance + * specified by `destinationBlockchainID` and `destinationBridgeAddress`. */ struct SendTokensInput { bytes32 destinationBlockchainID; From 20ab9db6e82efb778762c4f4d7a5ce45256ade06 Mon Sep 17 00:00:00 2001 From: Matthew Lam Date: Fri, 5 Apr 2024 12:30:01 -0700 Subject: [PATCH 11/11] updating bindings --- abi-bindings/go/ERC20Destination/ERC20Destination.go | 2 +- abi-bindings/go/ERC20Source/ERC20Source.go | 2 +- abi-bindings/go/NativeTokenSource/NativeTokenSource.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index f44d53af..e7466508 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -42,7 +42,7 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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: "0x6101406040523480156200001257600080fd5b5060405162002f4c38038062002f4c8339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002f2c83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002f2c83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002f2c8339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051612667620008c560003960006102960152600081816103b70152611259015260008181610446015281816110090152818161121f01526116d601526000818161025801528181610fd9015281816111f9015261164e0152600081816103f101526110d301526000818161020601528181610851015281816114040152611bd601526126676000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063b8df0dea11610097578063d2cc7a7011610071578063d2cc7a7014610413578063dd62ed3e1461041b578063f2fde38b1461042e578063f5ea06031461044157600080fd5b8063b8df0dea146103b2578063c868efaa146103d9578063d127dc9b146103ec57600080fd5b806397314297116100d35780639731429714610356578063a457c2d714610382578063a9059cbb14610395578063b6580b69146103a857600080fd5b8063715018a6146103355780638da5cb5b1461033d57806395d89b411461034e57600080fd5b80632b0d8f1811610166578063395093511161014057806339509351146102d35780634511243e146102e65780635eb99514146102f957806370a082311461030c57600080fd5b80632b0d8f181461027a578063313ce5671461028f57806332709bc1146102c057600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101ef5780631a7f5bec1461020157806323b872dd1461024057806329b7b3fd14610253575b600080fd5b6101b6610468565b6040516101c39190612175565b60405180910390f35b6101df6101da36600461219d565b6104fa565b60405190151581526020016101c3565b6006545b6040519081526020016101c3565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61024e3660046121c9565b610514565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61028d61028836600461220a565b610538565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b61028d6102ce366004612227565b61063d565b6101df6102e136600461219d565b61065d565b61028d6102f436600461220a565b61067f565b61028d610307366004612258565b61077c565b6101f361031a36600461220a565b6001600160a01b031660009081526004602052604090205490565b61028d610790565b6003546001600160a01b0316610228565b6101b66107a4565b6101df61036436600461220a565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61039036600461219d565b6107b3565b6101df6103a336600461219d565b61082e565b6101f362035b6081565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b61028d6103e7366004612271565b61083c565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f3565b6101f36104293660046122fa565b610a06565b61028d61043c36600461220a565b610a31565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047790612333565b80601f01602080910402602001604051908101604052809291908181526020018280546104a390612333565b80156104f05780601f106104c5576101008083540402835291602001916104f0565b820191906000526020600020905b8154815290600101906020018083116104d357829003601f168201915b5050505050905090565b600033610508818585610aa7565b60019150505b92915050565b600033610522858285610bcb565b61052d858585610c3f565b506001949350505050565b610540610dea565b6001600160a01b03811661056f5760405162461bcd60e51b81526004016105669061236d565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610566565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610645610df2565b61064f8282610e4b565b6106596001600055565b5050565b6000336105088185856106708383610a06565b61067a91906123d1565b610aa7565b610687610dea565b6001600160a01b0381166106ad5760405162461bcd60e51b81526004016105669061236d565b6001600160a01b03811660009081526001602052604090205460ff166107275760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610566565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610784610dea565b61078d81611400565b50565b6107986115a0565b6107a260006115fa565b565b60606008805461047790612333565b600033816107c18286610a06565b9050838110156108215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610566565b61052d8286868403610aa7565b600033610508818585610c3f565b610844610df2565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df91906123e4565b10156109465760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610566565b61094f33610364565b156109b55760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610566565b6109f6848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164c92505050565b610a006001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a396115a0565b6001600160a01b038116610a9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610566565b61078d816115fa565b6001600160a01b038316610b095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610566565b6001600160a01b038216610b6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610566565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610bd78484610a06565b90506000198114610a005781811015610c325760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610566565b610a008484848403610aa7565b6001600160a01b038316610ca35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610566565b6001600160a01b038216610d055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610566565b6001600160a01b03831660009081526004602052604090205481811015610d7d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610566565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ddd9086815260200190565b60405180910390a3610a00565b6107a26115a0565b600260005403610e445760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610566565b6002600055565b8135610ebf5760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610566565b6000610ed1604084016020850161220a565b6001600160a01b031603610f4d5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610566565b6000610f5f606084016040850161220a565b6001600160a01b031603610fd05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b6064820152608401610566565b60a082013560007f00000000000000000000000000000000000000000000000000000000000000008435036110d1576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611039604086016020870161220a565b6001600160a01b03161461105f5760405162461bcd60e51b8152600401610566906123fd565b6080840135156110cc5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610566565b61113d565b7f0000000000000000000000000000000000000000000000000000000000000000843503611130573061110a604086016020870161220a565b6001600160a01b0316036111305760405162461bcd60e51b8152600401610566906123fd565b5062035b60905060a08301355b611146836117ef565b925061115a608085013560608601356123d1565b83116111ce5760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610566565b6111dc60608501358461245a565b92506111e7836117fb565b60006113b36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200189606001358152508152602001858152602001600067ffffffffffffffff8111156112b3576112b361246d565b6040519080825280602002602001820160405280156112dc578160200160208202803683370190505b5081526020016040518060c001604052808960000135815260200189602001602081019061130a919061220a565b6001600160a01b0316815260200161132860608b0160408c0161220a565b6001600160a01b0390811682526080808c0135602080850191909152600060408086019190915260609485018b90528051865181840152918601518416828201528501519092168284015291830151818301529082015160a0808301919091529091015160c082015260e0810188905261010001604051602081830303815290604052815250611805565b9050336001600160a01b0316817fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a087876040516113f1929190612483565b60405180910390a35050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611460573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148491906123e4565b600254909150818311156114f45760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610566565b8083116115695760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610566565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107a25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610566565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146116d45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610566565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461177b5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610566565b6000808280602001905181019061179291906124e6565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c826040516117d191815260200190565b60405180910390a26117e3828261192b565b5050505050565b505050565b600061050e3083611935565b61078d3082611a9d565b600080611810611bd1565b604084015160200151909150156118b5576040830151516001600160a01b03166118925760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610566565b6040830151602081015190516118b5916001600160a01b03909116908390611ce5565b604051630624488560e41b81526001600160a01b038216906362448850906118e1908690600401612558565b6020604051808303816000875af1158015611900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192491906123e4565b9392505050565b6106598282611dca565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a291906123e4565b90506119b96001600160a01b038516333086611e8b565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2491906123e4565b9050818111611a8a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610566565b611a94828261245a565b95945050505050565b6001600160a01b038216611afd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610566565b6001600160a01b03821660009081526004602052604090205481811015611b715760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610566565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5691906125d6565b9050611c7a816001600160a01b031660009081526001602052604090205460ff1690565b15611ce05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610566565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5a91906123e4565b611d6491906123d1565b6040516001600160a01b038516602482015260448101829052909150610a0090859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ec3565b6001600160a01b038216611e205760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610566565b8060066000828254611e3291906123d1565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a009085906323b872dd60e01b90608401611d93565b6000611f18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f959092919063ffffffff16565b8051909150156117ea5780806020019051810190611f3691906125f3565b6117ea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610566565b6060611fa48484600085611fac565b949350505050565b60608247101561200d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610566565b600080866001600160a01b031685876040516120299190612615565b60006040518083038185875af1925050503d8060008114612066576040519150601f19603f3d011682016040523d82523d6000602084013e61206b565b606091505b509150915061207c87838387612087565b979650505050505050565b606083156120f65782516000036120ef576001600160a01b0385163b6120ef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610566565b5081611fa4565b611fa4838381511561210b5781518083602001fd5b8060405162461bcd60e51b81526004016105669190612175565b60005b83811015612140578181015183820152602001612128565b50506000910152565b60008151808452612161816020860160208601612125565b601f01601f19169290920160200192915050565b6020815260006119246020830184612149565b6001600160a01b038116811461078d57600080fd5b600080604083850312156121b057600080fd5b82356121bb81612188565b946020939093013593505050565b6000806000606084860312156121de57600080fd5b83356121e981612188565b925060208401356121f981612188565b929592945050506040919091013590565b60006020828403121561221c57600080fd5b813561192481612188565b60008082840360e081121561223b57600080fd5b60c081121561224957600080fd5b50919360c08501359350915050565b60006020828403121561226a57600080fd5b5035919050565b6000806000806060858703121561228757600080fd5b84359350602085013561229981612188565b9250604085013567ffffffffffffffff808211156122b657600080fd5b818701915087601f8301126122ca57600080fd5b8135818111156122d957600080fd5b8860208285010111156122eb57600080fd5b95989497505060200194505050565b6000806040838503121561230d57600080fd5b823561231881612188565b9150602083013561232881612188565b809150509250929050565b600181811c9082168061234757607f821691505b60208210810361236757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561050e5761050e6123bb565b6000602082840312156123f657600080fd5b5051919050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561050e5761050e6123bb565b634e487b7160e01b600052604160045260246000fd5b8235815260e08101602084013561249981612188565b6001600160a01b0390811660208401526040850135906124b882612188565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b600080604083850312156124f957600080fd5b825161250481612188565b6020939093015192949293505050565b600081518084526020808501945080840160005b8381101561254d5781516001600160a01b031687529582019590820190600101612528565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526125b9610100840182612514565b905060a0840151601f198483030160e0850152611a948282612149565b6000602082840312156125e857600080fd5b815161192481612188565b60006020828403121561260557600080fd5b8151801515811461192457600080fd5b60008251612627818460208701612125565b919091019291505056fea2646970667358221220188df3da2ea254fb9e3e151b5b735c466760c4a6e1f3843cc1548080e9d2fc1a64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101406040523480156200001257600080fd5b5060405162002f4c38038062002f4c8339810160408190526200003591620005eb565b6001600055828288888888308484816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620006b3565b600255506200014633620003da565b62000151816200042c565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620006b3565b60a05282620002335760405162461bcd60e51b8152602060048201526035602482015260008051602062002f2c83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518303620002bb5760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038216620003285760405162461bcd60e51b8152602060048201526035602482015260008051602062002f2c83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b0381166200038a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002f2c8339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60c0929092526001600160a01b0390811660e05216610100525060079050620003b483826200075c565b506008620003c382826200075c565b50505060ff16610120525062000828945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000436620004ab565b6001600160a01b0381166200049d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620004a881620003da565b50565b6003546001600160a01b03163314620005075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200052157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054e57600080fd5b81516001600160401b03808211156200056b576200056b62000526565b604051601f8301601f19908116603f0116810190828211818310171562000596576200059662000526565b81604052838152602092508683858801011115620005b357600080fd5b600091505b83821015620005d75785820183015181830184015290820190620005b8565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200060757600080fd5b620006128862000509565b9650620006226020890162000509565b955060408801519450620006396060890162000509565b60808901519094506001600160401b03808211156200065757600080fd5b620006658b838c016200053c565b945060a08a01519150808211156200067c57600080fd5b506200068b8a828b016200053c565b92505060c088015160ff81168114620006a357600080fd5b8091505092959891949750929550565b600060208284031215620006c657600080fd5b5051919050565b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075757600081815260208120601f850160051c81016020861015620007325750805b601f850160051c820191505b8181101562000753578281556001016200073e565b5050505b505050565b81516001600160401b0381111562000778576200077862000526565b6200079081620007898454620006cd565b8462000709565b602080601f831160018114620007c85760008415620007af5750858301515b600019600386901b1c1916600185901b17855562000753565b600085815260208120601f198616915b82811015620007f957888601518255948401946001909101908401620007d8565b5085821015620008185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051612667620008c560003960006102960152600081816103b70152611259015260008181610446015281816110090152818161121f01526116d601526000818161025801528181610fd9015281816111f9015261164e0152600081816103f101526110d301526000818161020601528181610851015281816114040152611bd601526126676000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063b8df0dea11610097578063d2cc7a7011610071578063d2cc7a7014610413578063dd62ed3e1461041b578063f2fde38b1461042e578063f5ea06031461044157600080fd5b8063b8df0dea146103b2578063c868efaa146103d9578063d127dc9b146103ec57600080fd5b806397314297116100d35780639731429714610356578063a457c2d714610382578063a9059cbb14610395578063b6580b69146103a857600080fd5b8063715018a6146103355780638da5cb5b1461033d57806395d89b411461034e57600080fd5b80632b0d8f1811610166578063395093511161014057806339509351146102d35780634511243e146102e65780635eb99514146102f957806370a082311461030c57600080fd5b80632b0d8f181461027a578063313ce5671461028f57806332709bc1146102c057600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101ef5780631a7f5bec1461020157806323b872dd1461024057806329b7b3fd14610253575b600080fd5b6101b6610468565b6040516101c39190612175565b60405180910390f35b6101df6101da36600461219d565b6104fa565b60405190151581526020016101c3565b6006545b6040519081526020016101c3565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c3565b6101df61024e3660046121c9565b610514565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61028d61028836600461220a565b610538565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c3565b61028d6102ce366004612227565b61063d565b6101df6102e136600461219d565b61065d565b61028d6102f436600461220a565b61067f565b61028d610307366004612258565b61077c565b6101f361031a36600461220a565b6001600160a01b031660009081526004602052604090205490565b61028d610790565b6003546001600160a01b0316610228565b6101b66107a4565b6101df61036436600461220a565b6001600160a01b031660009081526001602052604090205460ff1690565b6101df61039036600461219d565b6107b3565b6101df6103a336600461219d565b61082e565b6101f362035b6081565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b61028d6103e7366004612271565b61083c565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b6002546101f3565b6101f36104293660046122fa565b610a06565b61028d61043c36600461220a565b610a31565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b60606007805461047790612333565b80601f01602080910402602001604051908101604052809291908181526020018280546104a390612333565b80156104f05780601f106104c5576101008083540402835291602001916104f0565b820191906000526020600020905b8154815290600101906020018083116104d357829003601f168201915b5050505050905090565b600033610508818585610aa7565b60019150505b92915050565b600033610522858285610bcb565b61052d858585610c3f565b506001949350505050565b610540610dea565b6001600160a01b03811661056f5760405162461bcd60e51b81526004016105669061236d565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156105ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610566565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610645610df2565b61064f8282610e4b565b6106596001600055565b5050565b6000336105088185856106708383610a06565b61067a91906123d1565b610aa7565b610687610dea565b6001600160a01b0381166106ad5760405162461bcd60e51b81526004016105669061236d565b6001600160a01b03811660009081526001602052604090205460ff166107275760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610566565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610784610dea565b61078d81611400565b50565b6107986115a0565b6107a260006115fa565b565b60606008805461047790612333565b600033816107c18286610a06565b9050838110156108215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610566565b61052d8286868403610aa7565b600033610508818585610c3f565b610844610df2565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df91906123e4565b10156109465760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610566565b61094f33610364565b156109b55760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610566565b6109f6848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164c92505050565b610a006001600055565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610a396115a0565b6001600160a01b038116610a9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610566565b61078d816115fa565b6001600160a01b038316610b095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610566565b6001600160a01b038216610b6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610566565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610bd78484610a06565b90506000198114610a005781811015610c325760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610566565b610a008484848403610aa7565b6001600160a01b038316610ca35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610566565b6001600160a01b038216610d055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610566565b6001600160a01b03831660009081526004602052604090205481811015610d7d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610566565b6001600160a01b0380851660008181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ddd9086815260200190565b60405180910390a3610a00565b6107a26115a0565b600260005403610e445760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610566565b6002600055565b8135610ebf5760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610566565b6000610ed1604084016020850161220a565b6001600160a01b031603610f4d5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610566565b6000610f5f606084016040850161220a565b6001600160a01b031603610fd05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f60448201527120726563697069656e74206164647265737360701b6064820152608401610566565b60a082013560007f00000000000000000000000000000000000000000000000000000000000000008435036110d1576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611039604086016020870161220a565b6001600160a01b03161461105f5760405162461bcd60e51b8152600401610566906123fd565b6080840135156110cc5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610566565b61113d565b7f0000000000000000000000000000000000000000000000000000000000000000843503611130573061110a604086016020870161220a565b6001600160a01b0316036111305760405162461bcd60e51b8152600401610566906123fd565b5062035b60905060a08301355b611146836117ef565b925061115a608085013560608601356123d1565b83116111ce5760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610566565b6111dc60608501358461245a565b92506111e7836117fb565b60006113b36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200189606001358152508152602001858152602001600067ffffffffffffffff8111156112b3576112b361246d565b6040519080825280602002602001820160405280156112dc578160200160208202803683370190505b5081526020016040518060c001604052808960000135815260200189602001602081019061130a919061220a565b6001600160a01b0316815260200161132860608b0160408c0161220a565b6001600160a01b0390811682526080808c0135602080850191909152600060408086019190915260609485018b90528051865181840152918601518416828201528501519092168284015291830151818301529082015160a0808301919091529091015160c082015260e0810188905261010001604051602081830303815290604052815250611805565b9050336001600160a01b0316817fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a087876040516113f1929190612483565b60405180910390a35050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611460573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148491906123e4565b600254909150818311156114f45760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610566565b8083116115695760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610566565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146107a25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610566565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000083146116d45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610566565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461177b5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610566565b6000808280602001905181019061179291906124e6565b91509150816001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c826040516117d191815260200190565b60405180910390a26117e3828261192b565b5050505050565b505050565b600061050e3083611935565b61078d3082611a9d565b600080611810611bd1565b604084015160200151909150156118b5576040830151516001600160a01b03166118925760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610566565b6040830151602081015190516118b5916001600160a01b03909116908390611ce5565b604051630624488560e41b81526001600160a01b038216906362448850906118e1908690600401612558565b6020604051808303816000875af1158015611900573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192491906123e4565b9392505050565b6106598282611dca565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a291906123e4565b90506119b96001600160a01b038516333086611e8b565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2491906123e4565b9050818111611a8a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610566565b611a94828261245a565b95945050505050565b6001600160a01b038216611afd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610566565b6001600160a01b03821660009081526004602052604090205481811015611b715760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610566565b6001600160a01b03831660008181526004602090815260408083208686039055600680548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5691906125d6565b9050611c7a816001600160a01b031660009081526001602052604090205460ff1690565b15611ce05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610566565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5a91906123e4565b611d6491906123d1565b6040516001600160a01b038516602482015260448101829052909150610a0090859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ec3565b6001600160a01b038216611e205760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610566565b8060066000828254611e3291906123d1565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a009085906323b872dd60e01b90608401611d93565b6000611f18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f959092919063ffffffff16565b8051909150156117ea5780806020019051810190611f3691906125f3565b6117ea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610566565b6060611fa48484600085611fac565b949350505050565b60608247101561200d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610566565b600080866001600160a01b031685876040516120299190612615565b60006040518083038185875af1925050503d8060008114612066576040519150601f19603f3d011682016040523d82523d6000602084013e61206b565b606091505b509150915061207c87838387612087565b979650505050505050565b606083156120f65782516000036120ef576001600160a01b0385163b6120ef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610566565b5081611fa4565b611fa4838381511561210b5781518083602001fd5b8060405162461bcd60e51b81526004016105669190612175565b60005b83811015612140578181015183820152602001612128565b50506000910152565b60008151808452612161816020860160208601612125565b601f01601f19169290920160200192915050565b6020815260006119246020830184612149565b6001600160a01b038116811461078d57600080fd5b600080604083850312156121b057600080fd5b82356121bb81612188565b946020939093013593505050565b6000806000606084860312156121de57600080fd5b83356121e981612188565b925060208401356121f981612188565b929592945050506040919091013590565b60006020828403121561221c57600080fd5b813561192481612188565b60008082840360e081121561223b57600080fd5b60c081121561224957600080fd5b50919360c08501359350915050565b60006020828403121561226a57600080fd5b5035919050565b6000806000806060858703121561228757600080fd5b84359350602085013561229981612188565b9250604085013567ffffffffffffffff808211156122b657600080fd5b818701915087601f8301126122ca57600080fd5b8135818111156122d957600080fd5b8860208285010111156122eb57600080fd5b95989497505060200194505050565b6000806040838503121561230d57600080fd5b823561231881612188565b9150602083013561232881612188565b809150509250929050565b600181811c9082168061234757607f821691505b60208210810361236757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561050e5761050e6123bb565b6000602082840312156123f657600080fd5b5051919050565b6020808252603e908201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e766160408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8181038181111561050e5761050e6123bb565b634e487b7160e01b600052604160045260246000fd5b8235815260e08101602084013561249981612188565b6001600160a01b0390811660208401526040850135906124b882612188565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b600080604083850312156124f957600080fd5b825161250481612188565b6020939093015192949293505050565b600081518084526020808501945080840160005b8381101561254d5781516001600160a01b031687529582019590820190600101612528565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526125b9610100840182612514565b905060a0840151601f198483030160e0850152611a948282612149565b6000602082840312156125e857600080fd5b815161192481612188565b60006020828403121561260557600080fd5b8151801515811461192457600080fd5b60008251612627818460208701612125565b919091019291505056fea2646970667358221220f03d4747ef623ae1875f4bfcfe6922aa37a4095cbf3a5972610b7352c4af61ab64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/ERC20Source/ERC20Source.go b/abi-bindings/go/ERC20Source/ERC20Source.go index 0d453fa4..87e56d76 100644 --- a/abi-bindings/go/ERC20Source/ERC20Source.go +++ b/abi-bindings/go/ERC20Source/ERC20Source.go @@ -42,7 +42,7 @@ type SendTokensInput struct { // ERC20SourceMetaData contains all meta data concerning the ERC20Source contract. var ERC20SourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"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: "0x6101006040523480156200001257600080fd5b5060405162002197380380620021978339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611d1c6200047b6000396000818161029b0152818161109c01526111fa01526000818161021f0152610b17015260008181610259015281816108280152610f9501526000818161013d0152818161052c01528181610c72015261138e0152611d1c6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d127dc9b11610066578063d127dc9b14610254578063d2cc7a701461027b578063f2fde38b14610283578063fc0c546a1461029657600080fd5b80638da5cb5b146101cd57806397314297146101de578063b8df0dea1461021a578063c868efaa1461024157600080fd5b806332709bc1116100d357806332709bc11461018c5780634511243e1461019f5780635eb99514146101b2578063715018a6146101c557600080fd5b806302ee3e9c146100fa5780631a7f5bec146101385780632b0d8f1814610177575b600080fd5b610125610108366004611866565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012f565b61018a610185366004611896565b6102bd565b005b61018a61019a3660046118b3565b6103c2565b61018a6101ad366004611896565b6103f2565b61018a6101c03660046118e4565b6104ef565b61018a610503565b6003546001600160a01b031661015f565b61020a6101ec366004611896565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161012f565b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b61018a61024f3660046118fd565b610517565b6101257f000000000000000000000000000000000000000000000000000000000000000081565b600254610125565b61018a610291366004611896565b6106e1565b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b6102c5610757565b6001600160a01b0381166102f45760405162461bcd60e51b81526004016102eb90611986565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103735760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102eb565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103ca61075f565b6103e46103dc36849003840184611a21565b8260006107b8565b6103ee6001600055565b5050565b6103fa610757565b6001600160a01b0381166104205760405162461bcd60e51b81526004016102eb90611986565b6001600160a01b03811660009081526001602052604090205460ff1661049a5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102eb565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104f7610757565b61050081610c6e565b50565b61050b610e0e565b6105156000610e68565b565b61051f61075f565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ba9190611a8f565b10156106215760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102eb565b61062a336101ec565b156106905760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102eb565b6106d1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610eba92505050565b6106db6001600055565b50505050565b6106e9610e0e565b6001600160a01b03811661074e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102eb565b61050081610e68565b610515610e0e565b6002600054036107b15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102eb565b6002600055565b82516108245760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b60648201526084016102eb565b82517f000000000000000000000000000000000000000000000000000000000000000090036108b05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b60648201526084016102eb565b60208301516001600160a01b03166109295760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b60648201526084016102eb565b60408301516001600160a01b03166109995760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b60648201526084016102eb565b608083015115610a015760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b60648201526084016102eb565b80610a1257610a0f82611095565b91505b82606001518211610a8b5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f7665722066656573000000000000000060648201526084016102eb565b6060830151610a9a9083611abe565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610ad6908490611ad1565b925050819055506000610be66040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020018660a001518152602001600067ffffffffffffffff811115610b7557610b756119d4565b604051908082528060200260200182016040528015610b9e578160200160208202803683370190505b508152602001866040015186604051602001610bcf9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506110c7565b60408051865181526020808801516001600160a01b0390811691830191909152878301511681830152606080880151908201526080808801519082015260a0808801519082015260c081018690529051919250339183917fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0919081900360e00190a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190611a8f565b60025490915081831115610d625760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102eb565b808311610dd75760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102eb565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102eb565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008082806020019051810190610ed19190611ae4565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610f645760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b60648201526084016102eb565b610f6e8282611abe565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f000000000000000000000000000000000000000000000000000000000000000090036110895760208301516001600160a01b0316301461102c5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b60648201526084016102eb565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8360405161106b91815260200190565b60405180910390a26110818360400151836111ed565b505050505050565b611081838360016107b8565b60006110c17f000000000000000000000000000000000000000000000000000000000000000083611221565b92915050565b6000806110d2611389565b60408401516020015190915015611177576040830151516001600160a01b03166111545760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016102eb565b604083015160208101519051611177916001600160a01b0390911690839061149d565b604051630624488560e41b81526001600160a01b038216906362448850906111a3908690600401611bfa565b6020604051808303816000875af11580156111c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e69190611a8f565b9392505050565b6103ee6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611582565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e9190611a8f565b90506112a56001600160a01b0385163330866115b7565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190611a8f565b90508181116113765760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016102eb565b6113808282611abe565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e9190611c78565b9050611432816001600160a01b031660009081526001602052604090205460ff1690565b156114985760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016102eb565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190611a8f565b61151c9190611ad1565b6040516001600160a01b0385166024820152604481018290529091506106db90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115ef565b6040516001600160a01b0383166024820152604481018290526115b290849063a9059cbb60e01b9060640161154b565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106db9085906323b872dd60e01b9060840161154b565b6000611644826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116c19092919063ffffffff16565b8051909150156115b257808060200190518101906116629190611c95565b6115b25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102eb565b60606116d084846000856116d8565b949350505050565b6060824710156117395760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102eb565b600080866001600160a01b031685876040516117559190611cb7565b60006040518083038185875af1925050503d8060008114611792576040519150601f19603f3d011682016040523d82523d6000602084013e611797565b606091505b50915091506117a8878383876117b3565b979650505050505050565b6060831561182257825160000361181b576001600160a01b0385163b61181b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102eb565b50816116d0565b6116d083838151156118375781518083602001fd5b8060405162461bcd60e51b81526004016102eb9190611cd3565b6001600160a01b038116811461050057600080fd5b6000806040838503121561187957600080fd5b82359150602083013561188b81611851565b809150509250929050565b6000602082840312156118a857600080fd5b81356111e681611851565b60008082840360e08112156118c757600080fd5b60c08112156118d557600080fd5b50919360c08501359350915050565b6000602082840312156118f657600080fd5b5035919050565b6000806000806060858703121561191357600080fd5b84359350602085013561192581611851565b9250604085013567ffffffffffffffff8082111561194257600080fd5b818701915087601f83011261195657600080fd5b81358181111561196557600080fd5b88602082850101111561197757600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715611a1b57634e487b7160e01b600052604160045260246000fd5b60405290565b600060c08284031215611a3357600080fd5b611a3b6119ea565b823581526020830135611a4d81611851565b60208201526040830135611a6081611851565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b600060208284031215611aa157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156110c1576110c1611aa8565b808201808211156110c1576110c1611aa8565b60008082840360e0811215611af857600080fd5b60c0811215611b0657600080fd5b50611b0f6119ea565b835181526020840151611b2181611851565b60208201526040840151611b3481611851565b6040820152606084810151908201526080808501519082015260a0808501519082015260c09093015192949293505050565b600081518084526020808501945080840160005b83811015611b9f5781516001600160a01b031687529582019590820190600101611b7a565b509495945050505050565b60005b83811015611bc5578181015183820152602001611bad565b50506000910152565b60008151808452611be6816020860160208601611baa565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c5b610100840182611b66565b905060a0840151601f198483030160e08501526113808282611bce565b600060208284031215611c8a57600080fd5b81516111e681611851565b600060208284031215611ca757600080fd5b815180151581146111e657600080fd5b60008251611cc9818460208701611baa565b9190910192915050565b6020815260006111e66020830184611bce56fea2646970667358221220dc16a6759a0a1a4fe3d7d0b11109a294b9fa8664196e767645d5eee1d809e30564736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162002197380380620021978339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611d1c6200047b6000396000818161029b0152818161109c01526111fa01526000818161021f0152610b17015260008181610259015281816108280152610f9501526000818161013d0152818161052c01528181610c72015261138e0152611d1c6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d127dc9b11610066578063d127dc9b14610254578063d2cc7a701461027b578063f2fde38b14610283578063fc0c546a1461029657600080fd5b80638da5cb5b146101cd57806397314297146101de578063b8df0dea1461021a578063c868efaa1461024157600080fd5b806332709bc1116100d357806332709bc11461018c5780634511243e1461019f5780635eb99514146101b2578063715018a6146101c557600080fd5b806302ee3e9c146100fa5780631a7f5bec146101385780632b0d8f1814610177575b600080fd5b610125610108366004611866565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012f565b61018a610185366004611896565b6102bd565b005b61018a61019a3660046118b3565b6103c2565b61018a6101ad366004611896565b6103f2565b61018a6101c03660046118e4565b6104ef565b61018a610503565b6003546001600160a01b031661015f565b61020a6101ec366004611896565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161012f565b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b61018a61024f3660046118fd565b610517565b6101257f000000000000000000000000000000000000000000000000000000000000000081565b600254610125565b61018a610291366004611896565b6106e1565b61015f7f000000000000000000000000000000000000000000000000000000000000000081565b6102c5610757565b6001600160a01b0381166102f45760405162461bcd60e51b81526004016102eb90611986565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103735760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016102eb565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103ca61075f565b6103e46103dc36849003840184611a21565b8260006107b8565b6103ee6001600055565b5050565b6103fa610757565b6001600160a01b0381166104205760405162461bcd60e51b81526004016102eb90611986565b6001600160a01b03811660009081526001602052604090205460ff1661049a5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016102eb565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6104f7610757565b61050081610c6e565b50565b61050b610e0e565b6105156000610e68565b565b61051f61075f565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ba9190611a8f565b10156106215760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016102eb565b61062a336101ec565b156106905760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016102eb565b6106d1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610eba92505050565b6106db6001600055565b50505050565b6106e9610e0e565b6001600160a01b03811661074e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102eb565b61050081610e68565b610515610e0e565b6002600054036107b15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102eb565b6002600055565b82516108245760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b60648201526084016102eb565b82517f000000000000000000000000000000000000000000000000000000000000000090036108b05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b60648201526084016102eb565b60208301516001600160a01b03166109295760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b60648201526084016102eb565b60408301516001600160a01b03166109995760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b60648201526084016102eb565b608083015115610a015760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b60648201526084016102eb565b80610a1257610a0f82611095565b91505b82606001518211610a8b5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f7665722066656573000000000000000060648201526084016102eb565b6060830151610a9a9083611abe565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610ad6908490611ad1565b925050819055506000610be66040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020018660a001518152602001600067ffffffffffffffff811115610b7557610b756119d4565b604051908082528060200260200182016040528015610b9e578160200160208202803683370190505b508152602001866040015186604051602001610bcf9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040528152506110c7565b60408051865181526020808801516001600160a01b0390811691830191909152878301511681830152606080880151908201526080808801519082015260a0808801519082015260c081018690529051919250339183917fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0919081900360e00190a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190611a8f565b60025490915081831115610d625760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102eb565b808311610dd75760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102eb565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102eb565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008082806020019051810190610ed19190611ae4565b60008781526004602090815260408083206001600160a01b038a168452909152902054919350915081811015610f645760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b60648201526084016102eb565b610f6e8282611abe565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f000000000000000000000000000000000000000000000000000000000000000090036110895760208301516001600160a01b0316301461102c5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b60648201526084016102eb565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c8360405161106b91815260200190565b60405180910390a26110818360400151836111ed565b505050505050565b611081838360016107b8565b60006110c17f000000000000000000000000000000000000000000000000000000000000000083611221565b92915050565b6000806110d2611389565b60408401516020015190915015611177576040830151516001600160a01b03166111545760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016102eb565b604083015160208101519051611177916001600160a01b0390911690839061149d565b604051630624488560e41b81526001600160a01b038216906362448850906111a3908690600401611bfa565b6020604051808303816000875af11580156111c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e69190611a8f565b9392505050565b6103ee6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611582565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e9190611a8f565b90506112a56001600160a01b0385163330866115b7565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190611a8f565b90508181116113765760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016102eb565b6113808282611abe565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e9190611c78565b9050611432816001600160a01b031660009081526001602052604090205460ff1690565b156114985760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016102eb565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190611a8f565b61151c9190611ad1565b6040516001600160a01b0385166024820152604481018290529091506106db90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115ef565b6040516001600160a01b0383166024820152604481018290526115b290849063a9059cbb60e01b9060640161154b565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106db9085906323b872dd60e01b9060840161154b565b6000611644826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116c19092919063ffffffff16565b8051909150156115b257808060200190518101906116629190611c95565b6115b25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102eb565b60606116d084846000856116d8565b949350505050565b6060824710156117395760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102eb565b600080866001600160a01b031685876040516117559190611cb7565b60006040518083038185875af1925050503d8060008114611792576040519150601f19603f3d011682016040523d82523d6000602084013e611797565b606091505b50915091506117a8878383876117b3565b979650505050505050565b6060831561182257825160000361181b576001600160a01b0385163b61181b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102eb565b50816116d0565b6116d083838151156118375781518083602001fd5b8060405162461bcd60e51b81526004016102eb9190611cd3565b6001600160a01b038116811461050057600080fd5b6000806040838503121561187957600080fd5b82359150602083013561188b81611851565b809150509250929050565b6000602082840312156118a857600080fd5b81356111e681611851565b60008082840360e08112156118c757600080fd5b60c08112156118d557600080fd5b50919360c08501359350915050565b6000602082840312156118f657600080fd5b5035919050565b6000806000806060858703121561191357600080fd5b84359350602085013561192581611851565b9250604085013567ffffffffffffffff8082111561194257600080fd5b818701915087601f83011261195657600080fd5b81358181111561196557600080fd5b88602082850101111561197757600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715611a1b57634e487b7160e01b600052604160045260246000fd5b60405290565b600060c08284031215611a3357600080fd5b611a3b6119ea565b823581526020830135611a4d81611851565b60208201526040830135611a6081611851565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b600060208284031215611aa157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156110c1576110c1611aa8565b808201808211156110c1576110c1611aa8565b60008082840360e0811215611af857600080fd5b60c0811215611b0657600080fd5b50611b0f6119ea565b835181526020840151611b2181611851565b60208201526040840151611b3481611851565b6040820152606084810151908201526080808501519082015260a0808501519082015260c09093015192949293505050565b600081518084526020808501945080840160005b83811015611b9f5781516001600160a01b031687529582019590820190600101611b7a565b509495945050505050565b60005b83811015611bc5578181015183820152602001611bad565b50506000910152565b60008151808452611be6816020860160208601611baa565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c5b610100840182611b66565b905060a0840151601f198483030160e08501526113808282611bce565b600060208284031215611c8a57600080fd5b81516111e681611851565b600060208284031215611ca757600080fd5b815180151581146111e657600080fd5b60008251611cc9818460208701611baa565b9190910192915050565b6020815260006111e66020830184611bce56fea2646970667358221220f54975d1b4b6b6e36a4bc12876e8cd94b2ad78e66b85b248502467e4d1566ed964736f6c63430008120033", } // ERC20SourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go index 528043c8..bc9f1e8f 100644 --- a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go @@ -42,7 +42,7 @@ type SendTokensInput struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"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\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SendTokens\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawTokens\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"sourceBlockchainID\",\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162002192380380620021928339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611d1162000481600039600081816103e4015281816111d5015261138901526000818160fc015281816103270152610c4b01526000818161037b0152818161095c01526110d10152600081816101ff0152818161066801528181610dae015261142d0152611d116000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610369578063d2cc7a701461039d578063f2fde38b146103b2578063fc0c546a146103d257600080fd5b80638da5cb5b146102ae57806397314297146102cc578063b8df0dea14610315578063c868efaa1461034957600080fd5b80632b0d8f18116100c65780632b0d8f18146102395780634511243e146102595780635eb9951414610279578063715018a61461029957600080fd5b806302ee3e9c1461018f578063146dfd3c146101da5780631a7f5bec146101ed57600080fd5b3661018a57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101885760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b34801561019b57600080fd5b506101c76101aa366004611870565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101886101e83660046118a0565b610406565b3480156101f957600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d1565b34801561024557600080fd5b506101886102543660046118b8565b610435565b34801561026557600080fd5b506101886102743660046118b8565b610531565b34801561028557600080fd5b506101886102943660046118d5565b61062e565b3480156102a557600080fd5b5061018861063f565b3480156102ba57600080fd5b506003546001600160a01b0316610221565b3480156102d857600080fd5b506103056102e73660046118b8565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101d1565b34801561032157600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b506101886103643660046118ee565b610653565b34801561037557600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a957600080fd5b506002546101c7565b3480156103be57600080fd5b506101886103cd3660046118b8565b61081d565b3480156103de57600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b61040e610893565b610428610420368390038301836119c4565b3460006108ec565b6104326001600055565b50565b61043d610da2565b6001600160a01b0381166104635760405162461bcd60e51b815260040161017f90611a32565b6001600160a01b03811660009081526001602052604090205460ff16156104e25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161017f565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610539610da2565b6001600160a01b03811661055f5760405162461bcd60e51b815260040161017f90611a32565b6001600160a01b03811660009081526001602052604090205460ff166105d95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161017f565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610636610da2565b61043281610daa565b610647610f4a565b6106516000610fa4565b565b61065b610893565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190611a80565b101561075d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161017f565b610766336102e7565b156107cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161017f565b61080d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ff692505050565b6108176001600055565b50505050565b610825610f4a565b6001600160a01b03811661088a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161017f565b61043281610fa4565b6002600054036108e55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161017f565b6002600055565b82516109585760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161017f565b82517f000000000000000000000000000000000000000000000000000000000000000090036109e45760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161017f565b60208301516001600160a01b0316610a5d5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161017f565b60408301516001600160a01b0316610acd5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161017f565b608083015115610b355760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161017f565b80610b4657610b43826111d1565b91505b82606001518211610bbf5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161017f565b6060830151610bce9083611aaf565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610c0a908490611ac8565b925050819055506000610d1a6040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020018660a001518152602001600067ffffffffffffffff811115610ca957610ca9611977565b604051908082528060200260200182016040528015610cd2578160200160208202803683370190505b508152602001866040015186604051602001610d039291906001600160a01b03929092168252602082015260400190565b60405160208183030381529060405281525061124d565b60408051865181526020808801516001600160a01b0390811691830191909152878301511681830152606080880151908201526080808801519082015260a0808801519082015260c081018690529051919250339183917fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0919081900360e00190a350505050565b610651610f4a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e9190611a80565b60025490915081831115610e9e5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161017f565b808311610f135760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161017f565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017f565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000808280602001905181019061100d9190611adb565b60008781526004602090815260408083206001600160a01b038a1684529091529020549193509150818110156110a05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161017f565b6110aa8282611aaf565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f000000000000000000000000000000000000000000000000000000000000000090036111c55760208301516001600160a01b031630146111685760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b606482015260840161017f565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c836040516111a791815260200190565b60405180910390a26111bd836040015183611373565b505050505050565b6111bd838360016108ec565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561122e57600080fd5b505af1158015611242573d6000803e3d6000fd5b509495945050505050565b600080611258611428565b604084015160200151909150156112fd576040830151516001600160a01b03166112da5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161017f565b6040830151602081015190516112fd916001600160a01b0390911690839061153c565b604051630624488560e41b81526001600160a01b03821690636244885090611329908690600401611be6565b6020604051808303816000875af1158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a80565b9392505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156113d557600080fd5b505af11580156113e9573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611423573d6000803e3d6000fd5b505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ad9190611c6d565b90506114d1816001600160a01b031660009081526001602052604090205460ff1690565b156115375760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161017f565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190611a80565b6115bb9190611ac8565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015292935061081792879260009161164e919085169084906116cb565b805190915015611423578080602001905181019061166c9190611c8a565b6114235760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161017f565b60606116da84846000856116e2565b949350505050565b6060824710156117435760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161017f565b600080866001600160a01b0316858760405161175f9190611cac565b60006040518083038185875af1925050503d806000811461179c576040519150601f19603f3d011682016040523d82523d6000602084013e6117a1565b606091505b50915091506117b2878383876117bd565b979650505050505050565b6060831561182c578251600003611825576001600160a01b0385163b6118255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161017f565b50816116da565b6116da83838151156118415781518083602001fd5b8060405162461bcd60e51b815260040161017f9190611cc8565b6001600160a01b038116811461043257600080fd5b6000806040838503121561188357600080fd5b8235915060208301356118958161185b565b809150509250929050565b600060c082840312156118b257600080fd5b50919050565b6000602082840312156118ca57600080fd5b813561136c8161185b565b6000602082840312156118e757600080fd5b5035919050565b6000806000806060858703121561190457600080fd5b8435935060208501356119168161185b565b9250604085013567ffffffffffffffff8082111561193357600080fd5b818701915087601f83011261194757600080fd5b81358181111561195657600080fd5b88602082850101111561196857600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156119be57634e487b7160e01b600052604160045260246000fd5b60405290565b600060c082840312156119d657600080fd5b6119de61198d565b8235815260208301356119f08161185b565b60208201526040830135611a038161185b565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215611a9257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611ac257611ac2611a99565b92915050565b80820180821115611ac257611ac2611a99565b60008082840360e0811215611aef57600080fd5b60c0811215611afd57600080fd5b50611b0661198d565b835181526020840151611b188161185b565b60208201526040840151611b2b8161185b565b6040820152606084810151908201526080808501519082015260a0808501519082015260c09093015192949293505050565b600081518084526020808501945080840160005b838110156112425781516001600160a01b031687529582019590820190600101611b71565b60005b83811015611bb1578181015183820152602001611b99565b50506000910152565b60008151808452611bd2816020860160208601611b96565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c47610100840182611b5d565b905060a0840151601f198483030160e0850152611c648282611bba565b95945050505050565b600060208284031215611c7f57600080fd5b815161136c8161185b565b600060208284031215611c9c57600080fd5b8151801515811461136c57600080fd5b60008251611cbe818460208701611b96565b9190910192915050565b60208152600061136c6020830184611bba56fea2646970667358221220d0b0f6b8fa06a618213d1cd58119428b84fc5fb43a7c932d1438be21a19b48b064736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162002192380380620021928339810160408190526200003591620003a5565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003ef565b60025550620001423362000259565b6200014d81620002ab565b50507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003ef565b60a0526001600160a01b038116620002395760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200040992505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002b56200032a565b6001600160a01b0381166200031c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b620003278162000259565b50565b6003546001600160a01b03163314620003865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a057600080fd5b919050565b600080600060608486031215620003bb57600080fd5b620003c68462000388565b9250620003d66020850162000388565b9150620003e66040850162000388565b90509250925092565b6000602082840312156200040257600080fd5b5051919050565b60805160a05160c05160e051611d1162000481600039600081816103e4015281816111d5015261138901526000818160fc015281816103270152610c4b01526000818161037b0152818161095c01526110d10152600081816101ff0152818161066801528181610dae015261142d0152611d116000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610369578063d2cc7a701461039d578063f2fde38b146103b2578063fc0c546a146103d257600080fd5b80638da5cb5b146102ae57806397314297146102cc578063b8df0dea14610315578063c868efaa1461034957600080fd5b80632b0d8f18116100c65780632b0d8f18146102395780634511243e146102595780635eb9951414610279578063715018a61461029957600080fd5b806302ee3e9c1461018f578063146dfd3c146101da5780631a7f5bec146101ed57600080fd5b3661018a57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101885760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b34801561019b57600080fd5b506101c76101aa366004611870565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101886101e83660046118a0565b610406565b3480156101f957600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d1565b34801561024557600080fd5b506101886102543660046118b8565b610435565b34801561026557600080fd5b506101886102743660046118b8565b610531565b34801561028557600080fd5b506101886102943660046118d5565b61062e565b3480156102a557600080fd5b5061018861063f565b3480156102ba57600080fd5b506003546001600160a01b0316610221565b3480156102d857600080fd5b506103056102e73660046118b8565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101d1565b34801561032157600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b506101886103643660046118ee565b610653565b34801561037557600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a957600080fd5b506002546101c7565b3480156103be57600080fd5b506101886103cd3660046118b8565b61081d565b3480156103de57600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b61040e610893565b610428610420368390038301836119c4565b3460006108ec565b6104326001600055565b50565b61043d610da2565b6001600160a01b0381166104635760405162461bcd60e51b815260040161017f90611a32565b6001600160a01b03811660009081526001602052604090205460ff16156104e25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161017f565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610539610da2565b6001600160a01b03811661055f5760405162461bcd60e51b815260040161017f90611a32565b6001600160a01b03811660009081526001602052604090205460ff166105d95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161017f565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610636610da2565b61043281610daa565b610647610f4a565b6106516000610fa4565b565b61065b610893565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190611a80565b101561075d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161017f565b610766336102e7565b156107cc5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161017f565b61080d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ff692505050565b6108176001600055565b50505050565b610825610f4a565b6001600160a01b03811661088a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161017f565b61043281610fa4565b6002600054036108e55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161017f565b6002600055565b82516109585760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161017f565b82517f000000000000000000000000000000000000000000000000000000000000000090036109e45760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161017f565b60208301516001600160a01b0316610a5d5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161017f565b60408301516001600160a01b0316610acd5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161017f565b608083015115610b355760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161017f565b80610b4657610b43826111d1565b91505b82606001518211610bbf5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161017f565b6060830151610bce9083611aaf565b83516000908152600460209081526040808320828801516001600160a01b03168452909152812080549294508492909190610c0a908490611ac8565b925050819055506000610d1a6040518060c001604052808660000151815260200186602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001886060015181525081526020018660a001518152602001600067ffffffffffffffff811115610ca957610ca9611977565b604051908082528060200260200182016040528015610cd2578160200160208202803683370190505b508152602001866040015186604051602001610d039291906001600160a01b03929092168252602082015260400190565b60405160208183030381529060405281525061124d565b60408051865181526020808801516001600160a01b0390811691830191909152878301511681830152606080880151908201526080808801519082015260a0808801519082015260c081018690529051919250339183917fdc72eade375f64388998c651c5137da74fbe64aec18f766dea3da18f154ab0a0919081900360e00190a350505050565b610651610f4a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e9190611a80565b60025490915081831115610e9e5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161017f565b808311610f135760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161017f565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017f565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000808280602001905181019061100d9190611adb565b60008781526004602090815260408083206001600160a01b038a1684529091529020549193509150818110156110a05760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161017f565b6110aa8282611aaf565b60008781526004602090815260408083206001600160a01b038a16845290915290205582517f000000000000000000000000000000000000000000000000000000000000000090036111c55760208301516001600160a01b031630146111685760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c6964206260448201526c7269646765206164647265737360981b606482015260840161017f565b82604001516001600160a01b03167f680f2e4f4032ebf1774e8cdbaddcb1b617a5a606411c8ca96257ada338d3833c836040516111a791815260200190565b60405180910390a26111bd836040015183611373565b505050505050565b6111bd838360016108ec565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561122e57600080fd5b505af1158015611242573d6000803e3d6000fd5b509495945050505050565b600080611258611428565b604084015160200151909150156112fd576040830151516001600160a01b03166112da5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161017f565b6040830151602081015190516112fd916001600160a01b0390911690839061153c565b604051630624488560e41b81526001600160a01b03821690636244885090611329908690600401611be6565b6020604051808303816000875af1158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a80565b9392505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156113d557600080fd5b505af11580156113e9573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611423573d6000803e3d6000fd5b505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ad9190611c6d565b90506114d1816001600160a01b031660009081526001602052604090205460ff1690565b156115375760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161017f565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190611a80565b6115bb9190611ac8565b604080516001600160a01b03868116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015292935061081792879260009161164e919085169084906116cb565b805190915015611423578080602001905181019061166c9190611c8a565b6114235760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161017f565b60606116da84846000856116e2565b949350505050565b6060824710156117435760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161017f565b600080866001600160a01b0316858760405161175f9190611cac565b60006040518083038185875af1925050503d806000811461179c576040519150601f19603f3d011682016040523d82523d6000602084013e6117a1565b606091505b50915091506117b2878383876117bd565b979650505050505050565b6060831561182c578251600003611825576001600160a01b0385163b6118255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161017f565b50816116da565b6116da83838151156118415781518083602001fd5b8060405162461bcd60e51b815260040161017f9190611cc8565b6001600160a01b038116811461043257600080fd5b6000806040838503121561188357600080fd5b8235915060208301356118958161185b565b809150509250929050565b600060c082840312156118b257600080fd5b50919050565b6000602082840312156118ca57600080fd5b813561136c8161185b565b6000602082840312156118e757600080fd5b5035919050565b6000806000806060858703121561190457600080fd5b8435935060208501356119168161185b565b9250604085013567ffffffffffffffff8082111561193357600080fd5b818701915087601f83011261194757600080fd5b81358181111561195657600080fd5b88602082850101111561196857600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156119be57634e487b7160e01b600052604160045260246000fd5b60405290565b600060c082840312156119d657600080fd5b6119de61198d565b8235815260208301356119f08161185b565b60208201526040830135611a038161185b565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b600060208284031215611a9257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611ac257611ac2611a99565b92915050565b80820180821115611ac257611ac2611a99565b60008082840360e0811215611aef57600080fd5b60c0811215611afd57600080fd5b50611b0661198d565b835181526020840151611b188161185b565b60208201526040840151611b2b8161185b565b6040820152606084810151908201526080808501519082015260a0808501519082015260c09093015192949293505050565b600081518084526020808501945080840160005b838110156112425781516001600160a01b031687529582019590820190600101611b71565b60005b83811015611bb1578181015183820152602001611b99565b50506000910152565b60008151808452611bd2816020860160208601611b96565b601f01601f19169290920160200192915050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152611c47610100840182611b5d565b905060a0840151601f198483030160e0850152611c648282611bba565b95945050505050565b600060208284031215611c7f57600080fd5b815161136c8161185b565b600060208284031215611c9c57600080fd5b8151801515811461136c57600080fd5b60008251611cbe818460208701611b96565b9190910192915050565b60208152600061136c6020830184611bba56fea26469706673582212201b96284a9556dc6792c1c9bfe4d1a2d71257630c17db631bc16319aadabe8b7f64736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from.