From 7defce5dd08027aa20be0166e3a29a91207ec12a Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 22 Dec 2023 10:05:31 -0500 Subject: [PATCH] Remove _createMessageID in favor of mock value --- .../TeleporterMessenger.go | 2 +- .../ERC20Bridge/tests/ERC20BridgeTests.t.sol | 30 ++++++++----------- .../tests/ERC20TokenSourceTests.t.sol | 4 +-- .../tests/NativeTokenBridgeTests.t.sol | 7 ++--- .../tests/NativeTokenDestinationTests.t.sol | 6 ++-- .../tests/NativeTokenSourceTests.t.sol | 4 +-- .../src/Teleporter/TeleporterMessenger.sol | 24 +++++++-------- 7 files changed, 35 insertions(+), 42 deletions(-) diff --git a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go index fdc88eee4..f9e4797b4 100644 --- a/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go +++ b/abi-bindings/go/Teleporter/TeleporterMessenger/TeleporterMessenger.go @@ -66,7 +66,7 @@ type TeleporterMessageReceipt struct { // TeleporterMessengerMetaData contains all meta data concerning the TeleporterMessenger contract. var TeleporterMessengerMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"updatedFeeInfo\",\"type\":\"tuple\"}],\"name\":\"AddFeeAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deliverer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardRedeemer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ReceiveCrossChainMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RelayerRewardsRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"name\":\"SendCrossChainMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"additionalFeeAmount\",\"type\":\"uint256\"}],\"name\":\"addFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"calculateMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"checkRelayerRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getFeeInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getNextMessageID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getReceiptAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"getReceiptQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"getRelayerRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"messageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"receiptQueues\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"first\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"receivedFailedMessageHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeAsset\",\"type\":\"address\"}],\"name\":\"redeemRelayerRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retryMessageExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receivedMessageNonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayerRewardAddress\",\"type\":\"address\"}],\"internalType\":\"structTeleporterMessageReceipt[]\",\"name\":\"receipts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"retrySendCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"structTeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"messageIDs\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"}],\"name\":\"sendSpecifiedReceipts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"name\":\"sentMessageInfo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structTeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6080604052600160035534801561001557600080fd5b506001600081905580556131e38061002e6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063a8898181116100c3578063df20e8bc1161007c578063df20e8bc14610351578063e69d606a14610364578063e6e67bd5146103cc578063ebc3b1ba14610408578063ecc704281461042b578063fc2d61971461043457600080fd5b8063a8898181146102c8578063a9a85614146102db578063b771b3bc146102ee578063c473eef8146102fc578063ccb5f80914610335578063d127dc9b1461034857600080fd5b8063399b77da11610115578063399b77da1461022f578063624488501461024f5780638245a1b014610262578063860a3b0614610275578063892bf412146102955780638ac0fd04146102b557600080fd5b80630af5b4ff1461015257806322296c3a1461016d5780632bc8b0bf146101825780632ca40f55146101955780632e27c223146101ee575b600080fd5b61015a610447565b6040519081526020015b60405180910390f35b61018061017b3660046121c6565b6104c8565b005b61015a6101903660046121e3565b6105c2565b6101e06101a33660046121e3565b6005602090815260009182526040918290208054835180850190945260018201546001600160a01b03168452600290910154918301919091529082565b6040516101649291906121fc565b6102176101fc3660046121e3565b6000908152600860205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610164565b61015a61023d3660046121e3565b60009081526005602052604090205490565b61015a61025d366004612223565b6105df565b610180610270366004612276565b61063d565b61015a6102833660046121e3565b60066020526000908152604090205481565b6102a86102a33660046122aa565b6107e8565b60405161016491906122cc565b6101806102c33660046122ec565b61081b565b61015a6102d6366004612324565b610a31565b61015a6102e936600461239b565b610a74565b6102176005600160991b0181565b61015a61030a366004612433565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b61018061034336600461246c565b610d22565b61015a60025481565b61015a61035f3660046121e3565b61116e565b6103ad6103723660046121e3565b600090815260056020908152604091829020825180840190935260018101546001600160a01b03168084526002909101549290910182905291565b604080516001600160a01b039093168352602083019190915201610164565b6103f36103da3660046121e3565b6004602052600090815260409020805460019091015482565b60408051928352602083019190915201610164565b61041b6104163660046121e3565b6111de565b6040519015158152602001610164565b61015a60035481565b610180610442366004612493565b6111f4565b600254600090806104c3576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb91906124d9565b600281905590505b919050565b3360009081526009602090815260408083206001600160a01b03851684529091529020548061054f5760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b60648201526084015b60405180910390fd5b3360008181526009602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36105be6001600160a01b0383163383611457565b5050565b60008181526004602052604081206105d9906114bf565b92915050565b60006001600054146106035760405162461bcd60e51b8152600401610546906124f2565b600260005561063261061483612732565b8335600090815260046020526040902061062d906114d2565b6115e1565b600160005592915050565b60016000541461065f5760405162461bcd60e51b8152600401610546906124f2565b6002600081815590546106789060408401358435610a31565b6000818152600560209081526040918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051919250906106e05760405162461bcd60e51b8152600401610546906127d5565b6000836040516020016106f39190612a70565b60408051601f198184030181529190528251815160208301209192501461072c5760405162461bcd60e51b815260040161054690612a83565b8360400135837f2a211ad4a59ab9d003852404f9c57c690704ee755f3c79d2c2812ad32da99df8868560200151604051610767929190612acc565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb90610799908490600401612b51565b6020604051808303816000875af11580156107b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dc91906124d9565b50506001600055505050565b604080518082019091526000808252602082015260008381526004602052604090206108149083611821565b9392505050565b60016000541461083d5760405162461bcd60e51b8152600401610546906124f2565b6002600055806108a75760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b6064820152608401610546565b6001600160a01b0382166108cd5760405162461bcd60e51b815260040161054690612b64565b6000838152600560205260409020546108f85760405162461bcd60e51b8152600401610546906127d5565b6000838152600560205260409020600101546001600160a01b0383811691161461098a5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e747261637420616464726573730000000000000000006064820152608401610546565b600061099683836118e6565b6000858152600560205260408120600201805492935083929091906109bc908490612bce565b909155505060008481526005602052604090819020905185917fc1bfd1f1208927dfbd414041dcb5256e6c9ad90dd61aec3249facbd34ff7b3e191610a1e916001019081546001600160a01b0316815260019190910154602082015260400190565b60405180910390a2505060016000555050565b60408051306020820152908101849052606081018390526080810182905260009060a0016040516020818303038152906040528051906020012090509392505050565b6000600160005414610a985760405162461bcd60e51b8152600401610546906124f2565b60026000908155610aa7610447565b90506000866001600160401b03811115610ac357610ac3612535565b604051908082528060200260200182016040528015610b0857816020015b6040805180820190915260008082526020820152815260200190600190039081610ae15790505b50905060005b87811015610c8c576000898983818110610b2a57610b2a612be1565b90506020020135905060006007600083815260200190815260200160002054905080600003610baa5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b6064820152608401610546565b610bb58c8683610a31565b8214610c295760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f727465724d657373656e6765723a206d6573736167652049442060448201527f6e6f742066726f6d206f726967696e20626c6f636b636861696e0000000000006064820152608401610546565b6000828152600860209081526040918290205482518084019093528383526001600160a01b03169082018190528551909190869086908110610c6d57610c6d612be1565b602002602001018190525050505080610c8590612bf7565b9050610b0e565b506040805160c0810182528a815260006020820152610d10918101610cb6368a90038a018a612c10565b815260200160008152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093855250506040805192835260208084019091529092015250826115e1565b60016000559998505050505050505050565b6001805414610d435760405162461bcd60e51b815260040161054690612c2c565b60026001556040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610d95573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dbd9190810190612cd1565b9150915080610e205760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b6064820152608401610546565b60208201516001600160a01b03163014610e975760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b6064820152608401610546565b60008260400151806020019051810190610eb19190612e6e565b90506000610ebd610447565b905080826040015114610f2c5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b6064820152608401610546565b83518251600091610f3e918490610a31565b60008181526007602052604090205490915015610fb35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526c1958591e481c9958d95a5d9959609a1b6064820152608401610546565b610fc1338460a00151611a4e565b61101f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b6064820152608401610546565b61102d818460000151611ac3565b6001600160a01b0386161561106457600081815260086020526040902080546001600160a01b0319166001600160a01b0388161790555b60e0830151511561107c57845161107c908285611b35565b60c08301515160005b818110156110d85760008560c0015182815181106110a5576110a5612be1565b602002602001015190506110c785896000015183600001518460200151611c68565b506110d181612bf7565b9050611085565b5085516000908152600460209081526040918290208251808401909352865183526001600160a01b038a169183019190915290611116908290611d3d565b336001600160a01b03168760000151847f292ee90bbaf70b5d4936025e09d56ba08f3e421156b6a568cf3c2840d9343e348b8960405161115792919061307e565b60405180910390a450506001805550505050505050565b600254600090806111d15760405162461bcd60e51b815260206004820152602760248201527f54656c65706f727465724d657373656e6765723a207a65726f20626c6f636b636044820152661a185a5b88125160ca1b6064820152608401610546565b6108148184600354610a31565b60008181526007602052604081205415156105d9565b60018054146112155760405162461bcd60e51b815260040161054690612c2c565b60026001556000611224610447565b9050600061123484838535610a31565b600081815260066020526040902054909150806112635760405162461bcd60e51b8152600401610546906127d5565b80846040516020016112759190612a70565b60405160208183030381529060405280519060200120146112a85760405162461bcd60e51b815260040161054690612a83565b60006112ba60808601606087016121c6565b6001600160a01b03163b1161132e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b6064820152608401610546565b604051859083907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a36000828152600660209081526040808320839055879161137f9188019088016121c6565b61138c60e08801886130a2565b60405160240161139f94939291906130e8565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b179052905060006113e76113e060808801606089016121c6565b5a84611d99565b90508061144a5760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b6064820152608401610546565b5050600180555050505050565b6040516001600160a01b0383166024820152604481018290526114ba90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611db3565b505050565b805460018201546000916105d991613113565b606060006114e960056114e4856114bf565b611e85565b905080600003611538576040805160008082526020820190925290611530565b60408051808201909152600080825260208201528152602001906001900390816115095790505b509392505050565b806001600160401b0381111561155057611550612535565b60405190808252806020026020018201604052801561159557816020015b604080518082019091526000808252602082015281526020019060019003908161156e5790505b50915060005b818110156115da576115ac84611e9b565b8382815181106115be576115be612be1565b6020026020010181905250806115d390612bf7565b905061159b565b5050919050565b6000806115ec610447565b905060006003549050600061160683876000015184610a31565b90506000604051806101000160405280848152602001336001600160a01b031681526020018860000151815260200188602001516001600160a01b0316815260200188606001518152602001886080015181526020018781526020018860a00151815250905060008160405160200161167f9190613126565b604051602081830303815290604052905060036000815461169f90612bf7565b90915550604088015160200151600090156116f9576040890151516001600160a01b03166116df5760405162461bcd60e51b815260040161054690612b64565b604089015180516020909101516116f691906118e6565b90505b6040805180820182528a820151516001600160a01b039081168252602080830185905283518085018552865187830120815280820184815260008a815260058452869020915182555180516001830180546001600160a01b03191691909516179093559101516002909101558a51915190919086907f2a211ad4a59ab9d003852404f9c57c690704ee755f3c79d2c2812ad32da99df89061179d9088908690613139565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906117cf908690600401612b51565b6020604051808303816000875af11580156117ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181291906124d9565b50939998505050505050505050565b604080518082019091526000808252602082015261183e836114bf565b82106118965760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b6064820152608401610546565b8260020160008385600001546118ac9190612bce565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561192f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195391906124d9565b905061196a6001600160a01b038516333086611f66565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156119b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d591906124d9565b9050818111611a3b5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610546565b611a458282613113565b95945050505050565b60008151600003611a61575060016105d9565b60005b8251811015611ab957836001600160a01b0316838281518110611a8957611a89612be1565b60200260200101516001600160a01b031603611aa95760019150506105d9565b611ab281612bf7565b9050611a64565b5060009392505050565b80600003611b235760405162461bcd60e51b815260206004820152602760248201527f54656c65706f727465724d657373656e6765723a207a65726f206d657373616760448201526665206e6f6e636560c81b6064820152608401610546565b60009182526007602052604090912055565b80608001515a1015611b975760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b6064820152608401610546565b80606001516001600160a01b03163b600003611bb8576114ba828483611f9e565b602081015160e0820151604051600092611bd692879260240161314c565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611c1b919084611d99565b905080611c3457611c2d848685611f9e565b5050505050565b604051859085907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a35050505050565b6000611c75858585610a31565b6000818152600560209081526040918290208251808401845281548152835180850190945260018201546001600160a01b031684526002909101548383015290810191909152805191925090611ccc575050611d37565b60008281526005602090815260408083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0388811686526009855283862092515116855292528220805491929091611d2f908490612bce565b909155505050505b50505050565b6001820180548291600285019160009182611d5783612bf7565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60008060008084516020860160008989f195945050505050565b6000611e08826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120139092919063ffffffff16565b8051909150156114ba5780806020019051810190611e269190613176565b6114ba5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610546565b6000818310611e945781610814565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f055760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d707479207175657565000000000000006044820152606401610546565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f5e908290612bce565b909255919050565b6040516001600160a01b0380851660248301528316604482015260648101829052611d379085906323b872dd60e01b90608401611483565b80604051602001611faf9190613126565b60408051601f1981840301815282825280516020918201206000878152600690925291902055829084907f4619adc1017b82e02eaefac01a43d50d6d8de4460774bc370c3ff0210d40c98590612006908590613126565b60405180910390a3505050565b6060612022848460008561202a565b949350505050565b60608247101561208b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610546565b600080866001600160a01b031685876040516120a79190613191565b60006040518083038185875af1925050503d80600081146120e4576040519150601f19603f3d011682016040523d82523d6000602084013e6120e9565b606091505b50915091506120fa87838387612105565b979650505050505050565b6060831561217457825160000361216d576001600160a01b0385163b61216d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610546565b5081612022565b61202283838151156121895781518083602001fd5b8060405162461bcd60e51b81526004016105469190612b51565b6001600160a01b03811681146121b857600080fd5b50565b80356104c3816121a3565b6000602082840312156121d857600080fd5b8135610814816121a3565b6000602082840312156121f557600080fd5b5035919050565b82815260608101610814602083018480516001600160a01b03168252602090810151910152565b60006020828403121561223557600080fd5b81356001600160401b0381111561224b57600080fd5b820160e0818503121561081457600080fd5b6000610100828403121561227057600080fd5b50919050565b60006020828403121561228857600080fd5b81356001600160401b0381111561229e57600080fd5b6120228482850161225d565b600080604083850312156122bd57600080fd5b50508035926020909101359150565b815181526020808301516001600160a01b031690820152604081016105d9565b60008060006060848603121561230157600080fd5b833592506020840135612313816121a3565b929592945050506040919091013590565b60008060006060848603121561233957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261236257600080fd5b5081356001600160401b0381111561237957600080fd5b6020830191508360208260051b850101111561239457600080fd5b9250929050565b60008060008060008086880360a08112156123b557600080fd5b8735965060208801356001600160401b03808211156123d357600080fd5b6123df8b838c01612350565b90985096508691506040603f19840112156123f957600080fd5b60408a01955060808a013592508083111561241357600080fd5b505061242189828a01612350565b979a9699509497509295939492505050565b6000806040838503121561244657600080fd5b8235612451816121a3565b91506020830135612461816121a3565b809150509250929050565b6000806040838503121561247f57600080fd5b823563ffffffff8116811461245157600080fd5b600080604083850312156124a657600080fd5b8235915060208301356001600160401b038111156124c357600080fd5b6124cf8582860161225d565b9150509250929050565b6000602082840312156124eb57600080fd5b5051919050565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561256d5761256d612535565b60405290565b60405160c081016001600160401b038111828210171561256d5761256d612535565b60405161010081016001600160401b038111828210171561256d5761256d612535565b604051601f8201601f191681016001600160401b03811182821017156125e0576125e0612535565b604052919050565b6000604082840312156125fa57600080fd5b61260261254b565b9050813561260f816121a3565b808252506020820135602082015292915050565b60006001600160401b0382111561263c5761263c612535565b5060051b60200190565b600082601f83011261265757600080fd5b8135602061266c61266783612623565b6125b8565b82815260059290921b8401810191818101908684111561268b57600080fd5b8286015b848110156126af5780356126a2816121a3565b835291830191830161268f565b509695505050505050565b60006001600160401b038211156126d3576126d3612535565b50601f01601f191660200190565b600082601f8301126126f257600080fd5b8135612700612667826126ba565b81815284602083860101111561271557600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561274457600080fd5b61274c612573565b8235815261275c602084016121bb565b602082015261276e36604085016125e8565b60408201526080830135606082015260a08301356001600160401b038082111561279757600080fd5b6127a336838701612646565b608084015260c08501359150808211156127bc57600080fd5b506127c9368286016126e1565b60a08301525092915050565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e1984360301811261283257600080fd5b83016020810192503590506001600160401b0381111561285157600080fd5b8060051b360382131561239457600080fd5b8183526000602080850194508260005b858110156128a1578135612886816121a3565b6001600160a01b031687529582019590820190600101612873565b509495945050505050565b6000808335601e198436030181126128c357600080fd5b83016020810192503590506001600160401b038111156128e257600080fd5b8060061b360382131561239457600080fd5b8183526000602080850194508260005b858110156128a157813587528282013561291d816121a3565b6001600160a01b0316878401526040968701969190910190600101612904565b6000808335601e1984360301811261295457600080fd5b83016020810192503590506001600160401b0381111561297357600080fd5b80360382131561239457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101008235845260208301356129c2816121a3565b6001600160a01b03166020850152604083810135908501526129e6606084016121bb565b6001600160a01b0316606085015260808381013590850152612a0b60a084018461281b565b8260a0870152612a1e8387018284612863565b92505050612a2f60c08401846128ac565b85830360c0870152612a428382846128f4565b92505050612a5360e084018461293d565b85830360e0870152612a66838284612982565b9695505050505050565b60208152600061081460208301846129ab565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b606081526000612adf60608301856129ab565b9050610814602083018480516001600160a01b03168252602090810151910152565b60005b83811015612b1c578181015183820152602001612b04565b50506000910152565b60008151808452612b3d816020860160208601612b01565b601f01601f19169290920160200192915050565b6020815260006108146020830184612b25565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105d9576105d9612bb8565b634e487b7160e01b600052603260045260246000fd5b600060018201612c0957612c09612bb8565b5060010190565b600060408284031215612c2257600080fd5b61081483836125e8565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b80516104c3816121a3565b600082601f830112612c8d57600080fd5b8151612c9b612667826126ba565b818152846020838601011115612cb057600080fd5b612022826020830160208701612b01565b805180151581146104c357600080fd5b60008060408385031215612ce457600080fd5b82516001600160401b0380821115612cfb57600080fd5b9084019060608287031215612d0f57600080fd5b604051606081018181108382111715612d2a57612d2a612535565b604052825181526020830151612d3f816121a3565b6020820152604083015182811115612d5657600080fd5b612d6288828601612c7c565b6040830152509350612d7991505060208401612cc1565b90509250929050565b600082601f830112612d9357600080fd5b81516020612da361266783612623565b82815260059290921b84018101918181019086841115612dc257600080fd5b8286015b848110156126af578051612dd9816121a3565b8352918301918301612dc6565b600082601f830112612df757600080fd5b81516020612e0761266783612623565b82815260069290921b84018101918181019086841115612e2657600080fd5b8286015b848110156126af5760408189031215612e435760008081fd5b612e4b61254b565b8151815284820151612e5c816121a3565b81860152835291830191604001612e2a565b600060208284031215612e8057600080fd5b81516001600160401b0380821115612e9757600080fd5b908301906101008286031215612eac57600080fd5b612eb4612595565b82518152612ec460208401612c71565b602082015260408301516040820152612edf60608401612c71565b60608201526080830151608082015260a083015182811115612f0057600080fd5b612f0c87828601612d82565b60a08301525060c083015182811115612f2457600080fd5b612f3087828601612de6565b60c08301525060e083015182811115612f4857600080fd5b612f5487828601612c7c565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156128a15781516001600160a01b031687529582019590820190600101612f77565b600081518084526020808501945080840160005b838110156128a157612fd6878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612fb0565b60006101008251845260018060a01b03602084015116602085015260408301516040850152606083015161302860608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261304a82860182612f63565b91505060c083015184820360c08601526130648282612f9c565b91505060e083015184820360e0860152611a458282612b25565b6001600160a01b038316815260406020820181905260009061202290830184612fe9565b6000808335601e198436030181126130b957600080fd5b8301803591506001600160401b038211156130d357600080fd5b60200191503681900382131561239457600080fd5b8481526001600160a01b0384166020820152606060408201819052600090612a669083018486612982565b818103818111156105d9576105d9612bb8565b6020815260006108146020830184612fe9565b606081526000612adf6060830185612fe9565b8381526001600160a01b0383166020820152606060408201819052600090611a4590830184612b25565b60006020828403121561318857600080fd5b61081482612cc1565b600082516131a3818460208701612b01565b919091019291505056fea2646970667358221220895ca8d660aa08f453342063693f65767066ef74c3bcd811fc832d109b4254d464736f6c63430008120033", + Bin: "0x6080604052600160035534801561001557600080fd5b506001600081905580556131e38061002e6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063a8898181116100c3578063df20e8bc1161007c578063df20e8bc14610351578063e69d606a14610364578063e6e67bd5146103cc578063ebc3b1ba14610408578063ecc704281461042b578063fc2d61971461043457600080fd5b8063a8898181146102c8578063a9a85614146102db578063b771b3bc146102ee578063c473eef8146102fc578063ccb5f80914610335578063d127dc9b1461034857600080fd5b8063399b77da11610115578063399b77da1461022f578063624488501461024f5780638245a1b014610262578063860a3b0614610275578063892bf412146102955780638ac0fd04146102b557600080fd5b80630af5b4ff1461015257806322296c3a1461016d5780632bc8b0bf146101825780632ca40f55146101955780632e27c223146101ee575b600080fd5b61015a610447565b6040519081526020015b60405180910390f35b61018061017b3660046121c6565b6104c8565b005b61015a6101903660046121e3565b6105c2565b6101e06101a33660046121e3565b6005602090815260009182526040918290208054835180850190945260018201546001600160a01b03168452600290910154918301919091529082565b6040516101649291906121fc565b6102176101fc3660046121e3565b6000908152600860205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610164565b61015a61023d3660046121e3565b60009081526005602052604090205490565b61015a61025d366004612223565b6105df565b610180610270366004612276565b61063d565b61015a6102833660046121e3565b60066020526000908152604090205481565b6102a86102a33660046122aa565b6107e8565b60405161016491906122cc565b6101806102c33660046122ec565b61081b565b61015a6102d6366004612324565b610a31565b61015a6102e936600461239b565b610a74565b6102176005600160991b0181565b61015a61030a366004612433565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b61018061034336600461246c565b610d22565b61015a60025481565b61015a61035f3660046121e3565b61116e565b6103ad6103723660046121e3565b600090815260056020908152604091829020825180840190935260018101546001600160a01b03168084526002909101549290910182905291565b604080516001600160a01b039093168352602083019190915201610164565b6103f36103da3660046121e3565b6004602052600090815260409020805460019091015482565b60408051928352602083019190915201610164565b61041b6104163660046121e3565b6111de565b6040519015158152602001610164565b61015a60035481565b610180610442366004612493565b6111f4565b600254600090806104c3576005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb91906124d9565b600281905590505b919050565b3360009081526009602090815260408083206001600160a01b03851684529091529020548061054f5760405162461bcd60e51b815260206004820152602860248201527f54656c65706f727465724d657373656e6765723a206e6f2072657761726420746044820152676f2072656465656d60c01b60648201526084015b60405180910390fd5b3360008181526009602090815260408083206001600160a01b03871680855290835281842093909355518481529192917f3294c84e5b0f29d9803655319087207bc94f4db29f7927846944822773780b88910160405180910390a36105be6001600160a01b0383163383611457565b5050565b60008181526004602052604081206105d9906114bf565b92915050565b60006001600054146106035760405162461bcd60e51b8152600401610546906124f2565b600260005561063261061483612732565b8335600090815260046020526040902061062d906114d2565b6115e1565b600160005592915050565b60016000541461065f5760405162461bcd60e51b8152600401610546906124f2565b6002600081815590546106789060408401358435610a31565b6000818152600560209081526040918290208251808401845281548152835180850190945260018201546001600160a01b0316845260029091015483830152908101919091528051919250906106e05760405162461bcd60e51b8152600401610546906127d5565b6000836040516020016106f39190612a70565b60408051601f198184030181529190528251815160208301209192501461072c5760405162461bcd60e51b815260040161054690612a83565b8360400135837f2a211ad4a59ab9d003852404f9c57c690704ee755f3c79d2c2812ad32da99df8868560200151604051610767929190612acc565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb90610799908490600401612b51565b6020604051808303816000875af11580156107b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dc91906124d9565b50506001600055505050565b604080518082019091526000808252602082015260008381526004602052604090206108149083611821565b9392505050565b60016000541461083d5760405162461bcd60e51b8152600401610546906124f2565b6002600055806108a75760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f727465724d657373656e6765723a207a65726f2061646469746960448201526e1bdb985b0819995948185b5bdd5b9d608a1b6064820152608401610546565b6001600160a01b0382166108cd5760405162461bcd60e51b815260040161054690612b64565b6000838152600560205260409020546108f85760405162461bcd60e51b8152600401610546906127d5565b6000838152600560205260409020600101546001600160a01b0383811691161461098a5760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642066656560448201527f20617373657420636f6e747261637420616464726573730000000000000000006064820152608401610546565b600061099683836118e6565b6000858152600560205260408120600201805492935083929091906109bc908490612bce565b909155505060008481526005602052604090819020905185917fc1bfd1f1208927dfbd414041dcb5256e6c9ad90dd61aec3249facbd34ff7b3e191610a1e916001019081546001600160a01b0316815260019190910154602082015260400190565b60405180910390a2505060016000555050565b60408051306020820152908101849052606081018390526080810182905260009060a0016040516020818303038152906040528051906020012090509392505050565b6000600160005414610a985760405162461bcd60e51b8152600401610546906124f2565b60026000908155610aa7610447565b90506000866001600160401b03811115610ac357610ac3612535565b604051908082528060200260200182016040528015610b0857816020015b6040805180820190915260008082526020820152815260200190600190039081610ae15790505b50905060005b87811015610c8c576000898983818110610b2a57610b2a612be1565b90506020020135905060006007600083815260200190815260200160002054905080600003610baa5760405162461bcd60e51b815260206004820152602660248201527f54656c65706f727465724d657373656e6765723a2072656365697074206e6f7460448201526508199bdd5b9960d21b6064820152608401610546565b610bb58c8683610a31565b8214610c295760405162461bcd60e51b815260206004820152603a60248201527f54656c65706f727465724d657373656e6765723a206d6573736167652049442060448201527f6e6f742066726f6d206f726967696e20626c6f636b636861696e0000000000006064820152608401610546565b6000828152600860209081526040918290205482518084019093528383526001600160a01b03169082018190528551909190869086908110610c6d57610c6d612be1565b602002602001018190525050505080610c8590612bf7565b9050610b0e565b506040805160c0810182528a815260006020820152610d10918101610cb6368a90038a018a612c10565b815260200160008152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093855250506040805192835260208084019091529092015250826115e1565b60016000559998505050505050505050565b6001805414610d435760405162461bcd60e51b815260040161054690612c2c565b60026001556040516306f8253560e41b815263ffffffff8316600482015260009081906005600160991b0190636f82535090602401600060405180830381865afa158015610d95573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dbd9190810190612cd1565b9150915080610e205760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20696e76616c69642077617260448201526870206d65737361676560b81b6064820152608401610546565b60208201516001600160a01b03163014610e975760405162461bcd60e51b815260206004820152603260248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b6064820152608401610546565b60008260400151806020019051810190610eb19190612e6e565b90506000610ebd610447565b905080826040015114610f2c5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206465736044820152701d1a5b985d1a5bdb8818da185a5b881251607a1b6064820152608401610546565b83518251600091610f3e918490610a31565b60008181526007602052604090205490915015610fb35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465724d657373656e6765723a206d65737361676520616c7260448201526c1958591e481c9958d95a5d9959609a1b6064820152608401610546565b610fc1338460a00151611a4e565b61101f5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465724d657373656e6765723a20756e617574686f72697a6560448201526832103932b630bcb2b960b91b6064820152608401610546565b61102d818460000151611ac3565b6001600160a01b0386161561106457600081815260086020526040902080546001600160a01b0319166001600160a01b0388161790555b60e0830151511561107c57845161107c908285611b35565b60c08301515160005b818110156110d85760008560c0015182815181106110a5576110a5612be1565b602002602001015190506110c785896000015183600001518460200151611c68565b506110d181612bf7565b9050611085565b5085516000908152600460209081526040918290208251808401909352865183526001600160a01b038a169183019190915290611116908290611d3d565b336001600160a01b03168760000151847f292ee90bbaf70b5d4936025e09d56ba08f3e421156b6a568cf3c2840d9343e348b8960405161115792919061307e565b60405180910390a450506001805550505050505050565b600254600090806111d15760405162461bcd60e51b815260206004820152602760248201527f54656c65706f727465724d657373656e6765723a207a65726f20626c6f636b636044820152661a185a5b88125160ca1b6064820152608401610546565b6108148184600354610a31565b60008181526007602052604081205415156105d9565b60018054146112155760405162461bcd60e51b815260040161054690612c2c565b60026001556000611224610447565b9050600061123484838535610a31565b600081815260066020526040902054909150806112635760405162461bcd60e51b8152600401610546906127d5565b80846040516020016112759190612a70565b60405160208183030381529060405280519060200120146112a85760405162461bcd60e51b815260040161054690612a83565b60006112ba60808601606087016121c6565b6001600160a01b03163b1161132e5760405162461bcd60e51b815260206004820152603460248201527f54656c65706f727465724d657373656e6765723a2064657374696e6174696f6e604482015273206164647265737320686173206e6f20636f646560601b6064820152608401610546565b604051859083907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a36000828152600660209081526040808320839055879161137f9188019088016121c6565b61138c60e08801886130a2565b60405160240161139f94939291906130e8565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b179052905060006113e76113e060808801606089016121c6565b5a84611d99565b90508061144a5760405162461bcd60e51b815260206004820152602b60248201527f54656c65706f727465724d657373656e6765723a20726574727920657865637560448201526a1d1a5bdb8819985a5b195960aa1b6064820152608401610546565b5050600180555050505050565b6040516001600160a01b0383166024820152604481018290526114ba90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611db3565b505050565b805460018201546000916105d991613113565b606060006114e960056114e4856114bf565b611e85565b905080600003611538576040805160008082526020820190925290611530565b60408051808201909152600080825260208201528152602001906001900390816115095790505b509392505050565b806001600160401b0381111561155057611550612535565b60405190808252806020026020018201604052801561159557816020015b604080518082019091526000808252602082015281526020019060019003908161156e5790505b50915060005b818110156115da576115ac84611e9b565b8382815181106115be576115be612be1565b6020026020010181905250806115d390612bf7565b905061159b565b5050919050565b6000806115ec610447565b905060006003549050600061160683876000015184610a31565b90506000604051806101000160405280848152602001336001600160a01b031681526020018860000151815260200188602001516001600160a01b0316815260200188606001518152602001886080015181526020018781526020018860a00151815250905060008160405160200161167f9190613126565b604051602081830303815290604052905060036000815461169f90612bf7565b90915550604088015160200151600090156116f9576040890151516001600160a01b03166116df5760405162461bcd60e51b815260040161054690612b64565b604089015180516020909101516116f691906118e6565b90505b6040805180820182528a820151516001600160a01b039081168252602080830185905283518085018552865187830120815280820184815260008a815260058452869020915182555180516001830180546001600160a01b03191691909516179093559101516002909101558a51915190919086907f2a211ad4a59ab9d003852404f9c57c690704ee755f3c79d2c2812ad32da99df89061179d9088908690613139565b60405180910390a360405163ee5b48eb60e01b81526005600160991b019063ee5b48eb906117cf908690600401612b51565b6020604051808303816000875af11580156117ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181291906124d9565b50939998505050505050505050565b604080518082019091526000808252602082015261183e836114bf565b82106118965760405162461bcd60e51b815260206004820152602160248201527f5265636569707451756575653a20696e646578206f7574206f6620626f756e646044820152607360f81b6064820152608401610546565b8260020160008385600001546118ac9190612bce565b81526020808201929092526040908101600020815180830190925280548252600101546001600160a01b0316918101919091529392505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561192f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195391906124d9565b905061196a6001600160a01b038516333086611f66565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156119b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d591906124d9565b9050818111611a3b5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610546565b611a458282613113565b95945050505050565b60008151600003611a61575060016105d9565b60005b8251811015611ab957836001600160a01b0316838281518110611a8957611a89612be1565b60200260200101516001600160a01b031603611aa95760019150506105d9565b611ab281612bf7565b9050611a64565b5060009392505050565b80600003611b235760405162461bcd60e51b815260206004820152602760248201527f54656c65706f727465724d657373656e6765723a207a65726f206d657373616760448201526665206e6f6e636560c81b6064820152608401610546565b60009182526007602052604090912055565b80608001515a1015611b975760405162461bcd60e51b815260206004820152602560248201527f54656c65706f727465724d657373656e6765723a20696e73756666696369656e604482015264742067617360d81b6064820152608401610546565b80606001516001600160a01b03163b600003611bb8576114ba828483611f9e565b602081015160e0820151604051600092611bd692879260240161314c565b60408051601f198184030181529190526020810180516001600160e01b031663643477d560e11b17905260608301516080840151919250600091611c1b919084611d99565b905080611c3457611c2d848685611f9e565b5050505050565b604051859085907f34795cc6b122b9a0ae684946319f1e14a577b4e8f9b3dda9ac94c21a54d3188c90600090a35050505050565b6000611c75858585610a31565b6000818152600560209081526040918290208251808401845281548152835180850190945260018201546001600160a01b031684526002909101548383015290810191909152805191925090611ccc575050611d37565b60008281526005602090815260408083208381556001810180546001600160a01b031916905560020183905583820180518301516001600160a01b0388811686526009855283862092515116855292528220805491929091611d2f908490612bce565b909155505050505b50505050565b6001820180548291600285019160009182611d5783612bf7565b90915550815260208082019290925260400160002082518155910151600190910180546001600160a01b0319166001600160a01b039092169190911790555050565b60008060008084516020860160008989f195945050505050565b6000611e08826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120139092919063ffffffff16565b8051909150156114ba5780806020019051810190611e269190613176565b6114ba5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610546565b6000818310611e945781610814565b5090919050565b604080518082019091526000808252602082015281546001830154819003611f055760405162461bcd60e51b815260206004820152601960248201527f5265636569707451756575653a20656d707479207175657565000000000000006044820152606401610546565b60008181526002840160208181526040808420815180830190925280548252600180820180546001600160a01b03811685870152888852959094529490556001600160a01b031990921690559250611f5e908290612bce565b909255919050565b6040516001600160a01b0380851660248301528316604482015260648101829052611d379085906323b872dd60e01b90608401611483565b80604051602001611faf9190613126565b60408051601f1981840301815282825280516020918201206000878152600690925291902055829084907f4619adc1017b82e02eaefac01a43d50d6d8de4460774bc370c3ff0210d40c98590612006908590613126565b60405180910390a3505050565b6060612022848460008561202a565b949350505050565b60608247101561208b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610546565b600080866001600160a01b031685876040516120a79190613191565b60006040518083038185875af1925050503d80600081146120e4576040519150601f19603f3d011682016040523d82523d6000602084013e6120e9565b606091505b50915091506120fa87838387612105565b979650505050505050565b6060831561217457825160000361216d576001600160a01b0385163b61216d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610546565b5081612022565b61202283838151156121895781518083602001fd5b8060405162461bcd60e51b81526004016105469190612b51565b6001600160a01b03811681146121b857600080fd5b50565b80356104c3816121a3565b6000602082840312156121d857600080fd5b8135610814816121a3565b6000602082840312156121f557600080fd5b5035919050565b82815260608101610814602083018480516001600160a01b03168252602090810151910152565b60006020828403121561223557600080fd5b81356001600160401b0381111561224b57600080fd5b820160e0818503121561081457600080fd5b6000610100828403121561227057600080fd5b50919050565b60006020828403121561228857600080fd5b81356001600160401b0381111561229e57600080fd5b6120228482850161225d565b600080604083850312156122bd57600080fd5b50508035926020909101359150565b815181526020808301516001600160a01b031690820152604081016105d9565b60008060006060848603121561230157600080fd5b833592506020840135612313816121a3565b929592945050506040919091013590565b60008060006060848603121561233957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261236257600080fd5b5081356001600160401b0381111561237957600080fd5b6020830191508360208260051b850101111561239457600080fd5b9250929050565b60008060008060008086880360a08112156123b557600080fd5b8735965060208801356001600160401b03808211156123d357600080fd5b6123df8b838c01612350565b90985096508691506040603f19840112156123f957600080fd5b60408a01955060808a013592508083111561241357600080fd5b505061242189828a01612350565b979a9699509497509295939492505050565b6000806040838503121561244657600080fd5b8235612451816121a3565b91506020830135612461816121a3565b809150509250929050565b6000806040838503121561247f57600080fd5b823563ffffffff8116811461245157600080fd5b600080604083850312156124a657600080fd5b8235915060208301356001600160401b038111156124c357600080fd5b6124cf8582860161225d565b9150509250929050565b6000602082840312156124eb57600080fd5b5051919050565b60208082526023908201527f5265656e7472616e63794775617264733a2073656e646572207265656e7472616040820152626e637960e81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561256d5761256d612535565b60405290565b60405160c081016001600160401b038111828210171561256d5761256d612535565b60405161010081016001600160401b038111828210171561256d5761256d612535565b604051601f8201601f191681016001600160401b03811182821017156125e0576125e0612535565b604052919050565b6000604082840312156125fa57600080fd5b61260261254b565b9050813561260f816121a3565b808252506020820135602082015292915050565b60006001600160401b0382111561263c5761263c612535565b5060051b60200190565b600082601f83011261265757600080fd5b8135602061266c61266783612623565b6125b8565b82815260059290921b8401810191818101908684111561268b57600080fd5b8286015b848110156126af5780356126a2816121a3565b835291830191830161268f565b509695505050505050565b60006001600160401b038211156126d3576126d3612535565b50601f01601f191660200190565b600082601f8301126126f257600080fd5b8135612700612667826126ba565b81815284602083860101111561271557600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561274457600080fd5b61274c612573565b8235815261275c602084016121bb565b602082015261276e36604085016125e8565b60408201526080830135606082015260a08301356001600160401b038082111561279757600080fd5b6127a336838701612646565b608084015260c08501359150808211156127bc57600080fd5b506127c9368286016126e1565b60a08301525092915050565b60208082526026908201527f54656c65706f727465724d657373656e6765723a206d657373616765206e6f7460408201526508199bdd5b9960d21b606082015260800190565b6000808335601e1984360301811261283257600080fd5b83016020810192503590506001600160401b0381111561285157600080fd5b8060051b360382131561239457600080fd5b8183526000602080850194508260005b858110156128a1578135612886816121a3565b6001600160a01b031687529582019590820190600101612873565b509495945050505050565b6000808335601e198436030181126128c357600080fd5b83016020810192503590506001600160401b038111156128e257600080fd5b8060061b360382131561239457600080fd5b8183526000602080850194508260005b858110156128a157813587528282013561291d816121a3565b6001600160a01b0316878401526040968701969190910190600101612904565b6000808335601e1984360301811261295457600080fd5b83016020810192503590506001600160401b0381111561297357600080fd5b80360382131561239457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101008235845260208301356129c2816121a3565b6001600160a01b03166020850152604083810135908501526129e6606084016121bb565b6001600160a01b0316606085015260808381013590850152612a0b60a084018461281b565b8260a0870152612a1e8387018284612863565b92505050612a2f60c08401846128ac565b85830360c0870152612a428382846128f4565b92505050612a5360e084018461293d565b85830360e0870152612a66838284612982565b9695505050505050565b60208152600061081460208301846129ab565b60208082526029908201527f54656c65706f727465724d657373656e6765723a20696e76616c6964206d65736040820152680e6c2ceca40d0c2e6d60bb1b606082015260800190565b606081526000612adf60608301856129ab565b9050610814602083018480516001600160a01b03168252602090810151910152565b60005b83811015612b1c578181015183820152602001612b04565b50506000910152565b60008151808452612b3d816020860160208601612b01565b601f01601f19169290920160200192915050565b6020815260006108146020830184612b25565b60208082526034908201527f54656c65706f727465724d657373656e6765723a207a65726f2066656520617360408201527373657420636f6e7472616374206164647265737360601b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105d9576105d9612bb8565b634e487b7160e01b600052603260045260246000fd5b600060018201612c0957612c09612bb8565b5060010190565b600060408284031215612c2257600080fd5b61081483836125e8565b60208082526025908201527f5265656e7472616e63794775617264733a207265636569766572207265656e7460408201526472616e637960d81b606082015260800190565b80516104c3816121a3565b600082601f830112612c8d57600080fd5b8151612c9b612667826126ba565b818152846020838601011115612cb057600080fd5b612022826020830160208701612b01565b805180151581146104c357600080fd5b60008060408385031215612ce457600080fd5b82516001600160401b0380821115612cfb57600080fd5b9084019060608287031215612d0f57600080fd5b604051606081018181108382111715612d2a57612d2a612535565b604052825181526020830151612d3f816121a3565b6020820152604083015182811115612d5657600080fd5b612d6288828601612c7c565b6040830152509350612d7991505060208401612cc1565b90509250929050565b600082601f830112612d9357600080fd5b81516020612da361266783612623565b82815260059290921b84018101918181019086841115612dc257600080fd5b8286015b848110156126af578051612dd9816121a3565b8352918301918301612dc6565b600082601f830112612df757600080fd5b81516020612e0761266783612623565b82815260069290921b84018101918181019086841115612e2657600080fd5b8286015b848110156126af5760408189031215612e435760008081fd5b612e4b61254b565b8151815284820151612e5c816121a3565b81860152835291830191604001612e2a565b600060208284031215612e8057600080fd5b81516001600160401b0380821115612e9757600080fd5b908301906101008286031215612eac57600080fd5b612eb4612595565b82518152612ec460208401612c71565b602082015260408301516040820152612edf60608401612c71565b60608201526080830151608082015260a083015182811115612f0057600080fd5b612f0c87828601612d82565b60a08301525060c083015182811115612f2457600080fd5b612f3087828601612de6565b60c08301525060e083015182811115612f4857600080fd5b612f5487828601612c7c565b60e08301525095945050505050565b600081518084526020808501945080840160005b838110156128a15781516001600160a01b031687529582019590820190600101612f77565b600081518084526020808501945080840160005b838110156128a157612fd6878351805182526020908101516001600160a01b0316910152565b6040969096019590820190600101612fb0565b60006101008251845260018060a01b03602084015116602085015260408301516040850152606083015161302860608601826001600160a01b03169052565b506080830151608085015260a08301518160a086015261304a82860182612f63565b91505060c083015184820360c08601526130648282612f9c565b91505060e083015184820360e0860152611a458282612b25565b6001600160a01b038316815260406020820181905260009061202290830184612fe9565b6000808335601e198436030181126130b957600080fd5b8301803591506001600160401b038211156130d357600080fd5b60200191503681900382131561239457600080fd5b8481526001600160a01b0384166020820152606060408201819052600090612a669083018486612982565b818103818111156105d9576105d9612bb8565b6020815260006108146020830184612fe9565b606081526000612adf6060830185612fe9565b8381526001600160a01b0383166020820152606060408201819052600090611a4590830184612b25565b60006020828403121561318857600080fd5b61081482612cc1565b600082516131a3818460208701612b01565b919091019291505056fea26469706673582212206f98571cd5657605a9c5ccee5f2673185249fa8591cd342c38c77d2ba303ab0764736f6c63430008120033", } // TeleporterMessengerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/CrossChainApplications/examples/ERC20Bridge/tests/ERC20BridgeTests.t.sol b/contracts/src/CrossChainApplications/examples/ERC20Bridge/tests/ERC20BridgeTests.t.sol index f84a1e3af..381734d74 100644 --- a/contracts/src/CrossChainApplications/examples/ERC20Bridge/tests/ERC20BridgeTests.t.sol +++ b/contracts/src/CrossChainApplications/examples/ERC20Bridge/tests/ERC20BridgeTests.t.sol @@ -26,6 +26,8 @@ contract ERC20BridgeTest is Test { 0xf9FA4a0c696b659328DDaaBCB46Ae4eBFC9e68e4; address public constant WARP_PRECOMPILE_ADDRESS = address(0x0200000000000000000000000000000000000005); + bytes32 internal constant _MOCK_MESSAGE_ID = + bytes32(hex"1111111111111111111111111111111111111111111111111111111111111111"); bytes32 private constant _MOCK_BLOCKCHAIN_ID = bytes32(uint256(123456)); bytes32 private constant _DEFAULT_OTHER_CHAIN_ID = bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); @@ -192,11 +194,10 @@ contract ERC20BridgeTest is Test { ) }); - bytes32 mockMessageID = _createMessageID(42); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), - abi.encode(mockMessageID) + abi.encode(_MOCK_MESSAGE_ID) ); vm.expectCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, @@ -207,7 +208,7 @@ contract ERC20BridgeTest is Test { emit BridgeTokens({ tokenContractAddress: address(mockERC20), destinationBlockchainID: _DEFAULT_OTHER_CHAIN_ID, - teleporterMessageID: mockMessageID, + teleporterMessageID: _MOCK_MESSAGE_ID, destinationBridgeAddress: _DEFAULT_OTHER_BRIDGE_ADDRESS, recipient: _DEFAULT_RECIPIENT, amount: totalAmount @@ -301,11 +302,10 @@ contract ERC20BridgeTest is Test { abi.encodeCall(IERC20.approve, (MOCK_TELEPORTER_MESSENGER_ADDRESS, feeAmount)) ); - bytes32 mockMessageID = _createMessageID(42); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), - abi.encode(mockMessageID) + abi.encode(_MOCK_MESSAGE_ID) ); vm.expectCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, @@ -316,7 +316,7 @@ contract ERC20BridgeTest is Test { emit BridgeTokens({ tokenContractAddress: address(mockERC20), destinationBlockchainID: _DEFAULT_OTHER_CHAIN_ID, - teleporterMessageID: mockMessageID, + teleporterMessageID: _MOCK_MESSAGE_ID, destinationBridgeAddress: _DEFAULT_OTHER_BRIDGE_ADDRESS, recipient: _DEFAULT_RECIPIENT, amount: bridgeAmount @@ -378,11 +378,10 @@ contract ERC20BridgeTest is Test { abi.encodeCall(IERC20.approve, (MOCK_TELEPORTER_MESSENGER_ADDRESS, bridgeFeeAmount)) ); - bytes32 mockMessageID = _createMessageID(42); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), - abi.encode(mockMessageID) + abi.encode(_MOCK_MESSAGE_ID) ); vm.expectCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, @@ -393,7 +392,7 @@ contract ERC20BridgeTest is Test { emit BridgeTokens({ tokenContractAddress: address(mockERC20), destinationBlockchainID: _DEFAULT_OTHER_CHAIN_ID, - teleporterMessageID: mockMessageID, + teleporterMessageID: _MOCK_MESSAGE_ID, destinationBridgeAddress: _DEFAULT_OTHER_BRIDGE_ADDRESS, recipient: _DEFAULT_RECIPIENT, amount: expectedBridgeAmount @@ -586,11 +585,10 @@ contract ERC20BridgeTest is Test { ) }); - bytes32 mockMessageID = _createMessageID(456); vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeCall(ITeleporterMessenger.sendCrossChainMessage, (expectedMessageInput)), - abi.encode(mockMessageID) + abi.encode(_MOCK_MESSAGE_ID) ); vm.expectCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, @@ -599,7 +597,10 @@ contract ERC20BridgeTest is Test { vm.expectEmit(true, true, true, true, address(erc20Bridge)); emit SubmitCreateBridgeToken( - destinationBlockchainID, destinationBridgeAddress, nativeContractAddress, mockMessageID + destinationBlockchainID, + destinationBridgeAddress, + nativeContractAddress, + _MOCK_MESSAGE_ID ); erc20Bridge.submitCreateBridgeToken( @@ -645,11 +646,6 @@ contract ERC20BridgeTest is Test { vm.expectCall(tokenContract, abi.encodeCall(token.decimals, ())); } - function _createMessageID(uint256 messageNonce) private pure returns (bytes32) { - return - sha256(abi.encode(MOCK_TELEPORTER_MESSENGER_ADDRESS, _MOCK_BLOCKCHAIN_ID, messageNonce)); - } - function _deriveExpectedContractAddress( address creator, uint8 nonce diff --git a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol index 63ef63376..06d073bd2 100644 --- a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/ERC20TokenSourceTests.t.sol @@ -39,7 +39,7 @@ contract ERC20TokenSourceTest is NativeTokenBridgeTest { vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), - abi.encode(_createMessageID(1)) + abi.encode(_MOCK_MESSAGE_ID) ); vm.expectCall( @@ -68,7 +68,7 @@ contract ERC20TokenSourceTest is NativeTokenBridgeTest { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: _createMessageID(1) + teleporterMessageID: _MOCK_MESSAGE_ID }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ diff --git a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol index dd4c1d968..dc78d6730 100644 --- a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol +++ b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenBridgeTests.t.sol @@ -23,9 +23,6 @@ contract NativeTokenBridgeTest is Test { address internal constant _DEFAULT_RECIPIENT = 0xa4CEE7d1aF6aDdDD33E3b1cC680AB84fdf1b6d1d; uint256 internal constant _DEFAULT_TRANSFER_AMOUNT = 1e18; uint256 internal constant _DEFAULT_FEE_AMOUNT = 123456; - - function _createMessageID(uint256 messageNonce) internal pure returns (bytes32) { - return - sha256(abi.encode(MOCK_TELEPORTER_MESSENGER_ADDRESS, _MOCK_BLOCKCHAIN_ID, messageNonce)); - } + bytes32 internal constant _MOCK_MESSAGE_ID = + bytes32(hex"1111111111111111111111111111111111111111111111111111111111111111"); } diff --git a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol index fed15e819..345d344a0 100644 --- a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol +++ b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenDestinationTests.t.sol @@ -46,7 +46,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest { vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), - abi.encode(_createMessageID(1)) + abi.encode(_MOCK_MESSAGE_ID) ); vm.expectCall( @@ -96,7 +96,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: _createMessageID(1) + teleporterMessageID: _MOCK_MESSAGE_ID }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ @@ -182,7 +182,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest { vm.expectEmit(true, true, true, true, address(nativeTokenDestination)); emit ReportTotalBurnedTxFees({ burnAddressBalance: burnedFees, - teleporterMessageID: _createMessageID(1) + teleporterMessageID: _MOCK_MESSAGE_ID }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ diff --git a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol index cbfd0a3df..8ba12440c 100644 --- a/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol +++ b/contracts/src/CrossChainApplications/examples/NativeTokenBridge/tests/NativeTokenSourceTests.t.sol @@ -39,7 +39,7 @@ contract NativeTokenSourceTest is NativeTokenBridgeTest { vm.mockCall( MOCK_TELEPORTER_MESSENGER_ADDRESS, abi.encodeWithSelector(ITeleporterMessenger.sendCrossChainMessage.selector), - abi.encode(_createMessageID(1)) + abi.encode(_MOCK_MESSAGE_ID) ); vm.expectCall( @@ -67,7 +67,7 @@ contract NativeTokenSourceTest is NativeTokenBridgeTest { sender: address(this), recipient: _DEFAULT_RECIPIENT, amount: _DEFAULT_TRANSFER_AMOUNT, - teleporterMessageID: _createMessageID(1) + teleporterMessageID: _MOCK_MESSAGE_ID }); TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ diff --git a/contracts/src/Teleporter/TeleporterMessenger.sol b/contracts/src/Teleporter/TeleporterMessenger.sol index 151f26b93..dfa06e8f1 100644 --- a/contracts/src/Teleporter/TeleporterMessenger.sol +++ b/contracts/src/Teleporter/TeleporterMessenger.sol @@ -525,18 +525,6 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { return receiptQueues[originBlockchainID].getReceiptAtIndex(index); } - /** - * @dev Calculates the message ID for the given source blockchain ID and message nonce. - */ - function calculateMessageID( - bytes32 sourceBlockchainID, - bytes32 destinationBlockchainID, - uint256 nonce - ) public view returns (bytes32) { - return - keccak256(abi.encode(address(this), sourceBlockchainID, destinationBlockchainID, nonce)); - } - /** * @dev If not already set, initializes blockchainID by getting the current * blockchain ID value from the Warp precompile. @@ -551,6 +539,18 @@ contract TeleporterMessenger is ITeleporterMessenger, ReentrancyGuards { return blockchainID_; } + /** + * @dev Calculates the message ID for the given source blockchain ID and message nonce. + */ + function calculateMessageID( + bytes32 sourceBlockchainID, + bytes32 destinationBlockchainID, + uint256 nonce + ) public view returns (bytes32) { + return + keccak256(abi.encode(address(this), sourceBlockchainID, destinationBlockchainID, nonce)); + } + /** * @dev Checks if a given message has been received. * @return A boolean representing if the given message has been received or not.